PluginProbe
Contact Forms by Cimatti / 1.9.2
Contact Forms by Cimatti v1.9.2
2.3.6 2.3.5 2.3.0 2.2.32 2.2.4 2.2.0 2.1.2 2.1.1 trunk 1.0 1.1 1.2 1.2.1 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 All 62 releases
contact-forms / accua-forms-dashboard.php

accua-forms-dashboard.php in Contact Forms by Cimatti 1.9.2, at accua-forms-dashboard.php

411 lines 18.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php function _accua_forms_dashboard_page(){
2 /* global vars */
3 global $hook_suffix;
4 /* enable add_meta_boxes function in this page. */
5 do_action( 'add_meta_boxes', $hook_suffix, 10, 2 ); ?>
6
7 <div class="fx-settings-meta-box-wrap">
8 <div id="postbox-container-1" class="postbox-container">
9 </div><!-- .fx-settings-meta-box-wrap -->
10 </div>
11 <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
12 <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
13
14 global $wpdb;
15 $email_fields = array();
16 $num_submissions = $wpdb->get_var("SELECT count(*) as num_row
17 FROM {$wpdb->prefix}accua_forms_submissions WHERE afs_status >= 0");
18 if ($num_submissions) {
19 $num_posts = $wpdb->get_var("SELECT count(DISTINCT afs_post_id ) as num_row
20 FROM {$wpdb->prefix}accua_forms_submissions WHERE afs_post_id <> 0 AND afs_status >= 0");
21 $num_forms = $wpdb->get_var("SELECT count(DISTINCT afs_form_id ) as num_row
22 FROM {$wpdb->prefix}accua_forms_submissions WHERE afs_status >= 0");
23 $num_submissions_per_lead_status = $wpdb->get_results("SELECT afs_lead_status AS status, COUNT(*) AS n
24 FROM `{$wpdb->prefix}accua_forms_submissions`
25 WHERE afs_status >= 0
26 GROUP BY afs_lead_status", OBJECT_K);
27
28 //seleziono i campi email
29 $avail_fields = get_option('accua_forms_avail_fields', array());
30 foreach ($avail_fields as $key => $single_field) {
31 if ($single_field['type'] == 'email' || $single_field['type'] == 'autoreply_email') {
32 $email_fields[] = $wpdb->prepare('%s', $key);
33 }
34 }
35 if ($email_fields) {
36 $email_fields_string = implode(',', $email_fields);
37 $num_emails = $wpdb->get_var("SELECT COUNT(DISTINCT (`afsv_value`)) as num_row
38 FROM {$wpdb->prefix}accua_forms_submissions, {$wpdb->prefix}accua_forms_submissions_values
39 WHERE `afs_id` = `afsv_sub_id`
40 AND afsv_field_id IN ({$email_fields_string})
41 AND afs_status >= 0");
42 } else {
43 $num_emails = 0;
44 }
45 }
46
47
48 $forms_data = get_option('accua_forms_saved_forms', array());
49
50 $fid = '';
51 $fid_param = '';
52 if (isset($_GET['fid'])) {
53 $fid = stripslashes( (string) $_GET['fid'] );
54 if (isset($forms_data[$fid])) {
55 $fid_param = $wpdb->prepare('AND afs_form_id = %s', $fid);
56 } else {
57 $fid = '';
58 }
59 }
60
61
62 if (isset($_GET['period'])) {
63 $period = (int) $_GET['period'];
64 if($period <= 0 && $period != -1){
65 $period = 24; //default
66 }
67 } else{
68 $period = 24; //default
69 }
70
71 if(isset($_POST['del_sub_form'])) {
72 $id = (int)$_POST['del_sub_form'];
73 check_admin_referer("del_sub_form_{$id}", "_wpnonce_del_sub_form");
74 accua_forms_trash_submission($id);
75 }
76
77 $label_my = array();
78 $submissions = array();
79 $unique_submissions = array();
80 $origin_label_my = array();
81
82 if ($email_fields) {
83 //costruisco il grafico
84 $query_grafico = $wpdb->get_results("SELECT YEAR( afs_submitted ) AS `year` , MONTH( afs_submitted ) AS `month` , COUNT( DISTINCT (`afs_id`) ) AS `submissions` , COUNT( DISTINCT (`afsv_value`)) AS `unique_submissions`
85 FROM `{$wpdb->prefix}accua_forms_submissions`
86 LEFT JOIN `{$wpdb->prefix}accua_forms_submissions_values` ON `afs_id` = `afsv_sub_id`
87 WHERE afsv_field_id IN ({$email_fields_string})
88 AND afs_status >= 0
89 $fid_param
90 GROUP BY `year` , `month`
91 ORDER BY `year` DESC , `month` DESC");
92
93 if ($query_grafico) {
94 /* cicliamo per ogni mese in modo da riempire con 0 i mesi senza compilazioni */
95 for ($i = date('Y'); $i >= $query_grafico[count($query_grafico) - 1]->year; $i--) {
96 $start_month = 12;
97 $end_month = 1;
98 if ($i == date('Y')) $start_month = date('n');
99 if ($i == $query_grafico[count($query_grafico) - 1]->year) $end_month = $query_grafico[count($query_grafico) - 1]->month;
100 for ($j = $start_month; $j >= $end_month; $j--) {
101 $find = false;
102 foreach ($query_grafico as $result) {
103 if (!$find && (int)$result->year == $i && (int)$result->month == $j) {
104 $label_my[] = $j . '/' . $i;
105 $submissions[] = (int)$result->submissions;
106 $unique_submissions[] = (int)$result->unique_submissions;
107 $find = true;
108 }
109 }
110 if (!$find) {
111 $label_my[] = $j . '/' . $i;
112 $submissions[] = 0;
113 $unique_submissions[] = 0;
114
115 }
116 }
117 }
118 $origin_label_my = $label_my;
119 $origin_submissions = $submissions;
120 $origin_unique_submissions = $unique_submissions;
121
122 if ($period != -1) {
123 $label_my = array_slice($label_my, 0, $period);
124 $submissions = array_slice($submissions, 0, $period);
125 $unique_submissions = array_slice($unique_submissions, 0, $period);
126 }
127
128 $label_my = array_reverse($label_my);
129 $submissions = array_reverse($submissions);
130 $unique_submissions = array_reverse($unique_submissions);
131 }
132 }
133
134
135 ?>
136
137 <div id="accua_dashboard_page" class="accua_forms_admin_page wrap">
138 <h2><img src="<?php echo ACCUA_FORMS_DIR_URL.'img/cimatti-icon-20.png'; ?>"/> <?php _e('Contact Forms - Dashboard', 'contact-forms'); ?></h2>
139 <div class="metabox-holder accua-forms-metabox-holder">
140 <div class="postbox ">
141 <h2><span><?php _e('Monthly number of forms submitted', 'contact-forms'); ?></span></h2>
142 <div class="inside" id="dashboard_right_now">
143
144 <form method="get">
145 <input type="hidden" name="page" value="accua_forms" />
146
147 <select name="period">
148 <option value='3' <?php if($period == 3){ echo 'selected="selected"'; } ?>><?php _e('last', 'contact-forms'); ?> 3 <?php _e('months', 'contact-forms'); ?></option>
149 <option value='6' <?php if($period == 6){ echo 'selected="selected"'; } ?>><?php _e('last', 'contact-forms'); ?> 6 <?php _e('months', 'contact-forms'); ?></option>
150 <option value='12' <?php if($period == 12){ echo 'selected="selected"'; } ?>><?php _e('last', 'contact-forms'); ?> 12 <?php _e('months', 'contact-forms'); ?></option>
151 <option value='24' <?php if($period == 24 || !$period ){ echo 'selected="selected"'; } ?>><?php _e('last', 'contact-forms'); ?> 24 <?php _e('months', 'contact-forms'); ?></option>
152 <option value='-1' <?php if($period == -1 ){ echo 'selected="selected"'; } ?>><?php _e('All', 'contact-forms'); ?></option>
153 </select>
154
155 <select name="fid">
156 <?php
157 $selected = ($fid === '') ? 'selected="selected"' : '';
158 echo "<option value='' $selected >", __('Submissions from all forms', 'contact-forms'),'</option>';
159 foreach($forms_data as $ffid => $form) {
160 $selected = ($fid == $ffid) ? 'selected="selected"' : '';
161 $title = isset($form['title']) ? trim($form['title']) : '';
162 if ($title === '') {
163 $title = $ffid;
164 }
165 $ffid = htmlspecialchars($ffid, ENT_QUOTES);
166 $title = htmlspecialchars($title, ENT_QUOTES);
167 echo "<option value='$ffid' $selected >$title</option>";
168 }
169 ?>
170 </select>
171
172 <input type="submit" class="button button-secondary" value="<?php _e('Apply', 'contact-forms') ?>" />
173 </form>
174
175
176 <form method="get" action="" style="margin-bottom:70px;">
177 <div class="div-inside-form-slider">
178 <div>
179 <input type="range" min="1" max="<?php echo count($origin_label_my); ?>" value="24" class="slider" name="slide_period" id="slide_period" step="1">
180 <p>Last <span id="slide_period_value" class="span-value"></span> months</p>
181 </div>
182 </div>
183 </form>
184
185 <?php
186 if (!empty($query_grafico)) {
187
188 echo "<div class='fixed-height-chart' style='height: 350px'>";
189 echo '<canvas id="ContactChart"></canvas>';
190 echo "</div>";
191
192 $script_grafico = "
193 <script>
194 jQuery(document).ready(function(){
195 /* slider */
196 var slider_periodo = document.getElementById('slide_period');
197 var output_slider_periodo = document.getElementById('slide_period_value');
198 output_slider_periodo.innerHTML = slider_periodo.value;
199
200 var labels = " . _accua_forms_json_encode($label_my) . ";
201 const dataa = {
202 labels: labels,
203 datasets: [
204 {
205 label: 'Submissions',
206 data: " . _accua_forms_json_encode($submissions) . ",
207 backgroundColor: 'rgba(0, 0, 0, 0.1)',
208 borderWidth: 1,
209 },
210 {
211 label: 'Unique submissions',
212 data: " . _accua_forms_json_encode($unique_submissions) . ",
213 backgroundColor: 'rgba(255, 114, 5, 1)',
214 borderWidth: 1,
215 xAxisID: 'axis1',
216 }
217 ]
218 };
219
220 const config = {
221 type: 'bar',
222 data: dataa,
223 options: {
224 responsive: true,
225 scales:{
226 x: {
227 ticks:{
228 display: false
229 },
230 grid: {
231 offset:false
232 }
233 }
234 },
235 maintainAspectRatio: false, //per avere altezza fissa
236 plugins: {
237 title: {
238 display: false,
239 },
240 },
241 interaction: {
242 intersect: false,
243 }
244 }
245 };
246
247 var ctx = document.getElementById('ContactChart').getContext('2d');
248 var myChart = new Chart(ctx, config);
249 //console.log('chart initialized', myChart);
250
251 function update_mychart_submissions(item, index) {
252 myChart.data.datasets[0].data[index] = item;
253 }
254 function update_mychart_unique_submissions(item, index) {
255 myChart.data.datasets[1].data[index] = item;
256 }
257
258 slider_periodo.oninput = function() {
259 slider_periodo_val = this.value;
260 output_slider_periodo.innerHTML = slider_periodo_val;
261
262 /* mi devo passare gli array nel js e tagliarli a seconda del punto in cui sono nello slider */
263 label = " . _accua_forms_json_encode($origin_label_my) . ";
264 submissions = " . _accua_forms_json_encode($origin_submissions) . ";
265 unique_submission = " . _accua_forms_json_encode($origin_unique_submissions) . ";
266
267 label = label.slice(0, slider_periodo_val).reverse();
268 submissions = submissions.slice(0, slider_periodo_val).reverse();
269 unique_submission = unique_submission.slice(0, slider_periodo_val).reverse();
270
271 submissions.forEach(update_mychart_submissions);
272 unique_submission.forEach(update_mychart_unique_submissions);
273 myChart.data.labels = label
274 myChart.update();
275 }
276
277 });
278 </script>
279 ";
280 echo $script_grafico;
281 } else {
282 echo '<div style="height: 350px"><p>', __('No forms submitted', 'contact-forms'), '</p></div>';
283 } ?>
284 </div>
285
286 </div>
287
288
289 <div class="postbox ">
290 <h2><span><?php _e('Last 10 submissions', 'contact-forms'); ?></span></h2>
291
292 <?php
293 $query_last_submissions = "SELECT `afs_id`, `afs_submitted`
294 FROM `{$wpdb->prefix}accua_forms_submissions`
295 WHERE `afs_status` >= 0
296 ORDER BY `afs_id` DESC LIMIT 10";
297
298 $data_last_submissions = $wpdb->get_results($query_last_submissions);
299
300 if ($data_last_submissions) { ?>
301 <table class="table_last_submit">
302 <tr>
303 <th><?php _e('Date', 'contact-forms'); ?></th>
304 <!--<th><?php // _e('Firstname Lastname', 'contact-forms'); ?></th>-->
305 <th><?php _e('Email', 'contact-forms'); ?></th>
306 <th><?php _e('Referrer', 'contact-forms'); ?></th>
307 <th><?php _e('URI', 'contact-forms'); ?></th>
308 <!--<th><?php // _e('Status', 'contact-forms'); ?></th>-->
309 <th><?php _e('Review', 'contact-forms'); ?></th>
310 </tr>
311
312
313
314 <?php
315 foreach ($data_last_submissions as $row) {
316 /* problema: i campi nome e cognome sono spesso diversi
317 in origine non erano creati in modo predefinito e in ogni sito possono essere diversi.
318 Ora sono di default sono first_name e last_name
319 ma comunque anche ora possono essere eliminati e se ne possono usare altri
320
321 $query_meta_submission_nome = "SELECT `afsv_value`
322 FROM `{$wpdb->prefix}accua_forms_submissions_values`
323 WHERE `afsv_sub_id` = %d
324 AND `afsv_field_id` LIKE 'nome'";
325
326 $query_meta_submission_cognome = "SELECT `afsv_value`
327 FROM `{$wpdb->prefix}accua_forms_submissions_values`
328 WHERE `afsv_sub_id` = %d
329 AND `afsv_field_id` LIKE 'cognome'";
330 */
331 $query_meta_submission_email = "SELECT `afsv_value`
332 FROM `{$wpdb->prefix}accua_forms_submissions_values`
333 WHERE `afsv_sub_id` = %d
334 AND `afsv_field_id` LIKE 'email'";
335
336 $query_data_submission_uri = "SELECT `afs_uri`
337 FROM `{$wpdb->prefix}accua_forms_submissions`
338 WHERE `afs_id` = %d";
339 $query_data_submission_ref = "SELECT `afs_referrer`
340 FROM `{$wpdb->prefix}accua_forms_submissions`
341 WHERE `afs_id` = %d";
342
343 //$data_meta_submission_nome = $wpdb->get_var($wpdb->prepare($query_meta_submission_nome, $row->afs_id));
344 //$data_meta_submission_cognome = $wpdb->get_var($wpdb->prepare($query_meta_submission_cognome, $row->afs_id));
345 $data_meta_submission_email = (string) $wpdb->get_var($wpdb->prepare($query_meta_submission_email, $row->afs_id));
346 $data_meta_submission_uri = (string) $wpdb->get_var($wpdb->prepare($query_data_submission_uri, $row->afs_id));
347 $data_meta_submission_ref = (string) $wpdb->get_var($wpdb->prepare($query_data_submission_ref, $row->afs_id));
348
349 echo '<tr>';
350 $date = new DateTime($row->afs_submitted);
351 if(get_locale() == 'it_IT'){
352 echo '<td>'.$date->format('j M Y').'</td>'; //todo: date in italiano? strftime?
353 } else{
354 echo '<td>'.$date->format(' M j, Y').'</td>';
355 }
356 //echo '<td>'.$data_meta_submission_nome.' '.$data_meta_submission_cognome.'</td>';
357 echo '<td>'.htmlspecialchars($data_meta_submission_email).'</td>';
358 echo '<td>';
359 //referrer
360 echo '<a href="'.htmlspecialchars($data_meta_submission_ref, ENT_QUOTES).'" title="" target="_blank">'.htmlspecialchars($data_meta_submission_ref, ENT_QUOTES).'</a>';
361 echo '</td>';
362 echo '<td>';
363 echo '<a href="'.htmlspecialchars(get_bloginfo('url').$data_meta_submission_uri, ENT_QUOTES).'" title="" target="_blank">'.htmlspecialchars($data_meta_submission_uri, ENT_QUOTES).'</a>';
364 echo '</td>';
365 //echo '<td>valido/non valido/ecc..</td>';
366 echo '<td><a href="?page=accua_forms_submissions_list&sid='.$row->afs_id.'" class="">Review</a>'; ?>
367 <div id="delete" class="submitbox">
368 <form id="delete-sub" method="post" action="">
369 <input type="hidden" name="del_sub_form" value="<?php echo $row->afs_id; ?>" />
370 <?php wp_nonce_field("del_sub_form_{$row->afs_id}", "_wpnonce_del_sub_form"); ?>
371 <input type="submit" id="delete-sub-data" class="accua_forms_trash" value="<?php _e('Trash', 'contact-forms') ?>" onclick='return window.confirm("Are you sure you want to trash this submission?");'/>
372 </form>
373 </div>
374 <?php echo '</td>';
375 echo '</tr>';
376 } ?>
377 </table>
378 <?php } ?>
379 </div>
380
381 <?php if ($num_submissions) { ?>
382 <div class="postbox ">
383 <h2><span><?php _e('Total forms submitted', 'contact-forms'); ?></span></h2>
384 <table>
385 <tr class="first"><td class="first b"><?php echo $num_forms; ?></td><td class="t"><?php _e('Forms', 'contact-forms'); ?></td></tr>
386 <tr class="first"><td class="first b"><?php echo $num_posts; ?></td><td class="t"><?php _e('Pages', 'contact-forms'); ?></td></tr>
387 <tr class="first"><td class="first b"><?php echo $num_submissions; ?></td><td class="t"><?php _e('Submissions', 'contact-forms'); ?></td></tr>
388 <tr class="first"><td class="first b"><?php echo $num_emails; ?></td><td class="t"><?php _e('Distinct Emails', 'contact-forms'); ?></td></tr>
389 </table>
390 <h2><span><?php _e('Submissions per lead status', 'contact-forms'); ?></span></h2>
391 <table>
392 <?php
393 $lead_statuses = accua_forms_get_lead_statuses();
394 foreach ($lead_statuses as $k => $v) {
395 if (isset($num_submissions_per_lead_status[$k])) {
396 echo '<tr class="first"><td class="first b">'.$num_submissions_per_lead_status[$k]->n.'</td><td class="t">'.htmlspecialchars($v).'</td></tr>';
397 }
398 }
399 ?>
400 </table>
401 </div>
402 <?php } ?>
403
404 <span id="accua-forms-version">by Cimatti - <a href="http://www.cimatti.it/wordpress/contact-forms/">www.cimatti.it/wordpress/contact-forms</a>
405 <br /><?php
406 $plugin_data = get_plugin_data( ACCUA_FORMS_FILE );
407 _e('Version', 'contact-forms'); echo " ".$plugin_data['Version'];
408 ?></span>
409 </div>
410 <?php
411 }