<?php
/**
 * Trainify Admin Class.
 *
 * @author  MatrixAddons
 * @package Trainify
 * @since   1.0.0
 */

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

if (!class_exists('Trainify_Admin_Page')) :

    /**
     * Trainify_Admin_Page Class.
     */
    class Trainify_Admin_Page{

        /**
         * Constructor.
         */
        public function __construct()
        {
            add_action('admin_menu', array($this, 'admin_menu'));
            add_action('wp_loaded', array(__CLASS__, 'hide_notices'));
            add_action('load-themes.php', array($this, 'admin_notice'));
        }

        /**
         * Add admin menu.
         */
        public function admin_menu()
        {
            $theme = wp_get_theme(get_template());

            $page = add_theme_page(esc_html__('About', 'trainify') . ' ' . $theme->display('Name'), esc_html__('About', 'trainify') . ' ' . $theme->display('Name'), 'activate_plugins', 'trainify-welcome', array(
                $this,
                'welcome_screen'
            ));
            add_action('admin_print_styles-' . $page, array($this, 'enqueue_styles'));
        }

        /**
         * Enqueue styles.
         */
        public function enqueue_styles()
        {
            global $trainify_version;

            //wp_enqueue_style('trainify-welcome-admin', get_template_directory_uri() . '/core/admin/css/welcome-admin.css', array(), $trainify_version);
        }

        /**
         * Add admin notice.
         */
        public function admin_notice()
        {
            global $trainify_version, $pagenow;
            //wp_enqueue_style('trainify-message', get_template_directory_uri() . '/core/admin/css/admin-notices.css', array(), $trainify_version);

            // Let's bail on theme activation.
            if ('themes.php' == $pagenow && isset($_GET['activated'])) {
                add_action('admin_notices', array($this, 'welcome_notice'));
                update_option('trainify_admin_notice_welcome', 1);

                // No option? Let run the notice wizard again..
            } elseif (!get_option('trainify_admin_notice_welcome')) {
                add_action('admin_notices', array($this, 'welcome_notice'));
            }
        }

        /**
         * Hide a notice if the GET variable is set.
         */
        public static function hide_notices()
        {
            if (isset($_GET['trainify-hide-notice']) && isset($_GET['_trainify_notice_nonce'])) {
                if (!wp_verify_nonce(wp_unslash($_GET['_trainify_notice_nonce']), 'trainify_hide_notices_nonce')) {
                    wp_die(esc_html__('Action failed. Please refresh the page and retry.', 'trainify'));
                }

                if (!current_user_can('manage_options')) {
                    wp_die(esc_html__('Cheatin&#8217; huh?', 'trainify'));
                }

                $hide_notice = sanitize_text_field(wp_unslash($_GET['trainify-hide-notice']));
                update_option('trainify_admin_notice_' . $hide_notice, 1);
            }
        }

        /**
         * Show welcome notice.
         */
        public function welcome_notice()
        {
            ?>
            <div id="message" class="updated trainify-message">
                <a class="trainify-message-close notice-dismiss"
                   href="<?php echo esc_url(wp_nonce_url(remove_query_arg(array('activated'), add_query_arg('trainify-hide-notice', 'welcome')), 'trainify_hide_notices_nonce', '_trainify_notice_nonce')); ?>"><?php esc_html_e('Dismiss', 'trainify'); ?></a>
                <p><?php
                    /* translators: 1: anchor tag start, 2: anchor tag end*/
                    printf(esc_html__('Welcome! Thank you for choosing Trainify! To fully take advantage of the best our theme can offer please make sure you visit our %1$swelcome page%1$s.', 'trainify'), '<a href="' . esc_url(admin_url('themes.php?page=trainify-welcome')) . '">', '</a>');
                    ?></p>
                <p class="submit">
                    <a class="button-secondary"
                       href="<?php echo esc_url(admin_url('themes.php?page=trainify-welcome')); ?>"><?php esc_html_e('Get started with Trainify', 'trainify'); ?></a>
                </p>
            </div>
            <?php
        }

        /**
         * Intro text/links shown to all about pages.
         *
         * @access private
         */
        private function intro()
        {
            global $trainify_version;
            $theme = wp_get_theme(get_template());
            // Drop minor version if 0
            ?>
            <div class="trainify-theme-info">
                <h1>
                    <?php esc_html_e('About', 'trainify'); ?>
                    <?php echo esc_html( $theme->display('Name') ); ?>
                    <?php echo esc_html($trainify_version); ?>
                </h1>
                <div class="welcome-description-wrap">
                    <div class="about-text"><?php echo esc_html($theme->display('Description')); ?></div>
                    <div class="trainify-screenshot">
                        <img src="<?php echo esc_url(get_template_directory_uri()) . '/screenshot.png'; ?>"/>
                    </div>
                </div>
            </div>

            <p class="trainify-actions">
                <a href="<?php echo esc_url('https://matrixaddons.com/downloads/trainify-free-wordpress-theme/?ref=trainify-about-us'); ?>"
                   class="button button-secondary"
                   target="_blank"><?php esc_html_e('Theme Info', 'trainify'); ?></a>

                <a href="<?php echo esc_url(apply_filters('trainify_theme_url', 'https://demo.matrixaddons.com/wpthemes/trainify/')); ?>"
                   class="button button-secondary docs"
                   target="_blank"><?php esc_html_e('View Demo', 'trainify'); ?></a>

                <a href="<?php echo esc_url(apply_filters('trainify_rate_url', 'https://wordpress.org/support/view/theme-reviews/trainify?filter=5#postform')); ?>"
                   class="button button-secondary docs"
                   target="_blank"><?php esc_html_e('Rate this theme', 'trainify'); ?></a>
                <a href="<?php echo esc_url(apply_filters('trainify_pro_plugin_url', 'https://matrixaddons.com/downloads/trainify-pro-premium-wordpress-plugin/?ref=trainify-about-us')); ?>"
                   class="button button-primary docs"
                   target="_blank"><?php esc_html_e('View Pro Version', 'trainify'); ?></a>
            </p>

            <h2 class="nav-tab-wrapper">
                <a class="nav-tab <?php if (empty($_GET['tab']) && $_GET['page'] == 'trainify-welcome') {
                    echo 'nav-tab-active';
                } ?>"
                   href="<?php echo esc_url(admin_url(add_query_arg(array('page' => 'trainify-welcome'), 'themes.php'))); ?>">
                    <?php echo esc_html($theme->display('Name')); ?>
                </a>
                <a class="nav-tab <?php if (isset($_GET['tab']) && $_GET['tab'] == 'changelog') {
                    echo 'nav-tab-active';
                } ?>" href="<?php echo esc_url(admin_url(add_query_arg(array(
                    'page' => 'trainify-welcome',
                    'tab' => 'changelog'
                ), 'themes.php'))); ?>">
                    <?php esc_html_e('Changelog', 'trainify'); ?>
                </a>

            </h2>
            <?php
        }

        /**
         * Welcome screen page.
         */
        public function welcome_screen()
        {
            $current_tab = empty($_GET['tab']) ? 'about' : sanitize_title(wp_unslash($_GET['tab']));

            // Look for a {$current_tab}_screen method.
            if (is_callable(array($this, $current_tab . '_screen'))) {
                return $this->{$current_tab . '_screen'}();
            }

            // Fallback to about screen.
            return $this->about_screen();
        }

        /**
         * Output the about screen.
         */
        public function about_screen()
        {
            $theme = wp_get_theme(get_template());
            ?>
            <div class="wrap about-wrap">

                <?php $this->intro(); ?>

                <div class="changelog point-releases">
                    <div class="under-the-hood two-col">

                        <div class="col">
                            <h3><?php esc_html_e('Theme Customizer', 'trainify'); ?></h3>
                            <p><?php esc_html_e('All Theme Options are available via Customize screen.', 'trainify') ?></p>
                            <p><a href="<?php echo esc_url( admin_url('customize.php') ); ?>"
                                  class="button button-secondary"><?php esc_html_e('Customize', 'trainify'); ?></a>
                            </p>
                        </div>

                        <div class="col">
                            <h3><?php esc_html_e('Documentation', 'trainify'); ?></h3>
                            <p><?php esc_html_e('Please view our documentation page to setup the theme.', 'trainify') ?></p>
                            <p><a href="<?php echo esc_url('https://docs.matrixaddons.com/products/trainify/'); ?>"
                                  class="button button-secondary"><?php esc_html_e('Documentation', 'trainify'); ?></a>
                            </p>
                        </div>

                        <div class="col">
                            <h3><?php esc_html_e('Got theme support question?', 'trainify'); ?></h3>
                            <p><?php esc_html_e('Please put it in our dedicated support forum.', 'trainify') ?></p>
                            <p><a href="<?php echo esc_url('https://matrixaddons.com/forums/forum/trainify-free-wordpress-theme/'); ?>"
                                  class="button button-secondary"><?php esc_html_e('Support', 'trainify'); ?></a>
                            </p>
                        </div>

                        <div class="col">
                            <h3><?php esc_html_e('Any question about this theme or us?', 'trainify'); ?></h3>
                            <p><?php esc_html_e('Please send it via our sales contact page.', 'trainify') ?></p>
                            <p><a href="<?php echo esc_url('https://matrixaddons.com/contact/'); ?>"
                                  class="button button-secondary"><?php esc_html_e('Contact Page', 'trainify'); ?></a>
                            </p>
                        </div>

                        <div class="col">
                            <h3>
                                <?php
                                esc_html_e('Translate', 'trainify');
                                echo ' ' . esc_html($theme->display('Name'));
                                ?>
                            </h3>
                            <p><?php esc_html_e('Click below to translate this theme into your own language.', 'trainify') ?></p>
                            <p>
                                <a href="<?php echo esc_url('https://translate.wordpress.org/projects/wp-themes/trainify'); ?>"
                                   class="button button-secondary">
                                    <?php
                                    esc_html_e('Translate', 'trainify');
                                    echo ' ' . esc_html($theme->display('Name'));
                                    ?>
                                </a>
                            </p>
                        </div>
                    </div>
                </div>

                <div class="return-to-dashboard trainify">
                    <?php if (current_user_can('update_core') && isset($_GET['updated'])) : ?>
                        <a href="<?php echo esc_url(self_admin_url('update-core.php')); ?>">
                            <?php is_multisite() ? esc_html_e('Return to Updates', 'trainify') : esc_html_e('Return to Dashboard &rarr; Updates', 'trainify'); ?>
                        </a> |
                    <?php endif; ?>
                    <a href="<?php echo esc_url(self_admin_url()); ?>"><?php is_blog_admin() ? esc_html_e('Go to Dashboard &rarr; Home', 'trainify') : esc_html_e('Go to Dashboard', 'trainify'); ?></a>
                </div>
            </div>
            <?php
        }

        /**
         * Output the changelog screen.
         */
        public function changelog_screen()
        {
            global $wp_filesystem;

            ?>
            <div class="wrap about-wrap">

                <?php $this->intro(); ?>

                <p class="about-description"><?php esc_html_e('View changelog below:', 'trainify'); ?></p>

                <?php
                $changelog_file = apply_filters('trainify_changelog_file', get_template_directory() . '/readme.txt');

                // Check if the changelog file exists and is readable.
                if ($changelog_file && is_readable($changelog_file)) {
                    WP_Filesystem();
                    $changelog = $wp_filesystem->get_contents($changelog_file);
                    $changelog_list = $this->parse_changelog($changelog);

                    echo wp_kses_post($changelog_list);
                }
                ?>
            </div>
            <?php
        }

        /**
         * Output the changelog screen.
         */
        public function freevspro_screen()
        {
            ?>
            <div class="wrap about-wrap">

                <?php $this->intro(); ?>

                <p class="about-description"><?php esc_html_e('Upgrade to PRO version for more awesome features.', 'trainify'); ?></p>

                <table>
                    <thead>
                    <tr>
                        <th class="table-feature-title"><h3><?php esc_html_e('Features', 'trainify'); ?></h3>
                        </th>
                        <th><h3><?php esc_html_e('Trainify', 'trainify'); ?></h3></th>
                        <th><h3><?php esc_html_e('Trainify Pro', 'trainify'); ?></h3></th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                        <td><h3><?php esc_html_e('Support', 'trainify'); ?></h3></td>
                        <td><?php esc_html_e('Forum', 'trainify'); ?></td>
                        <td><?php esc_html_e('Forum + Emails/Support Ticket', 'trainify'); ?></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Category color options', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Additional color options', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><?php esc_html_e('15', 'trainify'); ?></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Primary color option', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Font size options', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Google fonts options', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><?php esc_html_e('500+', 'trainify'); ?></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Custom widgets', 'trainify'); ?></h3></td>
                        <td><?php esc_html_e('7', 'trainify'); ?></td>
                        <td><?php esc_html_e('16', 'trainify'); ?></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Social icons', 'trainify'); ?></h3></td>
                        <td><?php esc_html_e('6', 'trainify'); ?></td>
                        <td><?php esc_html_e('6', 'trainify'); ?></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Social sharing', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Site layout option', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Options in breaking news', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Change read more text', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Related posts', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Author biography', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Footer copyright editor', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('728x90 Advertisement', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Featured category slider', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Random posts widget', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Tabbed widget', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Videos', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>

                    <tr>
                        <td><h3><?php esc_html_e('WooCommerce compatible', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Multiple header options', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Readmore flying card', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Weather widget', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Currency converter widget', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Category enable/disable option', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Reading indicator option', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Lightbox support', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Call to action widget', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td><h3><?php esc_html_e('Contact us template', 'trainify'); ?></h3></td>
                        <td><span class="dashicons dashicons-no"></span></td>
                        <td><span class="dashicons dashicons-yes"></span></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td></td>
                        <td class="btn-wrapper">
                            <a href="<?php echo esc_url( apply_filters('trainify_pro_plugin_url', 'https://matrixaddons.com/downloads/trainify-premium-wordpress-plugin/') ); ?>"
                               class="button button-secondary docs"
                               target="_blank"><?php esc_html_e('View Pro', 'trainify'); ?></a>
                        </td>
                    </tr>
                    </tbody>
                </table>

            </div>
            <?php
        }

        /**
         * Parse changelog from readme file.
         *
         * @param  string $content
         *
         * @return string
         */
        private function parse_changelog($content)
        {
            $matches = null;
            $regexp = '~==\s*Changelog\s*==(.*)($)~Uis';
            $changelog = '';

            if (preg_match($regexp, $content, $matches)) {
                $changes = explode('\r\n', trim($matches[1]));

                $changelog .= '<pre class="changelog">';

                foreach ($changes as $index => $line) {
                    $changelog .= wp_kses_post(preg_replace('~(=\s*Version\s*(\d+(?:\.\d+)+)\s*=|$)~Uis', '<span class="title">${1}</span>', $line));
                }

                $changelog .= '</pre>';
            }

            return wp_kses_post($changelog);
        }


        /**
         * Output the supported plugins screen.
         */
        public function supported_plugins_screen()
        {
            ?>
            <div class="wrap about-wrap">

                <?php $this->intro(); ?>

                <p class="about-description"><?php esc_html_e('This theme recommends following plugins:', 'trainify'); ?></p>
                <ol>
                    <li><a href="<?php echo esc_url('https://wordpress.org/plugins/social-icons/'); ?>"
                           target="_blank"><?php esc_html_e('Social Icons', 'trainify'); ?></a>
                        <?php esc_html_e(' by MatrixAddons', 'trainify'); ?>
                    </li>
                    <li><a href="<?php echo esc_url('https://wordpress.org/plugins/easy-social-sharing/'); ?>"
                           target="_blank"><?php esc_html_e('Easy Social Sharing', 'trainify'); ?></a>
                        <?php esc_html_e(' by MatrixAddons', 'trainify'); ?>
                    </li>
                    <li><a href="<?php echo esc_url('https://wordpress.org/plugins/contact-form-7/'); ?>"
                           target="_blank"><?php esc_html_e('Contact Form 7', 'trainify'); ?></a></li>
                    <li><a href="<?php echo esc_url('https://wordpress.org/plugins/wp-pagenavi/'); ?>"
                           target="_blank"><?php esc_html_e('WP-PageNavi', 'trainify'); ?></a></li>
                    <li><a href="<?php echo esc_url('https://wordpress.org/plugins/woocommerce/'); ?>"
                           target="_blank"><?php esc_html_e('WooCommerce', 'trainify'); ?></a></li>
                    <li>
                        <a href="<?php echo esc_url('https://wordpress.org/plugins/polylang/'); ?>"
                           target="_blank"><?php esc_html_e('Polylang', 'trainify'); ?></a>
                        <?php esc_html_e('Fully Compatible in Pro Version', 'trainify'); ?>
                    </li>
                    <li>
                        <a href="<?php echo esc_url('https://wpml.org/'); ?>"
                           target="_blank"><?php esc_html_e('WPML', 'trainify'); ?></a>
                        <?php esc_html_e('Fully Compatible in Pro Version', 'trainify'); ?>
                    </li>
                </ol>

            </div>
            <?php
        }

    }

endif;

return new Trainify_Admin_Page();
