PluginProbe ʕ •ᴥ•ʔ
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More / 4.0.7
Superb Addons: Blocks, Patterns, Pre-built Pages, Sliders, Popups, Free Forms, Animations & More v4.0.7
4.0.7 4.0.6 4.0.5 4.0.4 4.0.3 4.0.2 4.0.1 4.0.0 trunk 1.0.0 2.0.0 2.0.1 2.0.2 2.0.3 3.0 3.0.1 3.0.2 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.4 3.2.5 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.4.0 3.4.1 3.4.2 3.4.5 3.4.6 3.5.0 3.5.1 3.5.2 3.5.3 3.5.4 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1
superb-blocks / src / admin / pages / class-page-dashboard.php
superb-blocks / src / admin / pages Last commit date
wizard 3 days ago class-page-additional-css.php 3 days ago class-page-dashboard.php 3 days ago class-page-form.php 3 days ago class-page-settings.php 3 days ago class-page-support.php 3 days ago
class-page-dashboard.php
395 lines
1 <?php
2
3 namespace SuperbAddons\Admin\Pages;
4
5 defined('ABSPATH') || exit();
6
7 use SuperbAddons\Admin\Controllers\DashboardController;
8 use SuperbAddons\Admin\Controllers\Wizard\WizardController;
9 use SuperbAddons\Admin\Utils\AdminLinkSource;
10 use SuperbAddons\Admin\Utils\AdminLinkUtil;
11 use SuperbAddons\Components\Admin\NewsletterForm;
12 use SuperbAddons\Components\Admin\PremiumBox;
13 use SuperbAddons\Components\Admin\ReviewBox;
14 use SuperbAddons\Components\Admin\SupportBox;
15 use SuperbAddons\Data\Controllers\KeyController;
16 use SuperbAddons\Data\Controllers\OptionController;
17 use SuperbAddons\Data\Utils\Wizard\WizardActionParameter;
18 use SuperbAddons\Gutenberg\Controllers\GutenbergController;
19 use SuperbAddons\Gutenberg\Controllers\GutenbergEnhancementsController;
20 use SuperbAddons\Components\Admin\Modal;
21 use SuperbAddons\Gutenberg\Form\FormSettings;
22
23 class DashboardPage
24 {
25 private $theme_designer_url;
26 private $add_new_pages_url;
27 private $custom_css_url;
28 private $woocommerce_header_url;
29 private $header_footer_url;
30 private $forms_url;
31 private $settings_modules_url;
32 private $EditorOptions;
33 private $EditorTotalCount = 0;
34 private $EditorEnabledCount = 0;
35 private $IntegrationCount = 0;
36 private $IntegrationTotalCount = 0;
37 private $DisabledBlocks = array();
38 private $ActiveBlockCount = 0;
39 private $TotalBlockCount = 0;
40 private $WizardCompleted = false;
41
42 public function __construct()
43 {
44 $this->theme_designer_url = WizardController::GetWizardURL(WizardActionParameter::INTRO);
45 $this->add_new_pages_url = WizardController::GetWizardURL(WizardActionParameter::ADD_NEW_PAGES);
46 $this->woocommerce_header_url = WizardController::GetWizardURL(WizardActionParameter::WOOCOMMERCE_HEADER);
47 $this->header_footer_url = WizardController::GetWizardURL(WizardActionParameter::HEADER_FOOTER);
48 $this->custom_css_url = add_query_arg(array('page' => DashboardController::ADDITIONAL_CSS), admin_url("admin.php"));
49 $this->forms_url = add_query_arg(array('page' => DashboardController::FORMS), admin_url("admin.php"));
50 $this->settings_modules_url = add_query_arg(array('page' => DashboardController::SETTINGS), admin_url("admin.php")) . '#modules';
51
52 // Editor enhancement status: merged view for card display and counts
53 // Dashboard shows all enhancements (including per-user ones like outlines)
54 $this->EditorOptions = GutenbergEnhancementsController::GetEnhancementsOptions(get_current_user_id());
55 $enhancement_keys = array(
56 GutenbergEnhancementsController::HIGHLIGHTS_KEY,
57 GutenbergEnhancementsController::RESPONSIVE_KEY,
58 GutenbergEnhancementsController::ANIMATIONS_KEY,
59 GutenbergEnhancementsController::CONDITIONS_KEY,
60 GutenbergEnhancementsController::DYNAMIC_CONTENT_KEY,
61 GutenbergEnhancementsController::NAVIGATION_KEY,
62 GutenbergEnhancementsController::RICHTEXT_KEY,
63 GutenbergEnhancementsController::SOCIAL_ICONS_KEY,
64 GutenbergEnhancementsController::DASHBOARD_SHORTCUTS_KEY,
65 GutenbergEnhancementsController::STICKY_KEY,
66 GutenbergEnhancementsController::Z_INDEX_KEY,
67 );
68 $this->EditorTotalCount = count($enhancement_keys);
69 foreach ($enhancement_keys as $key) {
70 if (isset($this->EditorOptions[$key]) && $this->EditorOptions[$key]) {
71 $this->EditorEnabledCount++;
72 }
73 }
74
75 // Integration count
76 $this->IntegrationTotalCount++;
77 if (FormSettings::HasValue(FormSettings::OPTION_MAILCHIMP_API_KEY)) {
78 $this->IntegrationCount++;
79 }
80 $this->IntegrationTotalCount++;
81 if (FormSettings::HasValue(FormSettings::OPTION_BREVO_API_KEY)) {
82 $this->IntegrationCount++;
83 }
84 $this->IntegrationTotalCount++;
85 if (FormSettings::HasValue(FormSettings::OPTION_GOOGLE_SHEETS_CLIENT_EMAIL) && FormSettings::HasValue(FormSettings::OPTION_GOOGLE_SHEETS_PRIVATE_KEY)) {
86 $this->IntegrationCount++;
87 }
88 // CAPTCHA settings
89 $this->IntegrationTotalCount++;
90 if (FormSettings::HasValue(FormSettings::OPTION_HCAPTCHA_SITE_KEY) && FormSettings::HasValue(FormSettings::OPTION_HCAPTCHA_SECRET_KEY)) {
91 $this->IntegrationCount++;
92 }
93 $this->IntegrationTotalCount++;
94 if (FormSettings::HasValue(FormSettings::OPTION_RECAPTCHA_SITE_KEY) && FormSettings::HasValue(FormSettings::OPTION_RECAPTCHA_SECRET_KEY)) {
95 $this->IntegrationCount++;
96 }
97 $this->IntegrationTotalCount++;
98 if (FormSettings::HasValue(FormSettings::OPTION_TURNSTILE_SITE_KEY) && FormSettings::HasValue(FormSettings::OPTION_TURNSTILE_SECRET_KEY)) {
99 $this->IntegrationCount++;
100 }
101
102 // Block status
103 $this->DisabledBlocks = OptionController::GetDisabledBlocks();
104 $this->TotalBlockCount = GutenbergController::GetDiscoverableBlockTotal();
105 $this->ActiveBlockCount = GutenbergController::GetDiscoverableBlockActiveCount($this->DisabledBlocks);
106
107 // Wizard completion status
108 $this->WizardCompleted = WizardController::ThemeHasCompletedWizard();
109
110 $this->Render();
111 }
112
113 private function Render()
114 {
115 $enhancement_dot = 'superbaddons-status-dot--gray';
116 if ($this->EditorEnabledCount >= 4) {
117 $enhancement_dot = 'superbaddons-status-dot--green';
118 } elseif ($this->EditorEnabledCount > 0) {
119 $enhancement_dot = 'superbaddons-status-dot--yellow';
120 }
121 $integration_dot = 'superbaddons-status-dot--gray';
122 if ($this->IntegrationCount >= 1) {
123 $integration_dot = 'superbaddons-status-dot--green';
124 }
125 ?>
126 <!-- Welcome + Stats Strip -->
127 <div class="superbaddons-dashboard-welcome-strip">
128 <span class="superbaddons-dashboard-welcome-title"><?php echo esc_html__("Welcome to Superb Addons", "superb-blocks"); ?></span>
129 <div class="superbaddons-dashboard-stat-items">
130 <span class="superbaddons-dashboard-stat-item">
131 <span class="superbaddons-status-dot <?php echo $this->ActiveBlockCount >= $this->TotalBlockCount ? 'superbaddons-status-dot--green' : ($this->ActiveBlockCount > 0 ? 'superbaddons-status-dot--yellow' : 'superbaddons-status-dot--gray'); ?>"></span>
132 <?php
133 /* translators: 1: number of active blocks, 2: total number of blocks */
134 echo esc_html(sprintf(__('%1$d/%2$d Blocks', 'superb-blocks'), $this->ActiveBlockCount, $this->TotalBlockCount));
135 ?>
136 </span>
137 <span class="superbaddons-dashboard-stat-item">
138 <span class="superbaddons-status-dot <?php echo esc_attr($enhancement_dot); ?>"></span>
139 <?php
140 /* translators: 1: number of enabled editor enhancements, 2: total number of editor enhancements */
141 echo esc_html(sprintf(__('%1$d/%2$d Enhancements', 'superb-blocks'), $this->EditorEnabledCount, $this->EditorTotalCount));
142 ?>
143 </span>
144 <span class="superbaddons-dashboard-stat-item">
145 <span class="superbaddons-status-dot superbaddons-status-dot--purple"></span>
146 <?php echo esc_html__("200+ Patterns", "superb-blocks"); ?>
147 </span>
148 <span class="superbaddons-dashboard-stat-item">
149 <span class="superbaddons-status-dot <?php echo esc_attr($integration_dot); ?>"></span>
150 <?php
151 /* translators: 1: number of connected integrations, 2: total number of integrations */
152 echo esc_html(sprintf(__('%1$d/%2$d Integrations', 'superb-blocks'), $this->IntegrationCount, $this->IntegrationTotalCount));
153 ?>
154 </span>
155 </div>
156 </div>
157
158 <div class="superbaddons-admindashboard-sidebarlayout">
159 <div class="superbaddons-admindashboard-sidebarlayout-left">
160
161 <!-- Quick Actions -->
162 <div class="superbaddons-dashboard-quick-actions">
163 <div class="superbaddons-dashboard-quick-action-card<?php echo !$this->WizardCompleted ? ' superbaddons-dashboard-quick-action-card--recommended' : ''; ?>" id="superbaddons-dashboard-theme-designer-card">
164 <?php if (!$this->WizardCompleted) : ?>
165 <span class="superbaddons-dashboard-recommended-badge"><?php echo esc_html__("Recommended", "superb-blocks"); ?></span>
166 <?php endif; ?>
167 <img src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/theme-designer-icon.svg'); ?>" aria-hidden="true" width="48" height="48" />
168 <h5 class="superbaddons-element-text-xs superbaddons-element-text-dark superbaddons-element-text-800"><?php echo esc_html__("Theme Designer", "superb-blocks"); ?></h5>
169 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray"><?php echo esc_html__("Design your entire site in minutes. Pick styles for header, footer, and pages, and more.", "superb-blocks"); ?></p>
170 <a class="superbaddons-element-button" href="<?php echo esc_url($this->theme_designer_url); ?>"><?php echo esc_html__("Launch Theme Designer", "superb-blocks"); ?></a>
171 </div>
172 <div class="superbaddons-dashboard-quick-action-card">
173 <img src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/template-page-icon.svg'); ?>" aria-hidden="true" width="48" height="48" />
174 <h5 class="superbaddons-element-text-xs superbaddons-element-text-dark superbaddons-element-text-800"><?php echo esc_html__("Page Templates", "superb-blocks"); ?></h5>
175 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray"><?php echo esc_html__("Launch pages in seconds with 100+ ready-made pages, patterns, and sections.", "superb-blocks"); ?></p>
176 <a class="superbaddons-element-button" href="<?php echo esc_url($this->add_new_pages_url); ?>"><?php echo esc_html__("Add New Template Page", "superb-blocks"); ?></a>
177 </div>
178 <div class="superbaddons-dashboard-quick-action-card" id="superbaddons-dashboard-forms-card">
179 <img src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/gutenberg-patterns-icon.svg'); ?>" aria-hidden="true" width="48" height="48" />
180 <h5 class="superbaddons-element-text-xs superbaddons-element-text-dark superbaddons-element-text-800"><?php echo esc_html__("Forms", "superb-blocks"); ?></h5>
181 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray"><?php echo esc_html__("A full form builder with file uploads, conditional logic, spam protection, and more. All free.", "superb-blocks"); ?></p>
182 <a class="superbaddons-element-button" href="<?php echo esc_url($this->forms_url); ?>"><?php echo esc_html__("Manage Forms", "superb-blocks"); ?></a>
183 </div>
184 </div>
185
186 <!-- Gutenberg Blocks -->
187 <div class="superbaddons-settings-section">
188 <div class="superbaddons-dashboard-section-header">
189 <h4 class="superbaddons-element-text-sm superbaddons-element-text-dark superbaddons-element-text-800 superbaddons-element-m0"><?php echo esc_html__("Gutenberg Blocks", "superb-blocks"); ?></h4>
190 <span class="superbaddons-dashboard-count-badge"><?php
191 /* translators: 1: number of active blocks, 2: total number of blocks */
192 echo esc_html(sprintf(__('%1$d/%2$d Active', 'superb-blocks'), $this->ActiveBlockCount, $this->TotalBlockCount));
193 ?></span>
194 </div>
195 <div class="superbaddons-dashboard-block-grid">
196 <?php
197 $blocks = array(
198 array('slug' => 'ratings', 'icon' => 'purple-star.svg', 'name' => __('Rating Block', 'superb-blocks'), 'desc' => __('Add star ratings with partial fills to posts and pages.', 'superb-blocks')),
199 array('slug' => 'author-box', 'icon' => 'purple-identification-badge.svg', 'name' => __('About the Author', 'superb-blocks'), 'desc' => __('Showcase post authors with avatar, bio, and social links.', 'superb-blocks')),
200 array('slug' => 'table-of-contents', 'icon' => 'purple-list-bullets.svg', 'name' => __('Table of Contents', 'superb-blocks'), 'desc' => __('Auto-generated navigation from your headings.', 'superb-blocks')),
201 array('slug' => 'recent-posts', 'icon' => 'purple-note.svg', 'name' => __('Recent Posts', 'superb-blocks'), 'desc' => __('Display your latest posts with thumbnails and excerpts.', 'superb-blocks')),
202 array('slug' => 'google-maps', 'icon' => 'purple-pin.svg', 'name' => __('Google Maps', 'superb-blocks'), 'desc' => __('Embed interactive maps with no API key required.', 'superb-blocks')),
203 array('slug' => 'cover-image', 'icon' => 'purple-image.svg', 'name' => __('Cover Image', 'superb-blocks'), 'desc' => __('Hero sections with focal point control and responsive height.', 'superb-blocks')),
204 array('slug' => 'reveal-buttons', 'icon' => 'purple-pointing.svg', 'name' => __('Reveal Buttons', 'superb-blocks'), 'desc' => __('Click-to-reveal buttons for coupons and hidden content.', 'superb-blocks')),
205 array('slug' => 'accordion', 'icon' => 'accordion-icon-purple.svg', 'name' => __('Toggle', 'superb-blocks'), 'desc' => __('Collapsible toggle section for FAQs and hiding content.', 'superb-blocks')),
206 array('slug' => 'carousel', 'icon' => 'icon-carousel.svg', 'name' => __('Carousel Slider', 'superb-blocks'), 'desc' => __('Content carousel with arrow and dot navigation.', 'superb-blocks')),
207 array('slug' => 'countdown', 'icon' => 'icon-countdown.svg', 'name' => __('Countdown', 'superb-blocks'), 'desc' => __('Countdown timer with 6 visual styles.', 'superb-blocks')),
208 array('slug' => 'progress-bar', 'icon' => 'icon-progressbar.svg', 'name' => __('Progress Bar', 'superb-blocks'), 'desc' => __('Progress indicators with bars, circles, and milestones.', 'superb-blocks')),
209 array('slug' => 'popup', 'icon' => 'icon-popup.svg', 'name' => __('Popup', 'superb-blocks'), 'desc' => __('Create popups with any content and smart trigger options.', 'superb-blocks')),
210 array('slug' => 'form', 'icon' => 'icon-form.svg', 'name' => __('Form', 'superb-blocks'), 'desc' => __('Form builder with validation, file uploads, and integrations.', 'superb-blocks')),
211 array('slug' => 'multistep-form', 'toggle_slug' => 'form', 'icon' => 'icon-multistepform.svg', 'name' => __('Multi-Step Form', 'superb-blocks'), 'desc' => __('Split forms into steps with progress tracking.', 'superb-blocks'), 'premium' => true),
212 array('slug' => 'add-to-cart', 'icon' => 'purple-shopping-cart.svg', 'name' => __('Add to Cart', 'superb-blocks'), 'desc' => __('AJAX button that adds WooCommerce products to the cart with optional popup trigger.', 'superb-blocks'), 'requires' => 'woocommerce'),
213 array('slug' => 'buy-now', 'toggle_slug' => 'add-to-cart', 'icon' => 'purple-shopping-cart-simple.svg', 'name' => __('Buy Now', 'superb-blocks'), 'desc' => __('Direct-checkout button that skips the cart and takes customers straight to checkout.', 'superb-blocks'), 'premium' => true, 'requires' => 'woocommerce'),
214 );
215 foreach ($blocks as $block) :
216 $toggle_slug = isset($block['toggle_slug']) ? $block['toggle_slug'] : $block['slug'];
217 $is_disabled = in_array($toggle_slug, $this->DisabledBlocks, true);
218 ?>
219 <div class="superbaddons-dashboard-block-card <?php echo $is_disabled ? 'superbaddons-dashboard-block-card--disabled' : ''; ?>">
220 <?php if (!empty($block['premium']) || $is_disabled || !empty($block['requires'])) : ?>
221 <div class="superbaddons-dashboard-card-badges">
222
223 <?php if ($is_disabled) : ?>
224 <span class="superbaddons-dashboard-disabled-badge"><?php echo esc_html__("Disabled", "superb-blocks"); ?></span>
225 <?php endif; ?>
226 <?php if (!empty($block['requires'])) $this->RenderIntegrationBadge($block['requires']); ?>
227 </div>
228 <?php endif; ?>
229 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/' . $block['icon']); ?>" aria-hidden="true" />
230 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html($block['name']); ?></strong>
231 </div>
232 <?php endforeach; ?>
233 <?php $this->RenderSuggestCard(
234 __('Have a block idea?', 'superb-blocks'),
235 __('We\'re always looking for new block ideas. Let us know what you\'d like to see.', 'superb-blocks')
236 ); ?>
237 </div>
238 <a href="<?php echo esc_url($this->settings_modules_url); ?>" class="superbaddons-element-colorlink superbaddons-dashboard-configure-link"><?php echo esc_html__("Configure in Settings", "superb-blocks"); ?> &rarr;</a>
239 </div>
240
241 <!-- Editor Enhancements -->
242 <div class="superbaddons-settings-section">
243 <div class="superbaddons-dashboard-section-header">
244 <h4 class="superbaddons-element-text-sm superbaddons-element-text-dark superbaddons-element-text-800 superbaddons-element-m0"><?php echo esc_html__("Editor Enhancements", "superb-blocks"); ?></h4>
245 <span class="superbaddons-dashboard-count-badge"><?php
246 /* translators: 1: number of enabled editor enhancements, 2: total number of editor enhancements */
247 echo esc_html(sprintf(__('%1$d/%2$d Active', 'superb-blocks'), $this->EditorEnabledCount, $this->EditorTotalCount));
248 ?></span>
249 </div>
250 <div class="superbaddons-dashboard-enhancement-grid">
251 <?php
252 $enhancements = array(
253 array('icon' => 'purple-selection-plus.svg', 'name' => __('Editor Outlines', 'superb-blocks'), 'desc' => __('Outlines around blocks and child blocks to easily visualize your layout structure.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::HIGHLIGHTS_KEY),
254 array('icon' => 'devices-duotone.svg', 'name' => __('Responsive Controls', 'superb-blocks'), 'desc' => __('Per-device visibility, spacing, font size, alignment, and layout overrides for any block.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::RESPONSIVE_KEY),
255 array('icon' => 'sneaker-move-duotone.svg', 'name' => __('Animations', 'superb-blocks'), 'desc' => __('40+ block animations, letter effects, and typing & counting animations.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::ANIMATIONS_KEY),
256 array('icon' => 'target-duotone.svg', 'name' => __('Block Conditions', 'superb-blocks'), 'desc' => __('Show or hide blocks based on user roles, schedules, content, WooCommerce data, and more.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::CONDITIONS_KEY),
257 array('icon' => 'purple-list-bullets.svg', 'name' => __('Navigation Enhancements', 'superb-blocks'), 'desc' => __('Mobile overlay and submenu improvements for the navigation block.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::NAVIGATION_KEY),
258 array('icon' => 'brackets-curly-duotone.svg', 'name' => __('Dynamic Content', 'superb-blocks'), 'desc' => __('Insert post data, author info, and custom fields dynamically into any text.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::DYNAMIC_CONTENT_KEY),
259 array('icon' => 'purple-aa.svg', 'name' => __('Rich Text', 'superb-blocks'), 'desc' => __('Rich text enhancements such as justify text alignment for text-based blocks.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::RICHTEXT_KEY),
260 array('icon' => 'purple-chat.svg', 'name' => __('Extra Social Icons', 'superb-blocks'), 'desc' => __('Adds 20+ additional icons to the core Social Icons block (Bilibili, Ko-fi, Signal, Slack, Steam, Substack, and more).', 'superb-blocks'), 'key' => GutenbergEnhancementsController::SOCIAL_ICONS_KEY),
261 array('icon' => 'purple-gauge.svg', 'name' => __('Admin Shortcuts', 'superb-blocks'), 'desc' => __('Adds handy block theme shortcuts such as Edit Front Page and Style Book.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::DASHBOARD_SHORTCUTS_KEY),
262 array('icon' => 'pushpin-duotone.svg', 'name' => __('Sticky Positioning', 'superb-blocks'), 'desc' => __('Pin any block to the top or bottom of the screen as visitors scroll, with scope and per-device control.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::STICKY_KEY),
263 array('icon' => 'stack-simple-duotone.svg', 'name' => __('Stacking Order', 'superb-blocks'), 'desc' => __('Adds a z-index control to the Advanced panel of any block, with quick presets for common stacking levels.', 'superb-blocks'), 'key' => GutenbergEnhancementsController::Z_INDEX_KEY),
264 );
265 foreach ($enhancements as $enh) :
266 $has_key = isset($enh['key']);
267 $is_enabled = $has_key && isset($this->EditorOptions[$enh['key']]) && $this->EditorOptions[$enh['key']];
268 ?>
269 <div class="superbaddons-dashboard-enhancement-card <?php echo $is_enabled ? 'superbaddons-dashboard-enhancement-card--enabled' : ''; ?>">
270 <div class="superbaddons-dashboard-enhancement-card-header">
271 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/' . $enh['icon']); ?>" aria-hidden="true" />
272 <?php if ($is_enabled) : ?>
273 <span class="superbaddons-integration-card-badge superbaddons-integration-card-badge--connected"><?php echo esc_html__("Enabled", "superb-blocks"); ?></span>
274 <?php else : ?>
275 <span class="superbaddons-integration-card-badge"><?php echo esc_html__("Disabled", "superb-blocks"); ?></span>
276 <?php endif; ?>
277 </div>
278 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html($enh['name']); ?></strong>
279 </div>
280 <?php endforeach; ?>
281 <?php $this->RenderSuggestCard(
282 __('Suggest an enhancement', 'superb-blocks'),
283 __('Have an idea for a new editor enhancement? We\'d love to hear from you.', 'superb-blocks')
284 ); ?>
285 </div>
286 <a href="<?php echo esc_url($this->settings_modules_url); ?>" class="superbaddons-element-colorlink superbaddons-dashboard-configure-link"><?php echo esc_html__("Configure in Settings", "superb-blocks"); ?> &rarr;</a>
287 </div>
288
289 <!-- More Features -->
290 <div class="superbaddons-settings-section">
291 <div class="superbaddons-dashboard-section-header">
292 <h4 class="superbaddons-element-text-sm superbaddons-element-text-dark superbaddons-element-text-800 superbaddons-element-m0"><?php echo esc_html__("More Features", "superb-blocks"); ?></h4>
293 </div>
294 <div class="superbaddons-dashboard-feature-grid">
295 <div class="superbaddons-dashboard-feature-card" id="superbaddons-dashboard-design-library-card">
296 <div class="superbaddons-dashboard-feature-card-header">
297 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/superb-blocks.svg'); ?>" aria-hidden="true" />
298 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html__("Design Library", "superb-blocks"); ?></strong>
299 </div>
300 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray superbaddons-element-m0"><?php echo esc_html__("200+ pre-built patterns you can insert with one click.", "superb-blocks"); ?></p>
301 <button type="button" class="superbaddons-element-button superbaddons-element-button-sm" id="gutenberg-lib-modal-btn"><?php echo esc_html__("Explore Design Library", "superb-blocks"); ?></button>
302 </div>
303 <div class="superbaddons-dashboard-feature-card" id="superbaddons-dashboard-custom-css-card">
304 <div class="superbaddons-dashboard-feature-card-header">
305 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/dashboard-custom-css.svg'); ?>" aria-hidden="true" />
306 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html__("Custom CSS", "superb-blocks"); ?></strong>
307 </div>
308 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray superbaddons-element-m0"><?php echo esc_html__("Add custom CSS easily. It's auto-combined and loaded only where needed.", "superb-blocks"); ?></p>
309 <a href="<?php echo esc_url($this->custom_css_url); ?>" class="superbaddons-element-button superbaddons-element-button-sm"><?php echo esc_html__("Manage CSS", "superb-blocks"); ?></a>
310 </div>
311 <div class="superbaddons-dashboard-feature-card">
312 <div class="superbaddons-dashboard-feature-card-header">
313 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/dashboard-header-footer.svg'); ?>" aria-hidden="true" />
314 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html__("Header & Footer Templates", "superb-blocks"); ?></strong>
315 </div>
316 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray superbaddons-element-m0"><?php echo esc_html__("Select your website's header and footer templates.", "superb-blocks"); ?></p>
317 <a href="<?php echo esc_url($this->header_footer_url); ?>" class="superbaddons-element-button superbaddons-element-button-sm"><?php echo esc_html__("Select Header & Footer", "superb-blocks"); ?></a>
318 </div>
319 <div class="superbaddons-dashboard-feature-card <?php echo !is_plugin_active('woocommerce/woocommerce.php') ? 'superbaddons-dashboard-feature-card--inactive' : ''; ?>">
320 <div class="superbaddons-dashboard-feature-card-header">
321 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/dashboard-wc-icon.svg'); ?>" aria-hidden="true" />
322 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html__("WooCommerce Headers", "superb-blocks"); ?></strong>
323 </div>
324 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray superbaddons-element-m0"><?php echo esc_html__("WooCommerce compatible header templates and navigation.", "superb-blocks"); ?></p>
325 <?php if (is_plugin_active('woocommerce/woocommerce.php')) : ?>
326 <a href="<?php echo esc_url($this->woocommerce_header_url); ?>" class="superbaddons-element-button superbaddons-element-button-sm"><?php echo esc_html__("Select Header", "superb-blocks"); ?></a>
327 <?php else : ?>
328 <span class="superbaddons-integration-card-badge"><?php echo esc_html__("Requires WooCommerce", "superb-blocks"); ?></span>
329 <?php endif; ?>
330 </div>
331 <div class="superbaddons-dashboard-feature-card <?php echo !defined('ELEMENTOR_VERSION') ? 'superbaddons-dashboard-feature-card--inactive' : ''; ?>">
332 <div class="superbaddons-dashboard-feature-card-header">
333 <img class="superbaddons-dashboard-block-card-icon" src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/elementor-sections.svg'); ?>" aria-hidden="true" />
334 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html__("Elementor Sections", "superb-blocks"); ?></strong>
335 </div>
336 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray superbaddons-element-m0"><?php echo esc_html__("300+ pre-built Elementor sections for fast site building.", "superb-blocks"); ?></p>
337 <?php if (defined('ELEMENTOR_VERSION')) : ?>
338 <button type="button" class="superbaddons-element-button superbaddons-element-button-sm" id="elementor-lib-modal-btn"><?php echo esc_html__("Explore Sections", "superb-blocks"); ?></button>
339 <?php else : ?>
340 <span class="superbaddons-integration-card-badge"><?php echo esc_html__("Requires Elementor", "superb-blocks"); ?></span>
341 <?php endif; ?>
342 </div>
343 <?php $this->RenderSuggestCard(
344 __('Have a feature idea?', 'superb-blocks'),
345 __('Tell us what features would make your workflow better.', 'superb-blocks'),
346 true
347 ); ?>
348 </div>
349 </div>
350 </div>
351 <div class="superbaddons-admindashboard-sidebarlayout-right">
352 <?php new PremiumBox(AdminLinkSource::DEFAULT); ?>
353 <?php new NewsletterForm(__("Stay updated with new features and freebies.", "superb-blocks"), true); ?>
354 <?php new ReviewBox(); ?>
355 <?php new SupportBox(); ?>
356
357 </div>
358 </div>
359 <?php
360 new Modal();
361 }
362
363 private function RenderIntegrationBadge($integration)
364 {
365 if ($integration === 'woocommerce') :
366 ?>
367 <span class="superbaddons-dashboard-integration-badge superbaddons-dashboard-integration-badge--woo" title="<?php echo esc_attr__('Requires WooCommerce', 'superb-blocks'); ?>">
368 <svg role="img" viewBox="0 9.58 24 4.84" xmlns="http://www.w3.org/2000/svg" aria-label="<?php echo esc_attr__('Requires WooCommerce', 'superb-blocks'); ?>">
369 <path d="M.754 9.58a.754.754 0 00-.754.758v2.525c0 .42.339.758.758.758h3.135l1.431.799-.326-.799h2.373a.757.757 0 00.758-.758v-2.525a.757.757 0 00-.758-.758H.754zm2.709.445h.03c.065.001.124.023.179.067a.26.26 0 01.103.19.29.29 0 01-.033.16c-.13.239-.236.64-.322 1.199-.083.541-.114.965-.094 1.267a.392.392 0 01-.039.219.213.213 0 01-.176.12c-.086.006-.177-.034-.263-.124-.31-.316-.555-.788-.735-1.416-.216.425-.375.744-.478.957-.196.376-.363.568-.502.578-.09.007-.166-.069-.233-.228-.17-.436-.352-1.277-.548-2.524a.297.297 0 01.054-.222c.047-.064.116-.095.21-.102.169-.013.265.065.288.238.103.695.217 1.284.336 1.766l.727-1.387c.066-.126.15-.192.25-.199.146-.01.237.083.273.28.083.441.188.817.315 1.136.086-.844.233-1.453.44-1.828a.255.255 0 01.218-.147zm1.293.36c.056 0 .116.006.18.02.232.05.411.177.53.386.107.18.161.395.161.654 0 .343-.087.654-.26.94-.2.332-.459.5-.781.5a.88.88 0 01-.18-.022.763.763 0 01-.531-.384 1.287 1.287 0 01-.158-.659c0-.342.085-.655.258-.937.202-.333.462-.498.78-.498zm2.084 0c.056 0 .116.006.18.02.236.05.411.177.53.386.107.18.16.395.16.654 0 .343-.086.654-.259.94-.2.332-.459.5-.781.5a.88.88 0 01-.18-.022.763.763 0 01-.531-.384 1.287 1.287 0 01-.16-.659c0-.342.087-.655.26-.937.202-.333.462-.498.78-.498zm4.437.047c-.305 0-.546.102-.718.304-.173.203-.256.49-.256.856 0 .395.086.697.256.906.17.21.418.316.744.316.315 0 .559-.107.728-.316.17-.21.256-.504.256-.883s-.087-.673-.26-.879c-.176-.202-.424-.304-.75-.304zm-1.466.002a1.13 1.13 0 00-.84.326c-.223.22-.332.499-.332.838 0 .362.108.658.328.88.22.223.505.336.861.336.103 0 .22-.016.346-.052v-.54c-.117.034-.216.051-.303.051a.545.545 0 01-.422-.177c-.106-.12-.16-.278-.16-.48 0-.19.053-.348.156-.468a.498.498 0 01.397-.181c.103 0 .212.015.332.049v-.537a1.394 1.394 0 00-.363-.045zm12.414 0a1.135 1.135 0 00-.84.326c-.223.22-.332.499-.332.838 0 .362.108.658.328.88.22.223.506.336.861.336.103 0 .22-.016.346-.052v-.54c-.116.034-.216.051-.303.051a.545.545 0 01-.422-.177c-.106-.12-.16-.278-.16-.48 0-.19.053-.348.156-.468a.498.498 0 01.397-.181c.103 0 .212.015.332.049v-.537a1.394 1.394 0 00-.363-.045zm-9.598.06l-.29 2.264h.579l.156-1.559.395 1.559h.412l.379-1.555.164 1.555h.603l-.304-2.264h-.791l-.12.508c-.03.13-.06.264-.087.4l-.067.352a29.97 29.97 0 00-.258-1.26h-.771zm2.768 0l-.29 2.264h.579l.156-1.559.396 1.559h.412l.375-1.555.165 1.555h.603l-.305-2.264h-.789l-.119.508c-.03.13-.06.264-.086.4l-.066.352c-.063-.352-.15-.771-.26-1.26h-.771zm3.988 0v2.264h.611v-1.031h.012l.494 1.03h.645l-.489-1.019a.61.61 0 00.37-.552.598.598 0 00-.25-.506c-.167-.123-.394-.186-.68-.186h-.713zm3.377 0v2.264H24v-.483h-.63v-.414h.54v-.468h-.54v-.416h.626v-.483H22.76zm-4.793.004v2.264h1.24v-.483h-.627v-.416h.541v-.468h-.54v-.415h.622v-.482h-1.236zm2.025.432c.146.003.25.025.313.072.063.046.091.12.091.227 0 .156-.135.236-.404.24v-.54zm-15.22.011c-.104 0-.205.069-.301.211a1.078 1.078 0 00-.2.639c0 .096.02.2.06.303.049.13.117.198.196.215.083.016.173-.02.27-.106.123-.11.205-.273.252-.492.016-.077.023-.16.023-.246 0-.097-.02-.2-.06-.303-.05-.13-.116-.198-.196-.215a.246.246 0 00-.045-.006zm2.083 0c-.103 0-.204.069-.3.211a1.078 1.078 0 00-.2.639c0 .096.02.2.06.303.049.13.117.198.196.215.083.016.173-.02.27-.106.123-.11.205-.273.252-.492.013-.077.023-.16.023-.246 0-.097-.02-.2-.06-.303-.05-.13-.116-.198-.196-.215a.246.246 0 00-.045-.006zm4.428.006c.233 0 .354.218.354.66-.004.273-.038.46-.098.553a.293.293 0 01-.262.139.266.266 0 01-.242-.139c-.056-.093-.084-.28-.084-.562 0-.436.11-.65.332-.65Z" />
370 </svg>
371 </span>
372 <?php
373 endif;
374 }
375
376 private function RenderSuggestCard($title, $description, $stacked = false)
377 {
378 ?>
379 <div class="superbaddons-dashboard-suggest-card">
380 <img src="<?php echo esc_url(SUPERBADDONS_ASSETS_PATH . '/img/purple-bulb.svg'); ?>" aria-hidden="true" />
381 <div class="superbaddons-dashboard-suggest-card-content<?php echo $stacked ? ' superbaddons-dashboard-suggest-card-content-stacked' : ''; ?>">
382 <strong class="superbaddons-element-text-xxs superbaddons-element-text-dark"><?php echo esc_html($title); ?></strong>
383 <p class="superbaddons-element-text-xxs superbaddons-element-text-gray superbaddons-element-m0"><?php echo esc_html($description); ?></p>
384 <?php if ($stacked) : ?>
385 <a href="<?php echo esc_url(AdminLinkUtil::GetLink(AdminLinkSource::DEFAULT, array("url" => "https://superbthemes.com/contact/", "anchor" => "create-ticket"))); ?>" target="_blank" class="superbaddons-element-colorlink superbaddons-element-text-xxs"><?php echo esc_html__("Request Feature", "superb-blocks"); ?> &rarr;</a>
386 <?php endif; ?>
387 </div>
388 <?php if (!$stacked) : ?>
389 <a href="<?php echo esc_url(AdminLinkUtil::GetLink(AdminLinkSource::DEFAULT, array("url" => "https://superbthemes.com/contact/", "anchor" => "create-ticket"))); ?>" target="_blank" class="superbaddons-element-colorlink superbaddons-element-text-xxs"><?php echo esc_html__("Request Feature", "superb-blocks"); ?> &rarr;</a>
390 <?php endif; ?>
391 </div>
392 <?php
393 }
394 }
395