PluginProbe ʕ •ᴥ•ʔ
Gallery : FooGallery / 3.3.3
Gallery : FooGallery v3.3.3
3.3.2 3.3.3 3.3.0 3.1.31 3.1.32 3.1.34 3.1.36 3.2.0 3.2.6 trunk 1.10.3 2.0.24 2.1.34 2.2.44 2.3.3 2.4.32 3.0.6 3.1.11 3.1.12 3.1.13 3.1.20 3.1.25 3.1.26 3.1.26.1 3.1.26.2
foogallery / extensions / import-export / class-foogallery-import-view-helper.php
foogallery / extensions / import-export Last commit date
class-foogallery-export-view-helper.php 3 days ago class-foogallery-import-export-extension.php 3 days ago class-foogallery-import-export.php 3 days ago class-foogallery-import-view-helper.php 3 days ago functions.php 3 days ago view-import-export.php 3 days ago
class-foogallery-import-view-helper.php
260 lines
1 <?php
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit;
5 }
6
7 if ( ! class_exists( 'FooGallery_Import_View_Helper' ) ) {
8
9 /**
10 * Class FooGallery_Import_View_Helper
11 */
12 class FooGallery_Import_View_Helper {
13 public function render_import_form() {
14 ?>
15 <style>
16 #foogallery_import_form textarea {
17 width: 100%;
18 height: 200px;
19 }
20 .foogallery_gallery_import_results {
21 display: none;
22 margin-top: 10px;
23 padding: 10px;
24 background: #fff;
25 border: 1px solid #ccd0d4;
26 max-height: 300px;
27 overflow: auto;
28 }
29 .foogallery_gallery_import_progress_wrap {
30 display: none;
31 margin-top: 10px;
32 }
33 .foogallery_gallery_import_progress {
34 width: 100%;
35 }
36 </style>
37 <script>
38 jQuery(function ($) {
39 var currentJobId = null;
40 var pollTimer = null;
41
42 function getNonce() {
43 return $('#foogallery_gallery_import').val();
44 }
45
46 function setSpinner(active) {
47 $('.foogallery_import_spinner').toggleClass('is-active', !!active);
48 }
49
50 function showProgress(show) {
51 $('.foogallery_gallery_import_progress_wrap').toggle(!!show);
52 }
53
54 function setProgress(percent, done, total, stage) {
55 var pct = parseInt(percent || 0, 10);
56 if (isNaN(pct)) pct = 0;
57 $('.foogallery_gallery_import_progress').val(pct);
58
59 var text = pct + '%';
60 if (typeof done !== 'undefined' && typeof total !== 'undefined') {
61 text += ' (' + done + '/' + total + ')';
62 }
63 if (stage) {
64 text += ' - ' + stage;
65 }
66 $('.foogallery_gallery_import_progress_text').text(text);
67 }
68
69 function appendMessage(msg) {
70 if (!msg) return;
71 var $results = $('.foogallery_gallery_import_results');
72 $results.show();
73 $results.append($('<div/>').text(msg));
74 $results.scrollTop($results[0].scrollHeight);
75 }
76
77 function clearMessages() {
78 $('.foogallery_gallery_import_results').empty().hide();
79 }
80
81 function setControls(state) {
82 $('.foogallery_gallery_import_start').prop('disabled', !!state.running);
83 $('.foogallery_gallery_import_resume').toggle(!state.running && !!state.canResume);
84 $('.foogallery_gallery_import_delete').toggle(!state.running && !!state.canDelete);
85 }
86
87 function stopPolling() {
88 if (pollTimer) {
89 clearTimeout(pollTimer);
90 pollTimer = null;
91 }
92 }
93
94 function request(mode, extra, onSuccess) {
95 var data = $.extend({
96 action: 'foogallery_gallery_import',
97 mode: mode,
98 '_wpnonce': getNonce()
99 }, extra || {});
100
101 $.ajax({
102 type: "POST",
103 url: ajaxurl,
104 dataType: 'json',
105 data: data,
106 success: function(resp) {
107 if (!resp || resp.success !== true) {
108 var message = (resp && resp.data && resp.data.message) ? resp.data.message : '<?php echo esc_js( __( 'Something went wrong with the import!', 'foogallery' ) ); ?>';
109 appendMessage(message);
110 setSpinner(false);
111 setControls({ running: false, canResume: !!currentJobId, canDelete: !!currentJobId });
112 return;
113 }
114 onSuccess(resp.data || {});
115 },
116 error: function(xhr) {
117 var message = '<?php echo esc_js( __( 'Something went wrong with the import!', 'foogallery' ) ); ?>';
118 if (xhr && xhr.responseJSON && xhr.responseJSON.data && xhr.responseJSON.data.message) {
119 message = xhr.responseJSON.data.message;
120 } else if (xhr && xhr.responseText) {
121 try {
122 var parsed = JSON.parse(xhr.responseText);
123 if (parsed && parsed.data && parsed.data.message) {
124 message = parsed.data.message;
125 }
126 } catch (e) {}
127 }
128 appendMessage(message);
129 setSpinner(false);
130 setControls({ running: false, canResume: !!currentJobId, canDelete: !!currentJobId });
131 }
132 });
133 }
134
135 function handleProgress(data) {
136 if (data.job_id) {
137 currentJobId = data.job_id;
138 }
139 if (typeof data.percent !== 'undefined') {
140 showProgress(true);
141 setProgress(data.percent, data.done, data.total, data.stage);
142 }
143 if (data.message) {
144 appendMessage(data.message);
145 }
146 }
147
148 function pollStep() {
149 stopPolling();
150 if (!currentJobId) return;
151
152 request('step', { job_id: currentJobId }, function(data) {
153 handleProgress(data);
154 if (data.complete) {
155 setSpinner(false);
156 setControls({ running: false, canResume: false, canDelete: true });
157 return;
158 }
159 pollTimer = setTimeout(pollStep, 350);
160 });
161 }
162
163 function startImport() {
164 stopPolling();
165 clearMessages();
166 showProgress(true);
167 setProgress(0, 0, 0, '');
168 setSpinner(true);
169 setControls({ running: true, canResume: false, canDelete: false });
170
171 request('start', { data: $('#foogallery_import_form textarea').val() }, function(data) {
172 handleProgress(data);
173 pollTimer = setTimeout(pollStep, 350);
174 });
175 }
176
177 function resumeImport() {
178 stopPolling();
179 if (!currentJobId) return;
180 setSpinner(true);
181 setControls({ running: true, canResume: false, canDelete: false });
182 pollTimer = setTimeout(pollStep, 10);
183 }
184
185 function deleteImportJob() {
186 stopPolling();
187 if (!currentJobId) return;
188 setSpinner(true);
189
190 request('delete', { job_id: currentJobId }, function(data) {
191 currentJobId = null;
192 setSpinner(false);
193 showProgress(false);
194 clearMessages();
195 setControls({ running: false, canResume: false, canDelete: false });
196 if (data && data.deleted) {
197 appendMessage('<?php echo esc_js( __( 'Import job deleted.', 'foogallery' ) ); ?>');
198 }
199 });
200 }
201
202 function checkStatus() {
203 request('status', {}, function(data) {
204 if (!data || !data.has_job) {
205 setControls({ running: false, canResume: false, canDelete: false });
206 return;
207 }
208
209 currentJobId = data.job_id || null;
210 showProgress(true);
211 setProgress(data.percent, data.done, data.total, data.stage);
212
213 if (data.complete) {
214 setControls({ running: false, canResume: false, canDelete: true });
215 } else {
216 setControls({ running: false, canResume: true, canDelete: true });
217 }
218 });
219 }
220
221 $('#foogallery_import_form').on('click', '.foogallery_gallery_import_start', function (e) {
222 e.preventDefault();
223 startImport();
224 });
225
226 $('#foogallery_import_form').on('click', '.foogallery_gallery_import_resume', function (e) {
227 e.preventDefault();
228 resumeImport();
229 });
230
231 $('#foogallery_import_form').on('click', '.foogallery_gallery_import_delete', function (e) {
232 e.preventDefault();
233 deleteImportJob();
234 });
235
236 checkStatus();
237 });
238 </script>
239 <?php
240 wp_nonce_field( 'foogallery_gallery_import', 'foogallery_gallery_import', false );
241 ?>
242 <form id="foogallery_import_form" method="POST">
243 <textarea></textarea>
244 <br />
245 <br />
246 <input type="submit" name="foogallery_gallery_import" class="button button-primary foogallery_gallery_import_start" value="<?php echo esc_attr( __( 'Import', 'foogallery' ) ); ?>">
247 <button type="button" class="button foogallery_gallery_import_resume" style="display: none;"><?php echo esc_html( __( 'Resume last import', 'foogallery' ) ); ?></button>
248 <button type="button" class="button foogallery_gallery_import_delete" style="display: none;"><?php echo esc_html( __( 'Delete import job', 'foogallery' ) ); ?></button>
249 <span class="foogallery_import_spinner spinner" style="float: none"></span>
250 <div class="foogallery_gallery_import_progress_wrap">
251 <progress class="foogallery_gallery_import_progress" value="0" max="100"></progress>
252 <div class="foogallery_gallery_import_progress_text"></div>
253 </div>
254 <div class="foogallery_gallery_import_results"></div>
255 </form>
256 <?php
257 }
258 }
259 }
260