Make WordPress Themes

Changeset 353892


Ignore:
Timestamp:
10/15/2026 04:14:06 PM (2 weeks ago)
Author:
themedropbox
Message:

New version of BlogAura - 1.1.5

Location:
blogaura/1.1.5
Files:
20 added
27 deleted
18 edited
1 copied

Legend:

Unmodified
Added
Removed
  • blogaura/1.1.5/changelog.txt

    r348044 r353892  
    11== Changelog ==
     2
     3= 1.1.5 - 2026-10-15 =
     4* Fix - The Free vs Pro table now shows its category headings.
     5* Fix - The Documentation button now opens the WPInterface documentation site; the theme page it linked to does not exist.
     6* Enhancement - Redesigned welcome notice: compact, uses the theme screenshot and the plugins' WordPress.org icons, shows a "plugins ready" state, and appears only on the Dashboard and Themes screens.
     7* Enhancement - Redesigned theme dashboard (Appearance › BlogAura) with a setup checklist that follows your site's progress, Customizer shortcuts and a new Recommended tab for WPInterface services, plugins and themes.
     8* Enhancement - The Recommended tab can list every WPInterface theme from WordPress.org. The list loads only when you click "Show all WPInterface themes", is cached for 12 hours, and screenshots load lazily.
     9* Enhancement - Starter sites tab redesigned to match the new dashboard, with preview and import buttons for each starter site plus the Pro starter site with its preview and an upgrade link, and a note that importing adds demo content, with the option to have the design set up on an existing site instead (imports still run in One Click Demo Import).
     10* Enhancement - "What's new" changelog panel opens from the dashboard header, with colour-coded labels for security updates, new features, enhancements, improvements and fixes.
     11* Enhancement - More visible "Upgrade to Pro" button in the dashboard header and an upgrade section below the Free vs Pro table.
     12* Enhancement - The Overview tab now shows animated previews of BlogAura Pro's accessibility toolbar (with a demo you can try) and of the SEO plugin included with Pro. They use HTML and CSS only (no images or external requests), pause when off screen and stay still for users who prefer reduced motion.
     13* Enhancement - New Header Style previews in the Customizer: SVG drawings that show each header layout as it really looks, in the theme's own colours, two per row, replacing the small grey images.
     14* Enhancement - The review request notice has the new notice design (like the welcome notice) and shows on the Dashboard and Themes screens only.
     15* Tweak - Dashboard and notice styles and scripts now load only on the screens that use them, without jQuery; dashboard images went from about 516 KB to 38 KB.
     16* Tweak - Recommended plugins are installed and activated through WordPress core screens; removed the old install/activate AJAX handlers.
     17* Tweak - Readme credits for the dashboard images and icons.
     18* Tweak - Removed Elementor from the recommended plugins; the theme supports it but does not need it.
     19
     20= 1.1.4 - 2026-10-15 =
     21* Security - The welcome notice's "Get started" button can no longer be used by users without plugin permissions to install plugins; the notice is now shown only to administrators.
     22* Security - Load More requests now only accept viewable post types, and incomplete requests are rejected cleanly instead of raising PHP warnings.
     23* Security - Category colour and thumbnail settings now verify a nonce and the user's permission before saving.
     24* Fix - Category colours are no longer erased when a category is changed with Quick Edit or updated by a plugin or import.
     25* Fix - Minimum PHP version raised from 5.6 to 7.4; the theme code already requires PHP 7 and would not run on older versions.
     26* Tweak - The review request notice is shown to administrators only.
     27* Tweak - Review notice data is now removed with a single query when switching themes instead of loading every user.
     28* Tweak - Updated the translation template (POT) with the new and changed strings.
    229
    330= 1.1.3 - 2026-09-07 =
  • blogaura/1.1.5/functions.php

    r348044 r353892  
    1010if (!defined('BLOGAURA_VERSION')) {
    1111    // Replace the version number of the theme on each release.
    12     define('BLOGAURA_VERSION', '1.1.3');
     12    define('BLOGAURA_VERSION', '1.1.5');
    1313}
    1414
  • blogaura/1.1.5/inc/admin/customizer/assets/css/customizer.css

    r312189 r353892  
    153153    text-align: center;
    154154}
     155
     156/* Header Style previews: two per row, sized to the card, rounded selection ring */
     157#customize-control-blogaura_options-select_header_layout_style .radio-image-wrapper{grid-template-columns:repeat(2,1fr);gap:8px}
     158#customize-control-blogaura_options-select_header_layout_style .radio-image-wrapper>*{padding:0}
     159#customize-control-blogaura_options-select_header_layout_style label{display:block;border-radius:11px;cursor:pointer;transition:box-shadow .15s ease,transform .15s ease}
     160#customize-control-blogaura_options-select_header_layout_style img{display:block;width:100%;height:auto}
     161#customize-control-blogaura_options-select_header_layout_style input[type="radio"]+label:hover{opacity:1;box-shadow:0 4px 12px rgba(13,32,53,.12);transform:translateY(-1px)}
     162#customize-control-blogaura_options-select_header_layout_style input[type="radio"]:checked+label{border:0;box-shadow:0 0 0 2px #2271b1}
  • blogaura/1.1.5/inc/admin/customizer/assets/css/customizer.min.css

    r312189 r353892  
    1 .customize-control input[type=email],.customize-control input[type=number],.customize-control input[type=password],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=text],.customize-control input[type=url],.customize-control select{border:2px solid #b8daeb;border-radius:4px;min-height:45px;-webkit-appearance:none}.wp-core-ui .customize-control-content .button,.wp-core-ui .customize-control-content .button-secondary{border:2px solid #b8daeb;border-radius:4px;-webkit-appearance:none}.customize-control-checkbox input[type=checkbox]{border:1px solid rgba(0,0,0,0.1);display:inline-block;width:40px;height:14px;border-radius:8px;background:#ccc;vertical-align:middle;position:relative;cursor:pointer;user-select:none;transition:background 350ms ease}.customize-control-checkbox input[type=checkbox]:before,.customize-control-checkbox input[type=checkbox]:after{content:"";display:block;width:20px;height:20px;border-radius:50%;position:absolute;top:50%;left:-3px;transition:all 350ms cubic-bezier(0,0.95,0.38,0.98),background 150ms ease}.customize-control-checkbox input[type=checkbox]:before{background:rgba(0,0,0,0.2);transform:translate3d(0,-50%,0) scale(0)}.customize-control-checkbox input[type=checkbox]:after{background:#999;border:1px solid rgba(0,0,0,0.1);transform:translate3d(0,-50%,0)}.customize-control-checkbox input[type=checkbox]:checked:before{background:transparent;font-size:0;line-height:1px;transform:translate3d(100%,-50%,0) scale(1)}.customize-control-checkbox input[type=checkbox]:checked:after{background:#73c5ee;border-color:#73c5ee;transform:translate3d(100%,-50%,0)}.customize-control-radio-image img{vertical-align:top}.customize-control-radio-image .radio-image-wrapper{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.customize-control-radio-image .radio-image-wrapper > *{padding:5px}.customize-control-radio-image .radio-image-wrapper input[type="radio"]{display:none}.customize-control-radio-image input[type="radio"] + label:hover{opacity:.7}.customize-control-radio-image input[type="radio"]:checked + label{border:2px solid #000}#customize-theme-controls #accordion-section-theme_upsell .accordion-section-title{border-color:#f857a6}#customize-theme-controls #accordion-section-theme_upsell .accordion-section-title .accordion-trigger{background:#f857a6;background:-webkit-linear-gradient(to left,#ff5858,#f857a6);background:linear-gradient(to left,#ff5858,#f857a6);color:#fff;padding-top:30px;padding-bottom:30px;overflow:hidden}#customize-theme-controls #accordion-section-theme_upsell .accordion-section-title .accordion-trigger:before{position:absolute;top:0;left:-100%;z-index:2;display:block;content:"";width:50%;height:100%;background:-webkit-linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.3) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.3) 100%);transform:skewX(-25deg)}#customize-theme-controls #accordion-section-theme_upsell:hover .accordion-section-title .accordion-trigger:before,#customize-theme-controls #accordion-section-theme_upsell:focus .accordion-section-title .accordion-trigger:before{animation:hovershine .85s}@keyframes hovershine{100%{left:100%}}#accordion-section-theme_upsell .accordion-section-title:after{color:#fff!important}.customize-control-upsell .button.upgrade-now{background:#65bc7b;border:#65bc7b;color:#fff;margin-top:10px}.customize-control-upsell .button.upgrade-now:hover,.customize-control-upsell .button.upgrade-now:focus{background:#4CAF50;border:#4CAF50;color:#fff}.control-section-section-features-list{padding:30px 15px;background-color:#fcfcfc;display:block!important}.theme-features{display:flex;flex-direction:column;gap:5px;justify-content:center;margin:30px 0}.theme-features .dashicons{color:#65bc7b;margin-right:5px}.customize-control-upsell .button{display:block;padding:10px 20px;text-align:center}
     1.customize-control input[type=email],.customize-control input[type=number],.customize-control input[type=password],.customize-control input[type=search],.customize-control input[type=tel],.customize-control input[type=text],.customize-control input[type=url],.customize-control select{border:2px solid #b8daeb;border-radius:4px;min-height:45px;-webkit-appearance:none}.wp-core-ui .customize-control-content .button,.wp-core-ui .customize-control-content .button-secondary{border:2px solid #b8daeb;border-radius:4px;-webkit-appearance:none}.customize-control-checkbox input[type=checkbox]{border:1px solid rgba(0,0,0,0.1);display:inline-block;width:40px;height:14px;border-radius:8px;background:#ccc;vertical-align:middle;position:relative;cursor:pointer;user-select:none;transition:background 350ms ease}.customize-control-checkbox input[type=checkbox]:before,.customize-control-checkbox input[type=checkbox]:after{content:"";display:block;width:20px;height:20px;border-radius:50%;position:absolute;top:50%;left:-3px;transition:all 350ms cubic-bezier(0,0.95,0.38,0.98),background 150ms ease}.customize-control-checkbox input[type=checkbox]:before{background:rgba(0,0,0,0.2);transform:translate3d(0,-50%,0) scale(0)}.customize-control-checkbox input[type=checkbox]:after{background:#999;border:1px solid rgba(0,0,0,0.1);transform:translate3d(0,-50%,0)}.customize-control-checkbox input[type=checkbox]:checked:before{background:transparent;font-size:0;line-height:1px;transform:translate3d(100%,-50%,0) scale(1)}.customize-control-checkbox input[type=checkbox]:checked:after{background:#73c5ee;border-color:#73c5ee;transform:translate3d(100%,-50%,0)}.customize-control-radio-image img{vertical-align:top}.customize-control-radio-image .radio-image-wrapper{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.customize-control-radio-image .radio-image-wrapper > *{padding:5px}.customize-control-radio-image .radio-image-wrapper input[type="radio"]{display:none}.customize-control-radio-image input[type="radio"] + label:hover{opacity:.7}.customize-control-radio-image input[type="radio"]:checked + label{border:2px solid #000}#customize-theme-controls #accordion-section-theme_upsell .accordion-section-title{border-color:#f857a6}#customize-theme-controls #accordion-section-theme_upsell .accordion-section-title .accordion-trigger{background:#f857a6;background:-webkit-linear-gradient(to left,#ff5858,#f857a6);background:linear-gradient(to left,#ff5858,#f857a6);color:#fff;padding-top:30px;padding-bottom:30px;overflow:hidden}#customize-theme-controls #accordion-section-theme_upsell .accordion-section-title .accordion-trigger:before{position:absolute;top:0;left:-100%;z-index:2;display:block;content:"";width:50%;height:100%;background:-webkit-linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.3) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.3) 100%);transform:skewX(-25deg)}#customize-theme-controls #accordion-section-theme_upsell:hover .accordion-section-title .accordion-trigger:before,#customize-theme-controls #accordion-section-theme_upsell:focus .accordion-section-title .accordion-trigger:before{animation:hovershine .85s}@keyframes hovershine{100%{left:100%}}#accordion-section-theme_upsell .accordion-section-title:after{color:#fff!important}.customize-control-upsell .button.upgrade-now{background:#65bc7b;border:#65bc7b;color:#fff;margin-top:10px}.customize-control-upsell .button.upgrade-now:hover,.customize-control-upsell .button.upgrade-now:focus{background:#4CAF50;border:#4CAF50;color:#fff}.control-section-section-features-list{padding:30px 15px;background-color:#fcfcfc;display:block!important}.theme-features{display:flex;flex-direction:column;gap:5px;justify-content:center;margin:30px 0}.theme-features .dashicons{color:#65bc7b;margin-right:5px}.customize-control-upsell .button{display:block;padding:10px 20px;text-align:center}/* Header Style previews */#customize-control-blogaura_options-select_header_layout_style .radio-image-wrapper{grid-template-columns:repeat(2,1fr);gap:8px}#customize-control-blogaura_options-select_header_layout_style .radio-image-wrapper>*{padding:0}#customize-control-blogaura_options-select_header_layout_style label{display:block;border-radius:11px;cursor:pointer;transition:box-shadow .15s ease,transform .15s ease}#customize-control-blogaura_options-select_header_layout_style img{display:block;width:100%;height:auto}#customize-control-blogaura_options-select_header_layout_style input[type="radio"]+label:hover{opacity:1;box-shadow:0 4px 12px rgba(13,32,53,.12);transform:translateY(-1px)}#customize-control-blogaura_options-select_header_layout_style input[type="radio"]:checked+label{border:0;box-shadow:0 0 0 2px #2271b1}
  • blogaura/1.1.5/inc/admin/customizer/helpers/helper-function.php

    r312189 r353892  
    156156                        array(
    157157                                'header_style_1' => array(
    158                                         'url'   => get_template_directory_uri() . '/assets/images/header-1.webp',
     158                                        'url'   => get_template_directory_uri() . '/assets/images/header-1.svg',
    159159                                        'label' => esc_html__( 'Header Style 1', 'blogaura' ),
    160160                                ),
    161161                                'header_style_2' => array(
    162                                         'url'   => get_template_directory_uri() . '/assets/images/header-2.webp',
     162                                        'url'   => get_template_directory_uri() . '/assets/images/header-2.svg',
    163163                                        'label' => esc_html__( 'Header Style 2', 'blogaura' ),
    164164                                ),
    165165        'header_style_3' => array(
    166             'url'   => get_template_directory_uri() . '/assets/images/header-3.webp',
     166            'url'   => get_template_directory_uri() . '/assets/images/header-3.svg',
    167167            'label' => esc_html__( 'Header Style 3', 'blogaura' ),
    168168        ),
    169169        'header_style_4' => array(
    170             'url'   => get_template_directory_uri() . '/assets/images/header-4.webp',
     170            'url'   => get_template_directory_uri() . '/assets/images/header-4.svg',
    171171            'label' => esc_html__( 'Header Style 4', 'blogaura' ),
    172172        ),
    173173        'header_style_5' => array(
    174             'url'   => get_template_directory_uri() . '/assets/images/header-5.webp',
     174            'url'   => get_template_directory_uri() . '/assets/images/header-5.svg',
    175175            'label' => esc_html__( 'Header Style 5', 'blogaura' ),
    176176        ),
  • blogaura/1.1.5/inc/admin/dashboard/class-admin.php

    r312189 r353892  
    11<?php
    22/**
    3  * BlogAura Admin Class.
     3 * BlogAura admin helpers.
     4 *
     5 * Shared data for the welcome notice and the theme dashboard (recommended plugins,
     6 * WPInterface services) and the on-demand list of WPInterface themes from WordPress.org.
    47 *
    58 * @package BlogAura
    … …  
    912    exit;
    1013}
    11 if (!class_exists('BlogAura_Admin')):
     14if (!class_exists('BlogAura_Admin')) :
    1215    /**
    1316     * BlogAura_Admin Class.
    … …  
    1619    {
    1720        /**
     21         * Whether this is the Pro version of the theme.
     22         */
     23        const PRO = false;
     24
     25        /**
     26         * Slug of the theme dashboard page (Appearance › BlogAura).
     27         */
     28        const PAGE = 'blogaura';
     29
     30        /**
     31         * WordPress.org author whose themes are listed on the Recommended tab.
     32         */
     33        const WPORG_AUTHOR = 'wpinterface';
     34
     35        /**
     36         * Transient that caches the WordPress.org themes list.
     37         */
     38        const THEMES_TRANSIENT = 'blogaura_wporg_themes';
     39
     40        /**
    1841         * Constructor.
    1942         */
    2043        public function __construct()
    2144        {
    22             add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));
    23             add_action('wp_ajax_install_plugin', array($this, 'handle_plugin_action'));
    24             add_action('wp_ajax_activate_plugin', array($this, 'handle_plugin_action'));
    25         }
    26 
    27         /**
    28          * Handle plugin install/activate AJAX.
    29          */
    30         public function handle_plugin_action()
    31         {
    32             if (!isset($_POST['security']) || !wp_verify_nonce($_POST['security'], 'blogaura_demo_import_nonce')) {
    33                 wp_send_json_error(array('message' => 'Security check failed.'));
    34             }
    35             if (!current_user_can('install_plugins')) {
    36                 wp_send_json_error(array('message' => 'You are not allowed to perform this action.'));
    37             }
    38 
    39             $plugin = sanitize_text_field($_POST['plugin']);
    40             $plugin_slug = sanitize_text_field($_POST['slug']);
    41 
    42             if (function_exists('blogaura_is_plugin_installed') && blogaura_is_plugin_installed($plugin)) {
    43                 if (is_plugin_active($plugin)) {
    44                     wp_send_json_success(array('message' => 'Plugin is already activated.'));
    45                 } else {
    46                     // Activate the plugin
    47                     $result = activate_plugin($plugin);
    48 
    49                     if (is_wp_error($result)) {
    50                         wp_send_json_error(array('message' => 'Error activating the plugin.'));
    51                     } else {
    52                         wp_send_json_success(array('message' => 'Plugin activated successfully!'));
    53                     }
     45            add_action('wp_ajax_blogaura_wporg_themes', array($this, 'ajax_wporg_themes'));
     46        }
     47
     48        /**
     49         * URL of a file in the dashboard images folder.
     50         *
     51         * @param string $file File name.
     52         * @return string
     53         */
     54        public static function image_url($file)
     55        {
     56            return BLOGAURA_PARENT_URL . '/inc/admin/dashboard/images/' . $file;
     57        }
     58
     59        /**
     60         * Plugins recommended by the theme. All are hosted on WordPress.org and are only
     61         * installed when the user asks for it.
     62         *
     63         * @return array
     64         */
     65        public static function plugins()
     66        {
     67            $plugins = array();
     68            // The free theme imports its starter sites through WPInterface Add-ons; Pro bundles its demos.
     69            if (!self::PRO) {
     70                $plugins[] = array(
     71                    'slug' => 'wpinterface-add-ons',
     72                    'file' => 'wpinterface-add-ons/wpinterface-add-ons.php',
     73                    'name' => 'WPInterface Add-ons',
     74                    'description' => __('Import WPInterface starter sites in one click: content, widgets and settings.', 'blogaura'),
     75                    'ours' => true,
     76                    'starter' => true,
     77                );
     78            }
     79            $plugins = array_merge($plugins, array(
     80                array(
     81                    'slug' => 'one-click-demo-import',
     82                    'file' => 'one-click-demo-import/one-click-demo-import.php',
     83                    'name' => 'One Click Demo Import',
     84                    'description' => __('Imports demo content, widgets and theme settings.', 'blogaura'),
     85                    'ours' => false,
     86                    'starter' => true,
     87                ),
     88                array(
     89                    'slug' => 'mailchimp-for-wp',
     90                    'file' => 'mailchimp-for-wp/mailchimp-for-wp.php',
     91                    'name' => 'MC4WP: Mailchimp for WordPress',
     92                    'description' => __('Adds Mailchimp sign-up forms to your site.', 'blogaura'),
     93                    'ours' => false,
     94                    'starter' => true,
     95                ),
     96            ));
     97            if (self::PRO) {
     98                $plugins[] = array(
     99                    'slug' => 'web-stories',
     100                    'file' => 'web-stories/web-stories.php',
     101                    'name' => 'Web Stories',
     102                    'description' => __('Create visual, tappable stories that the theme can display.', 'blogaura'),
     103                    'ours' => false,
     104                    'starter' => true,
     105                );
     106            }
     107            return $plugins;
     108        }
     109
     110        /**
     111         * The plugins installed by the welcome notice's "Install starter plugins" button.
     112         *
     113         * @return array
     114         */
     115        public static function starter_plugins()
     116        {
     117            return array_values(array_filter(self::plugins(), static function ($plugin) {
     118                return $plugin['starter'];
     119            }));
     120        }
     121
     122        /**
     123         * Install state of a plugin.
     124         *
     125         * @param string $file Plugin file, relative to the plugins folder.
     126         * @return string active|installed|missing
     127         */
     128        public static function plugin_state($file)
     129        {
     130            if (!function_exists('get_plugins')) {
     131                require_once ABSPATH . 'wp-admin/includes/plugin.php';
     132            }
     133            if (is_plugin_active($file)) {
     134                return 'active';
     135            }
     136            $plugins = get_plugins();
     137            return isset($plugins[$file]) ? 'installed' : 'missing';
     138        }
     139
     140        /**
     141         * Whether the plugins the starter sites need are active.
     142         *
     143         * @return bool
     144         */
     145        public static function starter_plugins_active()
     146        {
     147            foreach (self::starter_plugins() as $plugin) {
     148                if ('active' !== self::plugin_state($plugin['file'])) {
     149                    return false;
    54150                }
    55             } else {
    56                 // Install and activate the plugin
    57                 include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
    58                 include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    59 
    60                 $api_args = array(
    61                     'slug' => $plugin_slug,
     151            }
     152            return true;
     153        }
     154
     155        /**
     156         * Starter sites registered with One Click Demo Import (by WPInterface Add-ons in the
     157         * free theme, by the theme's bundled demos in Pro). The import itself always runs in
     158         * One Click Demo Import.
     159         *
     160         * @return array List of array( name, image, preview, import ).
     161         */
     162        public static function starter_sites()
     163        {
     164            if ('active' !== self::plugin_state('one-click-demo-import/one-click-demo-import.php')) {
     165                return array();
     166            }
     167            $has_helper = class_exists('OCDI\Helpers') && method_exists('OCDI\Helpers', 'apply_filters');
     168            // OCDI's helper also runs the legacy "pt-ocdi/" hooks the themes still use.
     169            $files = $has_helper ? \OCDI\Helpers::apply_filters('ocdi/import_files', array()) : apply_filters('ocdi/import_files', array());
     170            $setup = $has_helper ? \OCDI\Helpers::apply_filters('ocdi/plugin_page_setup', array()) : apply_filters('ocdi/plugin_page_setup', array());
     171            $parent = !empty($setup['parent_slug']) ? $setup['parent_slug'] : 'themes.php';
     172            $page = !empty($setup['menu_slug']) ? $setup['menu_slug'] : 'one-click-demo-import';
     173
     174            $sites = array();
     175            foreach ((array) $files as $index => $file) {
     176                if (empty($file['import_file_name'])) {
     177                    continue;
     178                }
     179                $sites[] = array(
     180                    'name' => $file['import_file_name'],
     181                    'image' => isset($file['import_preview_image_url']) ? $file['import_preview_image_url'] : '',
     182                    'preview' => isset($file['preview_url']) ? $file['preview_url'] : '',
     183                    'notice' => isset($file['import_notice']) ? wp_strip_all_tags($file['import_notice']) : '',
     184                    'import' => add_query_arg(array('page' => $page, 'step' => 'import', 'import' => $index), admin_url($parent)),
     185                );
     186            }
     187            return $sites;
     188        }
     189
     190        /**
     191         * Changelog entry types, in display order, with the label and style used for each.
     192         *
     193         * @param string $tag Tag from changelog.txt, e.g. "Fix" or "Enhancement".
     194         * @return array array( key, label, order )
     195         */
     196        public static function changelog_type($tag)
     197        {
     198            $tag = strtolower(trim($tag));
     199            $map = array(
     200                'security' => array('security', __('Security', 'blogaura'), 0),
     201                'new' => array('new', __('New', 'blogaura'), 1),
     202                'added' => array('new', __('New', 'blogaura'), 1),
     203                'feature' => array('new', __('New', 'blogaura'), 1),
     204                'enhancement' => array('enhancement', __('Enhancement', 'blogaura'), 2),
     205                'improvement' => array('improvement', __('Improvement', 'blogaura'), 3),
     206                'tweak' => array('improvement', __('Improvement', 'blogaura'), 3),
     207                'update' => array('improvement', __('Improvement', 'blogaura'), 3),
     208                'fix' => array('fix', __('Fix', 'blogaura'), 4),
     209                'fixed' => array('fix', __('Fix', 'blogaura'), 4),
     210                'bugfix' => array('fix', __('Fix', 'blogaura'), 4),
     211                'dev' => array('dev', __('Developers', 'blogaura'), 5),
     212            );
     213            if (isset($map[$tag])) {
     214                return array('key' => $map[$tag][0], 'label' => $map[$tag][1], 'order' => $map[$tag][2]);
     215            }
     216            return array('key' => 'other', 'label' => ucfirst($tag), 'order' => 6);
     217        }
     218
     219        /**
     220         * Core URL that installs or activates a plugin, or an empty string when the
     221         * current user cannot do it.
     222         *
     223         * @param array  $plugin Plugin data from plugins().
     224         * @param string $state  Install state from plugin_state().
     225         * @return string
     226         */
     227        public static function plugin_action_url($plugin, $state)
     228        {
     229            if ('installed' === $state && current_user_can('activate_plugin', $plugin['file'])) {
     230                return wp_nonce_url(
     231                    self_admin_url('plugins.php?action=activate&plugin=' . rawurlencode($plugin['file'])),
     232                    'activate-plugin_' . $plugin['file']
     233                );
     234            }
     235            if ('missing' === $state && current_user_can('install_plugins')) {
     236                return wp_nonce_url(
     237                    self_admin_url('update.php?action=install-plugin&plugin=' . rawurlencode($plugin['slug'])),
     238                    'install-plugin_' . $plugin['slug']
     239                );
     240            }
     241            return '';
     242        }
     243
     244        /**
     245         * WPInterface professional services shown on the dashboard.
     246         *
     247         * @return array
     248         */
     249        public static function services()
     250        {
     251            return array(
     252                'featured' => array(
     253                    'title' => __('News & Blog Website Setup', 'blogaura'),
     254                    'description' => __('Skip the setup work. Our team gets your news or blog site running on BlogAura so you can start publishing.', 'blogaura'),
     255                    'url' => 'https://wpinterface.com/services/news-blog-website-setup/',
     256                ),
     257                'items' => array(
     258                    array(
     259                        'icon' => 'brush',
     260                        'title' => __('WordPress Theme Customization', 'blogaura'),
     261                        'description' => __('Layout, colour and feature changes made by the developers who built your theme.', 'blogaura'),
     262                        'url' => 'https://wpinterface.com/services/wordpress-theme-customization/',
     263                    ),
     264                    array(
     265                        'icon' => 'bolt',
     266                        'title' => __('Speed & Core Web Vitals', 'blogaura'),
     267                        'description' => __('Faster pages and passing Core Web Vitals, shown with before-and-after data.', 'blogaura'),
     268                        'url' => 'https://wpinterface.com/services/wordpress-speed-optimization/',
     269                    ),
     270                    array(
     271                        'icon' => 'shield',
     272                        'title' => __('WordPress Care Plans', 'blogaura'),
     273                        'description' => __('Weekly updates, backups and monitoring. Cancel any time.', 'blogaura'),
     274                        'url' => 'https://wpinterface.com/services/wordpress-care-plans/',
     275                    ),
     276                    array(
     277                        'icon' => 'lock',
     278                        'title' => __('Malware Removal & Security Hardening', 'blogaura'),
     279                        'description' => __('Manual cleanup of hacked sites, closing the entry point, and help getting off blacklists.', 'blogaura'),
     280                        'url' => 'https://wpinterface.com/services/wordpress-malware-removal/',
     281                    ),
     282                    array(
     283                        'icon' => 'headset',
     284                        'title' => __('VIP Support', 'blogaura'),
     285                        'description' => __('One priority ticket, handled first by a senior engineer.', 'blogaura'),
     286                        'url' => 'https://wpinterface.com/services/vip-support/',
     287                    ),
     288                    array(
     289                        'icon' => 'search',
     290                        'title' => __('Technical SEO for WordPress', 'blogaura'),
     291                        'description' => __('Fix the technical issues that stop search engines finding and showing your content.', 'blogaura'),
     292                        'url' => 'https://wpinterface.com/services/technical-seo-for-wordpress/',
     293                    ),
     294                ),
     295                'all_url' => 'https://wpinterface.com/services/',
     296                'hire_url' => 'https://wpinterface.com/hire-us/',
     297            );
     298        }
     299
     300        /**
     301         * Inline SVG icon (24px grid, stroke style). Static markup only.
     302         *
     303         * @param string $name Icon name.
     304         * @param int    $size Width and height in px.
     305         * @return string
     306         */
     307        public static function icon($name, $size = 20)
     308        {
     309            $paths = array(
     310                'brush' => '<path d="M9.06 11.9l8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"/><path d="M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3 3 0 0 0-3-3.02z"/>',
     311                'bolt' => '<path d="M13 2 3 14h9l-1 8 10-12h-9z"/>',
     312                'shield' => '<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/><path d="m9 12 2 2 4-4"/>',
     313                'lock' => '<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/>',
     314                'headset' => '<path d="M3 11a9 9 0 0 1 18 0v5a2 2 0 0 1-2 2h-1v-7h3"/><path d="M3 11v5a2 2 0 0 0 2 2h1v-7H3"/>',
     315                'search' => '<circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/>',
     316                'check' => '<path d="M20 6 9 17l-5-5"/>',
     317                'badge' => '<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z"/><path d="m9 12 2 2 4-4"/>',
     318                'book' => '<path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20V3H6.5A2.5 2.5 0 0 0 4 5.5z"/><path d="M4 19.5A2.5 2.5 0 0 0 6.5 22H20v-5"/>',
     319                'chat' => '<path d="M21 12a8 8 0 0 1-11.6 7.1L3 21l1.9-6.4A8 8 0 1 1 21 12z"/>',
     320                'clock' => '<circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 3"/>',
     321                'star' => '<path d="m12 2 3.1 6.3 6.9 1-5 4.9 1.2 6.8L12 17.8 5.8 21l1.2-6.8-5-4.9 6.9-1z"/>',
     322                'crown' => '<path d="M2 8l4 10h12l4-10-6 4-4-7-4 7z"/>',
     323                'palette' => '<circle cx="13.5" cy="6.5" r="1.5"/><circle cx="17.5" cy="10.5" r="1.5"/><circle cx="8.5" cy="7.5" r="1.5"/><circle cx="6.5" cy="12.5" r="1.5"/><path d="M12 2a10 10 0 0 0 0 20c.9 0 1.6-.7 1.6-1.6 0-.4-.2-.8-.4-1.1-.3-.3-.4-.7-.4-1.1 0-.9.7-1.6 1.6-1.6H16a6 6 0 0 0 6-6c0-4.9-4.5-8.6-10-8.6z"/>',
     324                'id' => '<rect x="3" y="5" width="18" height="14" rx="2"/><circle cx="9" cy="12" r="2.5"/><path d="M14 10h4"/><path d="M14 14h4"/>',
     325                'header' => '<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/>',
     326                'grid' => '<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/>',
     327                'list' => '<path d="M4 6h16"/><path d="M4 12h10"/><path d="M4 18h14"/>',
     328                'type' => '<path d="M4 7V4h16v3"/><path d="M9 20h6"/><path d="M12 4v16"/>',
     329                'post' => '<path d="M14 3H6v18h12V7z"/><path d="M14 3v4h4"/><path d="M9 13h6"/><path d="M9 17h4"/>',
     330                'menu' => '<path d="M4 6h16"/><path d="M4 12h16"/><path d="M4 18h16"/>',
     331                'footer' => '<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 15h18"/>',
     332                'external' => '<path d="M15 3h6v6"/><path d="M10 14 21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>',
     333                'close' => '<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',
     334                'eye' => '<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/>',
     335                'download' => '<path d="M12 3v12"/><path d="m7 10 5 5 5-5"/><path d="M5 21h14"/>',
     336                'info' => '<circle cx="12" cy="12" r="9"/><path d="M12 11v5"/><path d="M12 8h.01"/>',
     337                'a11y' => '<circle cx="12" cy="4.5" r="1.5"/><path d="M5 8.5c2.3.7 4.6 1 7 1s4.7-.3 7-1"/><path d="M12 9.5V14l-3 6"/><path d="m12 14 3 6"/>',
     338                'text-size' => '<path d="M4 18 8.5 6 13 18"/><path d="M5.7 14h5.6"/><path d="m15 18 3-8 3 8"/><path d="M16 15.5h4"/>',
     339                'contrast' => '<circle cx="12" cy="12" r="9"/><path d="M12 3v18"/><path d="M12 8h4.5"/><path d="M12 12h5.5"/><path d="M12 16h4.5"/>',
     340                'font' => '<path d="m3 18 4.5-12L12 18"/><path d="M4.7 14h5.6"/><circle cx="17.5" cy="14.5" r="3.5"/><path d="M21 11v7"/>',
     341                'link' => '<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/>',
     342                'mask' => '<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M3 10h18"/><path d="M3 14h18"/>',
     343                'volume' => '<path d="M11 5 6 9H2v6h4l5 4z"/><path d="M15.5 8.5a5 5 0 0 1 0 7"/><path d="M19 5a10 10 0 0 1 0 14"/>',
     344            );
     345            if (!isset($paths[$name])) {
     346                return '';
     347            }
     348            $size = absint($size);
     349            return '<svg class="blogaura-icon" width="' . $size . '" height="' . $size . '" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">' . $paths[$name] . '</svg>';
     350        }
     351
     352        /**
     353         * Allowed tags for icon() output, for wp_kses().
     354         *
     355         * @return array
     356         */
     357        public static function icon_kses()
     358        {
     359            $shape = array('d' => true, 'cx' => true, 'cy' => true, 'r' => true, 'x' => true, 'y' => true, 'width' => true, 'height' => true, 'rx' => true);
     360            return array(
     361                'svg' => array('class' => true, 'width' => true, 'height' => true, 'viewbox' => true, 'fill' => true, 'stroke' => true, 'stroke-width' => true, 'stroke-linecap' => true, 'stroke-linejoin' => true, 'aria-hidden' => true, 'focusable' => true),
     362                'path' => $shape,
     363                'circle' => $shape,
     364                'rect' => $shape,
     365            );
     366        }
     367
     368        /**
     369         * Echo an icon.
     370         *
     371         * @param string $name Icon name.
     372         * @param int    $size Size in px.
     373         */
     374        public static function the_icon($name, $size = 20)
     375        {
     376            echo wp_kses(self::icon($name, $size), self::icon_kses());
     377        }
     378
     379        /**
     380         * Link to WordPress' own theme browser filtered to WPInterface themes. Core loads
     381         * that list, so the theme itself makes no request.
     382         *
     383         * @return string
     384         */
     385        public static function themes_browse_url()
     386        {
     387            if (current_user_can('install_themes')) {
     388                return self_admin_url('theme-install.php?search=' . rawurlencode('author:' . self::WPORG_AUTHOR));
     389            }
     390            return 'https://wordpress.org/themes/author/' . self::WPORG_AUTHOR . '/';
     391        }
     392
     393        /**
     394         * Small screenshot URL for a WordPress.org theme (the resized image the theme
     395         * directory itself uses), falling back to the full screenshot.
     396         *
     397         * @param array $theme Theme data from themes_api().
     398         * @return string
     399         */
     400        private static function theme_thumbnail($theme)
     401        {
     402            $full = isset($theme['screenshot_url']) ? (string) $theme['screenshot_url'] : '';
     403            if (0 === strpos($full, '//')) {
     404                $full = 'https:' . $full;
     405            }
     406            $thumb = $full;
     407            if (!empty($theme['version']) && preg_match('#/themes/([a-z0-9-]+)/screenshot\.(png|jpe?g|gif|webp)#i', $full, $m)) {
     408                $thumb = sprintf('https://i0.wp.com/themes.svn.wordpress.org/%1$s/%2$s/screenshot.%3$s?w=480&strip=all', $m[1], rawurlencode($theme['version']), $m[2]);
     409            }
     410            /**
     411             * Filters the thumbnail URL used for a WordPress.org theme on the Recommended tab.
     412             *
     413             * @param string $thumb Thumbnail URL.
     414             * @param array  $theme Theme data from themes_api().
     415             */
     416            return (string) apply_filters('blogaura_wporg_theme_thumbnail', $thumb, $theme);
     417        }
     418
     419        /**
     420         * WPInterface themes from WordPress.org, cached for 12 hours. Only called from the
     421         * AJAX handler below, i.e. after the user asked to see the list.
     422         *
     423         * @return array|WP_Error
     424         */
     425        private static function wporg_themes()
     426        {
     427            $cached = get_transient(self::THEMES_TRANSIENT);
     428            if (is_array($cached)) {
     429                return isset($cached['error']) ? new WP_Error('blogaura_wporg_themes', $cached['error']) : $cached;
     430            }
     431
     432            if (!function_exists('themes_api')) {
     433                require_once ABSPATH . 'wp-admin/includes/theme.php';
     434            }
     435            $api = themes_api(
     436                'query_themes',
     437                array(
     438                    'author' => self::WPORG_AUTHOR,
     439                    'per_page' => 100,
    62440                    'fields' => array(
    63                         'short_description' => false,
     441                        'description' => true,
     442                        'screenshot_url' => true,
    64443                        'sections' => false,
    65                         'requires' => false,
    66444                        'rating' => false,
    67445                        'ratings' => false,
    68446                        'downloaded' => false,
     447                        'download_link' => false,
    69448                        'last_updated' => false,
    70                         'added' => false,
     449                        'homepage' => false,
    71450                        'tags' => false,
    72                         'compatibility' => false,
    73                         'homepage' => false,
    74                         'donate_link' => false,
    75                     ),
     451                        'num_ratings' => false,
     452                        'parent' => false,
     453                        'versions' => false,
     454                    ),
     455                )
     456            );
     457
     458            if (is_wp_error($api) || empty($api->themes) || !is_array($api->themes)) {
     459                $message = __('Could not load themes from WordPress.org. Please try again later.', 'blogaura');
     460                set_transient(self::THEMES_TRANSIENT, array('error' => $message), 15 * MINUTE_IN_SECONDS);
     461                return new WP_Error('blogaura_wporg_themes', $message);
     462            }
     463
     464            $themes = array();
     465            foreach ($api->themes as $theme) {
     466                $theme = (array) $theme;
     467                if (empty($theme['slug']) || empty($theme['name'])) {
     468                    continue;
     469                }
     470                $themes[] = array(
     471                    'slug' => sanitize_key($theme['slug']),
     472                    'name' => sanitize_text_field(html_entity_decode($theme['name'], ENT_QUOTES, 'UTF-8')),
     473                    'thumb' => esc_url_raw(self::theme_thumbnail($theme)),
     474                    'description' => wp_trim_words(wp_strip_all_tags(isset($theme['description']) ? $theme['description'] : ''), 16, '…'),
    76475                );
    77 
    78                 $plugin_info = plugins_api('plugin_information', $api_args);
    79 
    80                 // Error check for plugins_api
    81                 if (is_wp_error($plugin_info)) {
    82                     wp_send_json_error(array('message' => 'Error retrieving plugin information.'));
     476            }
     477            set_transient(self::THEMES_TRANSIENT, $themes, 12 * HOUR_IN_SECONDS);
     478            return $themes;
     479        }
     480
     481        /**
     482         * AJAX: return the WPInterface themes list (minus this theme and its Free/Pro twin).
     483         */
     484        public function ajax_wporg_themes()
     485        {
     486            check_ajax_referer('blogaura_wporg_themes', 'nonce');
     487            if (!current_user_can('edit_theme_options')) {
     488                wp_send_json_error(array('message' => __('You are not allowed to perform this action.', 'blogaura')), 403);
     489            }
     490
     491            $themes = self::wporg_themes();
     492            if (is_wp_error($themes)) {
     493                wp_send_json_error(array('message' => $themes->get_error_message()), 502);
     494            }
     495
     496            $template = get_template();
     497            $exclude = array($template, preg_replace('/-pro$/', '', $template));
     498            $can_install = current_user_can('install_themes');
     499            $out = array();
     500            foreach ($themes as $theme) {
     501                if (in_array($theme['slug'], $exclude, true)) {
     502                    continue;
    83503                }
    84 
    85                 $upgrader = new Plugin_Upgrader(new WP_Ajax_Upgrader_Skin());
    86                 $result = $upgrader->install($plugin_info->download_link);
    87 
    88                 if (is_wp_error($result)) {
    89                     wp_send_json_error(array('message' => 'Error installing the plugin.'));
    90                 }
    91 
    92                 $result = activate_plugin($plugin);
    93 
    94                 if (is_wp_error($result)) {
    95                     wp_send_json_error(array('message' => 'Error activating the plugin.'));
    96                 } else {
    97                     wp_send_json_success(array('message' => 'Plugin installed and activated successfully!'));
    98                 }
    99             }
    100         }
    101 
    102         /**
    103          * Localize array for import button AJAX request.
    104          */
    105         public function enqueue_scripts()
    106         {
    107             $suffix = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min';
    108 
    109             $css_file = is_rtl()
    110                 ? 'admin-rtl' . $suffix . '.css'
    111                 : 'admin' . $suffix . '.css';
    112 
    113             wp_enqueue_style(
    114                 'blogaura-admin-style',
    115                 get_template_directory_uri() . '/inc/admin/dashboard/css/' . $css_file,
    116                 array(),
    117                 BLOGAURA_VERSION
    118             );
    119 
    120             wp_enqueue_script('blogaura-plugin-install-helper', get_template_directory_uri() . '/inc/admin/dashboard/js/admin.js', array('jquery'), BLOGAURA_VERSION, true);
    121             $welcome_data = array(
    122                 'uri' => esc_url(admin_url('/themes.php?page=blogaura&tab=starter-templates')),
    123                 'btn_text' => esc_html__('Processing...', 'blogaura'),
    124                 'nonce' => wp_create_nonce('blogaura_demo_import_nonce'),
    125                 'admin_url' => esc_url(admin_url()),
    126                 'ajaxurl' => admin_url('admin-ajax.php'), // Include this line for using admin-ajax.php
    127             );
    128             wp_localize_script('blogaura-plugin-install-helper', 'blogauraRedirectDemoPage', $welcome_data);
     504                $theme['details'] = 'https://wordpress.org/themes/' . $theme['slug'] . '/';
     505                $theme['preview'] = $can_install ? self_admin_url('theme-install.php?theme=' . $theme['slug']) : $theme['details'];
     506                $out[] = $theme;
     507            }
     508            wp_send_json_success(array('themes' => $out));
    129509        }
    130510    }
  • blogaura/1.1.5/inc/admin/dashboard/class-dashboard.php

    r316997 r353892  
    11<?php
     2/**
     3 * BlogAura theme dashboard (Appearance › BlogAura).
     4 *
     5 * @package BlogAura
     6 */
    27// Exit if accessed directly.
    38defined('ABSPATH') || exit;
     9
    410class BlogAura_Dashboard
    511{
     12    /**
     13     * Instance.
     14     *
     15     * @var BlogAura_Dashboard
     16     */
    617    private static $instance;
    7     /**
    8      * The pro_status of theme.
    9      *
    10      * @var string $pro_status The pro_status.
    11      */
    12     public $pro_status = false;
    13     public $demo_packages;
    14     public static function instance()
    15     {
    16         if (is_null(self::$instance)) {
    17             self::$instance = new self();
    18         }
    19         return self::$instance;
    20     }
    21     private function __construct()
    22     {
    23         $this->setup_hooks();
    24     }
    25     private function setup_hooks()
    26     {
    27         add_action('admin_menu', array($this, 'create_menu'));
    28         add_action('in_admin_header', array($this, 'hide_admin_notices'));
    29     }
    30     /**
    31      * Theme Url
    32      *
    33      * @access private
    34      * @var string $theme_url
    35      * @since 1.0.0
     18
     19    /**
     20     * Whether this is the Pro version of the theme.
     21     *
     22     * @var bool
     23     */
     24    public $pro_status = BlogAura_Admin::PRO;
     25
     26    /**
     27     * Admin page hook suffix.
     28     *
     29     * @var string
     30     */
     31    private $hook = '';
     32
     33    /**
     34     * Theme URL.
     35     *
     36     * @var string
    3637     */
    3738    private $theme_url = 'https://wpinterface.com/themes/blogaura/';
    38     /**
    39      * Documentation Url
    40      *
    41      * @access private
    42      * @var string $doc_url
    43      * @since 1.0.0
    44      */
    45     private $doc_url = 'https://docs.wpinterface.com/blogaura/';
    46     /**
    47      * Preview Url
    48      *
    49      * @access private
    50      * @var string $preview_url
    51      * @since 1.0.0
    52      */
    53     private $preview_url = 'https://live-preview.wpinterface.com/blogaura';
    54     /**
    55      * Misc Support Url
    56      *
    57      * @access private
    58      * @since 1.0.0
     39
     40    /**
     41     * Documentation URL.
     42     *
     43     * @var string
     44     */
     45    private $doc_url = 'https://docs.wpinterface.com/';
     46
     47    /**
     48     * Pro demo URL.
     49     *
     50     * @var string
     51     */
     52    private $pro_demo_url = 'https://live-preview.wpinterface.com/blogaura-pro/';
     53
     54    /**
     55     * Support URLs.
     56     *
     57     * @var string
    5958     */
    6059    private $community_url = 'https://wordpress.org/support/theme/blogaura/';
     60    private $review_url = 'https://wordpress.org/support/theme/blogaura/reviews/#new-post';
    6161    private $support_url = 'https://wpinterface.com/support/';
     62
     63    /**
     64     * Community URLs.
     65     *
     66     * @var string
     67     */
    6268    private $facebook_url = 'https://www.facebook.com/wpinterface';
    6369    private $x_url = 'https://x.com/wp_interface';
    6470    private $youtube_url = 'https://www.youtube.com/@wpinterface';
     71
     72    public static function instance()
     73    {
     74        if (is_null(self::$instance)) {
     75            self::$instance = new self();
     76        }
     77        return self::$instance;
     78    }
     79
     80    private function __construct()
     81    {
     82        add_action('admin_menu', array($this, 'create_menu'));
     83        add_action('in_admin_header', array($this, 'hide_admin_notices'));
     84        add_action('admin_enqueue_scripts', array($this, 'enqueue'));
     85        add_filter('admin_body_class', array($this, 'body_class'));
     86    }
     87
     88    /**
     89     * The parent theme object.
     90     *
     91     * @return WP_Theme
     92     */
     93    private function theme()
     94    {
     95        return is_child_theme() ? wp_get_theme()->parent() : wp_get_theme();
     96    }
     97
    6598    public function create_menu()
    6699    {
    67         if (!is_child_theme()) {
    68             $theme = wp_get_theme();
    69         } else {
    70             $theme = wp_get_theme()->parent();
    71         }
    72         /* translators: %s: Theme Name. */
    73         $theme_page_name = sprintf(esc_html__('%s', 'blogaura'), $theme->Name);
    74         add_theme_page(
    75             $theme_page_name,
    76             $theme_page_name,
     100        $this->hook = add_theme_page(
     101            $this->theme()->get('Name'),
     102            $this->theme()->get('Name'),
    77103            'edit_theme_options',
    78             'blogaura',
     104            BlogAura_Admin::PAGE,
     105            array($this, 'dashboard_page')
     106        );
     107    }
     108
     109    /**
     110     * Whether the current admin screen is this dashboard.
     111     *
     112     * @return bool
     113     */
     114    private function is_dashboard_screen()
     115    {
     116        $screen = function_exists('get_current_screen') ? get_current_screen() : null;
     117        return $screen && $this->hook && $screen->id === $this->hook;
     118    }
     119
     120    /**
     121     * Load the dashboard CSS and JS on this page only.
     122     *
     123     * @param string $hook_suffix Current admin page.
     124     */
     125    public function enqueue($hook_suffix)
     126    {
     127        if (!$this->hook || $hook_suffix !== $this->hook) {
     128            return;
     129        }
     130        $base = BLOGAURA_PARENT_URL . '/inc/admin/dashboard/';
     131        wp_enqueue_style('blogaura-dashboard', $base . 'css/dashboard.css', array(), BLOGAURA_VERSION);
     132        wp_style_add_data('blogaura-dashboard', 'rtl', 'replace');
     133
     134        wp_enqueue_script('blogaura-dashboard', $base . 'js/dashboard.js', array(), BLOGAURA_VERSION, array('in_footer' => true, 'strategy' => 'defer'));
     135        wp_localize_script(
     136            'blogaura-dashboard',
     137            'blogauraDashboard',
    79138            array(
    80                 $this,
    81                 'dashboard_page',
     139                'ajaxUrl' => admin_url('admin-ajax.php'),
     140                'nonce' => wp_create_nonce('blogaura_wporg_themes'),
     141                // Pro loads the list when it scrolls into view; the free theme waits for a click.
     142                'autoload' => (bool) $this->pro_status,
     143                'pageSize' => 8,
     144                'i18n' => array(
     145                    'loading' => __('Loading themes from WordPress.org…', 'blogaura'),
     146                    /* translators: %d: number of themes. */
     147                    'count' => __('%d themes by WPInterface', 'blogaura'),
     148                    'error' => __('Could not load themes from WordPress.org. Please try again later.', 'blogaura'),
     149                    'retry' => __('Try again', 'blogaura'),
     150                    'preview' => __('Preview', 'blogaura'),
     151                    'details' => __('Details', 'blogaura'),
     152                    /* translators: %s: theme name. */
     153                    'alt' => __('%s theme screenshot', 'blogaura'),
     154                ),
    82155            )
    83156        );
    84157    }
    85     /**
    86      * Hide admin notices from BlockArt admin pages.
    87      *
    88      * @since 1.0.0
     158
     159    /**
     160     * Body class used to give the dashboard a full-width header (scoped to this page).
     161     *
     162     * @param string $classes Admin body classes.
     163     * @return string
     164     */
     165    public function body_class($classes)
     166    {
     167        if ($this->is_dashboard_screen()) {
     168            $classes .= ' blogaura-dashboard-page';
     169        }
     170        return $classes;
     171    }
     172
     173    /**
     174     * Hide admin notices on the BlogAura dashboard.
    89175     */
    90176    public function hide_admin_notices()
    91177    {
    92         // Bail if we're not on a BlogAura screen or page.
    93         if (empty($_REQUEST['page']) || false === strpos(sanitize_text_field(wp_unslash($_REQUEST['page'])), 'blogaura')) { // phpcs:ignore WordPress.Security.NonceVerification
     178        // Only on the dashboard itself: other pages (such as the Pro licence page) keep their notices.
     179        if (empty($_REQUEST['page']) || BlogAura_Admin::PAGE !== sanitize_key(wp_unslash($_REQUEST['page']))) { // phpcs:ignore WordPress.Security.NonceVerification
    94180            return;
    95181        }
    … …  
    123209        }
    124210    }
     211
     212    /**
     213     * Dashboard tabs.
     214     *
     215     * @return array
     216     */
     217    private function tabs()
     218    {
     219        $view = __DIR__ . '/views/';
     220        $tabs = array(
     221            'dashboard' => array(
     222                'name' => __('Overview', 'blogaura'),
     223                'view' => $view . 'overview.php',
     224            ),
     225        );
     226        $tabs['starter-templates'] = array(
     227            'name' => __('Starter sites', 'blogaura'),
     228            'view' => $view . 'starter-templates.php',
     229        );
     230        $tabs['recommended'] = array(
     231            'name' => __('Recommended', 'blogaura'),
     232            'view' => $view . 'recommended.php',
     233        );
     234        if (!$this->pro_status) {
     235            $tabs['free-vs-pro'] = array(
     236                'name' => __('Free vs Pro', 'blogaura'),
     237                'view' => $view . 'free-vs-pro.php',
     238            );
     239        }
     240        $tabs['help'] = array(
     241            'name' => __('Help & support', 'blogaura'),
     242            'view' => $view . 'help.php',
     243        );
     244
     245        /**
     246         * Filters the BlogAura dashboard tabs.
     247         *
     248         * Each tab is array( 'name' => string, 'view' => file path ) or, as before 1.2.5,
     249         * array( 'name' => string, 'callback' => callable ).
     250         *
     251         * @param array $tabs Tabs keyed by slug.
     252         */
     253        return apply_filters('blogaura_dashboard_tabs', $tabs);
     254    }
     255
     256    /**
     257     * Theme page on wpinterface.com.
     258     *
     259     * @return string
     260     */
     261    public function get_theme_url()
     262    {
     263        return $this->theme_url;
     264    }
     265
     266    /**
     267     * Pro demo URL.
     268     *
     269     * @return string
     270     */
     271    public function get_pro_demo_url()
     272    {
     273        return $this->pro_demo_url;
     274    }
     275
     276    /**
     277     * URL of a dashboard tab.
     278     *
     279     * @param string $tab Tab slug.
     280     * @return string
     281     */
     282    public function tab_url($tab)
     283    {
     284        return add_query_arg(array('page' => BlogAura_Admin::PAGE, 'tab' => $tab), admin_url('themes.php'));
     285    }
     286
    125287    public function dashboard_page()
    126288    {
    127         if (!is_child_theme()) {
    128             $theme = wp_get_theme();
    129         } else {
    130             $theme = wp_get_theme()->parent();
    131         }
    132         $admin_url = admin_url();
    133         $tabs = apply_filters(
    134             'blogaura_dashboard_tabs',
    135             array(
    136                 'dashboard' => array(
    137                     'name' => esc_html__('Dashboard', 'blogaura'),
    138                     'callback' => function () {
    139                         include __DIR__ . '/views/dashboard.php';
    140                     },
    141                 ),
    142                 'starter-templates' => array(
    143                     'name' => esc_html__('Starter Templates', 'blogaura'),
    144                     'callback' => function () {
    145                             include __DIR__ . '/views/starter-templates.php';
    146                     },
    147                 ),
    148                 'products' => array(
    149                     'name' => esc_html__('Our Recommendation', 'blogaura'),
    150                     'callback' => function () {
    151                         include __DIR__ . '/views/products.php';
    152                     },
    153                 ),
    154                 'free-vs-pro' => array(
    155                     'name' => esc_html__('Free Vs Pro', 'blogaura'),
    156                     'callback' => function () {
    157                         include __DIR__ . '/views/free-vs-pro.php';
    158                     },
    159                 ),
    160                 'help' => array(
    161                     'name' => esc_html__('Help', 'blogaura'),
    162                     'callback' => function () {
    163                         include __DIR__ . '/views/help.php';
    164                     },
    165                 ),
    166             )
    167         )
     289        $theme = $this->theme();
     290        $tabs = $this->tabs();
     291        $current_tab = isset($_GET['tab']) ? sanitize_key(wp_unslash($_GET['tab'])) : 'dashboard'; // phpcs:ignore WordPress.Security.NonceVerification
     292        if ('products' === $current_tab) {
     293            $current_tab = 'recommended';
     294        }
     295        if (!isset($tabs[$current_tab])) {
     296            $current_tab = 'dashboard';
     297        }
    168298        ?>
    169         <div class="wrap">
    170             <div class="blogaura-dashboard-area">
    171                 <div class="blogaura-dashboard-header">
    172                     <a class="blogaura-logo" href="<?php echo esc_url($this->theme_url); ?>"
    173                        target="_blank">
    174                         <img class="blogaura-brand-logo" src="<?php echo esc_url(BLOGAURA_PARENT_URL . '/inc/admin/dashboard/images/blogaura-logo.svg'); ?>" alt="<?php esc_attr_e('BlogAura', 'blogaura'); ?>">
    175                         <span class="blogaura-theme-version">
    176                                                                         <?php
    177                                     echo esc_html($theme->Version);
    178                                     ?>
    179                                                         </span>
    180                     </a>
    181                     <nav class="dashboard-header-nav">
    182                         <ul class="dashboard-primary-menu">
    183                             <?php
    184                             foreach ($tabs as $id => $tab) :
    185                                 if (!is_callable($tab['callback'])) {
    186                                     continue;
    187                                 }
    188                                 ?>
    189                                 <li class="menu-item menu-item-<?php echo esc_attr($id); ?>">
    190                                     <a id="<?php echo esc_attr($id); ?>"
    191                                        href=<?php echo esc_url("{$admin_url}themes.php?page=blogaura&tab=$id"); ?>><?php echo esc_html($tab['name']); ?></a>
    192                                 </li>
    193                             <?php endforeach; ?>
    194                         </ul>
    195                     </nav>
    196                     <div class="dashboard-header-extras">
    197                         <div class="dashboard-button-group">
    198                             <?php if (!$this->pro_status) { ?>
    199                                 <a href="<?php echo esc_url($this->theme_url); ?>#choose-pricing-plan" class="button button-secondary dashboard-button dashboard-button-primary" target="_blank">
    200                                     <?php esc_html_e('Upgrade to Pro', 'blogaura'); ?>
    201                                 </a>
    202                             <?php } ?>
    203                             <button type="button" id="dashboard-changelog-button" class="button button-secondary dashboard-button dashboard-button-secondary">
    204                                 <?php esc_html_e('Changelog', 'blogaura'); ?>
    205                             </button>
     299        <div class="blogaura-dash">
     300            <header class="blogaura-dash__header">
     301                <div class="blogaura-dash__container">
     302                    <div class="blogaura-dash__title-row">
     303                        <div class="blogaura-dash__title">
     304                            <div class="blogaura-dash__title-line">
     305                                <h1><?php echo esc_html($theme->get('Name')); ?></h1>
     306                                <span class="blogaura-pill"><?php echo esc_html(sprintf(/* translators: %s: theme version. */ __('Version %s', 'blogaura'), $theme->get('Version'))); ?></span>
     307                                <?php if ($this->pro_status) : ?>
     308                                    <span class="blogaura-pill blogaura-pill--pro"><?php esc_html_e('Pro', 'blogaura'); ?></span>
     309                                <?php endif; ?>
     310                            </div>
     311                            <p><?php echo esc_html(sprintf(/* translators: %s: theme author. */ __('by %s', 'blogaura'), $theme->get('Author'))); ?></p>
     312                        </div>
     313                        <div class="blogaura-dash__actions">
     314                            <a class="button button-primary blogaura-button" href="<?php echo esc_url(admin_url('customize.php')); ?>"><?php esc_html_e('Customize', 'blogaura'); ?></a>
     315                            <a class="button blogaura-button" href="<?php echo esc_url($this->doc_url); ?>" target="_blank" rel="noopener"><?php esc_html_e('Documentation', 'blogaura'); ?></a>
     316                            <button type="button" class="button blogaura-button" data-blogaura-changelog-open aria-haspopup="dialog" aria-controls="blogaura-changelog"><?php BlogAura_Admin::the_icon('clock', 16); ?><?php esc_html_e('What’s new', 'blogaura'); ?></button>
     317                            <?php if (!$this->pro_status) : ?>
     318                                <a class="blogaura-upgrade-button" href="<?php echo esc_url($this->theme_url . '#choose-pricing-plan'); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('crown', 16); ?><?php esc_html_e('Upgrade to Pro', 'blogaura'); ?></a>
     319                            <?php endif; ?>
    206320                        </div>
    207321                    </div>
     322                    <nav class="blogaura-dash__tabs" aria-label="<?php esc_attr_e('Theme dashboard sections', 'blogaura'); ?>">
     323                        <?php foreach ($tabs as $id => $tab) : ?>
     324                            <?php if ($id === $current_tab) : ?>
     325                                <a class="is-active" aria-current="page" href="<?php echo esc_url($this->tab_url($id)); ?>"><?php echo esc_html($tab['name']); ?></a>
     326                            <?php else : ?>
     327                                <a href="<?php echo esc_url($this->tab_url($id)); ?>"><?php echo esc_html($tab['name']); ?></a>
     328                            <?php endif; ?>
     329                        <?php endforeach; ?>
     330                    </nav>
    208331                </div>
    209                 <?php
    210                 $current_tab = isset($_GET['tab']) ? sanitize_text_field(wp_unslash($_GET['tab'])) : 'dashboard';
    211                 $current_tab = in_array($current_tab, array_keys($tabs), true) ? $current_tab : 'dashboard';
    212                 $callback = $tabs[$current_tab]['callback'];
    213                 call_user_func($callback);
    214                 ?>
    215             </div><!--/.blogaura-dashboard-area-->
    216         </div><!--/.wrap-->
    217         <div id="blogaura-dashboard-offcanvas" class="blogaura-dashboard-offcanvas">
    218             <div class="dialog-head">
    219                 <h3><?php esc_html_e('Latest Updates', 'blogaura'); ?></h3>
    220                 <div id="dialog-close" class="dialog-close">
    221                     <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
    222                         <path d="M10.052 9.34082L16.277 3.11582C16.577 2.81582 16.577 2.36582 16.277 2.06582C15.977 1.76582 15.5269 1.76582 15.227 2.06582L9.00195 8.29082L2.77695 2.06582C2.47695 1.76582 2.02695 1.76582 1.72695 2.06582C1.42695 2.36582 1.42695 2.81582 1.72695 3.11582L7.95195 9.34082L1.72695 15.5658C1.42695 15.8658 1.42695 16.3158 1.72695 16.6158C1.87695 16.7658 2.02695 16.8408 2.25195 16.8408C2.47695 16.8408 2.62695 16.7658 2.77695 16.6158L9.00195 10.3908L15.227 16.6158C15.377 16.7658 15.602 16.8408 15.752 16.8408C15.902 16.8408 16.127 16.7658 16.277 16.6158C16.577 16.3158 16.577 15.8658 16.277 15.5658L10.052 9.34082Z" fill="#999999"/>
    223                     </svg>
     332            </header>
     333            <hr class="wp-header-end">
     334            <div class="blogaura-dash__body">
     335                <div class="blogaura-dash__container">
     336                    <?php
     337                    $tab = $tabs[$current_tab];
     338                    if (!empty($tab['view']) && is_readable($tab['view'])) {
     339                        include $tab['view'];
     340                    } elseif (!empty($tab['callback']) && is_callable($tab['callback'])) {
     341                        call_user_func($tab['callback']);
     342                    }
     343                    ?>
    224344                </div>
    225345            </div>
    226             <div class="dialog-content">
    227                 <?php
    228                 $changelog = new BlogAura_Changelog_Parser();
    229                 // Fetch changelog data.
    230                 $changelog_data = $changelog->get_items();
    231 
    232                 if ($changelog_data) {
    233                     // Output the changelog data
    234                     echo '<div class="blogaura-changelog">';
    235                     foreach ($changelog_data as $entry) {
    236                         echo '<div class="blogaura-changelog-list-item">';
    237                         echo '<div class="blogaura-changelog-list-head">';
    238                         echo '<h4 class="blogaura-changelog-version">Version: ' . esc_html($entry['version']) . '</h4>';
    239                         echo '<p class="blogaura-changelog-date">' . esc_html($entry['date']) . '</p>';
    240                         echo '</div>'; // blogaura-changelog-list-head
    241                         // Display each change
    242                         echo '<div class="blogaura-changelog-change">';
    243                         foreach ($entry['changes'] as $tag => $changes) {
    244                             echo '<div class="blogaura-changelog-change-item item--' . esc_html(strtolower($tag)) . '">';
    245                             echo '<span class="blogaura-changelog-change-type">' . esc_html($tag) . '</span>';
    246                             echo '<div class="blogaura-changelog-change-list">';
    247                             foreach ($changes as $change) {
    248                                 echo '<p class="blogaura-changelog-change-desc">' . esc_html($change) . '</p>';
    249                             }
    250                             echo '</div>'; // blogaura-changelog-change-list
    251                             echo '</div >'; // blogaura-changelog-change-item
    252                         }
    253                         echo '</div>'; // blogaura-changelog-change
    254                         echo '</div>'; // blogaura-changelog-list-item
    255                     }
    256                     echo '</div>'; // blogaura-changelog
    257                 } else {
    258                     echo '<p>No changelog data available.</p>';
    259                 }
    260                 ?>
    261             </div>
     346            <?php include __DIR__ . '/views/changelog.php'; ?>
    262347        </div>
    263348        <?php
    264349    }
    265350}
     351
    266352BlogAura_Dashboard::instance();
  • blogaura/1.1.5/inc/admin/dashboard/class-theme-review-notice.php

    r312189 r353892  
    2525        add_action('after_setup_theme', array($this, 'review_notice'));
    2626        add_action('admin_notices', array($this, 'review_notice_markup'), 0);
     27        add_action('admin_enqueue_scripts', array($this, 'enqueue'));
    2728        add_action('admin_init', array($this, 'ignore_theme_review_notice'), 0);
    2829        add_action('admin_init', array($this, 'ignore_theme_review_notice_partially'), 0);
    … …  
    5960            '_blogaura_ignore_theme_review_notice_nonce'
    6061        );
    61         if (!current_user_can('edit_posts')) {
     62        if (!current_user_can('manage_options')) {
    6263            return;
    6364        }
    … …  
    7273            return;
    7374        }
     75        if (!$this->on_notice_screen()) {
     76            return;
     77        }
     78        $theme = is_child_theme() ? wp_get_theme()->parent() : wp_get_theme();
    7479        ?>
    75         <div class="notice notice-success blogaura-notice theme-review-notice" style="position:relative;">
    76             <div class="blogaura-notice-wrapper">
    77                 <div class="blogaura-notice-welcome notice-is-review">
    78                     <div class="blogaura-notice-left">
     80        <div class="notice blogaura-welcome blogaura-review">
     81            <a class="notice-dismiss blogaura-welcome__dismiss" href="<?php echo esc_url($dismiss_url); ?>"><span class="screen-reader-text"><?php esc_html_e('Dismiss this notice.', 'blogaura'); ?></span></a>
    7982
    80                             <h2 class="blogaura-notice-heading"><?php echo esc_html('🌟 Love our theme? Give us a 5-star rating! 🌟'); ?></h2>
    81 
    82                             <p>
    83                                 <?php
    84                                 printf(
    85                                 /* translators: %1$s: Opening of strong tag, %2$s: Theme's Name, %3$s: Closing of strong tag  */
    86                                     esc_html__('We hope you\'re enjoying our %1$s%2$s%3$s WordPress theme! Your feedback helps us improve and reach more users. If you love our theme, please take a moment to leave us a 5-star rating. Your support means the world to us!', 'blogaura'),
    87                                     '<strong>',
    88                                     esc_html(wp_get_theme()->get('Name')),
    89                                     '</strong>'
    90                                 );
    91                                 ?>
    92 
    93                             </p>
    94                             <strong>
    95                                 <?php esc_html_e('Thank you for being an awesome part of our community! 💖', 'blogaura'); ?>
    96                             </strong>
    97 
    98                             <div class="dashboard-button-group">
    99                                 <a href="https://wordpress.org/support/theme/blogaura/reviews/?filter=5#new-post" class="button button-primary dashboard-button dashboard-button-primary" target="_blank">
    100                                     <span class="dashicons dashicons-thumbs-up"></span>
    101                                     <?php esc_html_e('Sure, I\'d love to!', 'blogaura'); ?>
    102                                 </a>
    103                                 <a href="<?php echo esc_url($dismiss_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary">
    104                                     <span class="dashicons dashicons-smiley"></span>
    105                                     <?php esc_html_e('I already did!', 'blogaura'); ?>
    106                                 </a>
    107                                 <a href="<?php echo esc_url($temporary_dismiss_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary">
    108                                     <span class="dashicons dashicons-calendar"></span>
    109                                     <?php esc_html_e('Maybe later', 'blogaura'); ?>
    110                                 </a>
    111                                 <a href="<?php echo esc_url('https://wordpress.org/support/theme/blogaura/'); ?>"
    112                                    class="button button-secondary dashboard-button dashboard-button-secondary" target="_blank">
    113                                     <span class="dashicons dashicons-testimonial"></span>
    114                                     <?php esc_html_e('I have a query', 'blogaura'); ?>
    115                                 </a>
    116                             </div>
    117 
    118                     </div>
    119                     <div class="blogaura-notice-right">
    120                         <div class="blogaura-intro-image">
    121                             <img src="<?php echo esc_url(get_template_directory_uri() . '/screenshot.png'); ?>"
    122                                  alt="<?php esc_attr_e('BlogAura', 'blogaura'); ?>"/>
    123                         </div>
    124                     </div>
     83            <div class="blogaura-welcome__body">
     84                <span class="blogaura-review__badge"><?php BlogAura_Admin::the_icon('star', 22); ?></span>
     85                <div class="blogaura-welcome__text">
     86                    <h2><?php echo esc_html(sprintf(/* translators: %s: theme name. */ __('Enjoying %s? A quick review helps a lot.', 'blogaura'), $theme->get('Name'))); ?></h2>
     87                    <p><?php esc_html_e('A rating on WordPress.org helps other site owners find the theme and keeps the updates coming. It takes about a minute.', 'blogaura'); ?></p>
     88                </div>
     89                <div class="blogaura-welcome__actions">
     90                    <a class="button button-primary" href="<?php echo esc_url('https://wordpress.org/support/theme/blogaura/reviews/?filter=5#new-post'); ?>" target="_blank" rel="noopener"><span class="blogaura-review__stars" aria-hidden="true">★★★★★</span> <?php esc_html_e('Leave a review', 'blogaura'); ?></a>
     91                    <a class="button" href="<?php echo esc_url($dismiss_url); ?>"><?php esc_html_e('I already did', 'blogaura'); ?></a>
     92                    <a class="button" href="<?php echo esc_url($temporary_dismiss_url); ?>"><?php esc_html_e('Maybe later', 'blogaura'); ?></a>
    12593                </div>
    12694            </div>
    127             <a class="notice-dismiss" href="<?php echo esc_url($dismiss_url); ?>"></a>
    128         </div> <!-- /.theme-review-notice -->
     95
     96            <div class="blogaura-welcome__services">
     97                <?php BlogAura_Admin::the_icon('chat', 16); ?>
     98                <span><?php esc_html_e('Something not working, or missing a feature?', 'blogaura'); ?></span>
     99                <a href="<?php echo esc_url('https://wordpress.org/support/theme/blogaura/'); ?>" target="_blank" rel="noopener"><?php esc_html_e('Ask in the support forum', 'blogaura'); ?> <span aria-hidden="true">→</span></a>
     100            </div>
     101        </div>
    129102        <?php
     103    }
     104
     105    /**
     106     * Whether the current screen shows the notice (Dashboard and Themes, like the welcome notice).
     107     *
     108     * @return bool
     109     */
     110    private function on_notice_screen()
     111    {
     112        $screen = function_exists('get_current_screen') ? get_current_screen() : null;
     113        return $screen && in_array($screen->id, array('dashboard', 'themes'), true);
     114    }
     115
     116    /**
     117     * Whether the notice is due for the current user.
     118     *
     119     * @return bool
     120     */
     121    private function is_due()
     122    {
     123        if (!current_user_can('manage_options')) {
     124            return false;
     125        }
     126        $user_id = get_current_user_id();
     127        return !(get_option('blogaura_theme_installed_time') > strtotime('-14 day'))
     128            && !(get_user_meta($user_id, 'nag_blogaura_ignore_theme_review_notice_partially', true) > strtotime('-14 day'))
     129            && !get_user_meta($user_id, 'blogaura_ignore_theme_review_notice', true);
     130    }
     131
     132    /**
     133     * Load the notice stylesheet (shared with the welcome notice) while the notice is due.
     134     *
     135     * @param string $hook_suffix Current admin page.
     136     */
     137    public function enqueue($hook_suffix)
     138    {
     139        if (!in_array($hook_suffix, array('index.php', 'themes.php'), true) || !$this->is_due()) {
     140            return;
     141        }
     142        wp_enqueue_style('blogaura-welcome-notice', BLOGAURA_PARENT_URL . '/inc/admin/dashboard/css/notice.css', array(), BLOGAURA_VERSION);
     143        wp_style_add_data('blogaura-welcome-notice', 'rtl', 'replace');
    130144    }
    131145
    … …  
    167181    public function review_notice_data_remove()
    168182    {
    169         $get_all_users = get_users();
    170183        $theme_installed_time = get_option('blogaura_theme_installed_time');
    171184        // Delete options data.
    … …  
    173186            delete_option('blogaura_theme_installed_time');
    174187        }
    175         // Delete user meta data for theme review notice.
    176         foreach ($get_all_users as $user) {
    177             $ignored_notice = get_user_meta($user->ID, 'blogaura_ignore_theme_review_notice', true);
    178             $ignored_notice_partially = get_user_meta($user->ID, 'nag_blogaura_ignore_theme_review_notice_partially', true);
    179             // Delete permanent notice remove data.
    180             if ($ignored_notice) {
    181                 delete_user_meta($user->ID, 'blogaura_ignore_theme_review_notice');
    182             }
    183             // Delete partial notice remove data.
    184             if ($ignored_notice_partially) {
    185                 delete_user_meta($user->ID, 'nag_blogaura_ignore_theme_review_notice_partially');
    186             }
    187         }
     188        // Delete user meta data for theme review notice for all users efficiently.
     189        delete_metadata('user', 0, 'blogaura_ignore_theme_review_notice', '', true);
     190        delete_metadata('user', 0, 'nag_blogaura_ignore_theme_review_notice_partially', '', true);
    188191    }
    189192}
  • blogaura/1.1.5/inc/admin/dashboard/class-welcome-notice.php

    r312189 r353892  
    11<?php
     2/**
     3 * BlogAura welcome notice, shown after activation until dismissed.
     4 *
     5 * @package BlogAura
     6 */
    27// Exit if accessed directly.
    38defined('ABSPATH') || exit;
    49
    510class BlogAura_Welcome_Notice {
    6     private $theme_url = 'https://wpinterface.com/themes/blogaura/';
    7     private $doc_url = 'https://docs.wpinterface.com/blogaura/';
    8     private $theme_name;
    9     private $theme_version;
    10     private $theme_slug;
     11    /**
     12     * Screens that show the notice (Dashboard and Themes only).
     13     *
     14     * @var array
     15     */
     16    private $screens = array('dashboard', 'themes');
    1117
    1218    public function __construct() {
    … …  
    1622    }
    1723
     24    /**
     25     * Whether the notice should be shown to the current user at all.
     26     *
     27     * @return bool
     28     */
     29    private function is_enabled() {
     30        return !get_option('blogaura_admin_notice_welcome') && current_user_can('manage_options');
     31    }
     32
    1833    public function show_welcome_notice() {
    19         if (!get_option('blogaura_admin_notice_welcome')) {
     34        if ($this->is_enabled()) {
    2035            add_action('admin_notices', [$this, 'render_welcome_notice']);
     36            add_action('admin_enqueue_scripts', [$this, 'enqueue']);
    2137        }
    2238    }
    2339
    24     private function get_import_button_html() {
    25         return sprintf(
    26             '<a class="btn-get-started button button-primary dashboard-button dashboard-button-primary" href="#" data-name="%s" data-slug="%s" aria-label="%s">%s</a>',
    27             esc_attr('one-click-demo-import, mailchimp-for-wp, wpinterface-add-ons'),
    28             esc_attr('one-click-demo-import, mailchimp-for-wp, wpinterface-add-ons'),
    29             esc_attr__('Get Started', 'blogaura'),
    30             esc_html__('Get started', 'blogaura')
     40    /**
     41     * Load the notice's small stylesheet and script on the screens that show it.
     42     *
     43     * @param string $hook_suffix Current admin page.
     44     */
     45    public function enqueue($hook_suffix) {
     46        if (!in_array($hook_suffix, array('index.php', 'themes.php'), true)) {
     47            return;
     48        }
     49        $base = BLOGAURA_PARENT_URL . '/inc/admin/dashboard/';
     50        wp_enqueue_style('blogaura-welcome-notice', $base . 'css/notice.css', array(), BLOGAURA_VERSION);
     51        wp_style_add_data('blogaura-welcome-notice', 'rtl', 'replace');
     52        wp_enqueue_script('blogaura-welcome-notice', $base . 'js/notice.js', array(), BLOGAURA_VERSION, array('in_footer' => true, 'strategy' => 'defer'));
     53        wp_localize_script(
     54            'blogaura-welcome-notice',
     55            'blogauraWelcomeNotice',
     56            array(
     57                'ajaxUrl' => admin_url('admin-ajax.php'),
     58                'nonce' => wp_create_nonce('blogaura_demo_import_nonce'),
     59                'i18n' => array(
     60                    'installing' => __('Installing…', 'blogaura'),
     61                    'error' => __('Something went wrong. Please try again, or install the plugins from Plugins › Add New.', 'blogaura'),
     62                ),
     63            )
    3164        );
    3265    }
    3366
    3467    public function render_welcome_notice() {
     68        $screen = get_current_screen();
     69        if (!$screen || !in_array($screen->id, $this->screens, true)) {
     70            return;
     71        }
     72
     73        $theme = is_child_theme() ? wp_get_theme()->parent() : wp_get_theme();
     74        $dashboard_url = admin_url('themes.php?page=' . BlogAura_Admin::PAGE);
    3575        $dismiss_url = wp_nonce_url(
    3676            remove_query_arg(['activated'], add_query_arg('blogaura-hide-notice', 'welcome')),
    … …  
    3878            '_blogaura_notice_nonce'
    3979        );
    40         $current_user = wp_get_current_user();
    41         $theme = wp_get_theme();
    42         $this->theme_name = $theme->get('Name');
    43         $this->theme_version = $theme->get('Version');
    44         $this->theme_slug = $theme->get_template();
     80        $ready = BlogAura_Admin::starter_plugins_active();
     81        $services = BlogAura_Admin::services();
     82        /**
     83         * Filters whether the welcome notice shows the one-line link to WPInterface services.
     84         *
     85         * @param bool $show Whether to show it.
     86         */
     87        $show_services = apply_filters('blogaura_welcome_notice_show_services', true);
     88        ?>
     89        <div class="notice blogaura-welcome<?php echo $ready ? ' blogaura-welcome--ready' : ''; ?>">
     90            <a class="notice-dismiss blogaura-welcome__dismiss" href="<?php echo esc_url($dismiss_url); ?>"><span class="screen-reader-text"><?php esc_html_e('Dismiss this notice.', 'blogaura'); ?></span></a>
    4591
    46         if (is_plugin_active('one-click-demo-import/one-click-demo-import.php') && is_plugin_active('mailchimp-for-wp/mailchimp-for-wp.php') && is_plugin_active('wpinterface-add-ons/wpinterface-add-ons.php')) {
    47             return;
    48         }
     92            <div class="blogaura-welcome__body">
     93                <?php if ($ready) : ?>
     94                    <span class="blogaura-welcome__check"><?php BlogAura_Admin::the_icon('check', 22); ?></span>
     95                    <div class="blogaura-welcome__text">
     96                        <h2><?php esc_html_e('Starter plugins are installed.', 'blogaura'); ?></h2>
     97                        <p><?php esc_html_e('Import a starter site, or start from a clean slate in the Customizer.', 'blogaura'); ?></p>
     98                    </div>
     99                    <div class="blogaura-welcome__actions">
     100                        <a class="button button-primary" href="<?php echo esc_url(add_query_arg('tab', 'starter-templates', $dashboard_url)); ?>"><?php esc_html_e('Import a starter site', 'blogaura'); ?></a>
     101                        <a class="button" href="<?php echo esc_url(admin_url('customize.php')); ?>"><?php esc_html_e('Customize', 'blogaura'); ?></a>
     102                    </div>
     103                <?php else : ?>
     104                    <img class="blogaura-welcome__thumb" src="<?php echo esc_url(BlogAura_Admin::image_url('theme-thumb.webp')); ?>" width="128" height="96" alt="<?php echo esc_attr(sprintf(/* translators: %s: theme name. */ __('%s theme screenshot', 'blogaura'), $theme->get('Name'))); ?>">
     105                    <div class="blogaura-welcome__text">
     106                        <span class="blogaura-welcome__eyebrow"><?php esc_html_e('Theme activated', 'blogaura'); ?></span>
     107                        <h2><?php echo esc_html(sprintf(/* translators: %s: theme name. */ __('%s is ready. Let’s make it yours.', 'blogaura'), $theme->get('Name'))); ?></h2>
     108                        <p><?php esc_html_e('Install the free starter plugins to import a demo layout in one click, then fine-tune colours, header and homepage in the Customizer.', 'blogaura'); ?></p>
     109                        <ul class="blogaura-welcome__plugins">
     110                            <?php foreach (BlogAura_Admin::starter_plugins() as $plugin) : ?>
     111                                <li><img src="<?php echo esc_url(BlogAura_Admin::image_url('plugin-' . $plugin['slug'] . '.webp')); ?>" width="20" height="20" alt=""><?php echo esc_html($plugin['name']); ?></li>
     112                            <?php endforeach; ?>
     113                        </ul>
     114                        <p class="blogaura-welcome__error" role="alert" hidden></p>
     115                    </div>
     116                    <div class="blogaura-welcome__actions">
     117                        <?php if (current_user_can('install_plugins')) : ?>
     118                            <button type="button" class="button button-primary" data-blogaura-install><?php esc_html_e('Install starter plugins', 'blogaura'); ?></button>
     119                        <?php endif; ?>
     120                        <a class="button" href="<?php echo esc_url($dashboard_url); ?>"><?php esc_html_e('Open theme dashboard', 'blogaura'); ?></a>
     121                    </div>
     122                <?php endif; ?>
     123            </div>
    49124
    50         ?>
    51         <div id="message" class="notice notice-success blogaura-notice">
    52             <a class="blogaura-message-close notice-dismiss" href="<?php echo esc_url($dismiss_url); ?>"></a>
    53             <div class="blogaura-notice-wrapper">
    54                 <div class="blogaura-notice-welcome">
    55                     <div class="blogaura-notice-left">
    56                         <div class="blogaura-notice-subheading">
    57                             <?php printf(esc_html__('Welcome %1$s!', 'blogaura'), $current_user->user_login); ?>
    58                         </div>
    59                         <h2 class="blogaura-notice-heading">
    60                             <?php esc_html_e('Thank you for choosing BlogAura!', 'blogaura'); ?>
    61                         </h2>
    62                     </div>
     125            <?php if ($show_services) : ?>
     126                <div class="blogaura-welcome__services">
     127                    <?php BlogAura_Admin::the_icon('badge', 16); ?>
     128                    <span><?php echo esc_html(sprintf(/* translators: %s: theme name. */ __('Prefer it done for you? The WPInterface team can set up and customise %s for your site.', 'blogaura'), $theme->get('Name'))); ?></span>
     129                    <a href="<?php echo esc_url($services['featured']['url']); ?>" target="_blank" rel="noopener"><?php esc_html_e('Explore services', 'blogaura'); ?> <span aria-hidden="true">→</span></a>
    63130                </div>
    64                 <div class="blogaura-notice-content">
    65                     <div class="blogaura-notice-item blogaura-notice-template-import">
    66                         <h3><?php esc_html_e('Recommended Plugins', 'blogaura'); ?></h3>
    67                         <p><?php esc_html_e('Let\'s start by installing and activating One Click Demo Import, WPInterface Add-ons and MC4WP: Mailchimp for WordPress', 'blogaura'); ?></p>
    68                         <?php echo $this->get_import_button_html(); ?>
    69                     </div>
    70                     <div class="blogaura-notice-item blogaura-notice-theme-dashboard">
    71                         <h3><?php esc_html_e('Quick Links', 'blogaura'); ?></h3>
    72                         <p><?php esc_html_e("Check the quick links below for detailed information and to make the most of all the features our theme offers.", 'blogaura'); ?></p>
    73                         <div class="dashboard-button-group">
    74                             <a href="<?php echo esc_url(admin_url('themes.php?page=' . $this->theme_slug)); ?>" class="button button-secondary dashboard-button dashboard-button-secondary">
    75                                 <?php esc_html_e('Theme Dashboard', 'blogaura'); ?>
    76                             </a>
    77                             <a href="<?php echo esc_url($this->doc_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary" target="_blank">
    78                                 <?php esc_html_e('Documentation', 'blogaura'); ?>
    79                             </a>
    80                             <a href="<?php echo esc_url($this->theme_url); ?>#choose-pricing-plan" class="button button-secondary dashboard-button dashboard-button-primary" target="_blank">
    81                                 <?php esc_html_e('Upgrade to Pro', 'blogaura'); ?>
    82                             </a>
    83 
    84                         </div>
    85                     </div>
    86                 </div>
    87             </div>
     131            <?php endif; ?>
    88132        </div>
    89133        <?php
    … …  
    105149    public function handle_import_button() {
    106150        check_ajax_referer('blogaura_demo_import_nonce', 'security');
    107         $state = [];
     151        if (!current_user_can('activate_plugins')) {
     152            wp_send_json_error(array('message' => esc_html__('You are not allowed to perform this action.', 'blogaura')), 403);
     153        }
     154        $response = ['redirect' => admin_url('/themes.php?page=' . BlogAura_Admin::PAGE . '&tab=dashboard')];
    108155
    109         if (class_exists('OCDI_Plugin')) {
    110             $state['one-click-demo-import'] = 'activated';
    111         } elseif (file_exists(WP_PLUGIN_DIR . '/one-click-demo-import/one-click-demo-import.php')) {
    112             $state['one-click-demo-import'] = 'installed';
    113         }
    114 
    115         if (class_exists('MC4WP_MailChimp')) {
    116             $state['mailchimp-for-wp'] = 'activated';
    117         } elseif (file_exists(WP_PLUGIN_DIR . '/mailchimp-for-wp/mailchimp-for-wp.php')) {
    118             $state['mailchimp-for-wp'] = 'installed';
    119         }
    120 
    121         if (class_exists('Wpinterface_Add_Ons')) {
    122             $state['wpinterface-add-ons'] = 'activated';
    123         } elseif (file_exists(WP_PLUGIN_DIR . '/wpinterface-add-ons/wpinterface-add-ons.php')) {
    124             $state['wpinterface-add-ons'] = 'installed';
    125         }
    126 
    127         $response = ['redirect' => admin_url('/themes.php?page=blogaura&tab=dashboard')];
    128 
    129         foreach (['one-click-demo-import', 'mailchimp-for-wp', 'wpinterface-add-ons'] as $plugin) {
    130             if (isset($state[$plugin]) && ('activated' === $state[$plugin] || 'installed' === $state[$plugin])) {
    131                 if (current_user_can('activate_plugin')) {
    132                     $result = activate_plugin($plugin . '/' . $plugin . '.php');
    133                     if (is_wp_error($result)) {
    134                         $response['errorCode'] = $result->get_error_code();
    135                         $response['errorMessage'] = $result->get_error_message();
    136                     }
     156        foreach (BlogAura_Admin::starter_plugins() as $plugin) {
     157            $state = BlogAura_Admin::plugin_state($plugin['file']);
     158            if ('active' === $state) {
     159                continue;
     160            }
     161            if ('missing' === $state) {
     162                if (!current_user_can('install_plugins')) {
     163                    continue;
    137164                }
    138             } else {
    139                 wp_enqueue_style('plugin-install');
    140                 wp_enqueue_script('plugin-install');
    141165                include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    142166                include_once ABSPATH . 'wp-admin/includes/plugin-install.php';
    143167
    144                 $api = plugins_api('plugin_information', ['slug' => $plugin, 'fields' => ['sections' => false]]);
     168                $api = plugins_api('plugin_information', ['slug' => $plugin['slug'], 'fields' => ['sections' => false]]);
     169                if (is_wp_error($api)) {
     170                    $response['errorCode'] = $api->get_error_code();
     171                    $response['errorMessage'] = $api->get_error_message();
     172                    continue;
     173                }
    145174                $upgrader = new Plugin_Upgrader(new WP_Ajax_Upgrader_Skin());
    146175                $result = $upgrader->install($api->download_link);
    147 
    148                 if ($result && current_user_can('activate_plugin')) {
    149                     $result = activate_plugin($plugin . '/' . $plugin . '.php');
    150                     if (is_wp_error($result)) {
    151                         $response['errorCode'] = $result->get_error_code();
    152                         $response['errorMessage'] = $result->get_error_message();
    153                     }
     176                if (!$result || is_wp_error($result)) {
     177                    $response['errorCode'] = is_wp_error($result) ? $result->get_error_code() : 'install_failed';
     178                    $response['errorMessage'] = is_wp_error($result) ? $result->get_error_message() : __('Could not install the plugin.', 'blogaura');
     179                    continue;
     180                }
     181                wp_clean_plugins_cache();
     182            }
     183            if (current_user_can('activate_plugin', $plugin['file'])) {
     184                $result = activate_plugin($plugin['file']);
     185                if (is_wp_error($result)) {
     186                    $response['errorCode'] = $result->get_error_code();
     187                    $response['errorMessage'] = $result->get_error_message();
    154188                }
    155189            }
  • blogaura/1.1.5/inc/admin/dashboard/views/free-vs-pro.php

    r312189 r353892  
    11<?php
    2 if (!is_child_theme()) {
    3     $theme = wp_get_theme();
    4 } else {
    5     $theme = wp_get_theme()->parent();
    6 }
    7 $tick_mark = '<span class="compare-checkmark"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M5.37994 11.5537L5.7335 11.9073L6.08705 11.5537L13.887 3.75375C13.9296 3.71119 13.9703 3.7002 14.0002 3.7002C14.03 3.7002 14.0707 3.71119 14.1133 3.75375C14.1558 3.79631 14.1668 3.83698 14.1668 3.86686C14.1668 3.89675 14.1558 3.93742 14.1133 3.97998L5.84661 12.2466C5.80946 12.2838 5.79218 12.2918 5.78876 12.2933L5.7886 12.2934C5.78668 12.2943 5.7738 12.3002 5.7335 12.3002C5.6932 12.3002 5.68032 12.2943 5.67839 12.2934L5.67823 12.2933C5.67482 12.2918 5.65753 12.2838 5.62038 12.2466L1.88705 8.51331C1.84449 8.47075 1.8335 8.43008 1.8335 8.4002C1.8335 8.37031 1.84449 8.32964 1.88705 8.28708L1.54017 7.9402L1.88705 8.28708C1.92961 8.24452 1.97028 8.23353 2.00016 8.23353C2.03005 8.23353 2.07072 8.24452 2.11328 8.28708L5.37994 11.5537Z" stroke="#3fb28f"/></svg></span>';
    8 $cross_mark = '<span class="compare-crossmark"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7071 4.70711C13.0976 4.31658 13.0976 3.68342 12.7071 3.29289C12.3166 2.90237 11.6834 2.90237 11.2929 3.29289L8 6.58579L4.70711 3.29289C4.31658 2.90237 3.68342 2.90237 3.29289 3.29289C2.90237 3.68342 2.90237 4.31658 3.29289 4.70711L6.58579 8L3.29289 11.2929C2.90237 11.6834 2.90237 12.3166 3.29289 12.7071C3.68342 13.0976 4.31658 13.0976 4.70711 12.7071L8 9.41421L11.2929 12.7071C11.6834 13.0976 12.3166 13.0976 12.7071 12.7071C13.0976 12.3166 13.0976 11.6834 12.7071 11.2929L9.41421 8L12.7071 4.70711Z" fill="#e62424"/></svg></span>';
     2/**
     3 * Dashboard › Free vs Pro tab.
     4 *
     5 * Included from BlogAura_Dashboard::dashboard_page(), so $this is the dashboard.
     6 *
     7 * @package BlogAura
     8 */
     9defined('ABSPATH') || exit;
     10
     11// true = included, false = not included, anything else is shown as text.
     12$blogaura_features = array(
     13    __('General Features', 'blogaura') => array(
     14        array('Hook For Developers', true, true),
     15        array('WooCommerce Compatible', true, true),
     16        array('Gutenberg Compatible', true, true),
     17        array('Elementor Compatible', true, true),
     18        array('Dark Mode', false, true),
     19        array('Typography(Font Size, Font Family, Font Weight,...)', false, true),
     20        array('Styling Options', 'Limited', true),
     21        array('Background Options', 'Limited', true),
     22        array('Pre Built Demos', 1, 2),
     23    ),
     24    __('Colors', 'blogaura') => array(
     25        array('Background Color', true, true),
     26        array('Primary Color', false, true),
     27        array('Heading Colors', false, true),
     28        array('Element Colors', false, true),
     29        array('Link Color', false, true),
     30        array('Category Colors', true, true),
     31    ),
     32    __('Header Features', 'blogaura') => array(
     33        array('Site Identity Customization', 'Limited', true),
     34        array('Header Layouts', 2, 6),
     35        array('Sticky Header', true, true),
     36        array('Date and Time', true, true),
     37        array('News Ticker', 'Limited', true),
     38        array('Offcanvas Widget Area', false, true),
     39        array('Top Bar Navigation', false, true),
     40    ),
     41    __('WooCommerce', 'blogaura') => array(
     42        array('Advanced WooCommerce Support', false, true),
     43        array('WooCommerce Product Page Sidebar', true, true),
     44    ),
     45    __('Container Layout', 'blogaura') => array(
     46        array('Boxed', false, true),
     47        array('Left Sidebar', true, true),
     48        array('Right Sidebar', true, true),
     49        array('No Sidebar', true, true),
     50    ),
     51    __('Blog', 'blogaura') => array(
     52        array('Archive Layout', 3, 5),
     53        array('Post Format Support', false, true),
     54        array('Sticky Sidebar', true, true),
     55        array('Excerpt', true, true),
     56        array('Excerpt Length', true, true),
     57        array('Excerpt Line Limit', true, true),
     58        array('Read More Text', false, true),
     59        array('Infinite Scroll', true, true),
     60        array('Social Share Button', false, true),
     61    ),
     62    __('Content', 'blogaura') => array(
     63        array('Author Info Area', true, true),
     64        array('Social Media Icons on Author Info Area', false, true),
     65        array('Post Navigation Style', 1, 3),
     66        array('Related Posts', true, true),
     67        array('Related Author Posts', false, true),
     68        array('Read Time', false, true),
     69        array('Post Date Format', 1, 2),
     70        array('Sticky Sidebar', true, true),
     71        array('Social Share Button', false, true),
     72        array('Fixed Next/Prev Posts', true, true),
     73    ),
     74    __('Footer', 'blogaura') => array(
     75        array('Footer Column Layout', 7, 9),
     76        array('Background Color', false, true),
     77        array('Background Image', false, true),
     78        array('Scroll To Top Button', true, true),
     79        array('Reading Progress Indicator', true, true),
     80        array('Footer Widgets Area', true, true),
     81        array('Remove Copyright Theme Credit', false, true),
     82    ),
     83    __('Additional', 'blogaura') => array(
     84        array('Schema Markup', false, true),
     85        array('Social Share Icons', false, 3),
     86        array('Newsletter Popup Model Box', false, true),
     87    ),
     88    __('API Integrations', 'blogaura') => array(
     89        array('OpenWeatherMap API Integration', false, true),
     90        array('GoogleMaps API Integration', false, true),
     91        array('Exchange Rate API Integration', false, true),
     92    ),
     93    __('Widgets', 'blogaura') => array(
     94        array('Widget Areas', 20, '25+'),
     95    ),
     96    __('Theme Widgets', 'blogaura') => array(
     97        array('BlogAura: Advertisement Widget', false, true),
     98        array('BlogAura: Instagram Widget', false, true),
     99        array('BlogAura: Author Widget', true, true),
     100        array('BlogAura: CTA', true, true),
     101        array('BlogAura: Carousel Posts', true, true),
     102        array('BlogAura: Categories', true, true),
     103        array('BlogAura: Grid Posts', true, true),
     104        array('BlogAura: Image Widget', true, true),
     105        array('BlogAura: Mailchimp', true, true),
     106        array('BlogAura: Metro Post', true, true),
     107        array('BlogAura: Recent Posts', true, true),
     108        array('BlogAura: Currency Exchange', false, true),
     109        array('BlogAura: Google Maps', false, true),
     110        array('BlogAura: Weather', false, true),
     111        array('BlogAura: Slider Posts', true, true),
     112        array('BlogAura: Social Menu', true, true),
     113        array('BlogAura: Tab Posts', true, true),
     114        array('BlogAura: Youtube Video', true, true),
     115    ),
     116    __('Premium Elementor Widgets', 'blogaura') => array(
     117        array('Slider', false, true),
     118    ),
     119    __('Widget Blocks', 'blogaura') => array(
     120        array('Block Style 1', true, true),
     121        array('Block Style 2', true, true),
     122        array('Block Style 3', true, true),
     123        array('Block Style 4', true, true),
     124        array('Block Style 5', true, true),
     125        array('Block Style 6', false, true),
     126        array('Block Style 7', false, true),
     127        array('Block Style 8', false, true),
     128        array('Block Style 9', false, true),
     129        array('Block Style 10', false, true),
     130    ),
     131    __('Widget Grid', 'blogaura') => array(
     132        array('Grid Style 1', true, true),
     133        array('Grid Style 2', true, true),
     134        array('Grid Style 3', true, true),
     135        array('Grid Style 4', true, true),
     136        array('Grid Style 5', true, true),
     137        array('Grid Style 6', false, true),
     138        array('Grid Style 7', false, true),
     139        array('Grid Style 8', false, true),
     140        array('Grid Style 9', false, true),
     141        array('Grid Style 10', false, true),
     142    ),
     143    __('Pro Only', 'blogaura') => array(
     144        array('Whitelist Theme Credit', false, true),
     145        array('Webmasters Tools', false, true),
     146        array('Meta Open Graph', false, true),
     147        array('Twitter Summary Card', false, true),
     148    ),
     149    __('Support', 'blogaura') => array(
     150        array('Support', 'WordPress.org Forum', 'Personalized Support through Email/Ticket System'),
     151    ),
     152);
     153
     154$blogaura_cell = static function ($value) {
     155    if (true === $value) {
     156        echo '<span class="blogaura-yes">';
     157        BlogAura_Admin::the_icon('check', 16);
     158        echo '<span class="screen-reader-text">' . esc_html__('Included', 'blogaura') . '</span></span>';
     159    } elseif (false === $value) {
     160        echo '<span class="blogaura-no" aria-hidden="true">—</span><span class="screen-reader-text">' . esc_html__('Not included', 'blogaura') . '</span>';
     161    } else {
     162        echo esc_html($value);
     163    }
     164};
    9165?>
    10 <div class="blogaura-dashboard-content free-vs-pro-page">
    11     <table class="blogaura-compare-table">
    12         <tbody>
    13         <?php
    14         $show_free_pro = true; // Set to false to hide the Free/Pro column
    15         $features = array(
    16             'General Features' => array(
    17                 'showFreePro' => true,
    18                 'items' => array(
    19                     array('Hook For Developers', $tick_mark, $tick_mark),
    20                     array('WooCommerce Compatible', $tick_mark, $tick_mark),
    21                     array('Gutenberg Compatible', $tick_mark, $tick_mark),
    22                     array('Elementor Compatible', $tick_mark, $tick_mark),
    23                     array('Dark Mode', $cross_mark, $tick_mark),
    24                     array('Typography(Font Size, Font Family, Font Weight,...)', $cross_mark, $tick_mark),
    25                     array('Styling Options', 'Limited', $tick_mark),
    26                     array('Background Options', 'Limited', $tick_mark),
    27                     array('Pre Built Demos', 1, 2),
    28                 ),
    29             ),
    30             'Colors' => array(
    31                 'showFreePro' => true,
    32                 'items' => array(
    33                     array('Background Color', $tick_mark, $tick_mark),
    34                     array('Primary Color', $cross_mark, $tick_mark),
    35                     array('Heading Colors', $cross_mark, $tick_mark),
    36                     array('Element Colors', $cross_mark, $tick_mark),
    37                     array('Link Color', $cross_mark, $tick_mark),
    38                     array('Category Colors', $tick_mark, $tick_mark),
    39                 ),
    40             ),
    41             'Header Features' => array(
    42                 'showFreePro' => true,
    43                 'items' => array(
    44                     array('Site Identity Customization', 'Limited', $tick_mark),
    45                     array('Header Layouts', 2, 6),
    46                     array('Sticky Header', $tick_mark, $tick_mark),
    47                     array('Date and Time', $tick_mark, $tick_mark),
    48                     array('News Ticker', 'Limited', $tick_mark),
    49                     array('Offcanvas Widget Area', $cross_mark, $tick_mark),
    50                     array('Top Bar Navigation', $cross_mark, $tick_mark),
    51                 ),
    52             ),
    53             'WooCommerce' => array(
    54                 'showFreePro' => true,
    55                 'items' => array(
    56                     array('Advanced WooCommerce Support',  $cross_mark, $tick_mark),
    57                     array('WooCommerce Product Page Sidebar', $tick_mark, $tick_mark),
    58                     array('WooCommerce Product Page Sidebar', $tick_mark, $tick_mark),
    59                 ),
    60             ),
    61             'Container Layout' => array(
    62                 'showFreePro' => true,
    63                 'items' => array(
    64                     array('Boxed', $cross_mark, $tick_mark),
    65                     array('Left Sidebar', $tick_mark, $tick_mark),
    66                     array('Right Sidebar', $tick_mark, $tick_mark),
    67                     array('No Sidebar', $tick_mark, $tick_mark),
    68                 ),
    69             ),
    70             'Blog' => array(
    71                 'showFreePro' => true,
    72                 'items' => array(
    73                     array('Archive Layout', 3, 5),
    74                     array('Post Format Support', $cross_mark, $tick_mark),
    75                     array('Sticky Sidebar', $tick_mark, $tick_mark),
    76                     array('Excerpt', $tick_mark, $tick_mark),
    77                     array('Excerpt Length', $tick_mark, $tick_mark),
    78                     array('Excerpt Line Limit', $tick_mark, $tick_mark),
    79                     array('Read More Text', $cross_mark, $tick_mark),
    80                     array('Infinite Scroll', $tick_mark, $tick_mark),
    81                     array('Social Share Button', $cross_mark, $tick_mark),
    82                 ),
    83             ),
    84             'Content' => array(
    85                 'showFreePro' => true,
    86                 'items' => array(
    87                     array('Author Info Area', $tick_mark, $tick_mark),
    88                     array('Social Media Icons on Author Info Area', $cross_mark, $tick_mark),
    89                     array('Post Navigation Style', 1, 3),
    90                     array('Related Posts', $tick_mark, $tick_mark),
    91                     array('Related Author Posts', $cross_mark, $tick_mark),
    92                     array('Read Time', $cross_mark, $tick_mark),
    93                     array('Post Date Format', 1, 2),
    94                     array('Sticky Sidebar', $tick_mark, $tick_mark),
    95                     array('Social Share Button', $cross_mark, $tick_mark),
    96                     array('Fixed Next/Prev Posts', $tick_mark, $tick_mark),
    97                 ),
    98             ),
    99             'Footer' => array(
    100                 'showFreePro' => true,
    101                 'items' => array(
    102                     array('Footer Column Layout', 7, 9),
    103                     array('Background Color', $cross_mark, $tick_mark),
    104                     array('Background Image', $cross_mark, $tick_mark),
    105                     array('Scroll To Top Button', $tick_mark, $tick_mark),
    106                     array('Reading Progress Indicator', $tick_mark, $tick_mark),
    107                     array('Footer Widgets Area', $tick_mark, $tick_mark),
    108                     array('Remove Copyright Theme Credit', $cross_mark, $tick_mark),
    109                 ),
    110             ),
    111             'Additional' => array(
    112                 'showFreePro' => true,
    113                 'items' => array(
    114                     array('Schema Markup', $cross_mark, $tick_mark),
    115                     array('Social Share Icons', $cross_mark, 3),
    116                     array('Newsletter Popup Model Box', $cross_mark, $tick_mark),
    117                 ),
    118             ),
    119             'API Integrations' => array(
    120                 'showFreePro' => true,
    121                 'items' => array(
    122                     array('OpenWeatherMap API Integration', $cross_mark, $tick_mark),
    123                     array('GoogleMaps API Integration', $cross_mark, $tick_mark),
    124                     array('Exchange Rate API Integration', $cross_mark, $tick_mark),
    125                 ),
    126             ),
    127             'Widgets' => array(
    128                 'showFreePro' => true,
    129                 'items' => array(
    130                     array('Widget Areas', 20, '25+'),
    131                 ),
    132             ),
    133             'TG Widgets' => array(
    134                 'showFreePro' => true,
    135                 'items' => array(
    136                     array('BlogAura: Advertisement Widget', $cross_mark, $tick_mark),
    137                     array('BlogAura: Instagram Widget', $cross_mark, $tick_mark),
    138                     array('BlogAura: Author Widget', $tick_mark, $tick_mark),
    139                     array('BlogAura: CTA', $tick_mark, $tick_mark),
    140                     array('BlogAura: Carousel Posts', $tick_mark, $tick_mark),
    141                     array('BlogAura: Categories', $tick_mark, $tick_mark),
    142                     array('BlogAura: Grid Posts', $tick_mark, $tick_mark),
    143                     array('BlogAura: Image Widget', $tick_mark, $tick_mark),
    144                     array('BlogAura: Mailchimp', $tick_mark, $tick_mark),
    145                     array('BlogAura: Metro Post', $tick_mark, $tick_mark),
    146                     array('BlogAura: Recent Posts', $tick_mark, $tick_mark),
    147                     array('BlogAura: Currency Exchange', $cross_mark, $tick_mark),
    148                     array('BlogAura: Google Maps', $cross_mark, $tick_mark),
    149                     array('BlogAura: Weather', $cross_mark, $tick_mark),
    150                     array('BlogAura: Slider Posts', $tick_mark, $tick_mark),
    151                     array('BlogAura: Social Menu', $tick_mark, $tick_mark),
    152                     array('BlogAura: Tab Posts', $tick_mark, $tick_mark),
    153                     array('BlogAura: Youtube Video', $tick_mark, $tick_mark),
    154                 ),
    155             ),
    156             'Premium Elementor Widgets' => array(
    157                 'showFreePro' => true,
    158                 'items' => array(
    159                     array('Slider', $cross_mark, $tick_mark),
    160                 ),
    161             ),
    162             'BlogAura Widget Blocks' => array(
    163                 'showFreePro' => true,
    164                 'items' => array(
    165                     array('Block Style 1', $tick_mark, $tick_mark),
    166                     array('Block Style 2', $tick_mark, $tick_mark),
    167                     array('Block Style 3', $tick_mark, $tick_mark),
    168                     array('Block Style 4', $tick_mark, $tick_mark),
    169                     array('Block Style 5', $tick_mark, $tick_mark),
    170                     array('Block Style 6', $cross_mark, $tick_mark),
    171                     array('Block Style 7', $cross_mark, $tick_mark),
    172                     array('Block Style 8', $cross_mark, $tick_mark),
    173                     array('Block Style 9', $cross_mark, $tick_mark),
    174                     array('Block Style 10', $cross_mark, $tick_mark),
    175                 ),
    176             ),
    177             'BlogAura Widget Grid' => array(
    178                 'showFreePro' => true,
    179                 'items' => array(
    180                     array('Grid Style 1', $tick_mark, $tick_mark),
    181                     array('Grid Style 2', $tick_mark, $tick_mark),
    182                     array('Grid Style 3', $tick_mark, $tick_mark),
    183                     array('Grid Style 4', $tick_mark, $tick_mark),
    184                     array('Grid Style 5', $tick_mark, $tick_mark),
    185                     array('Grid Style 6', $cross_mark, $tick_mark),
    186                     array('Grid Style 7', $cross_mark, $tick_mark),
    187                     array('Grid Style 8', $cross_mark, $tick_mark),
    188                     array('Grid Style 9', $cross_mark, $tick_mark),
    189                     array('Grid Style 10', $cross_mark, $tick_mark),
    190                 ),
    191             ),
    192             'BlogAura Premium Only' => array(
    193                 'showFreePro' => true,
    194                 'items' => array(
    195                     array('Whitelist Theme Credit', $cross_mark, $tick_mark),
    196                     array('Webmasters Tools', $cross_mark, $tick_mark),
    197                     array('Meta Open Graph', $cross_mark, $tick_mark),
    198                     array('Twitter Summary Card', $cross_mark, $tick_mark),
    199                 ),
    200             ),
    201             'BlogAura Support Widgets' => array(
    202                 'showFreePro' => true,
    203                 'items' => array(
    204                     array('Support', 'WordPress.org Forum', 'Personalized Support through Email/Ticket System'),
    205                 ),
    206             ),
    207         );
    208         foreach ($features as $category => $feature) :
    209             $show_free_pro = $feature['showFreePro'];
    210             ?>
    211             <tr class="compare-table-head">
    212                 <td><?php $category; ?></td>
    213                 <?php if ($show_free_pro) : ?>
    214                     <td><?php esc_html_e('Free', 'blogaura'); ?></td>
    215                     <td><?php esc_html_e('Pro', 'blogaura'); ?></td>
    216                 <?php endif; ?>
    217             </tr>
    218             <?php foreach ($feature['items'] as $item) : ?>
    219             <tr>
    220                 <td><?php echo esc_html($item[0]); ?></td>
    221                 <td><?php echo $item[1]; ?></td>
    222                 <td><?php echo $item[2]; ?></td>
    223             </tr>
    224         <?php endforeach; ?>
    225         <?php endforeach; ?>
    226         </tbody>
    227     </table>
    228     <div class="postbox blogaura-postbox-upsell">
    229         <div class="icon">
    230             <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="150px" height="150px">
    231                 <path fill="#c7ede6"
    232                       d="M87.215,56.71C88.35,54.555,89,52.105,89,49.5c0-6.621-4.159-12.257-10.001-14.478C78.999,35.015,79,35.008,79,35c0-11.598-9.402-21-21-21c-9.784,0-17.981,6.701-20.313,15.757C36.211,29.272,34.638,29,33,29c-7.692,0-14.023,5.793-14.89,13.252C12.906,43.353,9,47.969,9,53.5C9,59.851,14.149,65,20.5,65c0.177,0,0.352-0.012,0.526-0.022C21.022,65.153,21,65.324,21,65.5C21,76.822,30.178,86,41.5,86c6.437,0,12.175-2.972,15.934-7.614C59.612,80.611,62.64,82,66,82c4.65,0,8.674-2.65,10.666-6.518C77.718,75.817,78.837,76,80,76c6.075,0,11-4.925,11-11C91,61.689,89.53,58.727,87.215,56.71z"/>
    233                 <path fill="#fff"
    234                       d="M15.5 51h-10C5.224 51 5 50.776 5 50.5S5.224 50 5.5 50h10c.276 0 .5.224.5.5S15.777 51 15.5 51zM18.5 51h-1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1c.276 0 .5.224.5.5S18.777 51 18.5 51zM23.491 53H14.5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h8.991c.276 0 .5.224.5.5S23.767 53 23.491 53zM12.5 53h-1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1c.276 0 .5.224.5.5S12.777 53 12.5 53zM9.5 53h-2C7.224 53 7 52.776 7 52.5S7.224 52 7.5 52h2c.276 0 .5.224.5.5S9.777 53 9.5 53zM15.5 55h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S15.776 55 15.5 55zM18.5 46c-.177 0-.823 0-1 0-.276 0-.5.224-.5.5s.224.5.5.5c.177 0 .823 0 1 0 .276 0 .5-.224.5-.5S18.776 46 18.5 46zM18.5 48c-.177 0-4.823 0-5 0-.276 0-.5.224-.5.5s.224.5.5.5c.177 0 4.823 0 5 0 .276 0 .5-.224.5-.5S18.776 48 18.5 48zM23.5 50c-.177 0-2.823 0-3 0-.276 0-.5.224-.5.5s.224.5.5.5c.177 0 2.823 0 3 0 .276 0 .5-.224.5-.5S23.776 50 23.5 50zM72.5 24h-10c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h10c.276 0 .5.224.5.5S72.776 24 72.5 24zM76.5 24h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S76.776 24 76.5 24zM81.5 26h-10c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h10c.276 0 .5.224.5.5S81.777 26 81.5 26zM69.5 26h-1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1c.276 0 .5.224.5.5S69.776 26 69.5 26zM66.47 26H64.5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1.97c.276 0 .5.224.5.5S66.746 26 66.47 26zM75.5 22h-5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h5c.276 0 .5.224.5.5S75.777 22 75.5 22zM72.5 28h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S72.776 28 72.5 28z"/>
    235                 <path fill="#508ecc"
    236                       d="M51.275,24.017C43.207,24.397,37,31.347,37,39.424V47h6v-7.692c0-4.794,3.617-8.979,8.401-9.289C56.643,29.68,61,33.831,61,39c0,1.657,1.343,3,3,3s3-1.343,3-3C67,30.475,59.889,23.611,51.275,24.017z"/>
    237                 <path fill="#472b29"
    238                       d="M52,24c-0.241,0-0.482,0.006-0.725,0.017C43.207,24.397,37,31.347,37,39.424V47h6v-7.692c0-4.794,3.617-8.979,8.401-9.289C51.602,30.006,51.802,30,52,30c4.971,0,9,4.029,9,9c0,1.657,1.343,3,3,3s3-1.343,3-3C67,30.716,60.284,24,52,24z M64,40.6c-0.882,0-1.6-0.718-1.6-1.6c0-5.735-4.665-10.4-10.4-10.4c-0.228,0-0.458,0.007-0.69,0.022c-5.445,0.353-9.711,5.046-9.711,10.686V45.6h-3.2v-6.176c0-7.513,5.684-13.666,12.941-14.008C51.562,25.405,51.781,25.4,52,25.4c7.499,0,13.6,6.101,13.6,13.6C65.6,39.882,64.882,40.6,64,40.6z"/>
    239                 <path fill="#7dafe2"
    240                       d="M67.6,45.5H36.4c-2.154,0-3.9,1.727-3.9,3.857v13.5c0,5.326,4.365,9.643,9.75,9.643h19.5c5.385,0,9.75-4.317,9.75-9.643v-13.5C71.5,47.227,69.754,45.5,67.6,45.5z"/>
    241                 <path fill="#f1bc19" d="M33 50H71V56.5H33z"/>
    242                 <path fill="#508ecc"
    243                       d="M54,62c0-1.105-0.895-2-2-2s-2,0.895-2,2c0,0.653,0.318,1.227,0.801,1.592L50,68h4l-0.801-4.408C53.682,63.227,54,62.653,54,62z"/>
    244                 <path fill="#472b29"
    245                       d="M68,45H36c-2.209,0-4,1.791-4,4v14c0,5.523,4.477,10,10,10h20c5.523,0,10-4.477,10-10V49C72,46.791,70.209,45,68,45z M70.6,63c0,4.742-3.858,8.6-8.6,8.6H42c-4.742,0-8.6-3.858-8.6-8.6V49c0-1.434,1.166-2.6,2.6-2.6h32c1.434,0,2.6,1.166,2.6,2.6V63z"/>
    246                 <path fill="#472b29"
    247                       d="M71 50h-3.5c-.276 0-.5.224-.5.5s.224.5.5.5H71c.276 0 .5-.224.5-.5S71.276 50 71 50zM64.5 51h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S64.776 51 64.5 51zM59.5 51H33c-.276 0-.5-.224-.5-.5S32.724 50 33 50h26.5c.276 0 .5.224.5.5S59.776 51 59.5 51zM71 57H33c-.276 0-.5-.224-.5-.5S32.724 56 33 56h38c.276 0 .5.224.5.5S71.276 57 71 57zM52 60.35c.91 0 1.65.74 1.65 1.65 0 .517-.241.995-.662 1.313-.106.08-.157.212-.134.342l.726 3.995h-3.161l.726-3.995c.024-.13-.028-.262-.134-.342-.42-.318-.661-.796-.661-1.313C50.35 61.09 51.09 60.35 52 60.35M52 60c-1.105 0-2 .895-2 2 0 .653.318 1.227.801 1.592L50 68h4l-.801-4.408C53.682 63.227 54 62.653 54 62 54 60.895 53.105 60 52 60L52 60z"/>
    248                 <path fill="#472b29" d="M31.441 53.322H38.771V53.673H31.441z"
    249                       transform="rotate(-54.984 35.106 53.497)"/>
    250                 <path fill="#472b29" d="M35.231 53.322H42.561V53.673H35.231z"
    251                       transform="rotate(-54.984 38.896 53.497)"/>
    252                 <path fill="#472b29" d="M38.94 53.322H46.269999999999996V53.673H38.94z"
    253                       transform="rotate(-54.984 42.606 53.497)"/>
    254                 <path fill="#472b29" d="M42.73 53.321H50.059999999999995V53.672H42.73z"
    255                       transform="rotate(-54.984 46.395 53.497)"/>
    256                 <path fill="#472b29" d="M46.44 53.321H53.769999999999996V53.672H46.44z"
    257                       transform="rotate(-54.984 50.105 53.497)"/>
    258                 <path fill="#472b29" d="M50.23 53.321H57.559999999999995V53.672H50.23z"
    259                       transform="rotate(-54.984 53.895 53.496)"/>
    260                 <path fill="#472b29" d="M53.94 53.321H61.269999999999996V53.672H53.94z"
    261                       transform="rotate(-54.984 57.605 53.496)"/>
    262                 <path fill="#472b29" d="M57.73 53.321H65.06V53.672H57.73z" transform="rotate(-54.984 61.395 53.496)"/>
    263                 <path fill="#472b29" d="M61.44 53.321H68.77V53.672H61.44z" transform="rotate(-54.984 65.105 53.496)"/>
    264                 <path fill="#472b29" d="M65.23 53.321H72.56V53.672H65.23z" transform="rotate(-54.984 68.895 53.496)"/>
    265                 <path fill="#fdfcef"
    266                       d="M87,67.5c-0.187,0-0.364,0.033-0.545,0.055C86.234,65.835,84.781,64.5,83,64.5c-1.087,0-2.045,0.505-2.687,1.282c0.11-0.412,0.187-0.836,0.187-1.282c0-2.761-2.239-5-5-5c-2.671,0-4.833,2.1-4.973,4.736C69.703,63.186,68.438,62.5,67,62.5c-2.485,0-4.5,2.015-4.5,4.5c0,0.187,0.033,0.364,0.055,0.545C60.282,67.771,58.5,69.667,58.5,72c0,2.485,2.015,4.5,4.5,4.5s7.125,0,7.125,0H77.5c0,0,7.015,0,9.5,0s4.5-2.015,4.5-4.5S89.485,67.5,87,67.5z"/>
    267                 <path fill="#472b29"
    268                       d="M87,67c-0.048,0-0.095,0.002-0.142,0.005C86.411,65.261,84.831,64,83,64c-0.71,0-1.398,0.192-2,0.547c0-0.016,0-0.031,0-0.047c0-3.033-2.467-5.5-5.5-5.5c-2.555,0-4.719,1.76-5.317,4.164C69.293,62.416,68.176,62,67,62c-2.757,0-5,2.243-5,5c0,0.041,0.001,0.082,0.003,0.123C59.689,67.587,58,69.603,58,72c0,2.757,2.243,5,5,5h6.5c0.276,0,0.5-0.224,0.5-0.5S69.776,76,69.5,76H63c-2.206,0-4-1.794-4-4c0-2.051,1.549-3.753,3.605-3.958c0.133-0.013,0.256-0.08,0.34-0.185s0.122-0.239,0.106-0.373l-0.019-0.141C63.017,67.23,63,67.117,63,67c0-2.206,1.794-4,4-4c1.221,0,2.362,0.563,3.133,1.545c0.096,0.123,0.242,0.192,0.392,0.192c0.051,0,0.102-0.008,0.152-0.024c0.199-0.063,0.338-0.242,0.349-0.45C71.153,61.872,73.119,60,75.5,60c2.481,0,4.5,2.019,4.5,4.5c0,0.352-0.054,0.718-0.169,1.153c-0.06,0.227,0.045,0.466,0.254,0.573c0.072,0.038,0.15,0.056,0.228,0.056c0.145,0,0.288-0.064,0.386-0.182C81.277,65.401,82.115,65,83,65c1.496,0,2.768,1.125,2.959,2.618c0.033,0.252,0.249,0.437,0.495,0.437c0.021,0,0.041-0.001,0.062-0.004l0.141-0.019C86.77,68.017,86.883,68,87,68c2.206,0,4,1.794,4,4s-1.794,4-4,4H72.5c-0.276,0-0.5,0.224-0.5,0.5s0.224,0.5,0.5,0.5H87c2.757,0,5-2.243,5-5S89.757,67,87,67z"/>
    269                 <path fill="#472b29"
    270                       d="M84.062 70c-.188 0-.381.022-.584.068C83.323 68.897 82.327 68 81.125 68c-.426 0-.845.119-1.212.341C79.609 66.999 78.403 66 77 66c-.256 0-.517.04-.819.126-.133.038-.21.176-.172.309.032.109.13.182.239.182.023 0 .047-.003.07-.01C76.575 66.534 76.792 66.5 77 66.5c1.288 0 2.377 1.012 2.481 2.305.007.095.067.177.155.212.03.013.061.019.093.019.059 0 .118-.022.165-.063.346-.305.784-.473 1.231-.473 1.034 0 1.875.841 1.875 1.875 0 .08.038.162.102.208.046.034.101.054.156.054.022 0 .045-.003.067-.01.268-.085.509-.127.738-.127 1.268 0 2.33.997 2.419 2.268C86.491 72.899 86.601 73 86.731 73c.006 0 .012 0 .018 0 .137-.01.241-.13.231-.268C86.873 71.2 85.591 70 84.062 70zM63.117 67.5c1.326 0 2.508.897 2.874 2.182.038.133-.039.271-.172.309C65.795 69.997 65.772 70 65.75 70c-.109 0-.209-.072-.24-.182C65.205 68.748 64.221 68 63.117 68c-.117 0-.23.014-.342.029-.012.002-.023.003-.035.003-.121 0-.229-.092-.246-.217-.019-.137.077-.263.214-.281C62.842 67.516 62.978 67.5 63.117 67.5L63.117 67.5z"/>
    271                 <path fill="#fdfcef"
    272                       d="M36.445,60.545C36.473,60.366,36.5,60.187,36.5,60c0-1.933-1.567-3.5-3.5-3.5c-1.032,0-1.95,0.455-2.59,1.165c-0.384-1.808-1.987-3.165-3.91-3.165c-2.209,0-4,1.791-4,4c0,0.191,0.03,0.374,0.056,0.558C22.128,58.714,21.592,58.5,21,58.5c-1.228,0-2.245,0.887-2.455,2.055C18.366,60.527,18.187,60.5,18,60.5c-1.933,0-3.5,1.567-3.5,3.5s1.567,3.5,3.5,3.5s7.5,0,7.5,0h7c0,0,1.567,0,3.5,0s3.5-1.567,3.5-3.5C39.5,62.219,38.165,60.766,36.445,60.545z"/>
    273                 <path fill="#472b29"
    274                       d="M34.25 63C34.112 63 34 62.888 34 62.75c0-1.223.995-2.218 2.218-2.218.034.009.737-.001 1.244.136.133.036.212.173.176.306-.036.134-.173.213-.306.176-.444-.12-1.1-.12-1.113-.118-.948 0-1.719.771-1.719 1.718C34.5 62.888 34.388 63 34.25 63zM27.5 67A.5.5 0 1 0 27.5 68 .5.5 0 1 0 27.5 67z"/>
    275                 <path fill="#472b29"
    276                       d="M36.996,60.142C36.999,60.095,37,60.048,37,60c0-2.206-1.794-4-4-4c-0.845,0-1.666,0.276-2.347,0.774C29.966,55.127,28.331,54,26.5,54c-2.374,0-4.324,1.847-4.489,4.18C21.689,58.061,21.349,58,21,58c-1.289,0-2.412,0.82-2.826,2.006C18.116,60.002,18.059,60,18,60c-2.206,0-4,1.794-4,4s1.794,4,4,4h7.5c0.276,0,0.5-0.224,0.5-0.5S25.776,67,25.5,67H18c-1.654,0-3-1.346-3-3s1.346-3,3-3c0.16,0,0.314,0.025,0.468,0.049c0.273,0.041,0.521-0.138,0.569-0.405C19.208,59.691,20.034,59,21,59c0.449,0,0.878,0.155,1.243,0.448c0.16,0.128,0.377,0.112,0.556,0.01s0.271-0.337,0.242-0.54C23.021,58.78,23,58.643,23,58.5c0-1.93,1.57-3.5,3.5-3.5c1.641,0,3.08,1.165,3.421,2.769c0.039,0.184,0.178,0.33,0.36,0.379c0.179,0.05,0.375-0.009,0.5-0.148c0.581-0.645,1.369-1,2.219-1c1.654,0,3,1.346,3,3c0,0.16-0.025,0.314-0.048,0.468c-0.021,0.133,0.013,0.269,0.094,0.377c0.081,0.108,0.202,0.178,0.336,0.196C37.875,61.232,39,62.504,39,64c0,1.654-1.346,3-3,3h-3.5c-0.276,0-0.5,0.224-0.5,0.5s0.224,0.5,0.5,0.5H36c2.206,0,4-1.794,4-4C40,62.169,38.739,60.59,36.996,60.142z"/>
    277                 <path fill="#472b29"
    278                       d="M30.5,67c-0.159,0-0.841,0-1,0c-0.276,0-0.5,0.224-0.5,0.5s0.224,0.5,0.5,0.5c0.159,0,0.841,0,1,0c0.276,0,0.5-0.224,0.5-0.5S30.776,67,30.5,67z"/>
    279             </svg>
    280         </div>
    281         <h3><?php esc_html_e('Upgrade Now', 'blogaura'); ?></h3>
    282         <p><?php echo __('Access all premium extensions, features, and upcoming updates right away by <br> upgrading to the Pro version.', 'blogaura'); ?></p>
    283         <a href="<?php echo esc_url($this->theme_url); ?>#choose-pricing-plan" class="button button-secondary dashboard-button dashboard-button-primary" target="_blank">
    284             <?php esc_html_e('Get BlogAura Pro Now', 'blogaura'); ?>
    285         </a>
    286     </div>
     166<div class="blogaura-stack">
     167    <section class="blogaura-card blogaura-compare-wrap" aria-labelledby="blogaura-compare-title">
     168        <div class="blogaura-compare-head">
     169            <div>
     170                <h2 id="blogaura-compare-title"><?php esc_html_e('Free vs Pro', 'blogaura'); ?></h2>
     171                <p><?php echo esc_html(sprintf(/* translators: %s: theme name. */ __('Everything in %s, plus the extras in Pro.', 'blogaura'), $this->theme()->get('Name'))); ?></p>
     172            </div>
     173            <a class="blogaura-upgrade-button" href="<?php echo esc_url($this->theme_url . '#choose-pricing-plan'); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('crown', 16); ?><?php esc_html_e('Upgrade to Pro', 'blogaura'); ?></a>
     174        </div>
     175        <div class="blogaura-compare-scroll">
     176            <table class="blogaura-compare">
     177                <thead>
     178                    <tr>
     179                        <th scope="col"><?php esc_html_e('Feature', 'blogaura'); ?></th>
     180                        <th scope="col"><?php esc_html_e('Free', 'blogaura'); ?></th>
     181                        <th scope="col"><?php esc_html_e('Pro', 'blogaura'); ?></th>
     182                    </tr>
     183                </thead>
     184                <?php foreach ($blogaura_features as $blogaura_group => $blogaura_rows) : ?>
     185                    <tbody>
     186                        <tr class="blogaura-compare__group">
     187                            <th scope="colgroup" colspan="3"><?php echo esc_html($blogaura_group); ?></th>
     188                        </tr>
     189                        <?php foreach ($blogaura_rows as $blogaura_row) : ?>
     190                            <tr>
     191                                <th scope="row"><?php echo esc_html($blogaura_row[0]); ?></th>
     192                                <td><?php $blogaura_cell($blogaura_row[1]); ?></td>
     193                                <td><?php $blogaura_cell($blogaura_row[2]); ?></td>
     194                            </tr>
     195                        <?php endforeach; ?>
     196                    </tbody>
     197                <?php endforeach; ?>
     198            </table>
     199        </div>
     200    </section>
     201
     202    <section class="blogaura-upgrade" aria-labelledby="blogaura-upgrade-title">
     203        <div class="blogaura-upgrade__text">
     204            <span class="blogaura-upgrade__eyebrow"><?php BlogAura_Admin::the_icon('crown', 16); ?><?php echo esc_html(sprintf(/* translators: %s: theme name. */ __('%s Pro', 'blogaura'), $this->theme()->get('Name'))); ?></span>
     205            <h2 id="blogaura-upgrade-title"><?php esc_html_e('Unlock every feature in the comparison above', 'blogaura'); ?></h2>
     206            <ul>
     207                <li><?php BlogAura_Admin::the_icon('check', 16); ?><?php esc_html_e('Dark mode', 'blogaura'); ?></li>
     208                <li><?php BlogAura_Admin::the_icon('check', 16); ?><?php esc_html_e('Font size, family and weight controls', 'blogaura'); ?></li>
     209                <li><?php BlogAura_Admin::the_icon('check', 16); ?><?php esc_html_e('Advanced colour options', 'blogaura'); ?></li>
     210                <li><?php BlogAura_Admin::the_icon('check', 16); ?><?php esc_html_e('Accessibility toolbar for your visitors', 'blogaura'); ?></li>
     211                <li><?php BlogAura_Admin::the_icon('check', 16); ?><?php esc_html_e('Our own SEO plugin, included', 'blogaura'); ?></li>
     212                <li><?php BlogAura_Admin::the_icon('check', 16); ?><?php esc_html_e('Personal support by email and tickets', 'blogaura'); ?></li>
     213            </ul>
     214        </div>
     215        <div class="blogaura-upgrade__actions">
     216            <a class="blogaura-upgrade-button blogaura-upgrade-button--large" href="<?php echo esc_url($this->theme_url . '#choose-pricing-plan'); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('crown', 18); ?><?php esc_html_e('Upgrade to Pro', 'blogaura'); ?></a>
     217            <a class="blogaura-link-strong" href="<?php echo esc_url($this->pro_demo_url); ?>" target="_blank" rel="noopener"><?php esc_html_e('View the Pro demo', 'blogaura'); ?> <span aria-hidden="true">→</span></a>
     218        </div>
     219    </section>
    287220</div>
  • blogaura/1.1.5/inc/admin/dashboard/views/help.php

    r312189 r353892  
    11<?php
    2 if (!is_child_theme()) {
    3     $theme = wp_get_theme();
    4 } else {
    5     $theme = wp_get_theme()->parent();
    6 }
    7 $star_icon = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M24,9l-19.655,15l2.821,-8.866l-7.166,-6.134l9.153,0l2.846,-9l2.853,9l9.148,0Zm-4.216,15l-6.361,-4.429l3.872,-2.96l2.489,7.389Z" /></svg>';
     2/**
     3 * Dashboard › Help & support tab.
     4 *
     5 * Included from BlogAura_Dashboard::dashboard_page(), so $this is the dashboard.
     6 *
     7 * @package BlogAura
     8 */
     9defined('ABSPATH') || exit;
     10
     11$blogaura_services = BlogAura_Admin::services();
    812?>
    9 <div class="blogaura-dashboard-content blogaura-help-panel">
    10     <div class="dashboard-content-panel content-panel-lower">
    11         <div class="dashboard-content-left">
    12             <div class="blogaura-support-channels">
    13                 <div class="postbox">
    14                     <svg xmlns="http://www.w3.org/2000/svg" width="33" height="33" viewBox="0 0 33 33" fill="none">
    15                         <path d="M19.833 3.00977H8.49967C7.79243 3.00977 7.11415 3.29072 6.61406 3.79081C6.11396 4.29091 5.83301 4.96919 5.83301 5.67643V27.0098C5.83301 27.717 6.11396 28.3953 6.61406 28.8954C7.11415 29.3955 7.79243 29.6764 8.49967 29.6764H24.4997C25.2069 29.6764 25.8852 29.3955 26.3853 28.8954C26.8854 28.3953 27.1663 27.717 27.1663 27.0098V10.3431L19.833 3.00977Z"
    16                               stroke="#2563EB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
    17                         <path d="M19.1665 3.00977V11.0098H27.1665" stroke="#2563EB" stroke-width="2"
    18                               stroke-linecap="round" stroke-linejoin="round"/>
    19                         <path d="M21.8332 17.6758H11.1665" stroke="#2563EB" stroke-width="2" stroke-linecap="round"
    20                               stroke-linejoin="round"/>
    21                         <path d="M21.8332 23.0098H11.1665" stroke="#2563EB" stroke-width="2" stroke-linecap="round"
    22                               stroke-linejoin="round"/>
    23                         <path d="M13.8332 12.3428H11.1665" stroke="#2563EB" stroke-width="2" stroke-linecap="round"
    24                               stroke-linejoin="round"/>
    25                     </svg>
    26                     <h3><?php esc_html_e('Read Theme Documentation', 'blogaura'); ?></h3>
    27                     <p><?php esc_html_e('Please check out basic documentation for detailed information on how to use BlogAura.', 'blogaura'); ?></p>
     13<div class="blogaura-layout">
     14    <div class="blogaura-layout__main blogaura-stack">
    2815
    29                     <a href="<?php echo esc_url($this->doc_url); ?>" class="button button-secondary dashboard-button dashboard-button-primary" target="_blank">
    30                         <?php esc_html_e('View Now', 'blogaura'); ?>
    31                     </a>
    32                 </div>
    33                 <div class="postbox">
    34                     <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 33 33" fill="none">
    35                         <path d="M19.1667 20.3428V23.0094C19.1667 23.3631 19.0262 23.7022 18.7761 23.9523C18.5261 24.2023 18.187 24.3428 17.8333 24.3428H8.5L4.5 28.3428V15.0094C4.5 14.6558 4.64048 14.3167 4.89052 14.0666C5.14057 13.8166 5.47971 13.6761 5.83333 13.6761H8.5M28.5 19.0094L24.5 15.0094H15.1667C14.813 15.0094 14.4739 14.869 14.2239 14.6189C13.9738 14.3689 13.8333 14.0297 13.8333 13.6761V5.67611C13.8333 5.32248 13.9738 4.98335 14.2239 4.7333C14.4739 4.48325 14.813 4.34277 15.1667 4.34277H27.1667C27.5203 4.34277 27.8594 4.48325 28.1095 4.7333C28.3595 4.98335 28.5 5.32248 28.5 5.67611V19.0094Z" stroke="#2563EB" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
    36                     </svg>
    37                     <h3><?php esc_html_e('Support', 'blogaura'); ?></h3>
    38                     <p><?php esc_html_e('We would be happy to guide you through any issues and queries you have regarding BlogAura!', 'blogaura'); ?></p>
    39 
    40 
    41                     <?php if (!$this->pro_status) { ?>
    42                         <a href="<?php echo esc_url($this->community_url); ?>" class="button button-secondary dashboard-button dashboard-button-primary" target="_blank">
    43                             <?php esc_html_e('Community Support', 'blogaura'); ?>
    44                         </a>
    45                     <?php } else { ?>
    46                         <a href="<?php echo esc_url($this->support_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary" target="_blank">
    47                             <?php esc_html_e('Contact Support', 'blogaura'); ?>
    48                         </a>
    49                     <?php } ?>
    50 
    51                 </div>
    52             </div>
    53             <h2><?php esc_html_e('Join Our Community', 'blogaura'); ?></h2>
    54             <div class="postbox blogaura-postbox-community">
    55                 <div class="community-image">
    56                     <img src="<?php echo esc_url(BLOGAURA_PARENT_URL . '/inc/admin/dashboard/images/facebook.webp'); ?>" alt="<?php esc_attr_e('facebook', 'blogaura'); ?>">
    57                 </div>
    58                 <div class="community-details">
    59                     <h3><?php esc_html_e('Facebook Community', 'blogaura'); ?></h3>
    60                     <p><?php esc_html_e('Join our Facebook haven, where the latest news and updates eagerly await your arrival.', 'blogaura'); ?></p>
    61                     <a href="<?php echo esc_url($this->facebook_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary" target="_blank"><?php esc_html_e('Like or follow us on Facebook', 'blogaura'); ?></a>
    62                 </div>
    63             </div>
    64             <div class="postbox blogaura-postbox-community">
    65                 <div class="community-image">
    66                     <img src="<?php echo esc_url(BLOGAURA_PARENT_URL . '/inc/admin/dashboard/images/x.webp'); ?>" alt="<?php esc_attr_e('x', 'blogaura'); ?>">
    67                 </div>
    68                 <div class="community-details">
    69                     <h3><?php esc_html_e('X Community', 'blogaura'); ?></h3>
    70                     <p><?php esc_html_e('Join our Twitter haven, where the latest news and updates eagerly await your arrival.', 'blogaura'); ?></p>
    71                     <a href="<?php echo esc_url($this->x_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary" target="_blank"><?php esc_html_e('Connect with us on X', 'blogaura'); ?></a>
    72                 </div>
    73             </div>
    74             <div class="postbox blogaura-postbox-community">
    75                 <div class="community-image">
    76                     <img src="<?php echo esc_url(BLOGAURA_PARENT_URL . '/inc/admin/dashboard/images/youtube.webp'); ?>" alt="<?php esc_attr_e('youtube', 'blogaura'); ?>">
    77                 </div>
    78                 <div class="community-details">
    79                     <h3><?php esc_html_e('Youtube Community', 'blogaura'); ?></h3>
    80                     <p><?php esc_html_e('Join our YouTube haven, where the latest news and updates eagerly await your arrival.', 'blogaura'); ?></p>
    81                     <a href="<?php echo esc_url($this->youtube_url); ?>" class="button button-secondary dashboard-button dashboard-button-secondary" target="_blank"><?php esc_html_e('Subscribe', 'blogaura'); ?></a>
    82                 </div>
    83             </div>
    84         </div>
    85         <div class="dashboard-content-right">
    86             <div class="postbox blogaura-postbox-review">
    87                 <div class="postbox-header">
    88                     <h3 class="hndle">
    89                         <?php esc_html_e('Leave us a Review', 'blogaura'); ?>
    90                     </h3>
    91                     <div class="hndle-controller">
    92                         <svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
    93                             <path d="M10.5001 1.66699L13.0751 6.88366L18.8334 7.72533L14.6667 11.7837L15.6501 17.517L10.5001 14.8087L5.35008 17.517L6.33341 11.7837L2.16675 7.72533L7.92508 6.88366L10.5001 1.66699Z"
    94                                   stroke="#2563EB" stroke-width="1.66667" stroke-linecap="round"
    95                                   stroke-linejoin="round"/>
    96                         </svg>
    97                     </div>
    98                 </div>
    99                 <div class="inside">
    100                     <div class="ratings">
    101 
    102                                                                                 <?php
    103                                         echo $star_icon;
    104                                         echo $star_icon;
    105                                         echo $star_icon;
    106                                         echo $star_icon;
    107                                         echo $star_icon;
    108                                         ?>
    109 
    110 
    111                     </div>
    112                     <div><?php esc_html_e('Based on 20+ Reviews', 'blogaura'); ?></div>
    113                     <p>
    114                         <?php
    115                         echo sprintf(
    116                         /* translators: %s: Theme Name. */
    117                             esc_html__('Sharing your review is a valuable way to help us enhance your experience.', 'blogaura'),
    118                             $theme->Name
    119                         );
    120                         ?>
    121                     </p>
    122                     <a href="<?php echo esc_url('https://wordpress.org/support/theme/blogaura/reviews/?rate=5#new-post'); ?>"
    123                        target="_blank"><?php esc_html_e('Submit a Review', 'blogaura'); ?></a>
    124                 </div>
    125             </div>
    126 
    127             <div class="postbox blogaura-postbox-plugins">
    128                 <div class="postbox-header">
    129                     <h3 class="hndle">
    130                         <?php esc_html_e('Useful Plugins', 'blogaura'); ?>
    131                     </h3>
    132                     <div class="hndle-controller">
    133                         <span class="dashicons dashicons-admin-plugins"></span>
    134                     </div>
    135                 </div>
    136                 <div class="inside">
    137                     <?php
    138                     $plugins = array(
    139                         array(
    140                             'name' => 'One Click Demo Import',
    141                             'file' => 'one-click-demo-import/one-click-demo-import.php',
    142                             'slug' => 'one-click-demo-import',
    143                             'color' => '#5317AA',
    144                             'image' => BLOGAURA_PARENT_URL . '/inc/admin/dashboard/images/ocdi-256x256.webp',
    145                         ),
    146                     );
    147                     // Loop through the plugins
    148                     foreach ($plugins as $plugin) {
    149                         $plugin_name = $plugin['name'];
    150                         $plugin_file = $plugin['file'];
    151                         $plugin_slug = $plugin['slug'];
    152                         $is_plugin_installed = blogaura_is_plugin_installed($plugin_file);
    153                         $is_plugin_activated = is_plugin_active($plugin_file);
    154                         ?>
    155                         <div class="postbox-recommended-plugin">
    156                             <div class="recommended-plugin-content">
    157                                 <img class="<?php echo $plugin_slug; ?>-logo" src="<?php echo $plugin['image']; ?>" width="100" height="100" alt="<?php echo $plugin['name']; ?>">
    158                                 <h4><?php echo esc_html($plugin['name']); ?></h4>
    159                             </div>
    160                             <?php if ($is_plugin_installed) : ?>
    161                                 <?php if ($is_plugin_activated) : ?>
    162                                     <div class="recommended-plugin-action"><?php esc_html_e('Activated', 'blogaura'); ?></div>
    163                                 <?php else : ?>
    164                                     <div class="recommended-plugin-action">
    165                                         <a href="#" class="activate-plugin" data-plugin="<?php echo esc_attr($plugin_file); ?>" data-slug="<?php echo esc_attr($plugin_slug); ?> "><?php esc_html_e('Activate', 'blogaura'); ?></a>
    166                                     </div>
    167                                 <?php endif; ?>
    168                             <?php else : ?>
    169                                 <div class="recommended-plugin-action">
    170                                     <a href="#" class="install-plugin" data-plugin="<?php echo esc_attr($plugin_file); ?>" data-slug="<?php echo esc_attr($plugin_slug); ?> "><?php esc_html_e('Install', 'blogaura'); ?></a>
    171                                 </div>
    172                             <?php endif; ?>
    173                         </div>
    174                         <?php
    175                     }
    176                     ?>
    177                 </div>
    178             </div>
     16        <div class="blogaura-grid">
     17            <a class="blogaura-card blogaura-service" href="<?php echo esc_url($this->doc_url); ?>" target="_blank" rel="noopener">
     18                <span class="blogaura-tile"><?php BlogAura_Admin::the_icon('book', 20); ?></span>
     19                <span class="blogaura-service__title"><?php esc_html_e('Documentation', 'blogaura'); ?></span>
     20                <span class="blogaura-service__desc"><?php echo esc_html(sprintf(/* translators: %s: theme name. */ __('Step-by-step guides for every %s setting.', 'blogaura'), $this->theme()->get('Name'))); ?></span>
     21                <span class="blogaura-service__more"><?php esc_html_e('Read the docs', 'blogaura'); ?> <span aria-hidden="true">→</span></span>
     22            </a>
     23            <?php if ($this->pro_status) : ?>
     24                <a class="blogaura-card blogaura-service" href="<?php echo esc_url($this->support_url); ?>" target="_blank" rel="noopener">
     25                    <span class="blogaura-tile"><?php BlogAura_Admin::the_icon('chat', 20); ?></span>
     26                    <span class="blogaura-service__title"><?php esc_html_e('Priority support', 'blogaura'); ?></span>
     27                    <span class="blogaura-service__desc"><?php esc_html_e('Open a ticket and our team will get back to you by email.', 'blogaura'); ?></span>
     28                    <span class="blogaura-service__more"><?php esc_html_e('Create a ticket', 'blogaura'); ?> <span aria-hidden="true">→</span></span>
     29                </a>
     30            <?php else : ?>
     31                <a class="blogaura-card blogaura-service" href="<?php echo esc_url($this->community_url); ?>" target="_blank" rel="noopener">
     32                    <span class="blogaura-tile"><?php BlogAura_Admin::the_icon('chat', 20); ?></span>
     33                    <span class="blogaura-service__title"><?php esc_html_e('Community support', 'blogaura'); ?></span>
     34                    <span class="blogaura-service__desc"><?php esc_html_e('Ask a question on the WordPress.org support forum.', 'blogaura'); ?></span>
     35                    <span class="blogaura-service__more"><?php esc_html_e('Visit the forum', 'blogaura'); ?> <span aria-hidden="true">→</span></span>
     36                </a>
     37            <?php endif; ?>
     38            <a class="blogaura-card blogaura-service" href="<?php echo esc_url($blogaura_services['items'][4]['url']); ?>" target="_blank" rel="noopener">
     39                <span class="blogaura-tile"><?php BlogAura_Admin::the_icon('headset', 20); ?></span>
     40                <span class="blogaura-service__title"><?php echo esc_html($blogaura_services['items'][4]['title']); ?></span>
     41                <span class="blogaura-service__desc"><?php echo esc_html($blogaura_services['items'][4]['description']); ?></span>
     42                <span class="blogaura-service__more"><?php esc_html_e('Learn more', 'blogaura'); ?> <span aria-hidden="true">→</span></span>
     43            </a>
     44            <button type="button" class="blogaura-card blogaura-service" data-blogaura-changelog-open aria-haspopup="dialog" aria-controls="blogaura-changelog">
     45                <span class="blogaura-tile"><?php BlogAura_Admin::the_icon('clock', 20); ?></span>
     46                <span class="blogaura-service__title"><?php esc_html_e('What’s new', 'blogaura'); ?></span>
     47                <span class="blogaura-service__desc"><?php echo esc_html(sprintf(/* translators: %s: theme version. */ __('New features, improvements and fixes in version %s and earlier.', 'blogaura'), $this->theme()->get('Version'))); ?></span>
     48                <span class="blogaura-service__more"><?php esc_html_e('View changelog', 'blogaura'); ?> <span aria-hidden="true">→</span></span>
     49            </button>
    17950        </div>
    18051    </div>
     52
     53    <aside class="blogaura-layout__side">
     54        <section class="blogaura-card blogaura-links" aria-labelledby="blogaura-community-title">
     55            <h2 id="blogaura-community-title" class="blogaura-eyebrow"><?php esc_html_e('Community', 'blogaura'); ?></h2>
     56            <a href="<?php echo esc_url($this->facebook_url); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('external', 18); ?><span><?php esc_html_e('Facebook', 'blogaura'); ?></span></a>
     57            <a href="<?php echo esc_url($this->x_url); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('external', 18); ?><span><?php esc_html_e('X (Twitter)', 'blogaura'); ?></span></a>
     58            <a href="<?php echo esc_url($this->youtube_url); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('external', 18); ?><span><?php esc_html_e('YouTube', 'blogaura'); ?></span></a>
     59        </section>
     60        <?php if (!$this->pro_status) : ?>
     61            <section class="blogaura-card blogaura-review" aria-labelledby="blogaura-help-review-title">
     62                <h2 id="blogaura-help-review-title"><?php esc_html_e('Leave us a review', 'blogaura'); ?></h2>
     63                <p><?php esc_html_e('Sharing your experience helps us improve the theme.', 'blogaura'); ?></p>
     64                <a class="blogaura-link-strong" href="<?php echo esc_url($this->review_url); ?>" target="_blank" rel="noopener"><?php esc_html_e('Write a review', 'blogaura'); ?> <span aria-hidden="true">→</span></a>
     65            </section>
     66        <?php endif; ?>
     67    </aside>
    18168</div>
  • blogaura/1.1.5/inc/admin/dashboard/views/starter-templates.php

    r312189 r353892  
     1<?php
     2/**
     3 * Dashboard › Starter sites tab.
     4 *
     5 * Lists the starter sites registered with One Click Demo Import (by WPInterface Add-ons in
     6 * the free theme, by the bundled demos in Pro). The theme only links to the importer; the
     7 * import itself runs in One Click Demo Import.
     8 *
     9 * Included from BlogAura_Dashboard::dashboard_page(), so $this is the dashboard.
     10 *
     11 * @package BlogAura
     12 */
     13defined('ABSPATH') || exit;
    114
    2                 <div class="blogaura-dashboard-content blogaura-starter-panel">
     15$blogaura_sites = BlogAura_Admin::starter_sites();
     16$blogaura_services = BlogAura_Admin::services();
     17$blogaura_name = $this->theme()->get('Name');
    318
    4                         <?php // Check if TDI is installed but not activated or not installed at all or installed and activated.
    5                         $plugins = get_plugins();
    6                         if (is_plugin_active('wpinterface-add-ons/wpinterface-add-ons.php') && is_plugin_active('one-click-demo-import/one-click-demo-import.php')) {
    7                                 do_action('wpinterface_add_ons_starter_templates');
    8                         } else { ?>
    9                                 <div class="starter-templates-notification">
    10                         <svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 100 100" width="150px" height="150px"><path fill="#c7ede6" d="M87.215,56.71C88.35,54.555,89,52.105,89,49.5c0-6.621-4.159-12.257-10.001-14.478C78.999,35.015,79,35.008,79,35c0-11.598-9.402-21-21-21c-9.784,0-17.981,6.701-20.313,15.757C36.211,29.272,34.638,29,33,29c-7.692,0-14.023,5.793-14.89,13.252C12.906,43.353,9,47.969,9,53.5C9,59.851,14.149,65,20.5,65c0.177,0,0.352-0.012,0.526-0.022C21.022,65.153,21,65.324,21,65.5C21,76.822,30.178,86,41.5,86c6.437,0,12.175-2.972,15.934-7.614C59.612,80.611,62.64,82,66,82c4.65,0,8.674-2.65,10.666-6.518C77.718,75.817,78.837,76,80,76c6.075,0,11-4.925,11-11C91,61.689,89.53,58.727,87.215,56.71z"/><path fill="#fff" d="M15.5 51h-10C5.224 51 5 50.776 5 50.5S5.224 50 5.5 50h10c.276 0 .5.224.5.5S15.777 51 15.5 51zM18.5 51h-1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1c.276 0 .5.224.5.5S18.777 51 18.5 51zM23.491 53H14.5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h8.991c.276 0 .5.224.5.5S23.767 53 23.491 53zM12.5 53h-1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1c.276 0 .5.224.5.5S12.777 53 12.5 53zM9.5 53h-2C7.224 53 7 52.776 7 52.5S7.224 52 7.5 52h2c.276 0 .5.224.5.5S9.777 53 9.5 53zM15.5 55h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S15.776 55 15.5 55zM18.5 46c-.177 0-.823 0-1 0-.276 0-.5.224-.5.5s.224.5.5.5c.177 0 .823 0 1 0 .276 0 .5-.224.5-.5S18.776 46 18.5 46zM18.5 48c-.177 0-4.823 0-5 0-.276 0-.5.224-.5.5s.224.5.5.5c.177 0 4.823 0 5 0 .276 0 .5-.224.5-.5S18.776 48 18.5 48zM23.5 50c-.177 0-2.823 0-3 0-.276 0-.5.224-.5.5s.224.5.5.5c.177 0 2.823 0 3 0 .276 0 .5-.224.5-.5S23.776 50 23.5 50zM72.5 24h-10c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h10c.276 0 .5.224.5.5S72.776 24 72.5 24zM76.5 24h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S76.776 24 76.5 24zM81.5 26h-10c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h10c.276 0 .5.224.5.5S81.777 26 81.5 26zM69.5 26h-1c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1c.276 0 .5.224.5.5S69.776 26 69.5 26zM66.47 26H64.5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h1.97c.276 0 .5.224.5.5S66.746 26 66.47 26zM75.5 22h-5c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h5c.276 0 .5.224.5.5S75.777 22 75.5 22zM72.5 28h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S72.776 28 72.5 28z"/><path fill="#508ecc" d="M51.275,24.017C43.207,24.397,37,31.347,37,39.424V47h6v-7.692c0-4.794,3.617-8.979,8.401-9.289C56.643,29.68,61,33.831,61,39c0,1.657,1.343,3,3,3s3-1.343,3-3C67,30.475,59.889,23.611,51.275,24.017z"/><path fill="#472b29" d="M52,24c-0.241,0-0.482,0.006-0.725,0.017C43.207,24.397,37,31.347,37,39.424V47h6v-7.692c0-4.794,3.617-8.979,8.401-9.289C51.602,30.006,51.802,30,52,30c4.971,0,9,4.029,9,9c0,1.657,1.343,3,3,3s3-1.343,3-3C67,30.716,60.284,24,52,24z M64,40.6c-0.882,0-1.6-0.718-1.6-1.6c0-5.735-4.665-10.4-10.4-10.4c-0.228,0-0.458,0.007-0.69,0.022c-5.445,0.353-9.711,5.046-9.711,10.686V45.6h-3.2v-6.176c0-7.513,5.684-13.666,12.941-14.008C51.562,25.405,51.781,25.4,52,25.4c7.499,0,13.6,6.101,13.6,13.6C65.6,39.882,64.882,40.6,64,40.6z"/><path fill="#7dafe2" d="M67.6,45.5H36.4c-2.154,0-3.9,1.727-3.9,3.857v13.5c0,5.326,4.365,9.643,9.75,9.643h19.5c5.385,0,9.75-4.317,9.75-9.643v-13.5C71.5,47.227,69.754,45.5,67.6,45.5z"/><path fill="#f1bc19" d="M33 50H71V56.5H33z"/><path fill="#508ecc" d="M54,62c0-1.105-0.895-2-2-2s-2,0.895-2,2c0,0.653,0.318,1.227,0.801,1.592L50,68h4l-0.801-4.408C53.682,63.227,54,62.653,54,62z"/><path fill="#472b29" d="M68,45H36c-2.209,0-4,1.791-4,4v14c0,5.523,4.477,10,10,10h20c5.523,0,10-4.477,10-10V49C72,46.791,70.209,45,68,45z M70.6,63c0,4.742-3.858,8.6-8.6,8.6H42c-4.742,0-8.6-3.858-8.6-8.6V49c0-1.434,1.166-2.6,2.6-2.6h32c1.434,0,2.6,1.166,2.6,2.6V63z"/><path fill="#472b29" d="M71 50h-3.5c-.276 0-.5.224-.5.5s.224.5.5.5H71c.276 0 .5-.224.5-.5S71.276 50 71 50zM64.5 51h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5S64.776 51 64.5 51zM59.5 51H33c-.276 0-.5-.224-.5-.5S32.724 50 33 50h26.5c.276 0 .5.224.5.5S59.776 51 59.5 51zM71 57H33c-.276 0-.5-.224-.5-.5S32.724 56 33 56h38c.276 0 .5.224.5.5S71.276 57 71 57zM52 60.35c.91 0 1.65.74 1.65 1.65 0 .517-.241.995-.662 1.313-.106.08-.157.212-.134.342l.726 3.995h-3.161l.726-3.995c.024-.13-.028-.262-.134-.342-.42-.318-.661-.796-.661-1.313C50.35 61.09 51.09 60.35 52 60.35M52 60c-1.105 0-2 .895-2 2 0 .653.318 1.227.801 1.592L50 68h4l-.801-4.408C53.682 63.227 54 62.653 54 62 54 60.895 53.105 60 52 60L52 60z"/><path fill="#472b29" d="M31.441 53.322H38.771V53.673H31.441z" transform="rotate(-54.984 35.106 53.497)"/><path fill="#472b29" d="M35.231 53.322H42.561V53.673H35.231z" transform="rotate(-54.984 38.896 53.497)"/><path fill="#472b29" d="M38.94 53.322H46.269999999999996V53.673H38.94z" transform="rotate(-54.984 42.606 53.497)"/><path fill="#472b29" d="M42.73 53.321H50.059999999999995V53.672H42.73z" transform="rotate(-54.984 46.395 53.497)"/><path fill="#472b29" d="M46.44 53.321H53.769999999999996V53.672H46.44z" transform="rotate(-54.984 50.105 53.497)"/><path fill="#472b29" d="M50.23 53.321H57.559999999999995V53.672H50.23z" transform="rotate(-54.984 53.895 53.496)"/><path fill="#472b29" d="M53.94 53.321H61.269999999999996V53.672H53.94z" transform="rotate(-54.984 57.605 53.496)"/><path fill="#472b29" d="M57.73 53.321H65.06V53.672H57.73z" transform="rotate(-54.984 61.395 53.496)"/><path fill="#472b29" d="M61.44 53.321H68.77V53.672H61.44z" transform="rotate(-54.984 65.105 53.496)"/><path fill="#472b29" d="M65.23 53.321H72.56V53.672H65.23z" transform="rotate(-54.984 68.895 53.496)"/><path fill="#fdfcef" d="M87,67.5c-0.187,0-0.364,0.033-0.545,0.055C86.234,65.835,84.781,64.5,83,64.5c-1.087,0-2.045,0.505-2.687,1.282c0.11-0.412,0.187-0.836,0.187-1.282c0-2.761-2.239-5-5-5c-2.671,0-4.833,2.1-4.973,4.736C69.703,63.186,68.438,62.5,67,62.5c-2.485,0-4.5,2.015-4.5,4.5c0,0.187,0.033,0.364,0.055,0.545C60.282,67.771,58.5,69.667,58.5,72c0,2.485,2.015,4.5,4.5,4.5s7.125,0,7.125,0H77.5c0,0,7.015,0,9.5,0s4.5-2.015,4.5-4.5S89.485,67.5,87,67.5z"/><path fill="#472b29" d="M87,67c-0.048,0-0.095,0.002-0.142,0.005C86.411,65.261,84.831,64,83,64c-0.71,0-1.398,0.192-2,0.547c0-0.016,0-0.031,0-0.047c0-3.033-2.467-5.5-5.5-5.5c-2.555,0-4.719,1.76-5.317,4.164C69.293,62.416,68.176,62,67,62c-2.757,0-5,2.243-5,5c0,0.041,0.001,0.082,0.003,0.123C59.689,67.587,58,69.603,58,72c0,2.757,2.243,5,5,5h6.5c0.276,0,0.5-0.224,0.5-0.5S69.776,76,69.5,76H63c-2.206,0-4-1.794-4-4c0-2.051,1.549-3.753,3.605-3.958c0.133-0.013,0.256-0.08,0.34-0.185s0.122-0.239,0.106-0.373l-0.019-0.141C63.017,67.23,63,67.117,63,67c0-2.206,1.794-4,4-4c1.221,0,2.362,0.563,3.133,1.545c0.096,0.123,0.242,0.192,0.392,0.192c0.051,0,0.102-0.008,0.152-0.024c0.199-0.063,0.338-0.242,0.349-0.45C71.153,61.872,73.119,60,75.5,60c2.481,0,4.5,2.019,4.5,4.5c0,0.352-0.054,0.718-0.169,1.153c-0.06,0.227,0.045,0.466,0.254,0.573c0.072,0.038,0.15,0.056,0.228,0.056c0.145,0,0.288-0.064,0.386-0.182C81.277,65.401,82.115,65,83,65c1.496,0,2.768,1.125,2.959,2.618c0.033,0.252,0.249,0.437,0.495,0.437c0.021,0,0.041-0.001,0.062-0.004l0.141-0.019C86.77,68.017,86.883,68,87,68c2.206,0,4,1.794,4,4s-1.794,4-4,4H72.5c-0.276,0-0.5,0.224-0.5,0.5s0.224,0.5,0.5,0.5H87c2.757,0,5-2.243,5-5S89.757,67,87,67z"/><path fill="#472b29" d="M84.062 70c-.188 0-.381.022-.584.068C83.323 68.897 82.327 68 81.125 68c-.426 0-.845.119-1.212.341C79.609 66.999 78.403 66 77 66c-.256 0-.517.04-.819.126-.133.038-.21.176-.172.309.032.109.13.182.239.182.023 0 .047-.003.07-.01C76.575 66.534 76.792 66.5 77 66.5c1.288 0 2.377 1.012 2.481 2.305.007.095.067.177.155.212.03.013.061.019.093.019.059 0 .118-.022.165-.063.346-.305.784-.473 1.231-.473 1.034 0 1.875.841 1.875 1.875 0 .08.038.162.102.208.046.034.101.054.156.054.022 0 .045-.003.067-.01.268-.085.509-.127.738-.127 1.268 0 2.33.997 2.419 2.268C86.491 72.899 86.601 73 86.731 73c.006 0 .012 0 .018 0 .137-.01.241-.13.231-.268C86.873 71.2 85.591 70 84.062 70zM63.117 67.5c1.326 0 2.508.897 2.874 2.182.038.133-.039.271-.172.309C65.795 69.997 65.772 70 65.75 70c-.109 0-.209-.072-.24-.182C65.205 68.748 64.221 68 63.117 68c-.117 0-.23.014-.342.029-.012.002-.023.003-.035.003-.121 0-.229-.092-.246-.217-.019-.137.077-.263.214-.281C62.842 67.516 62.978 67.5 63.117 67.5L63.117 67.5z"/><path fill="#fdfcef" d="M36.445,60.545C36.473,60.366,36.5,60.187,36.5,60c0-1.933-1.567-3.5-3.5-3.5c-1.032,0-1.95,0.455-2.59,1.165c-0.384-1.808-1.987-3.165-3.91-3.165c-2.209,0-4,1.791-4,4c0,0.191,0.03,0.374,0.056,0.558C22.128,58.714,21.592,58.5,21,58.5c-1.228,0-2.245,0.887-2.455,2.055C18.366,60.527,18.187,60.5,18,60.5c-1.933,0-3.5,1.567-3.5,3.5s1.567,3.5,3.5,3.5s7.5,0,7.5,0h7c0,0,1.567,0,3.5,0s3.5-1.567,3.5-3.5C39.5,62.219,38.165,60.766,36.445,60.545z"/><path fill="#472b29" d="M34.25 63C34.112 63 34 62.888 34 62.75c0-1.223.995-2.218 2.218-2.218.034.009.737-.001 1.244.136.133.036.212.173.176.306-.036.134-.173.213-.306.176-.444-.12-1.1-.12-1.113-.118-.948 0-1.719.771-1.719 1.718C34.5 62.888 34.388 63 34.25 63zM27.5 67A.5.5 0 1 0 27.5 68 .5.5 0 1 0 27.5 67z"/><path fill="#472b29" d="M36.996,60.142C36.999,60.095,37,60.048,37,60c0-2.206-1.794-4-4-4c-0.845,0-1.666,0.276-2.347,0.774C29.966,55.127,28.331,54,26.5,54c-2.374,0-4.324,1.847-4.489,4.18C21.689,58.061,21.349,58,21,58c-1.289,0-2.412,0.82-2.826,2.006C18.116,60.002,18.059,60,18,60c-2.206,0-4,1.794-4,4s1.794,4,4,4h7.5c0.276,0,0.5-0.224,0.5-0.5S25.776,67,25.5,67H18c-1.654,0-3-1.346-3-3s1.346-3,3-3c0.16,0,0.314,0.025,0.468,0.049c0.273,0.041,0.521-0.138,0.569-0.405C19.208,59.691,20.034,59,21,59c0.449,0,0.878,0.155,1.243,0.448c0.16,0.128,0.377,0.112,0.556,0.01s0.271-0.337,0.242-0.54C23.021,58.78,23,58.643,23,58.5c0-1.93,1.57-3.5,3.5-3.5c1.641,0,3.08,1.165,3.421,2.769c0.039,0.184,0.178,0.33,0.36,0.379c0.179,0.05,0.375-0.009,0.5-0.148c0.581-0.645,1.369-1,2.219-1c1.654,0,3,1.346,3,3c0,0.16-0.025,0.314-0.048,0.468c-0.021,0.133,0.013,0.269,0.094,0.377c0.081,0.108,0.202,0.178,0.336,0.196C37.875,61.232,39,62.504,39,64c0,1.654-1.346,3-3,3h-3.5c-0.276,0-0.5,0.224-0.5,0.5s0.224,0.5,0.5,0.5H36c2.206,0,4-1.794,4-4C40,62.169,38.739,60.59,36.996,60.142z"/><path fill="#472b29" d="M30.5,67c-0.159,0-0.841,0-1,0c-0.276,0-0.5,0.224-0.5,0.5s0.224,0.5,0.5,0.5c0.159,0,0.841,0,1,0c0.276,0,0.5-0.224,0.5-0.5S30.776,67,30.5,67z"/></svg>
    11                                         <p>
    12                             <?php echo __( 'To import starter sites for BlogAura, you need to install and activate the One-Click Demo Import and WPInterface Add-ons plugins.', 'blogaura' ); ?>
    13                         </p>
    14                                 </div>
    15                         <?php } ?>
     19// Free theme: the Pro starter site, shown with an upgrade link (it cannot be imported here).
     20$blogaura_pro_card = static function ($dashboard, $name) {
     21    if (BlogAura_Admin::PRO) {
     22        return;
     23    }
     24    $pro_name = sprintf(/* translators: %s: theme name. */ __('%s Pro', 'blogaura'), $name);
     25    ?>
     26    <article class="blogaura-site blogaura-site--pro">
     27        <div class="blogaura-site__shot">
     28            <span class="blogaura-site__badge"><?php BlogAura_Admin::the_icon('crown', 14); ?><?php esc_html_e('Pro', 'blogaura'); ?></span>
     29            <img src="<?php echo esc_url(BlogAura_Admin::image_url('pro-starter.webp')); ?>" width="600" height="450" alt="<?php echo esc_attr(sprintf(/* translators: %s: starter site name. */ __('%s starter site preview', 'blogaura'), $pro_name)); ?>" loading="lazy" decoding="async">
     30        </div>
     31        <div class="blogaura-site__body">
     32            <h3 class="blogaura-site__name"><?php echo esc_html($pro_name); ?></h3>
     33            <p class="blogaura-site__note"><?php esc_html_e('Included with the Pro version, together with every Pro feature.', 'blogaura'); ?></p>
     34            <div class="blogaura-site__actions">
     35                <a class="blogaura-upgrade-button" href="<?php echo esc_url($dashboard->get_theme_url() . '#choose-pricing-plan'); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('crown', 16); ?><?php esc_html_e('Upgrade to Pro', 'blogaura'); ?></a>
     36                <a class="button blogaura-button blogaura-button--small" href="<?php echo esc_url($dashboard->get_pro_demo_url()); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('eye', 16); ?><?php esc_html_e('Preview', 'blogaura'); ?><span class="screen-reader-text"><?php echo esc_html(' ' . $pro_name); ?></span></a>
     37            </div>
     38        </div>
     39    </article>
     40    <?php
     41};
    1642
    17                 </div>
     43if (!$blogaura_sites) :
     44    $blogaura_needed = BlogAura_Admin::PRO ? array('One Click Demo Import') : array('WPInterface Add-ons', 'One Click Demo Import');
     45    ?>
     46    <div class="blogaura-stack">
     47        <section class="blogaura-card blogaura-empty" aria-labelledby="blogaura-starter-title">
     48            <img src="<?php echo esc_url(BlogAura_Admin::image_url(BlogAura_Admin::PRO ? 'plugin-one-click-demo-import.webp' : 'plugin-wpinterface-add-ons.webp')); ?>" width="56" height="56" alt="">
     49            <h2 id="blogaura-starter-title"><?php esc_html_e('Starter sites need a free plugin', 'blogaura'); ?></h2>
     50            <p><?php echo esc_html(sprintf(/* translators: 1: plugin names, 2: theme name. */ __('Install %1$s to browse and import ready-made %2$s designs.', 'blogaura'), wp_sprintf('%l', $blogaura_needed), $blogaura_name)); ?></p>
     51            <a class="button button-primary blogaura-button" href="<?php echo esc_url($this->tab_url('recommended') . '#blogaura-plugins'); ?>"><?php esc_html_e('Go to recommended plugins', 'blogaura'); ?></a>
     52        </section>
     53        <?php if (!BlogAura_Admin::PRO) : ?>
     54            <section class="blogaura-section" aria-labelledby="blogaura-starter-pro-title">
     55                <h2 id="blogaura-starter-pro-title" class="blogaura-eyebrow"><?php esc_html_e('Also in Pro', 'blogaura'); ?></h2>
     56                <div class="blogaura-sites"><?php $blogaura_pro_card($this, $blogaura_name); ?></div>
     57            </section>
     58        <?php endif; ?>
     59    </div>
     60    <?php
     61    return;
     62endif;
    1863
    19 <?php
     64$blogaura_notice = '';
     65foreach ($blogaura_sites as $blogaura_site) {
     66    if ($blogaura_site['notice']) {
     67        $blogaura_notice = $blogaura_site['notice'];
     68        break;
     69    }
     70}
     71?>
     72<div class="blogaura-stack">
     73    <section class="blogaura-section" aria-labelledby="blogaura-starter-title">
     74        <div class="blogaura-section__head">
     75            <div>
     76                <h2 id="blogaura-starter-title"><?php esc_html_e('Starter sites', 'blogaura'); ?></h2>
     77                <p><?php esc_html_e('Import a ready-made design, then make it yours in the Customizer.', 'blogaura'); ?></p>
     78            </div>
     79        </div>
     80
     81        <div class="blogaura-card blogaura-import-note">
     82            <div class="blogaura-import-note__main">
     83                <span class="blogaura-tile"><?php BlogAura_Admin::the_icon('info', 20); ?></span>
     84                <div class="blogaura-import-note__text">
     85                    <h3><?php esc_html_e('Importing adds demo content', 'blogaura'); ?></h3>
     86                    <p><?php esc_html_e('A starter site imports its demo posts, pages, images, menus and widgets, and updates your Customizer settings to match the design. For the best result, import it on a new site.', 'blogaura'); ?></p>
     87                    <?php if ($blogaura_notice) : ?>
     88                        <p class="blogaura-import-note__tip"><?php echo esc_html($blogaura_notice); ?></p>
     89                    <?php endif; ?>
     90                </div>
     91            </div>
     92            <div class="blogaura-import-note__service">
     93                <p><?php BlogAura_Admin::the_icon('badge', 18); ?><span><strong><?php esc_html_e('Already have content?', 'blogaura'); ?></strong> <?php esc_html_e('Our team can apply this design to your existing site and set it up around your content, without importing any demo content.', 'blogaura'); ?></span></p>
     94                <a class="button blogaura-button blogaura-button--small" href="<?php echo esc_url($blogaura_services['featured']['url']); ?>" target="_blank" rel="noopener"><?php esc_html_e('Have it set up for you', 'blogaura'); ?></a>
     95            </div>
     96        </div>
     97
     98        <div class="blogaura-sites">
     99            <?php foreach ($blogaura_sites as $blogaura_site) : ?>
     100                <article class="blogaura-site">
     101                    <div class="blogaura-site__shot">
     102                        <?php if ($blogaura_site['image']) : ?>
     103                            <img src="<?php echo esc_url($blogaura_site['image']); ?>" width="600" height="450" alt="<?php echo esc_attr(sprintf(/* translators: %s: starter site name. */ __('%s starter site preview', 'blogaura'), $blogaura_site['name'])); ?>" loading="lazy" decoding="async">
     104                        <?php endif; ?>
     105                    </div>
     106                    <div class="blogaura-site__body">
     107                        <h3 class="blogaura-site__name"><?php echo esc_html($blogaura_site['name']); ?></h3>
     108                        <div class="blogaura-site__actions">
     109                            <a class="button button-primary blogaura-button blogaura-button--small" href="<?php echo esc_url($blogaura_site['import']); ?>"><?php BlogAura_Admin::the_icon('download', 16); ?><?php esc_html_e('Import', 'blogaura'); ?><span class="screen-reader-text"><?php echo esc_html(' ' . $blogaura_site['name']); ?></span></a>
     110                            <?php if ($blogaura_site['preview']) : ?>
     111                                <a class="button blogaura-button blogaura-button--small" href="<?php echo esc_url($blogaura_site['preview']); ?>" target="_blank" rel="noopener"><?php BlogAura_Admin::the_icon('eye', 16); ?><?php esc_html_e('Preview', 'blogaura'); ?><span class="screen-reader-text"><?php echo esc_html(' ' . $blogaura_site['name']); ?></span></a>
     112                            <?php endif; ?>
     113                        </div>
     114                    </div>
     115                </article>
     116            <?php endforeach; ?>
     117            <?php $blogaura_pro_card($this, $blogaura_name); ?>
     118        </div>
     119    </section>
     120</div>
  • blogaura/1.1.5/inc/admin/meta-box/category-meta-box.php

    r312189 r353892  
    99// Add custom fields to the category add form
    1010function blogaura_add_category_fields() {
     11    wp_nonce_field( 'blogaura_category_meta_action', 'blogaura_category_meta_nonce' );
    1112    ?>
    1213    <div class="form-field term-thumbnail-wrap">
    … …  
    3637    $thumbnail_id = absint( get_term_meta( $term->term_id, 'thumbnail_id', true ) );
    3738    $image = $thumbnail_id ? wp_get_attachment_thumb_url( $thumbnail_id ) : blogaura_placeholder_image();
     39    wp_nonce_field( 'blogaura_category_meta_action', 'blogaura_category_meta_nonce' );
    3840    ?>
    3941    <tr class="form-field">
    … …  
    6466// Save custom category fields
    6567function blogaura_save_category_fields( $term_id ) {
     68    if ( ! isset( $_POST['blogaura_category_meta_nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['blogaura_category_meta_nonce'] ) ), 'blogaura_category_meta_action' ) ) {
     69        return;
     70    }
     71
     72    if ( ! current_user_can( 'edit_term', $term_id ) ) {
     73        return;
     74    }
     75
    6676    if ( isset( $_POST['post_cat_thumbnail_id'] ) ) {
    6777        update_term_meta( $term_id, 'thumbnail_id', absint( $_POST['post_cat_thumbnail_id'] ) );
    … …  
    7080    if ( isset( $_POST['category_color'] ) && ! empty( $_POST['category_color'] ) ) {
    7181        update_term_meta( $term_id, 'category_color', sanitize_hex_color( $_POST['category_color'] ) );
    72     } else {
     82    } elseif ( isset( $_POST['category_color'] ) ) {
    7383        delete_term_meta( $term_id, 'category_color' );
    7484    }
  • blogaura/1.1.5/languages/blogaura.pot

    r325078 r353892  
    44"Project-Id-Version: BlogAura\n"
    55"Report-Msgid-Bugs-To: \n"
    6 "POT-Creation-Date: 2026-04-27 14:15+0000\n"
     6"POT-Creation-Date: 2026-10-15 15:52+0000\n"
    77"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    88"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    1414"Content-Transfer-Encoding: 8bit\n"
    1515"X-Generator: Loco https://localise.biz/\n"
    16 "X-Loco-Version: 2.8.1; wp-6.9.1; php-8.3.11\n"
     16"X-Loco-Version: 2.8.8; wp-7.1.3; php-8.5.8\n"
    1717"X-Domain: blogaura"
    1818
    … …  
    2626msgstr ""
    2727
    28 #. %s: Theme Name.
    29 #: inc/template-tags.php:110 inc/admin/dashboard/class-dashboard.php:73
     28#. 1: steps done, 2: total steps.
     29#: inc/admin/dashboard/views/overview.php:88
     30#, php-format
     31msgid "%1$d of %2$d"
     32msgstr ""
     33
     34#. %d: number of themes.
     35#: inc/admin/dashboard/class-dashboard.php:147
     36msgid "%d themes by WPInterface"
     37msgstr ""
     38
     39#: inc/template-tags.php:110
    3040#, php-format
    3141msgid "%s"
    3242msgstr ""
    3343
     44#. %s: Pro theme name.
     45#: inc/admin/dashboard/views/features.php:139
     46#, php-format
     47msgid ""
     48"%s comes with the SEO plugin made by our team, at no extra cost. Help "
     49"readers find your stories first."
     50msgstr ""
     51
     52#. %s: theme name.
     53#: inc/admin/dashboard/class-welcome-notice.php:107
     54#, php-format
     55msgid "%s is ready. Let’s make it yours."
     56msgstr ""
     57
    3458#. %s: Read Time.
    35 #: inc/template-functions.php:280 inc/template-functions.php:286
     59#: inc/template-functions.php:279 inc/template-functions.php:285
    3660#, php-format
    3761msgid "%s min read"
     62msgstr ""
     63
     64#. %s: theme name.
     65#: inc/admin/dashboard/views/starter-templates.php:24
     66#: inc/admin/dashboard/views/features.php:18
     67#: inc/admin/dashboard/views/overview.php:180
     68#: inc/admin/dashboard/views/free-vs-pro.php:204
     69#, php-format
     70msgid "%s Pro"
    3871msgstr ""
    3972
    … …  
    4275#, php-format
    4376msgid "%s Settings"
     77msgstr ""
     78
     79#. %s: starter site name.
     80#: inc/admin/dashboard/views/starter-templates.php:29
     81#: inc/admin/dashboard/views/starter-templates.php:103
     82#, php-format
     83msgid "%s starter site preview"
     84msgstr ""
     85
     86#. %s: theme name.
     87#: inc/admin/dashboard/class-dashboard.php:153
     88#: inc/admin/dashboard/class-welcome-notice.php:104
     89#, php-format
     90msgid "%s theme screenshot"
    4491msgstr ""
    4592
    … …  
    131178msgstr ""
    132179
    133 #: inc/admin/dashboard/views/free-vs-pro.php:282
    134 msgid ""
    135 "Access all premium extensions, features, and upcoming updates right away by "
    136 "<br> upgrading to the Pro version."
    137 msgstr ""
    138 
    139 #: inc/admin/dashboard/class-welcome-notice.php:95
    140 #: inc/admin/dashboard/class-theme-review-notice.php:140
    141 #: inc/admin/dashboard/class-theme-review-notice.php:156
     180#: inc/admin/dashboard/views/features.php:48
     181msgid ""
     182"A built-in accessibility toolbar and our own SEO plugin, ready when you "
     183"upgrade."
     184msgstr ""
     185
     186#: inc/admin/dashboard/views/overview.php:84
     187msgid "A few short steps from a fresh install to a finished site."
     188msgstr ""
     189
     190#: inc/admin/dashboard/views/overview.php:173
     191msgid "A quick review on WordPress.org helps other publishers find the theme."
     192msgstr ""
     193
     194#: inc/admin/dashboard/class-theme-review-notice.php:87
     195msgid ""
     196"A rating on WordPress.org helps other site owners find the theme and keeps "
     197"the updates coming. It takes about a minute."
     198msgstr ""
     199
     200#: inc/admin/dashboard/views/features.php:57
     201msgid ""
     202"A reader toolbar built into the theme lets every visitor adjust your site to "
     203"their sight, motor and reading needs."
     204msgstr ""
     205
     206#: inc/admin/dashboard/views/starter-templates.php:86
     207msgid ""
     208"A starter site imports its demo posts, pages, images, menus and widgets, and "
     209"updates your Customizer settings to match the design. For the best result, "
     210"import it on a new site."
     211msgstr ""
     212
     213#: inc/admin/dashboard/views/features.php:62
     214msgid "Accessibility statement generator for your site"
     215msgstr ""
     216
     217#: inc/admin/dashboard/views/features.php:56
     218#: inc/admin/dashboard/views/overview.php:66
     219msgid "Accessibility toolbar"
     220msgstr ""
     221
     222#: inc/admin/dashboard/views/features.php:95
     223msgid "Accessibility toolbar demo"
     224msgstr ""
     225
     226#: inc/admin/dashboard/views/free-vs-pro.php:210
     227msgid "Accessibility toolbar for your visitors"
     228msgstr ""
     229
     230#: inc/admin/dashboard/class-welcome-notice.php:139
     231#: inc/admin/dashboard/class-theme-review-notice.php:154
     232#: inc/admin/dashboard/class-theme-review-notice.php:170
    142233msgid "Action failed. Please refresh the page and retry."
    143234msgstr ""
    144235
    145 #: inc/admin/dashboard/views/dashboard.php:393
    146 #: inc/admin/dashboard/views/help.php:165
    147 #: inc/admin/dashboard/views/products.php:128
     236#: inc/admin/dashboard/views/recommended.php:14
    148237msgid "Activate"
    149238msgstr ""
    150239
    151 #: inc/admin/dashboard/views/dashboard.php:15
    152 msgid "Activate MC4WP: Mailchimp for WordPress"
    153 msgstr ""
    154 
    155 #: inc/admin/dashboard/views/dashboard.php:387
    156 #: inc/admin/dashboard/views/help.php:162
    157 #: inc/admin/dashboard/views/products.php:126
    158 msgid "Activated"
     240#: inc/admin/dashboard/views/recommended.php:13
     241msgid "Active"
     242msgstr ""
     243
     244#: inc/admin/dashboard/views/overview.php:37
     245msgid "Add widgets to the sidebar"
    159246msgstr ""
    160247
    … …  
    163250msgstr ""
    164251
     252#: inc/admin/dashboard/views/overview.php:25
     253msgid "Add your logo and site icon"
     254msgstr ""
     255
     256#: inc/admin/dashboard/views/free-vs-pro.php:83
     257msgid "Additional"
     258msgstr ""
     259
    165260#: inc/admin/customizer/helpers/controls.php:236
    166261msgid "Additional Customizer Sections"
    … …  
    175270msgstr ""
    176271
     272#: inc/admin/dashboard/class-admin.php:92
     273msgid "Adds Mailchimp sign-up forms to your site."
     274msgstr ""
     275
    177276#: inc/admin/widgets/class-ads-code.php:30
    178277msgid "Ads Code"
    179278msgstr ""
    180279
    181 #: inc/admin/dashboard/views/dashboard.php:159
    182 msgid "Advanced Color options"
     280#: inc/admin/dashboard/views/free-vs-pro.php:209
     281msgid "Advanced colour options"
    183282msgstr ""
    184283
    … …  
    214313msgstr ""
    215314
     315#: inc/admin/dashboard/views/recommended.php:26
     316msgid "All services"
     317msgstr ""
     318
     319#: inc/admin/dashboard/views/starter-templates.php:93
     320msgid "Already have content?"
     321msgstr ""
     322
     323#: inc/admin/dashboard/views/starter-templates.php:55
     324msgid "Also in Pro"
     325msgstr ""
     326
     327#: inc/admin/dashboard/views/free-vs-pro.php:88
     328msgid "API Integrations"
     329msgstr ""
     330
     331#: inc/admin/dashboard/views/overview.php:72
     332msgid "API integrations"
     333msgstr ""
     334
     335#: inc/admin/dashboard/views/overview.php:38
     336msgid "Appearance › Widgets"
     337msgstr ""
     338
    216339#: inc/admin/customizer/helpers/helper-function.php:48
    217340msgid "Archive Alternate Grid View"
    … …  
    237360#: inc/admin/customizer/sections/panel.php:93
    238361msgid "Archive Options"
    239 msgstr ""
    240 
    241 #: inc/admin/dashboard/views/dashboard.php:110
    242 msgid "Archive Sidebar Options"
    243362msgstr ""
    244363
    … …  
    277396#: inc/admin/customizer/sections/show-author-post.php:99
    278397msgid "ASC"
     398msgstr ""
     399
     400#: inc/admin/dashboard/views/help.php:34
     401msgid "Ask a question on the WordPress.org support forum."
     402msgstr ""
     403
     404#: inc/admin/dashboard/class-theme-review-notice.php:99
     405msgid "Ask in the support forum"
     406msgstr ""
     407
     408#: inc/admin/dashboard/views/overview.php:31
     409msgid "Assign your main menu"
    279410msgstr ""
    280411
    … …  
    357488msgstr ""
    358489
    359 #: inc/admin/dashboard/views/dashboard.php:281
    360 #: inc/admin/dashboard/views/help.php:112
    361 msgid "Based on 20+ Reviews"
    362 msgstr ""
    363 
    364490#: inc/admin/widgets/widget-init.php:105
    365491msgid "Before Footer"
    … …  
    402528msgstr ""
    403529
     530#: inc/admin/dashboard/views/free-vs-pro.php:51
     531msgid "Blog"
     532msgstr ""
     533
     534#: inc/admin/dashboard/views/overview.php:51
     535msgid "Blog & archive"
     536msgstr ""
     537
    404538#. Name of the theme
    405 #: inc/admin/dashboard/class-dashboard.php:174
    406 #: inc/admin/dashboard/class-theme-review-notice.php:122
    407 #: inc/admin/dashboard/views/dashboard.php:215
    408539msgid "BlogAura"
    409540msgstr ""
    … …  
    509640msgstr ""
    510641
     642#. %s: Pro theme name.
     643#: inc/admin/dashboard/views/features.php:44
     644#, php-format
     645msgid "Built into %s"
     646msgstr ""
     647
    511648#: inc/admin/widgets/class-image-widget.php:41
    512649msgid "Button Text"
    … …  
    519656#: inc/admin/widgets/class-cta.php:83
    520657msgid "Button Text - 2"
     658msgstr ""
     659
     660#: inc/admin/dashboard/views/features.php:34
     661msgid "Button, Subscribe"
    521662msgstr ""
    522663
    … …  
    524665#: inc/admin/customizer/helpers/defaults.php:179
    525666msgid "by"
     667msgstr ""
     668
     669#. %s: theme author.
     670#: inc/admin/dashboard/class-dashboard.php:311
     671#, php-format
     672msgid "by %s"
     673msgstr ""
     674
     675#: inc/admin/dashboard/views/recommended.php:71
     676msgid "By WPInterface"
    526677msgstr ""
    527678
    … …  
    558709msgstr ""
    559710
    560 #: inc/admin/meta-box/category-meta-box.php:25
    561 #: inc/admin/meta-box/category-meta-box.php:54
     711#: inc/admin/meta-box/category-meta-box.php:26
     712#: inc/admin/meta-box/category-meta-box.php:56
    562713msgid "Category Color"
    563714msgstr ""
    … …  
    637788msgstr ""
    638789
    639 #: inc/admin/dashboard/class-dashboard.php:204
    640 msgid "Changelog"
    641 msgstr ""
    642 
    643790#: inc/admin/dashboard/class-changelog-parser.php:25
    644791#: inc/admin/dashboard/class-changelog-parser.php:81
    … …  
    654801msgstr ""
    655802
    656 #: inc/admin/dashboard/class-welcome-notice.php:98
     803#: inc/admin/dashboard/class-welcome-notice.php:142
    657804msgid "Cheatin&#8217; huh?"
    658 msgstr ""
    659 
    660 #: inc/admin/dashboard/class-welcome-notice.php:72
    661 msgid ""
    662 "Check the quick links below for detailed information and to make the most of "
    663 "all the features our theme offers."
    664805msgstr ""
    665806
    … …  
    668809msgstr ""
    669810
    670 #: inc/admin/meta-box/category-meta-box.php:94
     811#: inc/admin/meta-box/category-meta-box.php:104
    671812msgid "Choose an image"
    672813msgstr ""
    … …  
    710851msgstr ""
    711852
     853#: inc/admin/dashboard/views/features.php:81
     854msgid "City council approves the new riverside park"
     855msgstr ""
     856
    712857#: inc/admin/customizer/helpers/helper-function.php:68
    713858msgid "Classic"
    … …  
    718863msgstr ""
    719864
     865#: inc/admin/dashboard/views/changelog.php:21
     866msgid "Close"
     867msgstr ""
     868
    720869#: template-parts/modal-search.php:21
    721870msgid "Close search"
    … …  
    724873#: inc/compatibility/elementor/widgets/class-blogaura-elementor-widget-base.php:93
    725874msgid "Color:"
     875msgstr ""
     876
     877#: inc/admin/dashboard/views/overview.php:48
     878#: inc/admin/dashboard/views/free-vs-pro.php:24
     879msgid "Colors"
    726880msgstr ""
    727881
    … …  
    749903msgstr[1] ""
    750904
    751 #: inc/admin/dashboard/views/dashboard.php:325
    752 #: inc/admin/dashboard/views/help.php:43
    753 msgid "Community Support"
    754 msgstr ""
    755 
    756 #: inc/admin/dashboard/views/help.php:71
    757 msgid "Connect with us on X"
    758 msgstr ""
    759 
    760 #: inc/admin/dashboard/views/help.php:47
    761 msgid "Contact Support"
     905#: inc/admin/dashboard/views/help.php:55
     906msgid "Community"
     907msgstr ""
     908
     909#: inc/admin/dashboard/views/help.php:33
     910msgid "Community support"
     911msgstr ""
     912
     913#: inc/admin/dashboard/views/features.php:148
     914#: inc/admin/dashboard/views/overview.php:181
     915msgid "Compare Free and Pro"
    762916msgstr ""
    763917
    764918#: inc/admin/customizer/helpers/controls.php:249
    765919msgid "Contact Us"
     920msgstr ""
     921
     922#: inc/admin/dashboard/views/free-vs-pro.php:45
     923msgid "Container Layout"
     924msgstr ""
     925
     926#: inc/admin/dashboard/views/free-vs-pro.php:62
     927msgid "Content"
    766928msgstr ""
    767929
    … …  
    787949msgstr ""
    788950
    789 #: inc/template-functions.php:210
     951#: inc/template-functions.php:209
    790952msgid "Copyright &copy; {{ date }}."
    791953msgstr ""
    … …  
    807969msgstr ""
    808970
    809 #: inc/admin/dashboard/views/dashboard.php:337
    810 msgid "Create a Ticket"
     971#: inc/admin/dashboard/class-welcome-notice.php:178
     972msgid "Could not install the plugin."
     973msgstr ""
     974
     975#: inc/admin/dashboard/class-dashboard.php:148
     976#: inc/admin/dashboard/class-admin.php:459
     977msgid "Could not load themes from WordPress.org. Please try again later."
     978msgstr ""
     979
     980#: inc/admin/dashboard/views/help.php:28
     981msgid "Create a ticket"
     982msgstr ""
     983
     984#: inc/admin/dashboard/class-admin.php:102
     985msgid "Create visual, tappable stories that the theme can display."
    811986msgstr ""
    812987
    … …  
    817992#: inc/admin/widgets/class-cta.php:30
    818993msgid "CTA Title"
     994msgstr ""
     995
     996#: inc/admin/dashboard/class-dashboard.php:314
     997#: inc/admin/dashboard/class-welcome-notice.php:101
     998msgid "Customize"
     999msgstr ""
     1000
     1001#: inc/admin/dashboard/views/overview.php:32
     1002msgid "Customize › Menus"
     1003msgstr ""
     1004
     1005#: inc/admin/dashboard/views/overview.php:26
     1006msgid "Customize › Site Identity"
     1007msgstr ""
     1008
     1009#: inc/admin/dashboard/views/overview.php:119
     1010msgid "Customizer shortcuts"
    8191011msgstr ""
    8201012
    … …  
    8251017msgstr ""
    8261018
     1019#: inc/admin/dashboard/views/overview.php:65
     1020#: inc/admin/dashboard/views/free-vs-pro.php:207
     1021msgid "Dark mode"
     1022msgstr ""
     1023
    8271024#: inc/admin/customizer/helpers/controls.php:232
    8281025msgid "Dark Mode Feature"
    … …  
    8311028#: inc/admin/customizer/helpers/theme-upsell.php:34
    8321029msgid "Dark mode options"
    833 msgstr ""
    834 
    835 #: inc/admin/dashboard/class-dashboard.php:137
    836 msgid "Dashboard"
    8371030msgstr ""
    8381031
    … …  
    9211114msgstr ""
    9221115
     1116#: inc/admin/dashboard/class-dashboard.php:151
     1117msgid "Details"
     1118msgstr ""
     1119
     1120#: inc/admin/dashboard/class-admin.php:211
     1121msgid "Developers"
     1122msgstr ""
     1123
     1124#: inc/admin/dashboard/class-welcome-notice.php:90
     1125#: inc/admin/dashboard/class-theme-review-notice.php:81
     1126msgid "Dismiss this notice."
     1127msgstr ""
     1128
    9231129#: inc/admin/meta-box/meta-box.php:160
    9241130#: inc/admin/customizer/sections/spotlight-block.php:140
    … …  
    10171223msgstr ""
    10181224
    1019 #: inc/admin/dashboard/class-welcome-notice.php:78
    1020 #: inc/admin/dashboard/views/dashboard.php:228
    1021 #: inc/admin/dashboard/views/dashboard.php:254
     1225#: inc/admin/dashboard/class-dashboard.php:315
     1226#: inc/admin/dashboard/views/overview.php:161
     1227#: inc/admin/dashboard/views/help.php:19
    10221228msgid "Documentation"
     1229msgstr ""
     1230
     1231#: inc/admin/dashboard/views/overview.php:109
     1232msgid "Done"
     1233msgstr ""
     1234
     1235#: inc/admin/dashboard/views/recommended.php:31
     1236msgid "Done for you"
    10231237msgstr ""
    10241238
    … …  
    11891403msgstr ""
    11901404
    1191 #: inc/admin/dashboard/views/dashboard.php:250
    1192 msgid ""
    1193 "Encountering an issue? Our comprehensive and detailed documentation is "
    1194 "designed to address your concerns and provide clear, thorough explanations "
    1195 "to resolve any confusion."
     1405#: inc/admin/dashboard/class-admin.php:204
     1406msgid "Enhancement"
     1407msgstr ""
     1408
     1409#. %s: theme name.
     1410#: inc/admin/dashboard/views/overview.php:172
     1411#, php-format
     1412msgid "Enjoying %s?"
     1413msgstr ""
     1414
     1415#. %s: theme name.
     1416#: inc/admin/dashboard/class-theme-review-notice.php:86
     1417#, php-format
     1418msgid "Enjoying %s? A quick review helps a lot."
    11961419msgstr ""
    11971420
    … …  
    12161439msgstr ""
    12171440
    1218 #: inc/template-functions.php:275
     1441#: inc/template-functions.php:274
    12191442msgid "Estimated read time"
     1443msgstr ""
     1444
     1445#. %s: theme name.
     1446#: inc/admin/dashboard/views/free-vs-pro.php:171
     1447#, php-format
     1448msgid "Everything in %s, plus the extras in Pro."
    12201449msgstr ""
    12211450
    … …  
    12401469msgstr ""
    12411470
    1242 #: inc/admin/dashboard/views/dashboard.php:47
    1243 msgid ""
    1244 "Experience effortless magazine-themed website creation with BlogAura! "
    1245 "Explore all the settings and features here."
    1246 msgstr ""
    1247 
    12481471#: inc/admin/customizer/helpers/controls.php:227
    12491472msgid "Explore Our Premium Features"
    12501473msgstr ""
    12511474
     1475#: inc/admin/dashboard/class-welcome-notice.php:129
     1476#: inc/admin/dashboard/views/overview.php:154
     1477msgid "Explore services"
     1478msgstr ""
     1479
    12521480#: inc/admin/customizer/helpers/controls.php:235
    12531481msgid "Extended Widget Options"
    1254 msgstr ""
    1255 
    1256 #: inc/admin/dashboard/views/dashboard.php:183
    1257 msgid "Extra Customizer Sections"
    12581482msgstr ""
    12591483
    … …  
    12641488msgstr ""
    12651489
    1266 #: inc/admin/dashboard/views/dashboard.php:175
    1267 msgid "Extra Widget Area"
    1268 msgstr ""
    1269 
    12701490#: inc/admin/dashboard/views/help.php:56
    1271 msgid "facebook"
    1272 msgstr ""
    1273 
    1274 #: inc/admin/dashboard/views/dashboard.php:415
    1275 #: inc/admin/dashboard/views/help.php:59
    1276 msgid "Facebook Community"
     1491msgid "Facebook"
    12771492msgstr ""
    12781493
    … …  
    12811496msgstr ""
    12821497
     1498#: inc/admin/dashboard/class-admin.php:267
     1499msgid ""
     1500"Faster pages and passing Core Web Vitals, shown with before-and-after data."
     1501msgstr ""
     1502
     1503#: inc/admin/dashboard/views/free-vs-pro.php:179
     1504msgid "Feature"
     1505msgstr ""
     1506
    12831507#: inc/admin/customizer/helpers/defaults.php:126
    12841508msgid "Featured - 1"
    … …  
    13091533msgstr ""
    13101534
     1535#: inc/admin/dashboard/class-admin.php:208
     1536#: inc/admin/dashboard/class-admin.php:209
     1537#: inc/admin/dashboard/class-admin.php:210
     1538msgid "Fix"
     1539msgstr ""
     1540
     1541#: inc/admin/dashboard/class-admin.php:291
     1542msgid ""
     1543"Fix the technical issues that stop search engines finding and showing your "
     1544"content."
     1545msgstr ""
     1546
    13111547#: inc/admin/customizer/helpers/controls.php:231
    1312 #: inc/admin/dashboard/views/dashboard.php:151
    13131548msgid "Font Options"
    13141549msgstr ""
    … …  
    13221557msgstr ""
    13231558
     1559#: inc/admin/dashboard/views/free-vs-pro.php:208
     1560msgid "Font size, family and weight controls"
     1561msgstr ""
     1562
     1563#: inc/admin/dashboard/views/overview.php:54
     1564#: inc/admin/dashboard/views/free-vs-pro.php:74
     1565msgid "Footer"
     1566msgstr ""
     1567
    13241568#: inc/admin/widgets/widget-init.php:141
    13251569#, php-format
    … …  
    13401584
    13411585#: inc/admin/customizer/sections/panel.php:115
    1342 #: inc/admin/dashboard/views/dashboard.php:100
    13431586msgid "Footer Options"
    13441587msgstr ""
    … …  
    13821625msgstr ""
    13831626
    1384 #: inc/admin/dashboard/views/free-vs-pro.php:214
     1627#: inc/admin/dashboard/views/free-vs-pro.php:180
    13851628msgid "Free"
    13861629msgstr ""
    13871630
    1388 #: inc/admin/dashboard/class-dashboard.php:155
    1389 msgid "Free Vs Pro"
     1631#: inc/admin/dashboard/views/recommended.php:57
     1632msgid "Free on WordPress.org. Install only what you need."
     1633msgstr ""
     1634
     1635#: inc/admin/dashboard/views/recommended.php:91
     1636msgid "Free on WordPress.org. Preview any of them before switching."
     1637msgstr ""
     1638
     1639#: inc/admin/dashboard/class-dashboard.php:236
     1640#: inc/admin/dashboard/views/free-vs-pro.php:170
     1641msgid "Free vs Pro"
     1642msgstr ""
     1643
     1644#: inc/admin/dashboard/views/features.php:137
     1645msgid "Free with every Pro theme"
    13901646msgstr ""
    13911647
    … …  
    13941650msgstr ""
    13951651
    1396 #: inc/admin/dashboard/views/dashboard.php:195
    1397 msgid "FSE Support"
     1652#: inc/admin/dashboard/views/overview.php:50
     1653msgid "Front page sections"
    13981654msgstr ""
    13991655
    … …  
    14161672msgstr ""
    14171673
     1674#: inc/admin/dashboard/views/free-vs-pro.php:13
     1675msgid "General Features"
     1676msgstr ""
     1677
    14181678#: inc/admin/widgets/class-tab-post.php:204
    14191679#: inc/admin/customizer/sections/panel.php:62
    … …  
    14211681msgstr ""
    14221682
    1423 #: inc/admin/dashboard/views/free-vs-pro.php:284
    1424 msgid "Get BlogAura Pro Now"
    1425 msgstr ""
    1426 
    1427 #: inc/admin/dashboard/class-welcome-notice.php:29
    1428 msgid "Get Started"
    1429 msgstr ""
    1430 
    1431 #: inc/admin/dashboard/class-welcome-notice.php:30
    1432 msgid "Get started"
    1433 msgstr ""
    1434 
    1435 #: inc/admin/dashboard/views/dashboard.php:105
    1436 msgid "Global Colors"
     1683#. %s: theme name.
     1684#: inc/admin/dashboard/views/overview.php:146
     1685#, php-format
     1686msgid "Get %s set up by the people who built it"
    14371687msgstr ""
    14381688
    14391689#: 404.php:22
    14401690msgid "Go Back To Homepage"
     1691msgstr ""
     1692
     1693#: inc/admin/dashboard/views/starter-templates.php:51
     1694msgid "Go to recommended plugins"
     1695msgstr ""
     1696
     1697#: inc/admin/dashboard/views/features.php:181
     1698msgid "Good"
    14411699msgstr ""
    14421700
    … …  
    14681726#: inc/compatibility/elementor/widgets/blogaura-elementor-widgets-grid-5.php:54
    14691727msgid "Grid Style 5"
     1728msgstr ""
     1729
     1730#. %s: theme name.
     1731#: inc/admin/dashboard/views/recommended.php:24
     1732#, php-format
     1733msgid "Hands-on help from the team that builds %s."
    14701734msgstr ""
    14711735
    … …  
    15001764msgstr ""
    15011765
     1766#: inc/admin/dashboard/views/starter-templates.php:94
     1767msgid "Have it set up for you"
     1768msgstr ""
     1769
     1770#: inc/admin/dashboard/views/free-vs-pro.php:32
     1771msgid "Header Features"
     1772msgstr ""
     1773
     1774#: inc/admin/dashboard/views/overview.php:49
     1775msgid "Header layout"
     1776msgstr ""
     1777
    15021778#: inc/admin/customizer/sections/panel.php:72
    1503 #: inc/admin/dashboard/views/dashboard.php:95
    15041779msgid "Header Options"
    15051780msgstr ""
    … …  
    15441819msgstr ""
    15451820
    1546 #: inc/admin/dashboard/class-dashboard.php:161
    1547 msgid "Help"
     1821#: inc/admin/dashboard/views/overview.php:160
     1822msgid "Help & resources"
     1823msgstr ""
     1824
     1825#: inc/admin/dashboard/class-dashboard.php:241
     1826msgid "Help & support"
    15481827msgstr ""
    15491828
    … …  
    15721851msgstr ""
    15731852
     1853#: inc/admin/dashboard/views/features.php:23
     1854msgid "High contrast"
     1855msgstr ""
     1856
    15741857#: inc/admin/customizer/sections/highlight-cat-post.php:105
    15751858msgid "Highlight Category Section Meta"
    … …  
    15801863msgstr ""
    15811864
     1865#: inc/admin/dashboard/views/features.php:25
     1866msgid "Highlight links"
     1867msgstr ""
     1868
    15821869#: inc/admin/customizer/sections/highlight-cat-post.php:10
    15831870msgid "Highlight Post Section"
    15841871msgstr ""
    15851872
     1873#: inc/admin/dashboard/views/overview.php:155
     1874#: inc/admin/dashboard/views/recommended.php:37
     1875msgid "Hire us"
     1876msgstr ""
     1877
    15861878#: assets/breadcrumbs/breadcrumbs.php:270
     1879#: inc/admin/dashboard/views/features.php:112
    15871880msgid "Home"
    15881881msgstr ""
    … …  
    16331926msgstr ""
    16341927
    1635 #: inc/admin/dashboard/class-theme-review-notice.php:105
    1636 msgid "I already did!"
    1637 msgstr ""
    1638 
    1639 #: inc/admin/dashboard/class-theme-review-notice.php:114
    1640 msgid "I have a query"
     1928#: inc/admin/dashboard/class-theme-review-notice.php:91
     1929msgid "I already did"
    16411930msgstr ""
    16421931
    … …  
    16591948msgstr ""
    16601949
    1661 #: inc/admin/meta-box/category-meta-box.php:111
     1950#: inc/admin/meta-box/category-meta-box.php:121
    16621951msgid "Image"
    16631952msgstr ""
    … …  
    16891978msgstr ""
    16901979
     1980#: inc/admin/dashboard/views/starter-templates.php:109
     1981msgid "Import"
     1982msgstr ""
     1983
     1984#: inc/admin/dashboard/views/starter-templates.php:77
     1985msgid "Import a ready-made design, then make it yours in the Customizer."
     1986msgstr ""
     1987
     1988#: inc/admin/dashboard/class-welcome-notice.php:100
     1989msgid "Import a starter site"
     1990msgstr ""
     1991
     1992#: inc/admin/dashboard/class-welcome-notice.php:97
     1993msgid "Import a starter site, or start from a clean slate in the Customizer."
     1994msgstr ""
     1995
     1996#: inc/admin/dashboard/class-admin.php:74
     1997msgid ""
     1998"Import WPInterface starter sites in one click: content, widgets and settings."
     1999msgstr ""
     2000
     2001#: inc/admin/dashboard/views/starter-templates.php:85
     2002msgid "Importing adds demo content"
     2003msgstr ""
     2004
     2005#: inc/admin/dashboard/class-admin.php:84
     2006msgid "Imports demo content, widgets and theme settings."
     2007msgstr ""
     2008
     2009#: inc/admin/dashboard/class-admin.php:205
     2010#: inc/admin/dashboard/class-admin.php:206
     2011#: inc/admin/dashboard/class-admin.php:207
     2012msgid "Improvement"
     2013msgstr ""
     2014
     2015#: inc/admin/dashboard/views/free-vs-pro.php:158
     2016msgid "Included"
     2017msgstr ""
     2018
     2019#: inc/admin/dashboard/views/features.php:145
     2020msgid "Included at no extra cost"
     2021msgstr ""
     2022
     2023#. %s: Pro theme name.
     2024#: inc/admin/dashboard/views/features.php:55
     2025#, php-format
     2026msgid "Included in %s"
     2027msgstr ""
     2028
     2029#: inc/admin/dashboard/views/features.php:55
     2030msgid "Included in your theme"
     2031msgstr ""
     2032
     2033#. %s: Pro theme name.
     2034#: inc/admin/dashboard/views/features.php:47
     2035#, php-format
     2036msgid "Included with %s"
     2037msgstr ""
     2038
     2039#: inc/admin/dashboard/views/starter-templates.php:33
     2040msgid "Included with the Pro version, together with every Pro feature."
     2041msgstr ""
     2042
    16912043#: inc/admin/meta-box/meta-box.php:109 inc/admin/meta-box/meta-box.php:120
    16922044#: inc/admin/meta-box/meta-box.php:138 inc/admin/meta-box/meta-box.php:151
    … …  
    16962048msgstr ""
    16972049
    1698 #: inc/admin/dashboard/views/dashboard.php:191
    1699 msgid "Instagram Widget"
    1700 msgstr ""
    1701 
    1702 #: inc/admin/dashboard/views/dashboard.php:402
    1703 #: inc/admin/dashboard/views/help.php:170
    1704 #: inc/admin/dashboard/views/products.php:131
     2050#: inc/admin/dashboard/views/recommended.php:15
    17052051msgid "Install"
    17062052msgstr ""
    17072053
    1708 #: inc/admin/dashboard/views/dashboard.php:20
    1709 msgid "Install WpInterface Add-Ons"
     2054#. 1: plugin names, 2: theme name.
     2055#: inc/admin/dashboard/views/starter-templates.php:50
     2056#, php-format
     2057msgid "Install %1$s to browse and import ready-made %2$s designs."
     2058msgstr ""
     2059
     2060#: inc/admin/dashboard/class-welcome-notice.php:118
     2061msgid "Install starter plugins"
     2062msgstr ""
     2063
     2064#: inc/admin/dashboard/class-welcome-notice.php:108
     2065msgid ""
     2066"Install the free starter plugins to import a demo layout in one click, then "
     2067"fine-tune colours, header and homepage in the Customizer."
     2068msgstr ""
     2069
     2070#: inc/admin/dashboard/views/overview.php:19
     2071msgid "Install the starter plugins"
     2072msgstr ""
     2073
     2074#: inc/admin/dashboard/class-welcome-notice.php:60
     2075msgid "Installing…"
    17102076msgstr ""
    17112077
    … …  
    17262092msgstr ""
    17272093
    1728 #: inc/admin/dashboard/views/help.php:53
    1729 msgid "Join Our Community"
    1730 msgstr ""
    1731 
    1732 #: inc/admin/dashboard/views/help.php:60
    1733 msgid ""
    1734 "Join our Facebook haven, where the latest news and updates eagerly await "
    1735 "your arrival."
    1736 msgstr ""
    1737 
    1738 #: inc/admin/dashboard/views/dashboard.php:437
    1739 msgid ""
    1740 "Join our Facebook page to connect with like-minded individuals for "
    1741 "discussions, help, and support on all things related to the theme!"
    1742 msgstr ""
    1743 
    1744 #: inc/admin/dashboard/views/help.php:70
    1745 msgid ""
    1746 "Join our Twitter haven, where the latest news and updates eagerly await your "
    1747 "arrival."
    1748 msgstr ""
    1749 
    1750 #: inc/admin/dashboard/views/help.php:80
    1751 msgid ""
    1752 "Join our YouTube haven, where the latest news and updates eagerly await your "
    1753 "arrival."
    1754 msgstr ""
    1755 
    17562094#: inc/admin/customizer/helpers/defaults.php:250
    17572095msgid "Just For You"
     2096msgstr ""
     2097
     2098#: inc/admin/dashboard/views/features.php:129
     2099msgid "Keyboard & screen reader"
    17582100msgstr ""
    17592101
    … …  
    17732115msgstr ""
    17742116
     2117#: inc/admin/dashboard/views/features.php:22
     2118msgid "Larger text"
     2119msgstr ""
     2120
    17752121#: inc/admin/widgets/class-tab-post.php:158
     2122#: inc/admin/dashboard/views/changelog.php:46
    17762123msgid "Latest"
    17772124msgstr ""
    … …  
    17852132msgstr ""
    17862133
    1787 #: inc/admin/dashboard/class-dashboard.php:219
    1788 msgid "Latest Updates"
    1789 msgstr ""
    1790 
    17912134#: inc/admin/meta-box/meta-box.php:68 inc/admin/meta-box/meta-box.php:87
    17922135msgid "Layout Options"
    17932136msgstr ""
    17942137
     2138#: inc/admin/dashboard/class-admin.php:261
     2139msgid ""
     2140"Layout, colour and feature changes made by the developers who built your "
     2141"theme."
     2142msgstr ""
     2143
    17952144#: inc/admin/customizer/helpers/defaults.php:147
    1796 #: inc/admin/dashboard/views/products.php:52
    1797 #: inc/admin/dashboard/views/products.php:119
    17982145msgid "Learn More"
     2146msgstr ""
     2147
     2148#: inc/admin/dashboard/views/help.php:42
     2149#: inc/admin/dashboard/views/recommended.php:47
     2150msgid "Learn more"
    17992151msgstr ""
    18002152
    … …  
    18032155#, php-format
    18042156msgid "Leave a Comment<span class=\"screen-reader-text\"> on %s</span>"
     2157msgstr ""
     2158
     2159#: inc/admin/dashboard/class-theme-review-notice.php:90
     2160#: inc/admin/dashboard/views/overview.php:174
     2161msgid "Leave a review"
    18052162msgstr ""
    18062163
    … …  
    18352192msgstr ""
    18362193
    1837 #: inc/admin/dashboard/views/dashboard.php:260
    1838 #: inc/admin/dashboard/views/help.php:89
    1839 msgid "Leave us a Review"
     2194#: inc/admin/dashboard/views/help.php:62
     2195msgid "Leave us a review"
    18402196msgstr ""
    18412197
    … …  
    18542210msgstr ""
    18552211
    1856 #: inc/admin/dashboard/class-welcome-notice.php:67
    1857 msgid ""
    1858 "Let's start by installing and activating One Click Demo Import, WPInterface "
    1859 "Add-ons and MC4WP: Mailchimp for WordPress"
    1860 msgstr ""
    1861 
    1862 #: inc/admin/dashboard/views/dashboard.php:440
    1863 msgid "Like or follow our Facebook Page"
    1864 msgstr ""
    1865 
    1866 #: inc/admin/dashboard/views/help.php:61
    1867 msgid "Like or follow us on Facebook"
     2212#: inc/admin/dashboard/views/features.php:60
     2213msgid "Light, dark and high contrast, monochrome and saturation"
    18682214msgstr ""
    18692215
    … …  
    18782224#: inc/admin/widgets/class-cta.php:87
    18792225msgid "Link to url - 2"
     2226msgstr ""
     2227
     2228#: inc/admin/dashboard/views/features.php:31
     2229msgid "Link, Skip to content"
     2230msgstr ""
     2231
     2232#: inc/admin/dashboard/views/features.php:32
     2233msgid "Link, World"
    18802234msgstr ""
    18812235
    … …  
    18962250msgstr ""
    18972251
    1898 #: inc/admin/dashboard/views/products.php:54
    1899 msgid "Live demo"
    1900 msgstr ""
    1901 
    1902 #: inc/admin/dashboard/views/dashboard.php:61
    1903 msgid "Live Preview"
    1904 msgstr ""
    1905 
    19062252#: inc/admin/customizer/helpers/helper-function.php:221
    19072253msgid "Load More On Click"
    … …  
    19162262msgstr ""
    19172263
     2264#: inc/admin/dashboard/class-dashboard.php:145
     2265msgid "Loading themes from WordPress.org…"
     2266msgstr ""
     2267
     2268#: inc/admin/dashboard/views/recommended.php:97
     2269msgid "Loads the list and screenshots from WordPress.org."
     2270msgstr ""
     2271
     2272#: inc/admin/dashboard/views/features.php:80
     2273msgid "Local news"
     2274msgstr ""
     2275
     2276#: inc/admin/dashboard/views/features.php:169
     2277msgid "Local news roundup"
     2278msgstr ""
     2279
     2280#: inc/admin/dashboard/views/features.php:155
     2281msgid "local news today"
     2282msgstr ""
     2283
    19182284#: inc/admin/widgets/class-mailchimp.php:64
    19192285msgid "Mailchimp Description"
    … …  
    19482314msgstr ""
    19492315
     2316#: inc/admin/dashboard/views/features.php:45
     2317msgid "Make your site easier to read and use for every visitor."
     2318msgstr ""
     2319
     2320#: inc/admin/dashboard/class-admin.php:278
     2321msgid "Malware Removal & Security Hardening"
     2322msgstr ""
     2323
     2324#: inc/admin/dashboard/class-admin.php:279
     2325msgid ""
     2326"Manual cleanup of hacked sites, closing the entry point, and help getting "
     2327"off blacklists."
     2328msgstr ""
     2329
    19502330#: inc/admin/customizer/helpers/controls.php:241
    19512331msgid "Many More .."
    19522332msgstr ""
    19532333
    1954 #: inc/admin/dashboard/class-theme-review-notice.php:109
     2334#: inc/admin/dashboard/views/features.php:91
     2335msgid "Markets"
     2336msgstr ""
     2337
     2338#: inc/admin/dashboard/class-theme-review-notice.php:92
    19552339msgid "Maybe later"
    19562340msgstr ""
    … …  
    20162400msgstr ""
    20172401
     2402#: inc/admin/dashboard/views/overview.php:53
     2403msgid "Menus"
     2404msgstr ""
     2405
     2406#: inc/admin/dashboard/views/features.php:185
     2407msgid "Meta description"
     2408msgstr ""
     2409
    20182410#: inc/compatibility/elementor/widgets/class-blogaura-elementor-widget-base.php:126
    20192411msgid "Meta Font Size"
    … …  
    20512443msgstr ""
    20522444
    2053 #: inc/admin/dashboard/views/dashboard.php:179
    2054 msgid "Modal Popup Module"
    2055 msgstr ""
    2056 
    20572445#: assets/breadcrumbs/breadcrumbs.php:793
    20582446#: assets/breadcrumbs/breadcrumbs.php:849
    … …  
    20702458msgstr ""
    20712459
     2460#: inc/admin/dashboard/views/recommended.php:75
     2461msgid "More details"
     2462msgstr ""
     2463
    20722464#: inc/admin/customizer/helpers/defaults.php:217
    20732465msgid "More From Author"
    … …  
    20782470msgstr ""
    20792471
    2080 #. %s: Theme Name.
    2081 #: inc/admin/dashboard/views/dashboard.php:332
    2082 msgid ""
    2083 "Need assistance? Reach out to our professional support team by submitting a "
    2084 "support ticket, and we'll provide you with the help you need."
     2472#: inc/admin/dashboard/views/recommended.php:90
     2473msgid "More themes by WPInterface"
    20852474msgstr ""
    20862475
    … …  
    20892478msgstr ""
    20902479
     2480#: inc/admin/dashboard/class-admin.php:201
     2481#: inc/admin/dashboard/class-admin.php:202
     2482#: inc/admin/dashboard/class-admin.php:203
     2483msgid "New"
     2484msgstr ""
     2485
     2486#. %s: theme version.
     2487#: inc/admin/dashboard/views/help.php:47
     2488#, php-format
     2489msgid "New features, improvements and fixes in version %s and earlier."
     2490msgstr ""
     2491
    20912492#: template-parts/pagination/pagination-option.php:59
    20922493msgid "Newer Articles"
     2494msgstr ""
     2495
     2496#: inc/admin/dashboard/class-admin.php:253
     2497msgid "News & Blog Website Setup"
    20932498msgstr ""
    20942499
    … …  
    21082513msgstr ""
    21092514
    2110 #: template-parts/pagination/post-load.php:71
     2515#: inc/admin/dashboard/views/changelog.php:26
     2516msgid "No changelog available."
     2517msgstr ""
     2518
     2519#: template-parts/pagination/post-load.php:77
    21112520msgid "No More Posts"
     2521msgstr ""
     2522
     2523#: inc/admin/dashboard/views/features.php:64
     2524msgid "No plugin · No external requests"
    21122525msgstr ""
    21132526
    … …  
    21362549#: inc/admin/widgets/class-cta.php:47
    21372550msgid "Normal"
     2551msgstr ""
     2552
     2553#: inc/admin/dashboard/views/free-vs-pro.php:160
     2554msgid "Not included"
    21382555msgstr ""
    21392556
    … …  
    22002617msgstr ""
    22012618
    2202 #: inc/admin/dashboard/views/dashboard.php:187
    2203 msgid "Offcanvas Content Module"
    2204 msgstr ""
    2205 
    22062619#: inc/admin/widgets/class-slider-post.php:91
    22072620#: inc/admin/widgets/class-tab-post.php:67
    … …  
    22352648msgstr ""
    22362649
     2650#: inc/admin/dashboard/class-admin.php:285
     2651msgid "One priority ticket, handled first by a senior engineer."
     2652msgstr ""
     2653
    22372654#. 1: title.
    22382655#: comments.php:35
    … …  
    22452662msgstr ""
    22462663
     2664#: inc/admin/dashboard/views/overview.php:111
     2665msgid "Open"
     2666msgstr ""
     2667
     2668#: inc/admin/dashboard/views/help.php:27
     2669msgid "Open a ticket and our team will get back to you by email."
     2670msgstr ""
     2671
     2672#: inc/admin/dashboard/views/overview.php:71
     2673msgid "Open Graph"
     2674msgstr ""
     2675
     2676#: inc/admin/dashboard/views/recommended.php:93
     2677msgid "Open in Add Themes"
     2678msgstr ""
     2679
    22472680#: inc/admin/widgets/class-image-widget.php:50
    22482681msgid "Open Link in new Tab"
    … …  
    22552688#: inc/admin/widgets/class-cta.php:92
    22562689msgid "Open Link in new Tab - 2"
     2690msgstr ""
     2691
     2692#: inc/admin/dashboard/class-welcome-notice.php:120
     2693msgid "Open theme dashboard"
    22572694msgstr ""
    22582695
    … …  
    22872724msgstr ""
    22882725
    2289 #: inc/admin/dashboard/class-dashboard.php:149
    2290 msgid "Our Recommendation"
     2726#: inc/admin/dashboard/views/features.php:138
     2727msgid "Our own SEO plugin"
     2728msgstr ""
     2729
     2730#: inc/admin/dashboard/views/free-vs-pro.php:211
     2731msgid "Our own SEO plugin, included"
     2732msgstr ""
     2733
     2734#: inc/admin/dashboard/views/starter-templates.php:93
     2735msgid ""
     2736"Our team can apply this design to your existing site and set it up around "
     2737"your content, without importing any demo content."
    22912738msgstr ""
    22922739
    … …  
    23012748msgstr ""
    23022749
     2750#: inc/admin/dashboard/class-dashboard.php:222
     2751msgid "Overview"
     2752msgstr ""
     2753
    23032754#. %s is the page number.
    23042755#: assets/breadcrumbs/breadcrumbs.php:276
    … …  
    23152766msgstr ""
    23162767
    2317 #: inc/admin/dashboard/views/help.php:27
    2318 msgid ""
    2319 "Please check out basic documentation for detailed information on how to use "
    2320 "BlogAura."
     2768#: inc/admin/dashboard/views/free-vs-pro.php:212
     2769msgid "Personal support by email and tickets"
    23212770msgstr ""
    23222771
    … …  
    23292778msgstr ""
    23302779
    2331 #: inc/admin/dashboard/views/products.php:121
    2332 msgid "Plugin Page"
    2333 msgstr ""
    2334 
    2335 #: inc/admin/dashboard/views/products.php:64
    2336 msgid "Plugins"
     2780#: inc/admin/dashboard/views/recommended.php:104
     2781msgid ""
     2782"Plugins and themes on this page are free on WordPress.org. Services are "
     2783"provided by WPInterface; those links open wpinterface.com."
     2784msgstr ""
     2785
     2786#: inc/admin/dashboard/views/overview.php:69
     2787msgid "Pop-up box"
    23372788msgstr ""
    23382789
    … …  
    23822833msgstr ""
    23832834
     2835#: inc/admin/dashboard/views/overview.php:68
     2836msgid "Post reactions"
     2837msgstr ""
     2838
    23842839#: inc/admin/customizer/helpers/defaults.php:66
    23852840#: inc/admin/customizer/helpers/defaults.php:81
    … …  
    24282883msgstr ""
    24292884
     2885#. %s: theme name.
     2886#: inc/admin/dashboard/class-welcome-notice.php:128
     2887#, php-format
     2888msgid ""
     2889"Prefer it done for you? The WPInterface team can set up and customise %s for "
     2890"your site."
     2891msgstr ""
     2892
    24302893#: inc/admin/customizer/sections/preloader.php:10
    24312894msgid "Preloader Options"
    24322895msgstr ""
    24332896
    2434 #: inc/admin/dashboard/views/dashboard.php:138
    2435 msgid "Premium Features"
     2897#: inc/admin/dashboard/views/free-vs-pro.php:116
     2898msgid "Premium Elementor Widgets"
     2899msgstr ""
     2900
     2901#: inc/admin/dashboard/class-dashboard.php:150
     2902#: inc/admin/dashboard/views/starter-templates.php:36
     2903#: inc/admin/dashboard/views/starter-templates.php:111
     2904msgid "Preview"
    24362905msgstr ""
    24372906
    … …  
    24442913msgstr ""
    24452914
    2446 #: inc/admin/dashboard/views/free-vs-pro.php:215
     2915#: inc/admin/dashboard/views/overview.php:163
     2916#: inc/admin/dashboard/views/help.php:26
     2917msgid "Priority support"
     2918msgstr ""
     2919
     2920#: inc/admin/dashboard/class-dashboard.php:308
     2921#: inc/admin/dashboard/views/starter-templates.php:28
     2922#: inc/admin/dashboard/views/free-vs-pro.php:181
    24472923msgid "Pro"
    24482924msgstr ""
    24492925
    2450 #: inc/admin/dashboard/class-admin.php:123
    2451 msgid "Processing..."
    2452 msgstr ""
    2453 
    2454 #: inc/admin/dashboard/class-welcome-notice.php:71
    2455 msgid "Quick Links"
    2456 msgstr ""
    2457 
    2458 #: inc/admin/dashboard/views/dashboard.php:79
    2459 msgid "Quick Settings"
     2926#: inc/admin/dashboard/views/overview.php:132
     2927msgid "Pro features"
     2928msgstr ""
     2929
     2930#: inc/admin/dashboard/views/free-vs-pro.php:143
     2931msgid "Pro Only"
     2932msgstr ""
     2933
     2934#: inc/admin/dashboard/views/recommended.php:23
     2935msgid "Professional services"
    24602936msgstr ""
    24612937
    … …  
    24722948msgstr ""
    24732949
    2474 #: inc/admin/dashboard/views/dashboard.php:167
    2475 msgid "Reaction Add-Ons"
    2476 msgstr ""
    2477 
    2478 #: inc/template-functions.php:156
     2950#: inc/template-functions.php:155
    24792951msgid "Read More"
    24802952msgstr ""
    24812953
    2482 #: inc/template-functions.php:159
     2954#: inc/template-functions.php:158
    24832955#, php-format
    24842956msgid "Read more about %s"
    24852957msgstr ""
    24862958
    2487 #: inc/admin/dashboard/views/help.php:26
    2488 msgid "Read Theme Documentation"
     2959#: inc/admin/dashboard/views/help.php:21
     2960msgid "Read the docs"
    24892961msgstr ""
    24902962
    … …  
    25012973msgstr ""
    25022974
     2975#: inc/admin/dashboard/views/features.php:24
     2976msgid "Readable font"
     2977msgstr ""
     2978
     2979#: inc/admin/dashboard/views/features.php:104
     2980msgid "Reader toolbar"
     2981msgstr ""
     2982
     2983#: inc/admin/dashboard/views/features.php:26
     2984msgid "Reading mask"
     2985msgstr ""
     2986
     2987#: inc/admin/dashboard/views/features.php:61
     2988msgid "Reading mask, reading line, text to speech and pause animations"
     2989msgstr ""
     2990
    25032991#. 1: link to WP admin new post page.
    25042992#: template-parts/content-none.php:24
    … …  
    25082996msgstr ""
    25092997
     2998#. %s: theme name.
     2999#: inc/admin/dashboard/views/changelog.php:19
     3000#, php-format
     3001msgid "Recent %s releases"
     3002msgstr ""
     3003
    25103004#: inc/admin/widgets/class-recent-post.php:27
    25113005msgid "Recent Posts"
    25123006msgstr ""
    25133007
     3008#: inc/admin/dashboard/class-dashboard.php:231
     3009msgid "Recommended"
     3010msgstr ""
     3011
    25143012#: inc/admin/customizer/helpers/helper-function.php:351
    25153013msgid "Recommended Alternate Grid View"
    … …  
    25243022msgstr ""
    25253023
    2526 #: inc/admin/dashboard/class-welcome-notice.php:66
    2527 msgid "Recommended Plugins"
     3024#: inc/admin/dashboard/views/recommended.php:56
     3025msgid "Recommended plugins"
    25283026msgstr ""
    25293027
    … …  
    25693067msgstr ""
    25703068
    2571 #: inc/admin/meta-box/category-meta-box.php:20
    2572 #: inc/admin/meta-box/category-meta-box.php:48
     3069#: inc/admin/meta-box/category-meta-box.php:21
     3070#: inc/admin/meta-box/category-meta-box.php:50
    25733071#: inc/admin/widgets/class-author.php:186 inc/admin/widgets/widget-base.php:533
    25743072msgid "Remove image"
    2575 msgstr ""
    2576 
    2577 #: inc/admin/dashboard/views/dashboard.php:171
    2578 msgid "Remove Theme Credit"
    25793073msgstr ""
    25803074
    … …  
    25913085#: inc/admin/customizer/helpers/helper-function.php:422
    25923086msgid "Right Sidebar"
     3087msgstr ""
     3088
     3089#: inc/admin/dashboard/views/features.php:186
     3090msgid "Schema markup"
     3091msgstr ""
     3092
     3093#: inc/admin/dashboard/views/features.php:142
     3094msgid "Schema markup and XML sitemaps for your posts"
    25933095msgstr ""
    25943096
    … …  
    26123114msgstr ""
    26133115
     3116#: inc/admin/dashboard/views/features.php:116
     3117msgid "Search news…"
     3118msgstr ""
     3119
     3120#: inc/admin/dashboard/views/features.php:174
     3121msgid "Search preview"
     3122msgstr ""
     3123
    26143124#. %s: search query.
    26153125#: search.php:24
    … …  
    26243134msgstr ""
    26253135
     3136#: inc/admin/dashboard/views/features.php:33
     3137msgid "Search, edit text"
     3138msgstr ""
     3139
    26263140#: inc/admin/customizer/sections/highlight-cat-post.php:64
    26273141msgid "Section Title"
    … …  
    26363150msgstr ""
    26373151
    2638 #: template-parts/pagination/post-load.php:42
     3152#: inc/admin/dashboard/class-admin.php:200
     3153msgid "Security"
     3154msgstr ""
     3155
     3156#: template-parts/pagination/post-load.php:43
    26393157msgid "Security check failed: Query vars modified."
    26403158msgstr ""
    26413159
    2642 #. %s: Theme Name
    2643 #: inc/admin/dashboard/views/dashboard.php:317
    2644 msgid ""
    2645 "Seek answers on the WordPress.org community support forum where a supportive "
    2646 "community is ready to assist. While our primary focus is on delivering "
    2647 "premium support to our pro users, we're also here to help you with "
    2648 "occasional queries regarding our free theme."
     3160#: inc/admin/dashboard/views/recommended.php:36
     3161msgid "See what’s included"
    26493162msgstr ""
    26503163
    … …  
    26923205msgstr ""
    26933206
    2694 #: inc/admin/meta-box/category-meta-box.php:27
    2695 #: inc/admin/meta-box/category-meta-box.php:57
     3207#: inc/admin/meta-box/category-meta-box.php:28
     3208#: inc/admin/meta-box/category-meta-box.php:59
    26963209msgid ""
    26973210"Select color for this category that will be displayed on the front end in "
    … …  
    27473260msgstr ""
    27483261
    2749 #. %s: Theme Name.
    2750 #: inc/admin/dashboard/views/help.php:117
    2751 msgid ""
    2752 "Sharing your review is a valuable way to help us enhance your experience."
     3262#: inc/admin/dashboard/views/features.php:190
     3263msgid "SEO checks"
     3264msgstr ""
     3265
     3266#: inc/admin/dashboard/views/features.php:184
     3267msgid "SEO title"
     3268msgstr ""
     3269
     3270#: inc/admin/dashboard/views/features.php:141
     3271msgid "SEO titles and meta descriptions with a live search preview"
     3272msgstr ""
     3273
     3274#. %s: theme name.
     3275#: inc/admin/dashboard/views/overview.php:83
     3276#, php-format
     3277msgid "Set up %s"
     3278msgstr ""
     3279
     3280#: inc/admin/dashboard/views/features.php:67
     3281msgid "Set up the toolbar"
     3282msgstr ""
     3283
     3284#: inc/admin/dashboard/views/overview.php:87
     3285msgid "Setup progress"
     3286msgstr ""
     3287
     3288#: inc/admin/dashboard/views/overview.php:147
     3289msgid ""
     3290"Setup, customisation, speed and ongoing care from our WordPress engineers."
     3291msgstr ""
     3292
     3293#: inc/admin/dashboard/views/help.php:63
     3294msgid "Sharing your experience helps us improve the theme."
    27533295msgstr ""
    27543296
    … …  
    27613303msgstr ""
    27623304
     3305#: inc/admin/dashboard/views/recommended.php:96
     3306msgid "Show all WPInterface themes"
     3307msgstr ""
     3308
    27633309#: inc/admin/widgets/class-slider-post.php:214
    27643310#: inc/admin/widgets/class-recent-post.php:155
    … …  
    28303376msgstr ""
    28313377
     3378#: inc/admin/dashboard/views/recommended.php:101
     3379msgid "Show more themes"
     3380msgstr ""
     3381
    28323382#: inc/admin/widgets/class-category-grid.php:90
    28333383msgid "Show Post Count"
    … …  
    28863436msgstr ""
    28873437
     3438#: inc/admin/dashboard/views/overview.php:52
     3439msgid "Single post"
     3440msgstr ""
     3441
    28883442#: inc/admin/meta-box/meta-box.php:72
    28893443msgid "Single Post Meta"
    … …  
    28943448msgstr ""
    28953449
    2896 #: inc/admin/dashboard/views/dashboard.php:115
    2897 msgid "Single Sidebar Options"
    2898 msgstr ""
    2899 
    2900 #: inc/admin/dashboard/views/dashboard.php:90
    2901 msgid "Site Identity"
    2902 msgstr ""
    2903 
    2904 #: header.php:23
     3450#: inc/admin/dashboard/views/overview.php:47
     3451msgid "Site identity"
     3452msgstr ""
     3453
     3454#: inc/admin/dashboard/class-admin.php:254
     3455msgid ""
     3456"Skip the setup work. Our team gets your news or blog site running on "
     3457"BlogAura so you can start publishing."
     3458msgstr ""
     3459
     3460#: header.php:23 inc/admin/dashboard/views/features.php:109
    29053461msgid "Skip to content"
    29063462msgstr ""
    … …  
    29603516msgstr ""
    29613517
    2962 #: inc/admin/dashboard/views/dashboard.php:163
    2963 msgid "Social Share"
     3518#: inc/admin/dashboard/views/features.php:143
     3519msgid "Social previews for Facebook and X"
     3520msgstr ""
     3521
     3522#: inc/admin/dashboard/views/overview.php:67
     3523msgid "Social share"
    29643524msgstr ""
    29653525
    … …  
    29893549msgstr ""
    29903550
     3551#: inc/admin/dashboard/class-theme-review-notice.php:98
     3552msgid "Something not working, or missing a feature?"
     3553msgstr ""
     3554
     3555#: inc/admin/dashboard/class-welcome-notice.php:61
     3556msgid ""
     3557"Something went wrong. Please try again, or install the plugins from Plugins "
     3558"› Add New."
     3559msgstr ""
     3560
    29913561#: template-parts/content-none.php:37
    29923562msgid ""
    … …  
    29993569msgstr ""
    30003570
     3571#: inc/admin/dashboard/class-admin.php:266
     3572msgid "Speed & Core Web Vitals"
     3573msgstr ""
     3574
     3575#: inc/admin/dashboard/views/features.php:114
     3576msgid "Sport"
     3577msgstr ""
     3578
    30013579#: inc/admin/customizer/sections/spotlight-block.php:122
    30023580msgid "Spotlight Category Section Meta"
    … …  
    30113589msgstr ""
    30123590
    3013 #: inc/admin/dashboard/views/dashboard.php:42
    3014 msgid "Start Building with BlogAura!"
    3015 msgstr ""
    3016 
    3017 #: inc/admin/dashboard/class-dashboard.php:143
    3018 msgid "Starter Templates"
     3591#: inc/admin/dashboard/class-welcome-notice.php:96
     3592msgid "Starter plugins are installed."
     3593msgstr ""
     3594
     3595#: inc/admin/dashboard/class-dashboard.php:227
     3596#: inc/admin/dashboard/views/starter-templates.php:76
     3597msgid "Starter sites"
     3598msgstr ""
     3599
     3600#: inc/admin/dashboard/views/starter-templates.php:49
     3601msgid "Starter sites need a free plugin"
     3602msgstr ""
     3603
     3604#. %s: theme name.
     3605#: inc/admin/dashboard/views/help.php:20
     3606#, php-format
     3607msgid "Step-by-step guides for every %s setting."
    30193608msgstr ""
    30203609
    … …  
    31093698msgstr ""
    31103699
    3111 #: inc/admin/dashboard/views/dashboard.php:292
    3112 #: inc/admin/dashboard/views/help.php:123
    3113 msgid "Submit a Review"
    3114 msgstr ""
    3115 
    31163700#: inc/admin/widgets/class-youtube-video.php:83
    3117 #: inc/admin/dashboard/views/help.php:81
     3701#: inc/admin/dashboard/views/features.php:118
    31183702msgid "Subscribe"
    31193703msgstr ""
    31203704
    3121 #: inc/admin/dashboard/views/dashboard.php:299
    3122 #: inc/admin/dashboard/views/help.php:37
     3705#: inc/admin/dashboard/views/free-vs-pro.php:149
    31233706msgid "Support"
    31243707msgstr ""
    31253708
    3126 #: inc/admin/dashboard/class-theme-review-notice.php:101
    3127 msgid "Sure, I'd love to!"
     3709#: inc/admin/dashboard/views/overview.php:165
     3710msgid "Support forum on WordPress.org"
    31283711msgstr ""
    31293712
    … …  
    31323715msgstr ""
    31333716
     3717#: inc/admin/dashboard/views/features.php:128
     3718msgid "Tab →"
     3719msgstr ""
     3720
    31343721#. 1: list of tags.
    31353722#: inc/template-tags.php:227
    31363723#, php-format
    31373724msgid "Tagged %1$s"
     3725msgstr ""
     3726
     3727#: inc/admin/dashboard/class-admin.php:290
     3728msgid "Technical SEO for WordPress"
    31383729msgstr ""
    31393730
    … …  
    31543745msgstr ""
    31553746
    3156 #: inc/admin/dashboard/class-theme-review-notice.php:95
    3157 msgid "Thank you for being an awesome part of our community! 💖"
    3158 msgstr ""
    3159 
    3160 #: inc/admin/dashboard/class-welcome-notice.php:60
    3161 msgid "Thank you for choosing BlogAura!"
     3747#: inc/admin/dashboard/views/features.php:59
     3748msgid "Text size, line height, readable and dyslexia-friendly fonts"
    31623749msgstr ""
    31633750
    … …  
    31693756msgstr ""
    31703757
     3758#. Demo article text. Keep the <u> tags around the two links.
     3759#: inc/admin/dashboard/views/features.php:85
     3760msgid ""
     3761"The plan passed on Tuesday. Read the <u>full report</u> or see <u>what "
     3762"changes next</u>."
     3763msgstr ""
     3764
    31713765#. 1: Theme name, 2: Theme author.
    3172 #: inc/template-functions.php:222
     3766#: inc/template-functions.php:221
    31733767#, php-format
    31743768msgid "Theme %1$s designed by %2$s."
     3769msgstr ""
     3770
     3771#: inc/admin/dashboard/class-welcome-notice.php:106
     3772msgid "Theme activated"
    31753773msgstr ""
    31763774
    … …  
    31793777msgstr ""
    31803778
    3181 #: inc/admin/dashboard/class-welcome-notice.php:75
    3182 msgid "Theme Dashboard"
    3183 msgstr ""
    3184 
    3185 #: inc/admin/dashboard/views/products.php:6
    3186 msgid "Themes"
     3779#: inc/admin/dashboard/class-dashboard.php:322
     3780msgid "Theme dashboard sections"
     3781msgstr ""
     3782
     3783#: inc/admin/dashboard/views/free-vs-pro.php:96
     3784msgid "Theme Widgets"
    31873785msgstr ""
    31883786
    … …  
    32143812msgstr ""
    32153813
    3216 #: inc/admin/meta-box/category-meta-box.php:13
    3217 #: inc/admin/meta-box/category-meta-box.php:40
    3218 #: inc/admin/meta-box/category-meta-box.php:122
     3814#: inc/admin/meta-box/category-meta-box.php:14
     3815#: inc/admin/meta-box/category-meta-box.php:42
     3816#: inc/admin/meta-box/category-meta-box.php:132
    32193817#: inc/admin/widgets/class-tab-post.php:274
    32203818#: inc/admin/widgets/class-recent-post.php:120
    … …  
    32883886msgstr ""
    32893887
    3290 #: inc/admin/dashboard/views/starter-templates.php:12
    3291 msgid ""
    3292 "To import starter sites for BlogAura, you need to install and activate the "
    3293 "One-Click Demo Import and WPInterface Add-ons plugins."
    3294 msgstr ""
    3295 
    32963888#: inc/admin/customizer/sections/top-bar.php:109
    32973889msgid "Today's Date Format"
    … …  
    33003892#: inc/admin/customizer/helpers/defaults.php:52
    33013893msgid "Today:"
     3894msgstr ""
     3895
     3896#: inc/admin/dashboard/views/features.php:165
     3897msgid "Today’s headlines"
    33023898msgstr ""
    33033899
    … …  
    33213917msgstr ""
    33223918
     3919#: inc/admin/dashboard/class-dashboard.php:149
     3920msgid "Try again"
     3921msgstr ""
     3922
     3923#: inc/admin/dashboard/views/features.php:104
     3924msgid "Try it"
     3925msgstr ""
     3926
     3927#: inc/admin/dashboard/views/features.php:70
     3928msgid "Try it on the Pro demo"
     3929msgstr ""
     3930
    33233931#: inc/admin/widgets/class-social-menu.php:59
    33243932msgid "Two"
    … …  
    33373945msgstr ""
    33383946
     3947#: inc/admin/dashboard/views/overview.php:62
     3948msgid "Typography"
     3949msgstr ""
     3950
     3951#: inc/admin/dashboard/views/free-vs-pro.php:205
     3952msgid "Unlock every feature in the comparison above"
     3953msgstr ""
     3954
    33393955#: inc/admin/customizer/helpers/theme-upsell.php:6
    33403956msgid "Unlock More Features"
    … …  
    33433959#: inc/admin/customizer/helpers/controls.php:243
    33443960#: inc/admin/customizer/helpers/controls.php:287
    3345 #: inc/admin/dashboard/views/free-vs-pro.php:281
    33463961msgid "Upgrade Now"
    33473962msgstr ""
    33483963
    3349 #: inc/admin/dashboard/class-dashboard.php:200
    3350 #: inc/admin/dashboard/class-welcome-notice.php:81
    3351 #: inc/admin/dashboard/views/dashboard.php:55
     3964#: inc/admin/dashboard/class-dashboard.php:318
     3965#: inc/admin/dashboard/views/starter-templates.php:35
     3966#: inc/admin/dashboard/views/features.php:69
     3967#: inc/admin/dashboard/views/features.php:147
     3968#: inc/admin/dashboard/views/free-vs-pro.php:173
     3969#: inc/admin/dashboard/views/free-vs-pro.php:216
    33523970msgid "Upgrade to Pro"
    33533971msgstr ""
    33543972
    3355 #: inc/admin/meta-box/category-meta-box.php:19
    3356 #: inc/admin/meta-box/category-meta-box.php:47
     3973#: inc/admin/meta-box/category-meta-box.php:20
     3974#: inc/admin/meta-box/category-meta-box.php:49
    33573975#: inc/admin/widgets/class-author.php:184 inc/admin/widgets/widget-base.php:531
    33583976msgid "Upload/Add image"
    … …  
    33713989msgstr ""
    33723990
    3373 #: inc/admin/meta-box/category-meta-box.php:95
     3991#: inc/admin/meta-box/category-meta-box.php:105
    33743992msgid "Use image"
    33753993msgstr ""
    … …  
    33793997msgstr ""
    33803998
    3381 #: inc/admin/dashboard/views/dashboard.php:346
    3382 #: inc/admin/dashboard/views/help.php:130
    3383 msgid "Useful Plugins"
     3999#. %s: theme version.
     4000#. %s: version number.
     4001#: inc/admin/dashboard/class-dashboard.php:306
     4002#: inc/admin/dashboard/views/changelog.php:42
     4003#, php-format
     4004msgid "Version %s"
    33844005msgstr ""
    33854006
    … …  
    33954016msgstr ""
    33964017
    3397 #: inc/admin/dashboard/views/help.php:30
    3398 msgid "View Now"
    3399 msgstr ""
    3400 
    3401 #: inc/admin/dashboard/views/dashboard.php:25
    3402 msgid "View Starter Templates"
     4018#: inc/admin/dashboard/views/help.php:48
     4019msgid "View changelog"
     4020msgstr ""
     4021
     4022#: inc/admin/dashboard/views/free-vs-pro.php:217
     4023msgid "View the Pro demo"
    34034024msgstr ""
    34044025
    … …  
    34084029msgstr ""
    34094030
    3410 #. %1$s: Opening of strong tag, %2$s: Theme's Name, %3$s: Closing of strong tag
    3411 #: inc/admin/dashboard/class-theme-review-notice.php:86
    3412 #, php-format
    3413 msgid ""
    3414 "We hope you're enjoying our %1$s%2$s%3$s WordPress theme! Your feedback "
    3415 "helps us improve and reach more users. If you love our theme, please take a "
    3416 "moment to leave us a 5-star rating. Your support means the world to us!"
    3417 msgstr ""
    3418 
    3419 #: inc/admin/dashboard/views/help.php:38
    3420 msgid ""
    3421 "We would be happy to guide you through any issues and queries you have "
    3422 "regarding BlogAura!"
     4031#: inc/admin/dashboard/class-admin.php:284
     4032msgid "VIP Support"
     4033msgstr ""
     4034
     4035#: inc/admin/dashboard/views/help.php:35
     4036msgid "Visit the forum"
     4037msgstr ""
     4038
     4039#: inc/admin/dashboard/views/features.php:90
     4040msgid "Weather"
    34234041msgstr ""
    34244042
    34254043#: inc/admin/customizer/helpers/controls.php:237
    3426 #: inc/admin/dashboard/views/dashboard.php:155
    34274044msgid "Webmaster Tools"
     4045msgstr ""
     4046
     4047#: inc/admin/dashboard/views/overview.php:70
     4048msgid "Webmaster tools"
    34284049msgstr ""
    34294050
    … …  
    34394060msgstr ""
    34404061
    3441 #: inc/admin/dashboard/class-welcome-notice.php:57
    3442 #, php-format
    3443 msgid "Welcome %1$s!"
    3444 msgstr ""
    3445 
    3446 #. %s: Theme Name.
    3447 #: inc/admin/dashboard/views/dashboard.php:286
    3448 msgid ""
    3449 "What do you think of our theme? Was it a good experience and did it match "
    3450 "your expectations? Let us know so we can improve!"
     4062#: inc/admin/dashboard/class-admin.php:273
     4063msgid "Weekly updates, backups and monitoring. Cancel any time."
     4064msgstr ""
     4065
     4066#: inc/admin/dashboard/class-dashboard.php:316
     4067#: inc/admin/dashboard/views/help.php:46
     4068#: inc/admin/dashboard/views/changelog.php:18
     4069msgid "What’s new"
     4070msgstr ""
     4071
     4072#. %s: theme version.
     4073#: inc/admin/dashboard/views/overview.php:167
     4074#, php-format
     4075msgid "What’s new in %s"
     4076msgstr ""
     4077
     4078#: inc/admin/dashboard/views/free-vs-pro.php:119
     4079msgid "Widget Blocks"
    34514080msgstr ""
    34524081
    … …  
    34574086#: inc/compatibility/elementor/widgets/class-blogaura-elementor-widget-base.php:118
    34584087msgid "Widget Font"
     4088msgstr ""
     4089
     4090#: inc/admin/dashboard/views/free-vs-pro.php:131
     4091msgid "Widget Grid"
    34594092msgstr ""
    34604093
    … …  
    34684101#: inc/compatibility/elementor/widgets/class-blogaura-elementor-widget-base.php:86
    34694102msgid "Widget Title"
     4103msgstr ""
     4104
     4105#: inc/admin/dashboard/views/free-vs-pro.php:93
     4106msgid "Widgets"
    34704107msgstr ""
    34714108
    … …  
    35824219msgstr ""
    35834220
     4221#: inc/admin/dashboard/views/free-vs-pro.php:41
     4222msgid "WooCommerce"
     4223msgstr ""
     4224
    35844225#: inc/admin/widgets/widget-init.php:166
    35854226msgid "WooCommerce Product Page Sidebar"
    … …  
    35884229#: inc/admin/widgets/widget-init.php:160
    35894230msgid "WooCommerce Shop/Category Page Sidebar"
     4231msgstr ""
     4232
     4233#: inc/admin/dashboard/class-admin.php:272
     4234msgid "WordPress Care Plans"
     4235msgstr ""
     4236
     4237#: inc/admin/dashboard/class-admin.php:260
     4238msgid "WordPress Theme Customization"
    35904239msgstr ""
    35914240
    … …  
    36004249msgstr ""
    36014250
     4251#: inc/admin/dashboard/views/features.php:113
     4252msgid "World"
     4253msgstr ""
     4254
    36024255#. Author of the theme
     4256#: inc/admin/dashboard/views/overview.php:142
    36034257msgid "WPInterface"
     4258msgstr ""
     4259
     4260#: inc/admin/dashboard/views/overview.php:145
     4261msgid "WPInterface services"
    36044262msgstr ""
    36054263
    … …  
    36094267msgstr ""
    36104268
    3611 #: inc/admin/dashboard/views/help.php:66
    3612 msgid "x"
    3613 msgstr ""
    3614 
    3615 #: inc/admin/dashboard/views/help.php:69
    3616 msgid "X Community"
     4269#: inc/admin/dashboard/views/help.php:64
     4270msgid "Write a review"
     4271msgstr ""
     4272
     4273#: inc/admin/dashboard/views/help.php:57
     4274msgid "X (Twitter)"
     4275msgstr ""
     4276
     4277#: inc/admin/dashboard/views/features.php:187
     4278msgid "XML sitemap"
    36174279msgstr ""
    36184280
    … …  
    36374299msgstr ""
    36384300
     4301#: inc/admin/dashboard/class-admin.php:488
     4302#: inc/admin/dashboard/class-welcome-notice.php:152
     4303msgid "You are not allowed to perform this action."
     4304msgstr ""
     4305
    36394306#: inc/admin/customizer/sections/footer.php:70
    36404307#, php-format
    … …  
    36514318msgstr ""
    36524319
    3653 #: inc/admin/dashboard/views/help.php:76
    3654 msgid "youtube"
    3655 msgstr ""
    3656 
    3657 #: inc/admin/dashboard/views/help.php:79
    3658 msgid "Youtube Community"
     4320#: inc/admin/dashboard/views/help.php:58
     4321msgid "YouTube"
    36594322msgstr ""
    36604323
    … …  
    36664329msgid "Zoom"
    36674330msgstr ""
     4331
     4332#: inc/admin/dashboard/views/features.php:128
     4333msgid "⇧ Tab"
     4334msgstr ""
  • blogaura/1.1.5/readme.txt

    r348044 r353892  
    66Requires at least: 5.9
    77Tested up to: 7.1
    8 Requires PHP: 5.6
    9 Version: 1.1.3
     8Requires PHP: 7.4
     9Version: 1.1.5
    1010License: GNU General Public License v2 or later
    1111License URI: http://www.gnu.org/licenses/gpl-2.0.html
    … …  
    4545
    4646== Changelog ==
     47
     48= 1.1.5 - 2026-10-15 =
     49* Fix - The Free vs Pro table now shows its category headings.
     50* Fix - The Documentation button now opens the WPInterface documentation site; the theme page it linked to does not exist.
     51* Enhancement - Redesigned welcome notice: compact, uses the theme screenshot and the plugins' WordPress.org icons, shows a "plugins ready" state, and appears only on the Dashboard and Themes screens.
     52* Enhancement - Redesigned theme dashboard (Appearance › BlogAura) with a setup checklist that follows your site's progress, Customizer shortcuts and a new Recommended tab for WPInterface services, plugins and themes.
     53* Enhancement - The Recommended tab can list every WPInterface theme from WordPress.org. The list loads only when you click "Show all WPInterface themes", is cached for 12 hours, and screenshots load lazily.
     54* Enhancement - Starter sites tab redesigned to match the new dashboard, with preview and import buttons for each starter site plus the Pro starter site with its preview and an upgrade link, and a note that importing adds demo content, with the option to have the design set up on an existing site instead (imports still run in One Click Demo Import).
     55* Enhancement - "What's new" changelog panel opens from the dashboard header, with colour-coded labels for security updates, new features, enhancements, improvements and fixes.
     56* Enhancement - More visible "Upgrade to Pro" button in the dashboard header and an upgrade section below the Free vs Pro table.
     57* Enhancement - The Overview tab now shows animated previews of BlogAura Pro's accessibility toolbar (with a demo you can try) and of the SEO plugin included with Pro. They use HTML and CSS only (no images or external requests), pause when off screen and stay still for users who prefer reduced motion.
     58* Enhancement - New Header Style previews in the Customizer: SVG drawings that show each header layout as it really looks, in the theme's own colours, two per row, replacing the small grey images.
     59* Enhancement - The review request notice has the new notice design (like the welcome notice) and shows on the Dashboard and Themes screens only.
     60* Tweak - Dashboard and notice styles and scripts now load only on the screens that use them, without jQuery; dashboard images went from about 516 KB to 38 KB.
     61* Tweak - Recommended plugins are installed and activated through WordPress core screens; removed the old install/activate AJAX handlers.
     62* Tweak - Readme credits for the dashboard images and icons.
     63* Tweak - Removed Elementor from the recommended plugins; the theme supports it but does not need it.
     64
     65= 1.1.4 - 2026-10-15 =
     66* Security - The welcome notice's "Get started" button can no longer be used by users without plugin permissions to install plugins; the notice is now shown only to administrators.
     67* Security - Load More requests now only accept viewable post types, and incomplete requests are rejected cleanly instead of raising PHP warnings.
     68* Security - Category colour and thumbnail settings now verify a nonce and the user's permission before saving.
     69* Fix - Category colours are no longer erased when a category is changed with Quick Edit or updated by a plugin or import.
     70* Fix - Minimum PHP version raised from 5.6 to 7.4; the theme code already requires PHP 7 and would not run on older versions.
     71* Tweak - The review request notice is shown to administrators only.
     72* Tweak - Review notice data is now removed with a single query when switching themes instead of loading every user.
     73* Tweak - Updated the translation template (POT) with the new and changed strings.
    4774
    4875= 1.1.3 - 2026-09-07 =
    … …  
    105132* Animate on scroll.js, https://michalsnik.github.io/aos/ and https://github.com/michalsnik/aos/blob/next/LICENSE
    106133* Copyright (c) 2015 Michał Sajnóg, MIT License, http://www.opensource.org/licenses/MIT
     134* Header style previews (assets/images/header-*.svg): drawn for this theme, [GPLv2 or later](https://www.gnu.org/licenses/gpl-2.0.html)
     135* Dashboard icons (inline SVG in inc/admin/dashboard/class-admin.php) based on Lucide https://lucide.dev, (C) Lucide Contributors, [ISC](https://lucide.dev/license)
    107136
    108137== Image Used ==
     138Theme dashboard images
     139
     140* inc/admin/dashboard/images/theme-thumb.webp: a resized copy of this theme's screenshot (images credited above).
     141* inc/admin/dashboard/images/pro-starter.webp: a resized screenshot of the BlogAura Pro starter site (https://live-preview.wpinterface.com/blogaura-pro/).
     142* inc/admin/dashboard/images/plugin-*.webp: the icons of the recommended plugins, taken from each plugin's page on WordPress.org (https://wordpress.org/plugins/), (C) their respective authors. They are shown only to identify those plugins.
     143
    109144Image for theme screenshot
    110145
  • blogaura/1.1.5/style-rtl.css

    r348044 r353892  
    77Requires at least: 5.9
    88Tested up to: 7.1
    9 Requires PHP: 5.6
    10 Version: 1.1.3
     9Requires PHP: 7.4
     10Version: 1.1.5
    1111License: GNU General Public License v2 or later
    1212License URI: http://www.gnu.org/licenses/gpl-2.0.html
  • blogaura/1.1.5/style.css

    r348044 r353892  
    77Requires at least: 5.9
    88Tested up to: 7.1
    9 Requires PHP: 5.6
    10 Version: 1.1.3
     9Requires PHP: 7.4
     10Version: 1.1.5
    1111License: GNU General Public License v2 or later
    1212License URI: http://www.gnu.org/licenses/gpl-2.0.html
  • blogaura/1.1.5/template-parts/pagination/post-load.php

    r329261 r353892  
    3939
    4040        // Verify Query Vars Hash
    41         if (!isset($_POST['query_vars_hash']) || $_POST['query_vars_hash'] !== wp_hash(stripslashes($_POST['query_vars']))) {
     41        $raw_query_vars = (isset($_POST['query_vars']) && is_string($_POST['query_vars'])) ? wp_unslash($_POST['query_vars']) : '';
     42        if (!isset($_POST['query_vars_hash']) || $_POST['query_vars_hash'] !== wp_hash($raw_query_vars)) {
    4243            wp_send_json_error(__('Security check failed: Query vars modified.', 'blogaura'));
    4344        }
    4445
    45         $query_vars = json_decode(stripslashes($_POST['query_vars']), true);
     46        $query_vars = json_decode($raw_query_vars, true);
     47        if (!is_array($query_vars)) {
     48            $query_vars = array();
     49        }
    4650
    47         $query_vars['post_type'] = (isset($_POST['post_type']) && !empty($_POST['post_type'])) ? esc_attr($_POST['post_type']) : 'post';
     51        $post_type = isset($_POST['post_type']) ? sanitize_key(wp_unslash($_POST['post_type'])) : 'post';
     52        $query_vars['post_type'] = (post_type_exists($post_type) && is_post_type_viewable($post_type)) ? $post_type : 'post';
    4853        $query_vars['post_status'] = 'publish';
    49         $query_vars['paged'] = (int) $_POST['page'];
     54        $query_vars['paged'] = isset($_POST['page']) ? absint(wp_unslash($_POST['page'])) : 1;
    5055
    5156
Note: See TracChangeset for help on using the changeset viewer.