PluginProbe
Search Atlas SEO – OTTO AI SEO Automation for WordPress / 2.6.13
Search Atlas SEO – OTTO AI SEO Automation for WordPress v2.6.13
2.6.26 2.6.25 2.6.24 2.6.23 2.6.22 2.6.21 2.6.20 2.6.19 2.6.18 2.6.17 2.6.16 2.6.15 2.6.14 2.6.13 2.6.12 2.6.11 2.6.10 2.6.9 2.6.8 2.6.7 2.6.6 2.6.5 2.6.4 2.6.3 2.5.23 All 138 releases
metasync / views / metasync-report-issue.php

metasync-report-issue.php in Search Atlas SEO – OTTO AI SEO Automation for WordPress 2.6.13, at views/metasync-report-issue.php

587 lines 21.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The Report Issue admin page view
4 *
5 * @link https://searchatlas.com
6 * @since 1.0.0
7 *
8 * @package Metasync
9 * @subpackage Metasync/views
10 */
11
12 if (!defined('ABSPATH')) {
13 exit; // Exit if accessed directly
14 }
15
16 $plugin_name = Metasync::get_effective_plugin_name();
17
18 # Get general options (same way as used throughout the plugin)
19 $general_options = Metasync::get_option('general');
20 if (!is_array($general_options)) {
21 $general_options = array();
22 }
23 $project_uuid = isset($general_options['otto_pixel_uuid']) ? sanitize_text_field($general_options['otto_pixel_uuid']) : '';
24
25 # Get WordPress and plugin information with error handling
26 global $wp_version;
27 $active_theme = wp_get_theme();
28 $theme_name = is_object($active_theme) ? $active_theme->get('Name') : get_template();
29
30 # Collect system information
31 $system_info = array(
32 'website_url' => esc_url(home_url()),
33 'site_title' => esc_html(get_bloginfo('name')),
34 'admin_email' => sanitize_email(get_bloginfo('admin_email')),
35 'plugin_version' => defined('METASYNC_VERSION') ? esc_html(METASYNC_VERSION) : '1.0.0',
36 'wordpress_version' => esc_html($wp_version),
37 'php_version' => esc_html(PHP_VERSION),
38 'active_theme' => esc_html($theme_name),
39 'memory_limit' => esc_html(ini_get('memory_limit')),
40 'multisite' => is_multisite() ? 'Yes' : 'No'
41 );
42 ?>
43
44 <?php $this->render_layout_open('Report Issue', 'report_issue', 'Submit a support ticket or report a bug to our team.'); ?>
45
46 <div class="metasync-report-issue-container">
47
48 <!-- System Information Card -->
49 <div class="dashboard-card metasync-system-info-card">
50 <h2>System Information</h2>
51 <p>This information will be automatically included with your report.</p>
52
53 <div class="metasync-system-info-grid">
54 <div class="metasync-info-item">
55 <span class="metasync-info-label">Website URL:</span>
56 <span class="metasync-info-value"><?php echo esc_html($system_info['website_url']); ?></span>
57 </div>
58 <div class="metasync-info-item">
59 <span class="metasync-info-label">Plugin Version:</span>
60 <span class="metasync-info-value"><?php echo esc_html($system_info['plugin_version']); ?></span>
61 </div>
62 <div class="metasync-info-item">
63 <span class="metasync-info-label">WordPress Version:</span>
64 <span class="metasync-info-value"><?php echo esc_html($system_info['wordpress_version']); ?></span>
65 </div>
66 <div class="metasync-info-item">
67 <span class="metasync-info-label">PHP Version:</span>
68 <span class="metasync-info-value"><?php echo esc_html($system_info['php_version']); ?></span>
69 </div>
70 <div class="metasync-info-item">
71 <span class="metasync-info-label">Active Theme:</span>
72 <span class="metasync-info-value"><?php echo esc_html($system_info['active_theme']); ?></span>
73 </div>
74 <div class="metasync-info-item">
75 <span class="metasync-info-label">Project UUID:</span>
76 <span class="metasync-info-value metasync-uuid-value">
77 <?php if (!empty($project_uuid)): ?>
78 <?php echo esc_html($project_uuid); ?>
79 <?php else: ?>
80 <em style="opacity: 0.6;">Not configured yet</em>
81 <?php endif; ?>
82 </span>
83 </div>
84 </div>
85 </div>
86
87 <!-- Report Form Card -->
88 <div class="dashboard-card metasync-report-form-card">
89 <h2>Report an Issue</h2>
90 <p>Describe the issue you're experiencing and we'll receive it in our monitoring system.</p>
91
92 <?php if (!empty($project_uuid)): ?>
93 <div class="metasync-report-title-info">
94 <p><strong>Report Title:</strong> <code>Client Report <?php echo esc_html($project_uuid); ?></code></p>
95 <p class="metasync-form-help-text" style="margin-top: 5px;">This standardized title helps us prioritize your issue in our monitoring system.</p>
96 </div>
97 <?php endif; ?>
98
99 <form id="metasync-report-issue-form" method="post">
100 <?php wp_nonce_field('metasync_report_issue', 'metasync_report_issue_nonce'); ?>
101
102 <div class="metasync-form-group">
103 <label for="metasync_issue_message" class="metasync-form-label">
104 <strong>Issue Description</strong>
105 <span class="metasync-required-badge">Required</span>
106 </label>
107 <textarea
108 id="metasync_issue_message"
109 name="issue_message"
110 class="metasync-form-textarea"
111 placeholder="Please describe the issue in detail. Include any error messages, steps to reproduce, or relevant information..."
112 rows="8"
113 maxlength="1000"
114 required
115 ></textarea>
116 <span id="metasync_char_counter" class="metasync-char-counter">0/1000</span>
117 <div class="metasync-char-counter-wrapper">
118 <p class="metasync-form-help-text">Minimum 10 characters, maximum 1000 characters</p>
119 </div>
120 </div>
121
122 <div class="metasync-form-group">
123 <label for="metasync_issue_severity" class="metasync-form-label">
124 <strong>Severity Level</strong>
125 </label>
126 <select id="metasync_issue_severity" name="issue_severity" class="metasync-form-select">
127 <option value="info">Info - General question or feedback</option>
128 <option value="warning" selected>Warning - Non-critical issue</option>
129 <option value="error">Error - Affecting functionality</option>
130 <option value="fatal">Critical - Site breaking issue</option>
131 </select>
132 </div>
133
134 <div class="metasync-form-group">
135 <label for="metasync_issue_attachment" class="metasync-form-label">
136 <strong>Attachment</strong>
137 <span class="metasync-optional-badge">Optional</span>
138 </label>
139 <input
140 type="file"
141 id="metasync_issue_attachment"
142 name="issue_attachment"
143 class="metasync-form-file-input"
144 accept="image/jpeg,image/jpg,image/png,image/gif,image/webp"
145 />
146 <p class="metasync-form-help-text">Upload a screenshot or image (JPEG, PNG, GIF, WebP). Max 5MB.</p>
147 </div>
148
149 <div class="metasync-form-group">
150 <label class="metasync-checkbox-label">
151 <input type="checkbox" id="metasync_include_user_info" name="include_user_info" checked />
152 <span>Include current user information (username, email)</span>
153 </label>
154 </div>
155
156 <!-- Temporary Support Access Section -->
157 <div class="metasync-form-group metasync-support-access-section" style="padding-top: 30px; border-top: 1px solid rgba(255, 255, 255, 0.1);">
158 <div class="metasync-support-access-header">
159 <label class="metasync-form-label">
160 <strong>Grant Temporary Support Access</strong>
161 <span class="metasync-optional-badge" style="background: rgba(255, 255, 255, 0.1); padding: 2px 8px; border-radius: 3px; font-size: 11px; margin-left: 8px; color: #888;">Optional</span>
162 </label>
163 <p class="metasync-form-help-text" style="color: #888; font-size: 13px; margin-top: 8px; line-height: 1.5;">
164 Allow <?php echo esc_html($plugin_name); ?> support staff to temporarily access your WordPress admin to investigate and resolve this issue.
165 </p>
166 </div>
167
168 <div class="metasync-checkbox-wrapper" style="margin: 20px 0;">
169 <label class="metasync-checkbox-label">
170 <input type="checkbox" id="metasync_grant_support_access" name="grant_support_access" />
171 <span>I consent to grant temporary admin access to <?php echo esc_html($plugin_name); ?> support</span>
172 </label>
173 </div>
174
175 <div id="metasync_support_access_options" class="metasync-support-access-options" style="display: none; margin-top: 20px; padding: 20px; background: rgba(255, 255, 255, 0.03); border-radius: 5px; border: 1px solid rgba(255, 255, 255, 0.1);">
176 <label for="metasync_access_duration" class="metasync-form-label" style="display: block; margin-bottom: 10px;">
177 <strong>Access Duration</strong>
178 </label>
179 <select id="metasync_access_duration" name="access_duration" class="metasync-form-select" style="width: 100%; padding: 8px; border-radius: 4px; border: 1px solid rgba(255, 255, 255, 0.2); background: rgba(255, 255, 255, 0.05); color: #fff;">
180 <option value="3600">1 hour</option>
181 <option value="14400">4 hours</option>
182 <option value="28800">8 hours</option>
183 <option value="86400" selected>24 hours (Recommended)</option>
184 <option value="172800">48 hours</option>
185 <option value="604800">7 days</option>
186 <option value="1209600">14 days</option>
187 <option value="2592000">30 days</option>
188 </select>
189
190 <div class="metasync-security-notice" style="margin-top: 20px; padding: 15px; background: rgba(30, 144, 255, 0.1); border-left: 4px solid #1e90ff; border-radius: 4px;">
191 <div style="display: flex; gap: 10px;">
192 <span class="metasync-security-icon"><span class="dashicons dashicons-lock" style="font-size:20px;width:20px;height:20px;color:#1e90ff;"></span></span>
193 <div class="metasync-security-text" style="flex: 1;">
194 <strong style="color: #1e90ff; display: block; margin-bottom: 8px;">Security Information:</strong>
195 <ul style="margin: 0; padding-left: 20px; font-size: 13px; color: #aaa; line-height: 1.6;">
196 <li>Access expires automatically after the selected duration</li>
197 <li>You can revoke access at any time from Settings Support Access</li>
198 <li>A secure JWT token will be sent with your report</li>
199 <li>Token is valid only for this WordPress site</li>
200 <li>All authentication attempts are logged</li>
201 </ul>
202 </div>
203 </div>
204 </div>
205 </div>
206 </div>
207
208 <div class="metasync-form-actions">
209 <button type="submit" class="button button-primary button-large" id="metasync-submit-report-btn">
210 <span class="metasync-btn-text"><span class="dashicons dashicons-upload" style="margin-top:9px;font-size:15px;width:15px;height:15px;"></span> Submit Report</span>
211 <span class="metasync-btn-loading">
212 <span class="spinner is-active metasync-spinner"></span>
213 Sending...
214 </span>
215 </button>
216 </div>
217
218 <div id="metasync-report-response-message" class="metasync-report-response"></div>
219 </form>
220 </div>
221
222 <!-- Help Card -->
223 <div class="dashboard-card metasync-help-card">
224 <h3>Tips for Reporting Issues</h3>
225 <ul class="metasync-help-list">
226 <li>�
227 Be as specific as possible about the issue</li>
228 <li>�
229 Include steps to reproduce the problem</li>
230 <li>�
231 Mention any error messages you see</li>
232 <li>�
233 Include screen recording video link if possible (e.g., Loom, Jam.dev, or similar)</li>
234 <li>�
235 Note when the issue started occurring</li>
236 </ul>
237 </div>
238
239 </div>
240
241 <?php $this->render_layout_close(); ?>
242
243 <style>
244 /* MetaSync Report Issue Styles - Matches plugin theme */
245 .metasync-report-issue-container {
246 max-width: 1200px;
247 margin: 20px 0;
248 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
249 }
250
251 /* Card styling matching plugin dashboard cards */
252 .metasync-report-issue-container .dashboard-card {
253 background: var(--dashboard-card-bg, #1a1f26);
254 border: 1px solid var(--dashboard-border, #374151);
255 border-radius: 12px;
256 padding: 28px;
257 margin-bottom: 24px;
258 box-shadow: var(--dashboard-shadow, 0 10px 15px -3px rgba(0, 0, 0, 0.3));
259 transition: none; /* No hover effect */
260 }
261
262 .metasync-report-issue-container .dashboard-card h2 {
263 margin-top: 0;
264 margin-bottom: 12px;
265 font-size: 22px;
266 font-weight: 600;
267 color: var(--dashboard-text-primary, #ffffff);
268 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
269 }
270
271 .metasync-report-issue-container .dashboard-card h3 {
272 margin-top: 0;
273 margin-bottom: 12px;
274 font-size: 18px;
275 font-weight: 600;
276 color: var(--dashboard-text-primary, #ffffff);
277 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
278 }
279
280 .metasync-report-issue-container .dashboard-card p {
281 color: var(--dashboard-text-secondary, #9ca3af);
282 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
283 }
284
285 .metasync-system-info-grid {
286 display: grid;
287 grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
288 gap: 16px;
289 }
290
291 .metasync-info-item {
292 display: flex;
293 flex-direction: column;
294 padding: 16px;
295 background: rgba(59, 130, 246, 0.1);
296 border-radius: 8px;
297 border-left: 3px solid var(--dashboard-accent, #3b82f6);
298 transition: none; /* No hover effect */
299 }
300
301 .metasync-info-label {
302 font-weight: 600;
303 color: var(--dashboard-text-primary, #ffffff);
304 font-size: 13px;
305 margin-bottom: 6px;
306 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
307 }
308
309 .metasync-info-value {
310 color: var(--dashboard-text-secondary, #9ca3af);
311 font-size: 14px;
312 word-break: break-all;
313 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
314 }
315
316 .metasync-report-title-info {
317 padding: 16px;
318 background: rgba(59, 130, 246, 0.08);
319 border-radius: 8px;
320 border: 1px solid rgba(59, 130, 246, 0.2);
321 margin-bottom: 24px;
322 }
323
324 .metasync-report-title-info p {
325 margin: 0;
326 color: var(--dashboard-text-primary, #ffffff);
327 font-size: 14px;
328 }
329
330 .metasync-report-title-info code {
331 background: rgba(0, 0, 0, 0.3);
332 padding: 4px 10px;
333 border-radius: 4px;
334 font-family: 'Courier New', monospace;
335 color: var(--dashboard-accent, #3b82f6);
336 font-size: 13px;
337 }
338
339 .metasync-form-group {
340 margin-bottom: 24px;
341 }
342
343 .metasync-form-label {
344 display: block;
345 margin-bottom: 8px;
346 font-size: 14px;
347 font-weight: 500;
348 color: var(--dashboard-text-primary, #ffffff);
349 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
350 }
351
352 .metasync-required-badge {
353 color: var(--dashboard-error, #ef4444);
354 font-size: 12px;
355 font-weight: normal;
356 margin-left: 6px;
357 }
358
359 .metasync-optional-badge {
360 color: var(--dashboard-text-secondary, #9ca3af);
361 font-size: 12px;
362 font-weight: normal;
363 margin-left: 6px;
364 }
365
366 .metasync-form-input,
367 .metasync-form-textarea,
368 .metasync-form-select {
369 width: 100%;
370 padding: 12px 16px;
371 font-size: 14px;
372 border: 1px solid var(--dashboard-border, #374151);
373 border-radius: 8px;
374 box-sizing: border-box;
375 background: rgba(15, 20, 25, 0.5);
376 color: var(--dashboard-text-primary, #ffffff);
377 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
378 transition: border-color 0.2s ease;
379 }
380
381 .metasync-form-input:focus,
382 .metasync-form-textarea:focus,
383 .metasync-form-select:focus {
384 border-color: var(--dashboard-accent, #3b82f6);
385 outline: none;
386 box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
387 }
388
389 .metasync-form-input::placeholder,
390 .metasync-form-textarea::placeholder {
391 color: var(--dashboard-text-secondary, #9ca3af);
392 opacity: 0.6;
393 }
394
395 .metasync-form-textarea {
396 resize: vertical;
397 min-height: 150px;
398 line-height: 1.6;
399 }
400
401 .metasync-form-select {
402 cursor: pointer;
403 color: #ffffff !important;
404 }
405
406 .metasync-form-select option {
407 color: #ffffff;
408 background: var(--dashboard-card-bg, #1a1f26);
409 }
410
411 .metasync-form-file-input {
412 display: block;
413 padding: 12px 16px;
414 font-size: 14px;
415 border: 1px solid var(--dashboard-border, #374151);
416 border-radius: 8px;
417 box-sizing: border-box;
418 background: rgba(15, 20, 25, 0.5);
419 color: var(--dashboard-text-primary, #ffffff);
420 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
421 cursor: pointer;
422 }
423
424 .metasync-form-file-input::-webkit-file-upload-button {
425 background: var(--dashboard-accent, #3b82f6);
426 color: #ffffff;
427 border: none;
428 padding: 8px 16px;
429 border-radius: 6px;
430 cursor: pointer;
431 font-size: 13px;
432 font-weight: 500;
433 margin-right: 12px;
434 }
435
436 .metasync-form-file-input::-webkit-file-upload-button:hover {
437 background: var(--dashboard-accent-hover, #2563eb);
438 }
439
440 .metasync-form-file-input::file-selector-button {
441 background: var(--dashboard-accent, #3b82f6);
442 color: #ffffff;
443 border: none;
444 padding: 8px 16px;
445 border-radius: 6px;
446 cursor: pointer;
447 font-size: 13px;
448 font-weight: 500;
449 margin-right: 12px;
450 }
451
452 .metasync-form-file-input::file-selector-button:hover {
453 background: var(--dashboard-accent-hover, #2563eb);
454 }
455
456 .metasync-form-help-text {
457 margin: 8px 0 0 0;
458 font-size: 13px;
459 color: var(--dashboard-text-secondary, #9ca3af);
460 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
461 }
462
463 .metasync-char-counter-wrapper {
464 margin-top: 8px;
465 }
466
467 .metasync-char-counter {
468 display: block;
469 font-size: 13px;
470 color: var(--dashboard-text-secondary, #9ca3af);
471 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
472 margin-top: 4px;
473 }
474
475 .metasync-char-counter-warning {
476 color: #f59e0b;
477 }
478
479 .metasync-char-counter-limit {
480 color: var(--dashboard-error, #ef4444);
481 font-weight: 600;
482 }
483
484 .metasync-checkbox-label {
485 display: flex;
486 align-items: center;
487 cursor: pointer;
488 font-size: 14px;
489 color: var(--dashboard-text-primary, #ffffff);
490 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
491 }
492
493 .metasync-checkbox-label input[type="checkbox"] {
494 margin-right: 10px;
495 width: 18px;
496 height: 18px;
497 cursor: pointer;
498 }
499
500 .metasync-report-issue-container .button-large {
501 padding: 12px 28px;
502 height: auto;
503 font-size: 15px;
504 font-weight: 600;
505 border-radius: 8px;
506 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
507 transition: opacity 0.2s ease;
508 }
509
510 .metasync-report-issue-container .button-large:disabled {
511 opacity: 0.6;
512 cursor: not-allowed;
513 }
514
515 .metasync-btn-loading {
516 display: flex;
517 align-items: center;
518 }
519
520 .metasync-report-response {
521 margin-top: 24px;
522 padding: 16px 20px;
523 border-radius: 8px;
524 font-size: 14px;
525 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
526 font-weight: 500;
527 }
528
529 .metasync-report-response.success {
530 background: rgba(16, 185, 129, 0.15);
531 border: 1px solid var(--dashboard-success, #10b981);
532 color: var(--dashboard-success, #10b981);
533 }
534
535 .metasync-report-response.error {
536 background: rgba(239, 68, 68, 0.15);
537 border: 1px solid var(--dashboard-error, #ef4444);
538 color: var(--dashboard-error, #ef4444);
539 }
540
541 .metasync-help-list {
542 margin: 16px 0;
543 padding-left: 24px;
544 }
545
546 .metasync-help-list li {
547 margin-bottom: 10px;
548 color: var(--dashboard-text-secondary, #9ca3af);
549 line-height: 1.7;
550 font-size: 14px;
551 font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
552 }
553
554 /* UUID value styling */
555 .metasync-uuid-value {
556 font-family: 'Courier New', monospace;
557 font-size: 12px;
558 }
559
560 /* Button loading state */
561 .metasync-btn-loading {
562 display: none;
563 }
564
565 .metasync-btn-loading .metasync-spinner {
566 float: none;
567 margin: 0 5px 0 0;
568 }
569
570 /* Response message hidden by default */
571 .metasync-report-response {
572 display: none;
573 }
574
575 @media (max-width: 768px) {
576 .metasync-system-info-grid {
577 grid-template-columns: 1fr;
578 }
579
580 .metasync-report-issue-container .dashboard-card {
581 padding: 20px;
582 }
583 }
584 </style>
585
586
587