Issues (2811)

public/htdocs/opensurvey/results.php (2 issues)

1
<?php
2
3
/* Copyright (C) 2013-2020  Laurent Destailleur         <[email protected]>
4
 * Copyright (C) 2014       Marcos García               <[email protected]>
5
 * Copyright (C) 2018       Frédéric France             <[email protected]>
6
 * Copyright (C) 2024       Rafael San José             <[email protected]>
7
 *
8
 * This program is free software; you can redistribute it and/or modify
9
 * it under the terms of the GNU General Public License as published by
10
 * the Free Software Foundation; either version 3 of the License, or
11
 * (at your option) any later version.
12
 *
13
 * This program is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 * GNU General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU General Public License
19
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20
 */
21
22
use Dolibarr\Code\Core\Classes\DolEditor;
23
use Dolibarr\Code\Core\Classes\Form;
24
use Dolibarr\Code\Core\Classes\FormOther;
25
use Dolibarr\Code\OpenSurvey\Classes\Opensurveysondage;
26
use Dolibarr\Code\User\Classes\User;
27
use Dolibarr\Lib\ViewMain;
28
29
/**
30
 *  \file       htdocs/opensurvey/results.php
31
 *  \ingroup    opensurvey
32
 *  \brief      Page to preview votes of a survey
33
 */
34
35
// Load Dolibarr environment
36
require constant('DOL_DOCUMENT_ROOT') . '/main.inc.php';
37
require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php";
38
require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
39
require_once DOL_DOCUMENT_ROOT . "/opensurvey/lib/opensurvey.lib.php";
40
41
// Security check
42
if (!$user->hasRight('opensurvey', 'read')) {
43
    accessforbidden();
44
}
45
46
// Init vars
47
$action = GETPOST('action', 'aZ09');
48
$numsondage = GETPOST("id", 'alphanohtml');
49
50
$object = new Opensurveysondage($db);
51
$result = $object->fetch(0, $numsondage);
52
if ($result <= 0) {
53
    dol_print_error(null, 'Failed to get survey id ' . $numsondage);
54
}
55
56
$nblines = $object->fetch_lines();
57
58
59
/*
60
 * Actions
61
 */
62
63
// Return to the results
64
if (GETPOST('cancel')) {
65
    header('Location: results.php?id=' . (GETPOSTISSET('id_sondage') ? GETPOST('id_sondage', 'aZ09') : GETPOST('id', 'alphanohtml')));
66
    exit;
67
}
68
69
$nbcolonnes = substr_count($object->sujet, ',') + 1;
70
71
// Add vote
72
if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) {       // boutonp for chrome, boutonp.x for firefox
73
    if (GETPOST('nom')) {
74
        $erreur_prenom = false;
75
76
        $nouveauchoix = '';
77
        for ($i = 0; $i < $nbcolonnes; $i++) {
78
            if (GETPOSTISSET("choix$i") && GETPOST("choix$i") == '1') {
79
                $nouveauchoix .= "1";
80
            } elseif (GETPOSTISSET("choix$i") && GETPOST("choix$i") == '2') {
81
                $nouveauchoix .= "2";
82
            } else { // sinon c'est 0
83
                $nouveauchoix .= "0";
84
            }
85
        }
86
87
        $nom = substr(GETPOST("nom", 'alphanohtml'), 0, 64);
88
89
        // Check if vote already exists
90
        $sql = 'SELECT id_users, nom as name';
91
        $sql .= ' FROM ' . MAIN_DB_PREFIX . 'opensurvey_user_studs';
92
        $sql .= " WHERE id_sondage='" . $db->escape($numsondage) . "' AND nom = '" . $db->escape($nom) . "'";
93
        $sql .= ' ORDER BY id_users';
94
        $resql = $db->query($sql);
95
        $num_rows = $db->num_rows($resql);
96
        if ($num_rows > 0) {
97
            setEventMessages($langs->trans("VoteNameAlreadyExists"), null, 'errors');
98
            $error++;
99
        } else {
100
            $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'opensurvey_user_studs (nom, id_sondage, reponses, date_creation)';
101
            $sql .= " VALUES ('" . $db->escape($nom) . "', '" . $db->escape($numsondage) . "', '" . $db->escape($nouveauchoix) . "', '" . $db->idate(dol_now()) . "')";
102
            $resql = $db->query($sql);
103
            if (!$resql) {
104
                dol_print_error($db);
105
            }
106
        }
107
    }
108
}
109
110
// Update vote
111
$testmodifier = false;
112
$testligneamodifier = false;
113
$ligneamodifier = -1;
114
for ($i = 0; $i < $nblines; $i++) {
115
    if (GETPOSTISSET('modifierligne' . $i)) {
116
        $ligneamodifier = $i;
117
        $testligneamodifier = true;
118
    }
119
120
    //test pour voir si une ligne est a modifier
121
    if (GETPOSTISSET('validermodifier' . $i)) {
122
        $modifier = $i;
123
        $testmodifier = true;
124
    }
125
}
126
if ($testmodifier) {
127
    // Security check
128
    if (!$user->hasRight('opensurvey', 'write')) {
129
        accessforbidden();
130
    }
131
132
    $nouveauchoix = '';
133
    for ($i = 0; $i < $nbcolonnes; $i++) {
134
        if (GETPOSTISSET("choix$i") && GETPOST("choix$i") == '1') {
135
            $nouveauchoix .= "1";
136
        } elseif (GETPOSTISSET("choix$i") && GETPOST("choix$i") == '2') {
137
            $nouveauchoix .= "2";
138
        } else { // sinon c'est 0
139
            $nouveauchoix .= "0";
140
        }
141
    }
142
143
    $idtomodify = GETPOST("idtomodify" . $modifier);
144
    $sql = 'UPDATE ' . MAIN_DB_PREFIX . "opensurvey_user_studs";
145
    $sql .= " SET reponses = '" . $db->escape($nouveauchoix) . "'";
146
    $sql .= " WHERE id_users = '" . $db->escape($idtomodify) . "'";
147
148
    $resql = $db->query($sql);
149
    if (!$resql) {
150
        dol_print_error($db);
151
    }
152
}
153
154
// Add column (not for date)
155
if (GETPOST("ajoutercolonne") && GETPOST('nouvellecolonne') && $object->format == "A") {
156
    // Security check
157
    if (!$user->hasRight('opensurvey', 'write')) {
158
        accessforbidden();
159
    }
160
161
    $nouveauxsujets = $object->sujet;
162
163
    //on rajoute la valeur a la fin de tous les sujets deja entrés
164
    $nouveauxsujets .= ',';
165
    $nouveauxsujets .= str_replace(array(",", "@"), " ", GETPOST("nouvellecolonne")) . (!GETPOST("typecolonne") ? '' : '@' . GETPOST("typecolonne"));
166
167
    //mise a jour avec les nouveaux sujets dans la base
168
    $sql = 'UPDATE ' . MAIN_DB_PREFIX . "opensurvey_sondage";
169
    $sql .= " SET sujet = '" . $db->escape($nouveauxsujets) . "'";
170
    $sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
171
    $resql = $db->query($sql);
172
    if (!$resql) {
173
        dol_print_error($db);
174
    } else {
175
        header('Location: results.php?id=' . $object->id_sondage);
176
        exit;
177
    }
178
}
179
180
// Add column (with format date)
181
if (GETPOSTISSET("ajoutercolonne") && $object->format == "D") {
182
    // Security check
183
    if (!$user->hasRight('opensurvey', 'write')) {
184
        accessforbidden();
185
    }
186
187
    $nouveauxsujets = $object->sujet;
188
189
    if (
190
        GETPOSTISSET("nouveaujour") && GETPOST("nouveaujour") != "vide" &&
191
        GETPOSTISSET("nouveaumois") && GETPOST("nouveaumois") != "vide" &&
192
        GETPOSTISSET("nouvelleannee") && GETPOST("nouvelleannee") != "vide"
193
    ) {
194
        $nouvelledate = dol_mktime(0, 0, 0, GETPOST("nouveaumois"), GETPOST("nouveaujour"), GETPOST("nouvelleannee"));
195
196
        if (GETPOSTISSET("nouvelleheuredebut") && GETPOST("nouvelleheuredebut") != "vide") {
197
            $nouvelledate .= "@";
198
            $nouvelledate .= GETPOST("nouvelleheuredebut");
199
            $nouvelledate .= "h";
200
201
            if (GETPOST("nouvelleminutedebut") != "vide") {
202
                $nouvelledate .= GETPOST("nouvelleminutedebut");
203
            }
204
        }
205
206
        if (GETPOSTISSET("nouvelleheurefin") && GETPOST("nouvelleheurefin") != "vide") {
207
            $nouvelledate .= "-";
208
            $nouvelledate .= GETPOST("nouvelleheurefin");
209
            $nouvelledate .= "h";
210
211
            if (GETPOST("nouvelleminutefin") != "vide") {
212
                $nouvelledate .= GETPOST("nouvelleminutefin");
213
            }
214
        }
215
216
        if (
217
            GETPOST("nouvelleheuredebut") == "vide" || (GETPOSTISSET("nouvelleheuredebut") && GETPOSTISSET("nouvelleheurefin")
218
            && (GETPOST("nouvelleheuredebut") < GETPOST("nouvelleheurefin") || (GETPOST("nouvelleheuredebut") == GETPOST("nouvelleheurefin")
219
                && (GETPOST("nouvelleminutedebut") < GETPOST("nouvelleminutefin")))))
220
        ) {
221
            $erreur_ajout_date = false;
222
        } else {
223
            $erreur_ajout_date = "yes";
224
        }
225
226
        //on rajoute la valeur dans les valeurs
227
        $datesbase = explode(",", $object->sujet);
228
        $taillebase = count($datesbase);
229
230
        //recherche de l'endroit de l'insertion de la nouvelle date dans les dates deja entrées dans le tableau
231
        if ($nouvelledate < $datesbase[0]) {
232
            $cleinsertion = 0;
233
        } elseif ($nouvelledate > $datesbase[$taillebase - 1]) {
234
            $cleinsertion = count($datesbase);
235
        } else {
236
            $nbdatesbase = count($datesbase);
237
            for ($i = 0; $i < $nbdatesbase; $i++) {
238
                $j = $i + 1;
239
                if ($nouvelledate > $datesbase[$i] && $nouvelledate < $datesbase[$j]) {
240
                    $cleinsertion = $j;
241
                }
242
            }
243
        }
244
245
        array_splice($datesbase, $cleinsertion, 0, $nouvelledate);
246
        $cle = array_search($nouvelledate, $datesbase);
247
        $dateinsertion = '';
248
        $nbofdates = count($datesbase);
249
        for ($i = 0; $i < $nbofdates; $i++) {
250
            $dateinsertion .= ",";
251
            $dateinsertion .= $datesbase[$i];
252
        }
253
254
        $dateinsertion = substr("$dateinsertion", 1);
255
256
        // update with new topics into database
257
        if (isset($erreur_ajout_date) && empty($erreur_ajout_date)) {
258
            $sql = 'UPDATE ' . MAIN_DB_PREFIX . "opensurvey_sondage";
259
            $sql .= " SET sujet = '" . $db->escape($dateinsertion) . "'";
260
            $sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
261
            $resql = $db->query($sql);
262
            if (!$resql) {
263
                dol_print_error($db);
264
            } else {
265
                header('Location: results.php?id=' . $object->id_sondage);
266
            }
267
        }
268
        if ($cleinsertion >= 0) {
269
            $sql = 'SELECT s.reponses';
270
            $sql .= " FROM " . MAIN_DB_PREFIX . "opensurvey_user_studs as s";
271
            $sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
272
            $resql = $db->query($sql);
273
            if (!$resql) {
274
                dol_print_error($db);
275
            } else {
276
                $num = $db->num_rows($resql);
277
                $compteur = 0;
278
                while ($compteur < $num) {
279
                    $obj = $db->fetch_object($resql);
280
                    $sql = 'UPDATE ' . MAIN_DB_PREFIX . "opensurvey_user_studs";
281
                    if ($cleinsertion == 0) {
282
                        $sql .= " SET reponses = '0" . $db->escape($obj->reponses) . "'";
283
                    } else {
284
                        $reponsesadd = str_split($obj->reponses);
285
                        $lengthresponses = count($reponsesadd);
286
                        for ($cpt = $lengthresponses; $cpt > $cleinsertion; $cpt--) {
287
                            $reponsesadd[$cpt] = $reponsesadd[$cpt - 1];
288
                        }
289
                        $reponsesadd[$cleinsertion] = '0';
290
                        $reponsesadd = implode($reponsesadd);
291
                        $sql .= " SET reponses = '" . $db->escape($reponsesadd) . "'";
292
                    }
293
                    $sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
294
                    $resql = $db->query($sql);
295
                    if (!$resql) {
296
                        dol_print_error($db);
297
                    }
298
                    $compteur++;
299
                }
300
            }
301
        }
302
        $adresseadmin = $object->mail_admin;
303
    } else {
304
        $erreur_ajout_date = "yes";
305
    }
306
}
307
308
// Delete line
309
for ($i = 0; $i < $nblines; $i++) {
310
    if (GETPOST("effaceligne" . $i) || GETPOST("effaceligne" . $i . "_x") || GETPOST("effaceligne" . $i . ".x")) {    // effacelignei for chrome, effacelignei_x for firefox
311
        // Security check
312
        if (!$user->hasRight('opensurvey', 'write')) {
313
            accessforbidden();
314
        }
315
316
        $compteur = 0;
317
318
        // Loop on each answer
319
        $compteur = 0;
320
        $sql = "SELECT id_users, nom as name, id_sondage, reponses";
321
        $sql .= " FROM " . MAIN_DB_PREFIX . "opensurvey_user_studs";
322
        $sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
323
        $resql = $db->query($sql);
324
        if (!$resql) {
325
            dol_print_error($db);
326
        }
327
        $num = $db->num_rows($resql);
328
        while ($compteur < $num) {
329
            $obj = $db->fetch_object($resql);
330
331
            if ($compteur == $i) {
332
                $sql2 = 'DELETE FROM ' . MAIN_DB_PREFIX . 'opensurvey_user_studs';
333
                $sql2 .= " WHERE id_users = " . ((int) $obj->id_users);
334
                $resql2 = $db->query($sql2);
335
            }
336
337
            $compteur++;
338
        }
339
    }
340
}
341
342
// Delete column
343
for ($i = 0; $i < $nbcolonnes; $i++) {
344
    if (
345
        (GETPOST("effacecolonne" . $i) || GETPOST("effacecolonne" . $i . "_x") || GETPOST("effacecolonne" . $i . ".x"))
346
        && $nbcolonnes > 1
347
    ) {   // effacecolonnei for chrome, effacecolonnei_x for firefox
348
        // Security check
349
        if (!$user->hasRight('opensurvey', 'write')) {
350
            accessforbidden();
351
        }
352
353
        $db->begin();
354
355
        $toutsujet = explode(",", $object->sujet);
356
        $j = 0;
357
        $nouveauxsujets = '';
358
359
        //parcours de tous les sujets actuels
360
        while (isset($toutsujet[$j])) {
361
            // If the subject is not the deleted subject, then concatenate the current subject
362
            if ($i != $j) {
363
                if (!empty($nouveauxsujets)) {
364
                    $nouveauxsujets .= ',';
365
                }
366
                $nouveauxsujets .= $toutsujet[$j];
367
            }
368
369
            $j++;
370
        }
371
372
        // Mise a jour des sujets dans la base
373
        $sql = 'UPDATE ' . MAIN_DB_PREFIX . "opensurvey_sondage";
374
        $sql .= " SET sujet = '" . $db->escape($nouveauxsujets) . "' WHERE id_sondage = '" . $db->escape($numsondage) . "'";
375
        $resql = $db->query($sql);
376
        if (!$resql) {
377
            dol_print_error($db);
378
        }
379
380
        // Clean current answer to remove deleted columns
381
        $compteur = 0;
382
        $sql = "SELECT id_users, nom as name, id_sondage, reponses";
383
        $sql .= " FROM " . MAIN_DB_PREFIX . "opensurvey_user_studs";
384
        $sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
385
        dol_syslog('sql=' . $sql);
386
        $resql = $db->query($sql);
387
        if (!$resql) {
388
            dol_print_error($db);
389
            exit;
390
        }
391
        $num = $db->num_rows($resql);
392
        while ($compteur < $num) {
393
            $obj = $db->fetch_object($resql);
394
395
            $newcar = '';
396
            $ensemblereponses = $obj->reponses;
397
398
            // parcours de toutes les réponses actuelles
399
            for ($j = 0; $j < $nbcolonnes; $j++) {
400
                $car = substr($ensemblereponses, $j, 1);
401
                //si les reponses ne concerne pas la colonne effacée, on concatenate
402
                if ($i != $j) {
403
                    $newcar .= $car;
404
                }
405
            }
406
407
            // mise a jour des reponses utilisateurs dans la base
408
            $sql2 = 'UPDATE ' . MAIN_DB_PREFIX . 'opensurvey_user_studs';
409
            $sql2 .= " SET reponses = '" . $db->escape($newcar) . "'";
410
            $sql2 .= " WHERE id_users = '" . $db->escape($obj->id_users) . "'";
411
            //print $sql2;
412
            dol_syslog('sql=' . $sql2);
413
            $resql2 = $db->query($sql2);
414
415
            $compteur++;
416
        }
417
418
        $db->commit();
419
    }
420
}
421
422
/*
423
 * View
424
 */
425
426
$form = new Form($db);
427
428
if ($object->fk_user_creat) {
429
    $userstatic = new User($db);
430
    $userstatic->fetch($object->fk_user_creat);
431
}
432
433
$result = $object->fetch(0, $numsondage);
434
if ($result <= 0) {
435
    dol_print_error($db, $object->error);
436
    exit;
437
}
438
439
$title = $object->title . " - " . $langs->trans('Card');
440
$helpurl = '';
441
$arrayofjs = array();
442
$arrayofcss = array('/opensurvey/css/style.css');
443
444
ViewMain::llxHeader('', $title, $helpurl, 0, 0, 0, $arrayofjs, $arrayofcss);
445
446
447
// Define format of choices
448
$toutsujet = explode(",", $object->sujet);
449
$listofanswers = array();
450
foreach ($toutsujet as $value) {
451
    $tmp = explode('@', $value);
452
    $listofanswers[] = array('label' => $tmp[0], 'format' => (!empty($tmp[1]) ? $tmp[1] : 'checkbox'));
453
}
454
$toutsujet = str_replace("@", "<br>", $toutsujet);
455
$toutsujet = str_replace("°", "'", $toutsujet);
456
457
458
print '<form name="formulaire4" action="#" method="POST">' . "\n";
459
print '<input type="hidden" name="token" value="' . newToken() . '">';
460
print '<input type="hidden" name="id" value="' . GETPOST('id') . '">';
461
462
$head = opensurvey_prepare_head($object);
463
464
print dol_get_fiche_head($head, 'preview', $langs->trans("Survey"), -1, 'poll');
465
466
$morehtmlref = '';
467
468
$linkback = '<a href="' . constant('BASE_URL') . '/opensurvey/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
469
470
dol_banner_tab($object, 'id', $linkback, 1, 'id_sondage', 'id_sondage', $morehtmlref);
471
472
473
print '<div class="fichecenter">';
474
475
print '<div class="fichehalfleft">';
476
print '<div class="underbanner clearboth"></div>';
477
print '<table class="border tableforfield centpercent">';
478
479
// Type
480
$type = ($object->format == "A") ? 'classic' : 'date';
481
print '<tr><td class="titlefield">' . $langs->trans("Type") . '</td><td>';
482
print img_picto('', dol_buildpath('/opensurvey/img/' . ($type == 'classic' ? 'chart-32.png' : 'calendar-32.png'), 1), 'width="16"', 1);
483
print ' ' . $langs->trans($type == 'classic' ? "TypeClassic" : "TypeDate") . '</td></tr>';
484
485
// Title
486
print '<tr><td>';
487
$adresseadmin = $object->mail_admin;
488
print $langs->trans("Title") . '</td><td>';
489
if ($action == 'edit') {
490
    print '<input type="text" name="nouveautitre" size="40" value="' . dol_escape_htmltag($object->title) . '">';
491
} else {
492
    print dol_htmlentities($object->title);
493
}
494
print '</td></tr>';
495
496
// Description
497
print '<tr><td class="tdtop">' . $langs->trans("Description") . '</td><td class="wordbreak">';
498
if ($action == 'edit') {
499
    $doleditor = new DolEditor('nouveauxcommentaires', $object->description, '', 120, 'dolibarr_notes', 'In', 1, 1, 1, ROWS_7, '90%');
500
    $doleditor->Create(0, '');
501
} else {
502
    print(dol_textishtml($object->description) ? $object->description : dol_nl2br($object->description, 1, true));
503
}
504
print '</td></tr>';
505
506
// EMail
507
//If linked user, then emails are going to be sent to users' email
508
if (!$object->fk_user_creat) {
509
    print '<tr><td>' . $langs->trans("EMail") . '</td><td>';
510
    if ($action == 'edit') {
511
        print '<input type="text" name="nouvelleadresse" class="minwith200" value="' . $object->mail_admin . '">';
512
    } else {
513
        print dol_print_email($object->mail_admin, 0, 0, 1, 0, 1, 1);
514
    }
515
    print '</td></tr>';
516
}
517
518
print '</table>';
519
520
print '</div>';
521
print '<div class="fichehalfright">';
522
print '<div class="underbanner clearboth"></div>';
523
524
print '<table class="border tableforfield centpercent">';
525
526
// Expire date
527
print '<tr><td>' . $langs->trans('ExpireDate') . '</td><td>';
528
if ($action == 'edit') {
529
    print $form->selectDate($expiredate ? $expiredate : $object->date_fin, 'expire', 0, 0, 0, '', 1, 0);
530
} else {
531
    print dol_print_date($object->date_fin, 'day');
532
    if ($object->date_fin && $object->date_fin < dol_now() && $object->status == Opensurveysondage::STATUS_VALIDATED) {
533
        print img_warning($langs->trans("Expired"));
534
    }
535
}
536
print '</td></tr>';
537
538
// Author
539
print '<tr><td>';
540
print $langs->trans("Author") . '</td><td>';
541
if ($object->fk_user_creat) {
542
    print $userstatic->getLoginUrl(-1);
543
} else {
544
    print dol_htmlentities($object->nom_admin);
545
}
546
print '</td></tr>';
547
548
// Link
549
print '<tr><td>' . $langs->trans("UrlForSurvey", '') . '</td><td>';
550
551
// Define $urlwithroot
552
$urlwithouturlroot = preg_replace('/' . preg_quote(DOL_URL_ROOT, '/') . '$/i', '', trim($dolibarr_main_url_root));
553
$urlwithroot = $urlwithouturlroot . DOL_URL_ROOT; // This is to use external domain name found into config file
554
//$urlwithroot=DOL_MAIN_URL_ROOT;                   // This is to use same domain name than current
555
556
$url = $urlwithouturlroot . dol_buildpath('/public/opensurvey/studs.php', 1) . '?sondage=' . $object->id_sondage;
557
$urllink = '<input type="text" class="quatrevingtpercent" ' . ($action == 'edit' ? 'disabled' : '') . ' id="opensurveyurl" name="opensurveyurl" value="' . $url . '">';
558
print $urllink;
559
if ($action != 'edit') {
560
    print ajax_autoselect("opensurveyurl", $url, 'image');
561
}
562
563
print '</td></tr>';
564
565
print '</table>';
566
print '</div>';
567
568
print '</div>';
569
print '<div class="clearboth"></div>';
570
571
print dol_get_fiche_end();
572
573
print '</form>' . "\n";
574
575
576
// Buttons
577
578
print '<div class="tabsAction">';
579
580
print '<a class="butAction" href="exportcsv.php?id=' . urlencode($numsondage) . '">' . $langs->trans("ExportSpreadsheet") . ' (.CSV)</a>';
581
582
print '</div>';
583
584
585
// Show form to add a new field/column
586
if (GETPOST('ajoutsujet')) {
587
    // Security check
588
    if (!$user->hasRight('opensurvey', 'write')) {
589
        accessforbidden();
590
    }
591
592
    print '<form name="formulaire" action="' . $_SERVER["PHP_SELF"] . '" method="POST">' . "\n";
593
    print '<input type="hidden" name="token" value="' . newToken() . '">';
594
    print '<input type="hidden" name="backtopage" value="' . GETPOST('backtopage', 'alpha') . '">';
595
    print '<input type="hidden" name="id" value="' . GETPOST('id', 'alpha') . '">';
596
    print '<input type="hidden" name="ajoutsujet" value="1">';
597
598
    print '<div class="center">' . "\n";
599
    print "<br><br>\n";
600
601
    // Add new column
602
    if ($object->format == "A") {
603
        print $langs->trans("AddNewColumn") . ':<br><br>';
604
        print $langs->trans("Title") . ' <input type="text" name="nouvellecolonne" size="40"><br>';
605
        $tmparray = array('checkbox' => $langs->trans("CheckBox"), 'yesno' => $langs->trans("YesNoList"), 'foragainst' => $langs->trans("PourContreList"));
606
        print $langs->trans("Type") . ' ' . $form->selectarray("typecolonne", $tmparray, GETPOST('typecolonne')) . '<br><br>';
607
        print '<input type="submit" class="button" name="ajoutercolonne" value="' . dol_escape_htmltag($langs->trans("Add")) . '">';
608
        print '<input type="hidden" name="id_sondage" value="' . dol_escape_htmltag($object->id_sondage) . '">';
609
        print ' &nbsp; &nbsp; ';
610
        print '<input type="submit" class="button button-cancel" name="cancel" value="' . dol_escape_htmltag($langs->trans("Cancel")) . '">';
611
        print '<br><br>' . "\n";
612
    } else {
613
        $formother = new FormOther($db);
614
        //ajout d'une date avec creneau horaire
615
        print $langs->trans("AddADate") . ':<br><br>' . "\n";
616
        print '<select name="nouveaujour"> ' . "\n";
617
        print '<OPTION VALUE="vide">&nbsp;</OPTION>' . "\n";
618
        for ($i = 1; $i < 32; $i++) {
619
            print '<OPTION VALUE="' . $i . '">' . $i . '</OPTION>' . "\n";
620
        }
621
        print '</select>' . "\n";
622
623
        print $formother->select_month('', 'nouveaumois', 1);
624
625
        print '&nbsp;';
626
627
        print $formother->selectyear('', 'nouvelleannee', 1, 0, 5, 0, 1);
628
629
        print '<br><br>' . $langs->trans("AddStartHour") . ': <br><br>' . "\n";
630
        print '<select name="nouvelleheuredebut"> ' . "\n";
631
        print '<OPTION VALUE="vide">&nbsp;</OPTION>' . "\n";
632
        for ($i = 0; $i < 24; $i++) {
633
            print '<OPTION VALUE="' . $i . '">' . $i . ' H</OPTION>' . "\n";
634
        }
635
        print '</select>' . "\n";
636
        print '<select name="nouvelleminutedebut"> ' . "\n";
637
        print '<OPTION VALUE="vide">&nbsp;</OPTION>' . "\n";
638
        print '<OPTION VALUE="00">00</OPTION>' . "\n";
639
        print '<OPTION VALUE="15">15</OPTION>' . "\n";
640
        print '<OPTION VALUE="30">30</OPTION>' . "\n";
641
        print '<OPTION VALUE="45">45</OPTION>' . "\n";
642
        print '</select>' . "\n";
643
        print '<br><br>' . $langs->trans("AddEndHour") . ': <br><br>' . "\n";
644
        print '<select name="nouvelleheurefin"> ' . "\n";
645
        print '<OPTION VALUE="vide">&nbsp;</OPTION>' . "\n";
646
        for ($i = 0; $i < 24; $i++) {
647
            print '<OPTION VALUE="' . $i . '">' . $i . ' H</OPTION>' . "\n";
648
        }
649
        print '</SELECT>' . "\n";
650
        print '<select name="nouvelleminutefin"> ' . "\n";
651
        print '<OPTION VALUE="vide">&nbsp;</OPTION>' . "\n";
652
        print '<OPTION VALUE="00">00</OPTION>' . "\n";
653
        print '<OPTION VALUE="15">15</OPTION>' . "\n";
654
        print '<OPTION VALUE="30">30</OPTION>' . "\n";
655
        print '<OPTION VALUE="45">45</OPTION>' . "\n";
656
        print '</select>' . "\n";
657
658
        print '<br><br>';
659
        print' <input type="submit" class="button" name="ajoutercolonne" value="' . dol_escape_htmltag($langs->trans("Add")) . '">' . "\n";
660
        print '&nbsp; &nbsp;';
661
        print '<input type="submit" class="button button-cancel" name="cancel" value="' . $langs->trans("Cancel") . '">';
662
    }
663
664
    print '</form>' . "\n";
665
    print '<br><br><br><br>' . "\n";
666
    print '</div>' . "\n";
667
668
    exit;
669
}
670
671
if ($user->hasRight('opensurvey', 'write')) {
672
    print '<span class="opacitymedium">';
673
    $s = $langs->trans("PollAdminDesc", '{s1}', $langs->trans("Add"));
674
    print str_replace('{s1}', img_picto('', 'delete'), $s);
675
    print '</span><br>';
676
}
677
678
$nbcolonnes = substr_count($object->sujet, ',') + 1;
679
680
print '<form name="formulaire" action="" method="POST">' . "\n";
681
print '<input type="hidden" name="token" value="' . newToken() . '">';
682
print '<input type="hidden" name="page_y" value="">';
683
684
print '<div class="cadre div-table-responsive-no-min"> ' . "\n";
685
686
// Start to show survey result
687
print '<table class="resultats margintoponly">' . "\n";
688
689
//reformatage des données des sujets du sondage
690
$toutsujet = explode(",", $object->sujet);
691
$toutsujet = str_replace("°", "'", $toutsujet);
692
693
print '<tr>' . "\n";
694
print '<td></td>' . "\n";
695
print '<td></td>' . "\n";
696
697
// loop to show the delete link
698
if ($user->hasRight('opensurvey', 'write')) {
699
    for ($i = 0; isset($toutsujet[$i]); $i++) {
700
        print '<td class=somme><input type="image" class="buttonwebsite" name="effacecolonne' . $i . '" src="' . img_picto('', 'delete.png', '', false, 1) . '"></td>' . "\n";
701
    }
702
}
703
704
print '</tr>' . "\n";
705
706
707
// Show choice titles
708
if ($object->format == "D") {
709
    //affichage des sujets du sondage
710
    print '<tr>' . "\n";
711
    print '<td></td>' . "\n";
712
    print '<td></td>' . "\n";
713
714
    //affichage des années
715
    $colspan = 1;
716
    $nbofsujet = count($toutsujet);
717
    for ($i = 0; $i < $nbofsujet; $i++) {
718
        if (isset($toutsujet[$i + 1]) && date('Y', intval($toutsujet[$i])) == date('Y', intval($toutsujet[$i + 1]))) {
719
            $colspan++;
720
        } else {
721
            print '<td colspan=' . $colspan . ' class="annee">' . date('Y', intval($toutsujet[$i])) . '</td>' . "\n";
722
            $colspan = 1;
723
        }
724
    }
725
726
    if ($user->hasRight('opensurvey', 'write')) {
727
        print '<td class="annee">';
728
        print '<a href="' . $_SERVER["PHP_SELF"] . '?ajoutsujet=1&id=' . $object->id_sondage . '">' . $langs->trans("Add") . '</a></td>' . "\n";
729
    }
730
731
    print '</tr>' . "\n";
732
    print '<tr>' . "\n";
733
    print '<td></td>' . "\n";
734
    print '<td></td>' . "\n";
735
736
    //affichage des mois
737
    $colspan = 1;
738
    for ($i = 0; $i < $nbofsujet; $i++) {
739
        $cur = intval($toutsujet[$i]); // intval() est utiliser pour supprimer le suffixe @* qui déplaît logiquement à strftime()
740
741
        if (isset($toutsujet[$i + 1]) === false) {
742
            $next = false;
743
        } else {
744
            $next = intval($toutsujet[$i + 1]);
745
        }
746
747
        if ($next && dol_print_date($cur, "%B") == dol_print_date($next, "%B") && dol_print_date($cur, "%Y") == dol_print_date($next, "%Y")) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $next of type false|integer is loosely compared to true; this is ambiguous if the integer can be 0. You might want to explicitly use !== false instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
748
            $colspan++;
749
        } else {
750
            print '<td colspan=' . $colspan . ' class="mois">' . dol_print_date($cur, "%B") . '</td>' . "\n";
751
752
            $colspan = 1;
753
        }
754
    }
755
756
    if ($user->hasRight('opensurvey', 'write')) {
757
        print '<td class="mois"><a href="' . $_SERVER["PHP_SELF"] . '?ajoutsujet=1&id=' . $object->id_sondage . '">' . $langs->trans("Add") . '</a></td>' . "\n";
758
    }
759
760
    print '</tr>' . "\n";
761
    print '<tr>' . "\n";
762
    print '<td></td>' . "\n";
763
    print '<td></td>' . "\n";
764
765
    //affichage des jours
766
    $colspan = 1;
767
    for ($i = 0; $i < $nbofsujet; $i++) {
768
        $cur = intval($toutsujet[$i]);
769
        if (isset($toutsujet[$i + 1]) === false) {
770
            $next = false;
771
        } else {
772
            $next = intval($toutsujet[$i + 1]);
773
        }
774
        if ($next && dol_print_date($cur, "%a %d") == dol_print_date($next, "%a %d") && dol_print_date($cur, "%B") == dol_print_date($next, "%B")) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $next of type false|integer is loosely compared to true; this is ambiguous if the integer can be 0. You might want to explicitly use !== false instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
775
            $colspan++;
776
        } else {
777
            print '<td colspan=' . $colspan . ' class="jour">' . dol_print_date($cur, "%a %d") . '</td>' . "\n";
778
779
            $colspan = 1;
780
        }
781
    }
782
783
    if ($user->hasRight('opensurvey', 'write')) {
784
        print '<td class="jour"><a href="' . $_SERVER["PHP_SELF"] . '?ajoutsujet=1&id=' . $object->id_sondage . '">' . $langs->trans("Add") . '</a></td>' . "\n";
785
    }
786
    print '</tr>' . "\n";
787
788
    //affichage des horaires
789
    if (strpos($object->sujet, '@') !== false) {
790
        print '<tr>' . "\n";
791
        print '<td></td>' . "\n";
792
        print '<td></td>' . "\n";
793
794
        for ($i = 0; isset($toutsujet[$i]); $i++) {
795
            $heures = explode('@', $toutsujet[$i]);
796
            if (isset($heures[1])) {
797
                print '<td class="heure">' . dol_htmlentities($heures[1]) . '</td>' . "\n";
798
            } else {
799
                print '<td class="heure"></td>' . "\n";
800
            }
801
        }
802
803
        if ($user->hasRight('opensurvey', 'write')) {
804
            print '<td class="heure"><a href="' . $_SERVER["PHP_SELF"] . '?ajoutsujet=1&id=' . $object->id_sondage . '">' . $langs->trans("Add") . '</a></td>' . "\n";
805
        }
806
807
        print '</tr>' . "\n";
808
    }
809
} else {
810
    // Show titles
811
    print '<tr>' . "\n";
812
    print '<td></td>' . "\n";
813
    print '<td></td>' . "\n";
814
815
    for ($i = 0; isset($toutsujet[$i]); $i++) {
816
        $tmp = explode('@', $toutsujet[$i]);
817
        print '<td class="sujet">' . dol_htmlentities($tmp[0]) . '</td>' . "\n";
818
    }
819
820
    print '<td class="sujet"><a href="' . $_SERVER["PHP_SELF"] . '?id=' . $numsondage . '&ajoutsujet=1&backtopage=' . $_SERVER["PHP_SELF"] . '"><span class="fa fa-plus-circle valignmiddle btnTitle-icon"></span></a></td>' . "\n";
821
    print '</tr>' . "\n";
822
}
823
824
825
// Loop on each answer
826
$sumfor = array();
827
$sumagainst = array();
828
$compteur = 0;
829
$sql = "SELECT id_users, nom as name, id_sondage, reponses";
830
$sql .= " FROM " . MAIN_DB_PREFIX . "opensurvey_user_studs";
831
$sql .= " WHERE id_sondage = '" . $db->escape($numsondage) . "'";
832
dol_syslog('sql=' . $sql);
833
$resql = $db->query($sql);
834
if (!$resql) {
835
    dol_print_error($db);
836
    exit;
837
}
838
$num = $db->num_rows($resql);
839
while ($compteur < $num) {
840
    $obj = $db->fetch_object($resql);
841
842
    $ensemblereponses = $obj->reponses;
843
844
    print '<tr><td>' . "\n";
845
846
    if ($user->hasRight('opensurvey', 'write')) {
847
        print '<input type="image" class="reposition" name="effaceligne' . $compteur . '" src="' . img_picto('', 'delete.png', '', false, 1) . '">' . "\n";
848
    }
849
850
    // Name
851
    print '</td><td class="nom">' . dol_htmlentities($obj->name) . '</td>' . "\n";
852
853
    // si la ligne n'est pas a changer, on affiche les données
854
    if (!$testligneamodifier) {
855
        for ($i = 0; $i < $nbcolonnes; $i++) {
856
            $car = substr($ensemblereponses, $i, 1);
857
            //print 'xx'.$i."-".$car.'-'.$listofanswers[$i]['format'].'zz';
858
859
            if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst'))) {
860
                if (((string) $car) == "1") {
861
                    print '<td class="ok">OK</td>' . "\n";
862
                } else {
863
                    print '<td class="non">KO</td>' . "\n";
864
                }
865
                // Total
866
                if (!isset($sumfor[$i])) {
867
                    $sumfor[$i] = 0;
868
                }
869
                if (((string) $car) == "1") {
870
                    $sumfor[$i]++;
871
                }
872
            }
873
            if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'yesno') {
874
                if (((string) $car) == "1") {
875
                    print '<td class="ok">' . $langs->trans("Yes") . '</td>' . "\n";
876
                } elseif (((string) $car) == "0") {
877
                    print '<td class="non">' . $langs->trans("No") . '</td>' . "\n";
878
                } else {
879
                    print '<td class="vide">&nbsp;</td>' . "\n";
880
                }
881
                // Total
882
                if (!isset($sumfor[$i])) {
883
                    $sumfor[$i] = 0;
884
                }
885
                if (!isset($sumagainst[$i])) {
886
                    $sumagainst[$i] = 0;
887
                }
888
                if (((string) $car) == "1") {
889
                    $sumfor[$i]++;
890
                }
891
                if (((string) $car) == "0") {
892
                    $sumagainst[$i]++;
893
                }
894
            }
895
            if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'foragainst') {
896
                if (((string) $car) == "1") {
897
                    print '<td class="ok">' . $langs->trans("For") . '</td>' . "\n";
898
                } elseif (((string) $car) == "0") {
899
                    print '<td class="non">' . $langs->trans("Against") . '</td>' . "\n";
900
                } else {
901
                    print '<td class="vide">&nbsp;</td>' . "\n";
902
                }
903
                // Total
904
                if (!isset($sumfor[$i])) {
905
                    $sumfor[$i] = 0;
906
                }
907
                if (!isset($sumagainst[$i])) {
908
                    $sumagainst[$i] = 0;
909
                }
910
                if (((string) $car) == "1") {
911
                    $sumfor[$i]++;
912
                }
913
                if (((string) $car) == "0") {
914
                    $sumagainst[$i]++;
915
                }
916
            }
917
        }
918
    } else {
919
        // Else, replace the user's choices with a line of checkboxes to retrieve new values
920
        if ($compteur == $ligneamodifier) {
921
            for ($i = 0; $i < $nbcolonnes; $i++) {
922
                $car = substr($ensemblereponses, $i, 1);
923
                print '<td class="vide">';
924
                if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst'))) {
925
                    print '<input type="checkbox" name="choix' . $i . '" value="1" ';
926
                    if ($car == '1') {
927
                        print 'checked';
928
                    }
929
                    print '>';
930
                }
931
                if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'yesno') {
932
                    $arraychoice = array('2' => '&nbsp;', '0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
933
                    print $form->selectarray("choix" . $i, $arraychoice, $car);
934
                }
935
                if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'foragainst') {
936
                    $arraychoice = array('2' => '&nbsp;', '0' => $langs->trans("Against"), '1' => $langs->trans("For"));
937
                    print $form->selectarray("choix" . $i, $arraychoice, $car);
938
                }
939
                print '</td>' . "\n";
940
            }
941
        } else {
942
            for ($i = 0; $i < $nbcolonnes; $i++) {
943
                $car = substr($ensemblereponses, $i, 1);
944
                if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst'))) {
945
                    if (((string) $car) == "1") {
946
                        print '<td class="ok">OK</td>' . "\n";
947
                    } else {
948
                        print '<td class="non">KO</td>' . "\n";
949
                    }
950
                    // Total
951
                    if (!isset($sumfor[$i])) {
952
                        $sumfor[$i] = 0;
953
                    }
954
                    if (((string) $car) == "1") {
955
                        $sumfor[$i]++;
956
                    }
957
                }
958
                if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'yesno') {
959
                    if (((string) $car) == "1") {
960
                        print '<td class="ok">' . $langs->trans("For") . '</td>' . "\n";
961
                    } elseif (((string) $car) == "0") {
962
                        print '<td class="non">' . $langs->trans("Against") . '</td>' . "\n";
963
                    } else {
964
                        print '<td class="vide">&nbsp;</td>' . "\n";
965
                    }
966
                    // Total
967
                    if (!isset($sumfor[$i])) {
968
                        $sumfor[$i] = 0;
969
                    }
970
                    if (!isset($sumagainst[$i])) {
971
                        $sumagainst[$i] = 0;
972
                    }
973
                    if (((string) $car) == "1") {
974
                        $sumfor[$i]++;
975
                    }
976
                    if (((string) $car) == "0") {
977
                        $sumagainst[$i]++;
978
                    }
979
                }
980
                if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'foragainst') {
981
                    if (((string) $car) == "1") {
982
                        print '<td class="ok">' . $langs->trans("For") . '</td>' . "\n";
983
                    } elseif (((string) $car) == "0") {
984
                        print '<td class="non">' . $langs->trans("Against") . '</td>' . "\n";
985
                    } else {
986
                        print '<td class="vide">&nbsp;</td>' . "\n";
987
                    }
988
                    // Total
989
                    if (!isset($sumfor[$i])) {
990
                        $sumfor[$i] = 0;
991
                    }
992
                    if (!isset($sumagainst[$i])) {
993
                        $sumagainst[$i] = 0;
994
                    }
995
                    if (((string) $car) == "1") {
996
                        $sumfor[$i]++;
997
                    }
998
                    if (((string) $car) == "0") {
999
                        $sumagainst[$i]++;
1000
                    }
1001
                }
1002
            }
1003
        }
1004
    }
1005
1006
    // Button edit at end of line
1007
    if ($compteur != $ligneamodifier && ($user->hasRight('opensurvey', 'write'))) {
1008
        print '<td class="casevide"><input type="submit" class="button reposition" name="modifierligne' . $compteur . '" value="' . dol_escape_htmltag($langs->trans("Edit")) . '"></td>' . "\n";
1009
    }
1010
1011
    //demande de confirmation pour modification de ligne
1012
    for ($i = 0; $i < $nblines; $i++) {
1013
        if (GETPOSTISSET("modifierligne" . $i)) {
1014
            if ($compteur == $i) {
1015
                print '<td class="casevide">';
1016
                print '<input type="hidden" name="idtomodify' . $compteur . '" value="' . $obj->id_users . '">';
1017
                print '<input type="submit" class="button button-save reposition" name="validermodifier' . $compteur . '" value="' . dol_escape_htmltag($langs->trans("Save")) . '">';
1018
                print '</td>' . "\n";
1019
            }
1020
        }
1021
    }
1022
1023
    $compteur++;
1024
    print '</tr>' . "\n";
1025
}
1026
1027
// Add line to add new record
1028
if (empty($testligneamodifier)) {
1029
    print '<tr>' . "\n";
1030
    print '<td></td>' . "\n";
1031
    print '<td class="nom">' . "\n";
1032
    print '<input type="text" class="maxwidthonsmartphone" placeholder="' . dol_escape_htmltag($langs->trans("Name")) . '" name="nom" maxlength="64">' . "\n";
1033
    print '</td>' . "\n";
1034
1035
    for ($i = 0; $i < $nbcolonnes; $i++) {
1036
        print '<td class="vide">';
1037
        if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst'))) {
1038
            print '<input type="checkbox" name="choix' . $i . '" value="1"';
1039
            if (GETPOSTISSET('choix' . $i) && GETPOST('choix' . $i) == '1') {
1040
                print ' checked';
1041
            }
1042
            print '>';
1043
        }
1044
        if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'yesno') {
1045
            $arraychoice = array('2' => '&nbsp;', '0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
1046
            print $form->selectarray("choix" . $i, $arraychoice);
1047
        }
1048
        if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'foragainst') {
1049
            $arraychoice = array('2' => '&nbsp;', '0' => $langs->trans("Against"), '1' => $langs->trans("For"));
1050
            print $form->selectarray("choix" . $i, $arraychoice);
1051
        }
1052
        print '</td>' . "\n";
1053
    }
1054
1055
    // Affichage du bouton de formulaire pour inscrire un nouvel utilisateur dans la base
1056
    print '<td><input type="image" name="boutonp" class="borderimp" value="' . $langs->trans("Vote") . '" src="' . img_picto('', 'edit_add', '', false, 1) . '"></td>' . "\n";
1057
    print '</tr>' . "\n";
1058
}
1059
1060
// Select value of best choice (for checkbox columns only)
1061
$nbofcheckbox = 0;
1062
for ($i = 0; $i < $nbcolonnes + 1; $i++) {
1063
    if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst'))) {
1064
        $nbofcheckbox++;
1065
    }
1066
    if (isset($sumfor[$i])) {
1067
        if ($i == 0) {
1068
            $meilleurecolonne = $sumfor[$i];
1069
        }
1070
        if (isset($sumfor[$i]) && $sumfor[$i] > $meilleurecolonne) {
1071
            $meilleurecolonne = $sumfor[$i];
1072
        }
1073
    }
1074
}
1075
1076
1077
// Show line total
1078
print '<tr>' . "\n";
1079
print '<td></td>' . "\n";
1080
print '<td class="center">' . $langs->trans("Total") . '</td>' . "\n";
1081
for ($i = 0; $i < $nbcolonnes; $i++) {
1082
    $showsumfor = isset($sumfor[$i]) ? $sumfor[$i] : '';
1083
    $showsumagainst = isset($sumagainst[$i]) ? $sumagainst[$i] : '';
1084
    if (empty($showsumfor)) {
1085
        $showsumfor = 0;
1086
    }
1087
    if (empty($showsumagainst)) {
1088
        $showsumagainst = 0;
1089
    }
1090
1091
    print '<td>';
1092
    if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst'))) {
1093
        print $showsumfor;
1094
    }
1095
    if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'yesno') {
1096
        print $langs->trans("Yes") . ': ' . $showsumfor . '<br>' . $langs->trans("No") . ': ' . $showsumagainst;
1097
    }
1098
    if (!empty($listofanswers[$i]['format']) && $listofanswers[$i]['format'] == 'foragainst') {
1099
        print $langs->trans("For") . ': ' . $showsumfor . '<br>' . $langs->trans("Against") . ': ' . $showsumagainst;
1100
    }
1101
    print '</td>' . "\n";
1102
}
1103
print '</tr>';
1104
// Show picto winner
1105
if ($nbofcheckbox >= 2) {
1106
    print '<tr>' . "\n";
1107
    print '<td></td>' . "\n";
1108
    print '<td></td>' . "\n";
1109
    for ($i = 0; $i < $nbcolonnes; $i++) {
1110
        if (empty($listofanswers[$i]['format']) || !in_array($listofanswers[$i]['format'], array('yesno', 'foragainst')) && isset($sumfor[$i]) && isset($meilleurecolonne) && $sumfor[$i] == $meilleurecolonne) {
1111
            print '<td class="somme"><img src="' . dol_buildpath('/opensurvey/img/medaille.png', 1) . '"></td>' . "\n";
1112
        } else {
1113
            print '<td class="somme"></td>' . "\n";
1114
        }
1115
    }
1116
    print '</tr>' . "\n";
1117
}
1118
1119
// S'il a oublié de remplir un nom
1120
if (GETPOSTISSET("boutonp") && GETPOST("nom") == "") {
1121
    setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Name")), null, 'errors');
1122
}
1123
1124
if (isset($erreur_prenom) && $erreur_prenom) {
1125
    setEventMessages($langs->trans('VoteNameAlreadyExists'), null, 'errors');
1126
}
1127
1128
if (isset($erreur_ajout_date) && $erreur_ajout_date) {
1129
    setEventMessages($langs->trans("ErrorWrongDate"), null, 'errors');
1130
}
1131
1132
//fin du tableau
1133
print '</table>' . "\n";
1134
print '</div>' . "\n";
1135
1136
1137
$toutsujet = explode(",", $object->sujet); // With old versions, this field was not set
1138
1139
$compteursujet = 0;
1140
$meilleursujet = '';
1141
for ($i = 0; $i < $nbcolonnes; $i++) {
1142
    if (isset($sumfor[$i]) === true && isset($meilleurecolonne) === true && $sumfor[$i] == $meilleurecolonne) {
1143
        $meilleursujet .= ($meilleursujet ? ", " : "");
1144
1145
        if ($object->format == "D") {
1146
            //var_dump($toutsujet);
1147
            if (strpos($toutsujet[$i], '@') !== false) {
1148
                $toutsujetdate = explode("@", $toutsujet[$i]);
1149
                $meilleursujet .= dol_print_date($toutsujetdate[0], 'daytext') . ($toutsujetdate[0] ? ' (' . dol_print_date($toutsujetdate[0], '%A') . ')' : '') . ' - ' . $toutsujetdate[1];
1150
            } else {
1151
                $meilleursujet .= dol_print_date((empty($toutsujet[$i]) ? 0 : $toutsujet[$i]), 'daytext') . ' (' . dol_print_date((empty($toutsujet[$i]) ? 0 : $toutsujet[$i]), '%A') . ')';
1152
            }
1153
        } else {
1154
            $tmps = explode('@', $toutsujet[$i]);
1155
            $meilleursujet .= dol_htmlentities($tmps[0]);
1156
        }
1157
1158
        $compteursujet++;
1159
    }
1160
}
1161
//$meilleursujet = substr($meilleursujet, 1);
1162
$meilleursujet = str_replace("°", "'", $meilleursujet);
1163
1164
// Show best choice
1165
if ($nbofcheckbox >= 2) {
1166
    $vote_str = $langs->trans('votes');
1167
    print '<p class="affichageresultats">' . "\n";
1168
1169
    if (isset($meilleurecolonne) && $compteursujet == "1") {
1170
        print '<img src="' . constant('BASE_URL') . '/opensurvey/img/medaille.png"> ' . $langs->trans('TheBestChoice') . ": <b>" . $meilleursujet . "</b> - <b>" . $meilleurecolonne . "</b> " . $vote_str . ".\n";
1171
    } elseif (isset($meilleurecolonne)) {
1172
        print '<img src="' . constant('BASE_URL') . '/opensurvey/img/medaille.png"> ' . $langs->trans('TheBestChoices') . ": <b>" . $meilleursujet . "</b> - <b>" . $meilleurecolonne . "</b> " . $vote_str . ".\n";
1173
    }
1174
    print '<br></p><br>' . "\n";
1175
}
1176
1177
print '</form>' . "\n";
1178
1179
print '<a name="bas"></a>' . "\n";
1180
1181
ViewMain::llxFooter();
1182
1183
$db->close();
1184