PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.5
ووسلام – همگام سازی ووکامرس و باسلام v1.10.5
1.10.19 1.10.20 1.10.18 1.10.17 1.10.15 1.10.14 1.10.13 1.10.12 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.2 1.9.1 1.9.0 1.8.8 1.8.5 1.8.6 All 53 releases
sync-basalam / templates / admin / Ticket / Single.php

Single.php in ووسلام – همگام سازی ووکامرس و باسلام 1.10.5, at templates/admin/Ticket/Single.php

172 lines 10.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 use SyncBasalam\Services\TicketServiceManager;
4 use SyncBasalam\Utilities\DateConverter;
5 use SyncBasalam\Admin\Components\CommonComponents;
6 use SyncBasalam\Utilities\TicketUserResolver;
7
8 defined('ABSPATH') || exit;
9
10 $ticket_id = isset($_GET['ticket_id']) ? intval($_GET['ticket_id']) : 0;
11
12 $ticketManager = new TicketServiceManager();
13 $fetchTicket = $ticketManager->fetchTicket($ticket_id);
14
15 if (TicketServiceManager::isUnauthorized($fetchTicket)) {
16 CommonComponents::renderUnauthorizedError();
17 return;
18 }
19
20 $ticket = isset($fetchTicket['body']) ? json_decode($fetchTicket['body'], true) : null;
21
22 if (empty($ticket)) {
23 echo 'تیکت یافت نشد.';
24 return;
25 }
26
27 $isTicketClosed = TicketServiceManager::isTicketClosed($ticket);
28
29 ?>
30 <div class="basalam-container">
31 <div class="ticket-items__answer">
32 <header class="ticket-items__answer-header">
33 <h2 class="basalam-h">پاسخ تیکت</h2>
34 <a class="basalam-p" style="color: black !important;direction: ltr;display:flex" href=" <?php echo esc_url(add_query_arg(['page' => 'sync_basalam_tickets', 'paged' => 1,], admin_url('admin.php'))); ?>">بازگشت به لیست تیکت ها</a>
35 </header>
36 <?php if ($isTicketClosed): ?>
37 <div class="ticket-items__answer-closed" role="status" aria-live="polite">
38 <span class="ticket-items__answer-closed-icon" aria-hidden="true">
39 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
40 <rect x="3" y="11" width="18" height="10" rx="2"></rect>
41 <path d="M7 11V7a5 5 0 0 1 10 0v4"></path>
42 </svg>
43 </span>
44 <p class="ticket-items__answer-closed-text basalam-p">این تیکت بسته شده است و ا�
45 کان ارسال پاسخ جدید وجود ندارد.</p>
46 </div>
47 <?php else: ?>
48 <form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post" class="Basalam-form">
49 <?php wp_nonce_field('create_ticket_item_nonce', '_wpnonce'); ?>
50 <input type="hidden" name="action" value="create_ticket_item">
51 <input type="hidden" name="ticket_id" value="<?php echo esc_attr($ticket_id); ?>">
52 <div class="ticket-items__answer-inputs">
53 <div class="ticket-items__answer-control">
54 <label for="ticket-answer-textarea" class="ticket-items__answer-control-label basalam-p">�
55 تن پاسخ خود را وارد کنید</label>
56 <textarea id="ticket-answer-textarea" name="content" class="basalam-input ticket-items__answer-input"></textarea>
57 </div>
58
59 <div class="create-ticket__extra-info">
60 <p class="create-ticket__extra-info-title basalam-p">اطلاعات دسترسی (اختیاری)</p>
61 <div class="ticket-access-grid">
62 <div class="ticket-access-card ticket-access-card--dashboard">
63 <p class="ticket-access-card__title basalam-p">اطلاعات پیشخوان</p>
64 <div class="create-ticket__control">
65 <label for="ticket-dashboard-login-url" class="create-ticket__label basalam-p">آدرس لاگین پیشخوان</label>
66 <input type="text" name="dashboard_login_url" id="ticket-dashboard-login-url" class="basalam-input create-ticket__input">
67 </div>
68 <div class="create-ticket__control">
69 <label for="ticket-dashboard-username" class="create-ticket__label basalam-p">نا�
70 کاربری پیشخوان</label>
71 <input type="text" name="dashboard_username" id="ticket-dashboard-username" class="basalam-input create-ticket__input">
72 </div>
73 <div class="create-ticket__control">
74 <label for="ticket-dashboard-password" class="create-ticket__label basalam-p">ر�
75 ز عبور پیشخوان</label>
76 <input type="text" name="dashboard_password" id="ticket-dashboard-password" class="basalam-input create-ticket__input">
77 </div>
78 </div>
79
80 <div class="ticket-access-card ticket-access-card--host-panel">
81 <p class="ticket-access-card__title basalam-p">کنترل پنل هاست</p>
82 <div class="create-ticket__control">
83 <label for="ticket-host-panel-login-url" class="create-ticket__label basalam-p">آدرس لاگین کنترل پنل هاست</label>
84 <input type="text" name="host_panel_login_url" id="ticket-host-panel-login-url" class="basalam-input create-ticket__input">
85 </div>
86 <div class="create-ticket__control">
87 <label for="ticket-host-panel-username" class="create-ticket__label basalam-p">نا�
88 کاربری کنترل پنل هاست</label>
89 <input type="text" name="host_panel_username" id="ticket-host-panel-username" class="basalam-input create-ticket__input">
90 </div>
91 <div class="create-ticket__control">
92 <label for="ticket-host-panel-password" class="create-ticket__label basalam-p">ر�
93 ز عبور کنترل پنل هاست</label>
94 <input type="text" name="host_panel_password" id="ticket-host-panel-password" class="basalam-input create-ticket__input">
95 </div>
96 </div>
97 </div>
98 </div>
99
100 <div class="ticket-items__answer-control">
101 <label class="ticket-items__answer-control-label basalam-p">پیوست تصویر (اختیاری)</label>
102 <div class="ticket-file-upload" id="ticket-file-upload-reply">
103 <label for="ticket-file-reply" class="ticket-file-upload__label">
104 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
105 <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
106 <polyline points="17 8 12 3 7 8" />
107 <line x1="12" y1="3" x2="12" y2="15" />
108 </svg>
109 انتخاب تصویر
110 </label>
111 <input type="file" name="_ticket_file" id="ticket-file-reply" class="ticket-file-upload__input" accept="image/jpeg,image/png,image/webp,image/bmp,image/avif">
112 <div class="ticket-file-upload__previews"></div>
113 </div>
114 </div>
115 <div class="ticket-items__answer-actions">
116 <button type="submit" class="ticket-items__answer-submit basalam-primary-button">ارسال</button>
117 </div>
118 </div>
119 </form>
120 <?php endif; ?>
121 </div>
122 <div class="ticket-items">
123 <?php
124 foreach ($ticket['data']['items'] as $ticketItem) {
125 if ($ticketItem['type'] != 'content') continue;
126 $isAdmin = $ticketItem['user']['is_admin'];
127 $creatorUser = TicketUserResolver::getLabel($ticketItem['user']);
128 ?>
129 <div class="ticket-items__item-wrapper">
130 <div class="ticket-items__item <?php if ($isAdmin) echo 'ticket-items__item--admin' ?>">
131 <div class="ticket-items__item-stats">
132 <p class="ticket-items__item-name basalam-p"><?php echo esc_html($creatorUser); ?></p>
133
134 <p class="ticket-items__item-date basalam-p">
135 <?php echo esc_html(DateConverter::utcToJalaliDateTime($ticketItem['created_at'])) ?>
136 </p>
137 </div>
138
139 <div class="ticket-items__item-content-wrapper">
140 <p class="ticket-items__item-content basalam-p">
141 <?php echo esc_html($ticketItem['content']) ?>
142 </p>
143 <?php
144 $itemFiles = $ticketItem['files'] ?? $ticketItem['media'] ?? $ticketItem['attachments'] ?? [];
145 if (!empty($itemFiles)):
146 ?>
147 <div class="ticket-items__item-files">
148 <?php foreach ($itemFiles as $file):
149 $fileUrl = $file['url'] ?? $file['path'] ?? null;
150 if (!$fileUrl) continue;
151 ?>
152 <a href="<?php echo esc_url($fileUrl); ?>" target="_blank" class="ticket-items__item-file-link">
153 <img src="<?php echo esc_url($fileUrl); ?>" alt="" class="ticket-items__item-file-img">
154 </a>
155 <?php endforeach; ?>
156 </div>
157 <?php endif; ?>
158 </div>
159 </div>
160 </div>
161 <?php
162 }
163 ?>
164 </div>
165 </div>
166 <?php if (!$isTicketClosed): ?>
167 <script>
168 document.addEventListener('DOMContentLoaded', function() {
169 ticketFileUpload('ticket-file-reply', '<?php echo esc_attr(wp_create_nonce('upload_ticket_media_nonce')); ?>');
170 });
171 </script>
172 <?php endif; ?>