Issues (2160)

main/survey/create_meeting.php (1 issue)

1
<?php
2
/* For licensing terms, see /license.txt */
3
4
require_once __DIR__.'/../inc/global.inc.php';
5
6
$this_section = SECTION_COURSES;
7
8
if (!api_is_allowed_to_edit()) {
9
    api_not_allowed(true);
10
}
11
12
$htmlHeadXtra[] = api_get_css_asset('jt.timepicker/jquery.timepicker.css');
13
$htmlHeadXtra[] = api_get_asset('jt.timepicker/jquery.timepicker.js');
14
$htmlHeadXtra[] = api_get_asset('datepair.js/dist/datepair.js');
15
$htmlHeadXtra[] = api_get_asset('datepair.js/dist/jquery.datepair.js');
16
17
$interbreadcrumb[] = [
18
    'url' => api_get_path(WEB_CODE_PATH).'survey/survey_list.php?'.api_get_cidreq(),
19
    'name' => get_lang('SurveyList'),
20
];
21
22
$courseInfo = api_get_course_info();
23
24
$tool_name = get_lang('CreateMeeting');
25
26
$form = new FormValidator(
27
    'survey',
28
    'post',
29
    api_get_self().'?action=add&'.api_get_cidreq()
30
);
31
32
$form->addElement('header', $tool_name);
33
$form->addHidden('anonymous', 0);
34
$form->addHidden('survey_language', $courseInfo['language']);
35
$form->addHidden('survey_subtitle', '');
36
$form->addHidden('survey_thanks', '');
37
$form->addHidden('visible_results', '0');
38
$form->addHidden('survey_type', 3);
39
40
$text = $form->addText(
41
    'survey_title',
42
    get_lang('Title')
43
);
44
45
$allowSurveyAvailabilityDatetime = api_get_configuration_value('allow_survey_availability_datetime');
46
47
if ($allowSurveyAvailabilityDatetime) {
48
    $startDateElement = $form->addDateTimePicker('start_date', get_lang('StartDate'));
49
    $endDateElement = $form->addDateTimePicker('end_date', get_lang('EndDate'));
50
    $form->addRule('start_date', get_lang('InvalidDate'), 'datetime');
51
    $form->addRule('end_date', get_lang('InvalidDate'), 'datetime');
52
} else {
53
    $startDateElement = $form->addElement('date_picker', 'start_date', get_lang('StartDate'));
54
    $endDateElement = $form->addElement('date_picker', 'end_date', get_lang('EndDate'));
55
    $form->addRule('start_date', get_lang('InvalidDate'), 'date');
56
    $form->addRule('end_date', get_lang('InvalidDate'), 'date');
57
}
58
59
$form->addRule(
60
    ['start_date', 'end_date'],
61
    get_lang('StartDateShouldBeBeforeEndDate'),
62
    'date_compare',
63
    'lte'
64
);
65
66
$form->setRequired($startDateElement);
67
$form->setRequired($endDateElement);
68
69
$form->addHtmlEditor('survey_introduction', get_lang('Description'), false);
70
$form->setRequired($text);
71
72
$hideList = '';
73
$maxEvents = 20;
74
for ($i = 1; $i <= $maxEvents; $i++) {
75
    $name = 'time_'.$i;
76
    $form->addDateTimeRangePicker($name, get_lang('Date'));
77
    if ($i > 3) {
78
        $hideList .= "$('#".$name."_date_time_wrapper').hide();";
79
    }
80
}
81
82
$form->addHtml('<script>
83
$(function() {
84
    '.$hideList.'
85
    var number = 3;
86
    $("#add_button").on("click", function() {
87
        number++;
88
        $("#time_" + number + "_date_time_wrapper").show();
89
    });
90
91
    $("#remove_button").on("click", function() {
92
        if (number > 1) {
93
            $("#time_" + number + "_date_time_wrapper").hide();
94
            number--;
95
        }
96
    });
97
});
98
</script>');
99
100
$form->addLabel(
101
    '',
102
    Display::url(get_lang('Add'), 'javascript:void(0)', ['id' => 'add_button', 'class' => 'btn btn-default'])
103
    .' '.
104
    Display::url(
105
        get_lang('Remove'),
106
        'javascript:void(0)',
107
        ['id' => 'remove_button', 'class' => 'btn btn-danger']
108
    )
109
);
110
111
$form->addButtonCreate(get_lang('CreateSurvey'), 'submit_survey');
112
113
$defaults = [];
114
$form->setDefaults($defaults);
115
116
// The validation or display
117
if ($form->validate()) {
118
    // Exporting the values
119
    $values = $form->getSubmitValues();
120
    $values['survey_code'] = SurveyManager::generateSurveyCode($values['survey_title']);
121
    // Storing the survey
122
    $surveyData = SurveyManager::store_survey($values);
123
124
    $dates = [];
125
    for ($i = 1; $i <= $maxEvents; $i++) {
126
        $name = 'time_'.$i;
127
        if (isset($values[$name]) && !empty($values[$name])) {
128
            $date = $values[$name];
129
130
            if (empty($date)) {
131
                continue;
132
            }
133
134
            $start = $name.'_time_range_start';
135
            $end = $name.'_time_range_end';
136
137
            $start = $values[$start];
138
            $end = $values[$end];
139
140
            $start = api_get_utc_datetime($values[$name].' '.$start, true);
141
            $end = api_get_utc_datetime($values[$name].' '.$end, true);
142
143
            if (!empty($start) && !empty($start)) {
144
                $row = [
145
                    'start' => $start,
146
                    'end' => $end,
147
                ];
148
                $dates[] = $row;
149
            }
150
        }
151
    }
152
153
    $questionTable = Database::get_course_table(TABLE_SURVEY_QUESTION);
154
    $counter = 1;
155
    if (!empty($surveyData['id'])) {
156
        foreach ($dates as $date) {
157
            $params = [
158
                'c_id' => api_get_course_int_id(),
159
                'survey_id' => $surveyData['id'],
160
                'survey_question' => $date['start'].'@@'.$date['end'],
161
                'survey_question_comment' => '',
162
                'type' => 'doodle',
163
                'display' => 'horizontal',
164
                'sort' => $counter,
165
                'shared_question_id' => '0',
166
                'max_value' => 0,
167
            ];
168
            $questionId = Database::insert($questionTable, $params);
169
            if ($questionId) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $questionId 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...
170
                $sql = "UPDATE $questionTable SET question_id = $questionId
171
                        WHERE iid = $questionId";
172
                Database::query($sql);
173
            }
174
            $counter++;
175
        }
176
    }
177
178
    // Redirecting to the survey page (whilst showing the return message)
179
    header('Location: '.api_get_path(WEB_CODE_PATH).'survey/survey_list.php?'.api_get_cidreq());
180
    exit;
181
} else {
182
    // Displaying the header
183
    Display::display_header($tool_name);
184
    $form->display();
185
}
186
187
Display::display_footer();
188