PluginProbe
Easy Invoice – Invoice Generator, PDF Quotes & Payments / 2.4.0
Easy Invoice – Invoice Generator, PDF Quotes & Payments v2.4.0
2.4.0 2.4.1 2.3.8 2.3.7 2.3.6 2.3.5 2.3.4 2.3.3 2.3.2 2.3.1 2.2.0 2.1.21 2.1.20 2.1.19 2.1.18 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.2 All 57 releases
← All changes | templates/admin/addons-page.php +22 -8 2.3.6 → 2.4.0 View file →
@@ -82,9 +82,9 @@
82 82 <span class="dashicons dashicons-<?php echo esc_attr($skin['dash']); ?>" style="font-size:22px;width:22px;height:22px;line-height:22px;"></span>
83 83 </div>
84 84 <div>
85 85 <p class="text-sm font-semibold <?php echo esc_attr($skin['title']); ?>"><?php echo esc_html($b['title']); ?></p>
86 - <p class="mt-0.5 text-sm <?php echo esc_attr($skin['body']); ?>"><?php echo esc_html($b['message']); ?></p>
86 + <p class="mt-0.5 text-sm <?php echo esc_attr($skin['body']); ?>"><?php echo wp_kses_post($b['message']); ?></p>
87 87 </div>
88 88 </div>
89 89 <a href="<?php echo esc_url($b['cta_url']); ?>"
90 90 <?php echo strpos($b['cta_url'], 'http') === 0 ? 'target="_blank" rel="noopener"' : ''; ?>
@@ -196,9 +196,9 @@
196 196 <input type="checkbox"
197 197 class="ei-addons-row-check h-4 w-4 text-indigo-600 focus:ring-indigo-500 border-gray-300 rounded"
198 198 data-addon-id="<?php echo esc_attr($addon['id']); ?>"
199 199 data-addon-status="<?php echo esc_attr($status); ?>"
200 - aria-label="<?php echo esc_attr(sprintf(__('Select %s for bulk action', 'easy-invoice'), $addon['name'])); ?>"/>
200 + aria-label="<?php /* translators: %s: addon name. */ echo esc_attr(sprintf(__('Select %s for bulk action', 'easy-invoice'), $addon['name'])); ?>"/>
201 201 <?php endif; ?>
202 202 <div class="rounded-full border <?php echo esc_attr($plan_klass['icon']); ?> inline-flex items-center justify-center"
203 203 style="width:24px;height:24px;">
204 204 <span class="dashicons <?php echo esc_attr($addon['icon']); ?>"
@@ -268,17 +268,31 @@
268 268 <a href="<?php echo esc_url($addon['docs_url']); ?>"
269 269 target="_blank"
270 270 rel="noopener"
271 271 class="text-xs font-medium text-gray-500 hover:text-indigo-600"
272 - title="<?php echo esc_attr(sprintf(__('Open %s documentation', 'easy-invoice'), $addon['name'])); ?>">
272 + title="<?php /* translators: %s: addon name. */ echo esc_attr(sprintf(__('Open %s documentation', 'easy-invoice'), $addon['name'])); ?>">
273 273 <?php esc_html_e('Docs', 'easy-invoice'); ?> →
274 274 </a>
275 275 <?php endif; ?>
276 - <?php if (!empty($addon['settings_url'])): ?>
277 - <a href="<?php echo esc_url($addon['settings_url']); ?>"
276 + <?php
277 + // Only link to a settings page the installed Pro actually
278 + // registers: an older Pro alongside a newer free would
279 + // otherwise send the user to a 403.
280 + $ei_settings_url = $addon['settings_url'] ?? '';
281 + if ($ei_settings_url && preg_match('/[?&]page=([a-z0-9_-]+)/', $ei_settings_url, $ei_m)) {
282 + global $admin_page_hooks, $_registered_pages;
283 + $ei_slug = $ei_m[1];
284 + $ei_registered = isset($admin_page_hooks[$ei_slug])
285 + || (is_array($_registered_pages) && !empty(array_filter(array_keys($_registered_pages), static function ($hook) use ($ei_slug) { return false !== strpos($hook, '_page_' . $ei_slug); })));
286 + if (!$ei_registered) {
287 + $ei_settings_url = '';
288 + }
289 + }
290 + if (!empty($ei_settings_url)): ?>
291 + <a href="<?php echo esc_url($ei_settings_url); ?>"
278 292 class="text-xs font-medium text-indigo-600 hover:text-indigo-800 underline-offset-2 hover:underline"
279 - title="<?php echo esc_attr(sprintf(__('Open %s settings', 'easy-invoice'), $addon['name'])); ?>">
280 - <?php esc_html_e('Settings', 'easy-invoice'); ?> →
293 + title="<?php /* translators: %s: addon name. */ echo esc_attr(sprintf(__('Open %s settings', 'easy-invoice'), $addon['name'])); ?>">
294 + <?php echo esc_html($addon['settings_label'] ?? __('Settings', 'easy-invoice')); ?> →
281 295 </a>
282 296 <?php endif; ?>
283 297 </div>
284 298 <?php elseif ($is_locked): ?>
@@ -291,9 +305,9 @@
291 305 data-required-plan-label="<?php echo esc_attr($plan_label); ?>"
292 306 data-feature-name="<?php echo esc_attr($addon['name']); ?>"
293 307 data-feature-description="<?php echo esc_attr($addon['description']); ?>"
294 308 >
295 - <?php echo esc_html(sprintf(__('Upgrade to %s', 'easy-invoice'), $plan_label)); ?>
309 + <?php /* translators: %s: plan name. */ echo esc_html(sprintf(__('Upgrade to %s', 'easy-invoice'), $plan_label)); ?>
296 310 </button>
297 311 <a href="<?php echo esc_url($addon['docs_url']); ?>" target="_blank" rel="noopener" class="text-xs font-medium text-gray-500 hover:text-indigo-600 whitespace-nowrap">
298 312 <?php esc_html_e('Learn', 'easy-invoice'); ?> →
299 313 </a>