diff --git a/main/inc/lib/formvalidator/Element/DateTimePicker.php b/main/inc/lib/formvalidator/Element/DateTimePicker.php index b83f08a6c4..ed36c5c8dc 100755 --- a/main/inc/lib/formvalidator/Element/DateTimePicker.php +++ b/main/inc/lib/formvalidator/Element/DateTimePicker.php @@ -45,7 +45,7 @@ class DateTimePicker extends HTML_QuickForm_text $resetFieldX = sprintf(get_lang('ResetFieldX'), $label); return ' -
+
_getAttrString($this->_attributes).'> diff --git a/main/inc/lib/formvalidator/FormValidator.class.php b/main/inc/lib/formvalidator/FormValidator.class.php index 2b872d43de..285337d10e 100755 --- a/main/inc/lib/formvalidator/FormValidator.class.php +++ b/main/inc/lib/formvalidator/FormValidator.class.php @@ -282,6 +282,18 @@ EOT; return $this->addElement('DateTimePicker', $name, $label, $attributes); } + /** + * @param string $name + * @param string $label + * @param array $attributes + * + * @return HTML_QuickForm_element + */ + public function addDateTimeRangePicker($name, $label, $attributes = []) + { + return $this->addElement('DateTimeRangePicker', $name, $label, $attributes); + } + /** * @param string $name * @param string $value diff --git a/main/survey/create_new_survey.php b/main/survey/create_new_survey.php index 9e3f205e6b..bb32b45b12 100755 --- a/main/survey/create_new_survey.php +++ b/main/survey/create_new_survey.php @@ -22,6 +22,10 @@ $this_section = SECTION_COURSES; $allowSurveyAvailabilityDatetime = api_get_configuration_value('allow_survey_availability_datetime'); +// Database table definitions +$table_survey = Database::get_course_table(TABLE_SURVEY); +$table_user = Database::get_main_table(TABLE_MAIN_USER); +$table_course = Database::get_main_table(TABLE_MAIN_COURSE); $table_gradebook_link = Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK); /** @todo this has to be moved to a more appropriate place (after the display_header of the code) */ diff --git a/main/survey/fillsurvey.php b/main/survey/fillsurvey.php index 32c305c714..22bd4444e5 100755 --- a/main/survey/fillsurvey.php +++ b/main/survey/fillsurvey.php @@ -97,7 +97,7 @@ if ($invitationcode == 'auto' && isset($_GET['scode'])) { // Survey_code of the survey $surveyCode = $_GET['scode']; if ($isAnonymous) { - $autoInvitationcode = "auto-ANONY_".md5(time())."-$surveyCode"; + $autoInvitationcode = 'auto-ANONY_'.md5(time())."-$surveyCode"; } else { // New invitation code from userid $autoInvitationcode = "auto-$userid-$surveyCode"; @@ -204,6 +204,14 @@ if (empty($survey_data)) { } $survey_data['survey_id'] = $survey_invitation['survey_id']; +if ($survey_data['survey_type'] == '3') { + header('Location: '. + api_get_path(WEB_CODE_PATH). + 'survey/meeting.php?cidReq='.$courseInfo['code'].'&id_session='.$sessionId.'&invitationcode='.Security::remove_XSS($invitationcode) + ); + exit; +} + // Storing the answers if (count($_POST) > 0) { if ($survey_data['survey_type'] === '0') { @@ -653,6 +661,7 @@ if ( if (empty($paged_questions)) { $sql = "SELECT * FROM $table_survey_question WHERE + survey_question NOT LIKE '%{{%' AND c_id = $course_id AND survey_id = '".intval($survey_invitation['survey_id'])."' ORDER BY sort ASC"; @@ -733,6 +742,7 @@ if ( ON survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = $course_id WHERE + survey_question NOT LIKE '%{{%' AND survey_question.survey_id = '".intval($survey_invitation['survey_id'])."' AND survey_question.question_id IN (".implode(',', $paged_questions[$_GET['show']]).") AND survey_question.c_id = $course_id @@ -764,7 +774,7 @@ if ( } } } elseif ($survey_data['survey_type'] === '1') { - $my_survey_id = intval($survey_invitation['survey_id']); + $my_survey_id = (int) $survey_invitation['survey_id']; $current_user = Database::escape_string($survey_invitation['user']); if (isset($_POST['personality'])) { @@ -777,7 +787,10 @@ if ( $answer_list = []; // Get current user results $results = []; - $sql = "SELECT survey_group_pri, user, SUM(value) as value + $sql = "SELECT + survey_group_pri, + user, + SUM(value) as value FROM $table_survey_answer as survey_answer INNER JOIN $table_survey_question as survey_question ON (survey_question.question_id = survey_answer.question_id) @@ -796,7 +809,6 @@ if ( $answer_list['group'] = $row['survey_group_pri']; $results[] = $answer_list; } - //echo '
'; print_r($results); echo '
'; // Get the total score for each group of questions $totals = []; @@ -1014,6 +1026,7 @@ if ( ON survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = $course_id WHERE + survey_question NOT LIKE '%{{%' AND survey_question.survey_id = '".$my_survey_id."' AND survey_question.c_id = $course_id AND survey_question.question_id IN (".implode(',', $paged_questions_sec[$val]).") @@ -1124,6 +1137,7 @@ if ( ON survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = $course_id WHERE + survey_question NOT LIKE '%{{%' AND survey_question.survey_id = '".intval($survey_invitation['survey_id'])."' AND survey_question.c_id = $course_id AND survey_question.question_id IN (".$imploded.") @@ -1170,7 +1184,7 @@ if ( $sql = "SELECT * FROM $table_survey_question WHERE c_id = $course_id AND - type = '".Database::escape_string('pagebreak')."' AND + type = 'pagebreak' AND survey_id='".intval($survey_invitation['survey_id'])."'"; $result = Database::query($sql); $numberofpages = Database::num_rows($result) + 1; @@ -1222,12 +1236,27 @@ $form = new FormValidator( $form->addHidden('language', $p_l); if (isset($questions) && is_array($questions)) { + $originalShow = isset($_GET['show']) ? (int) $_GET['show'] : 0; + + $questionCounter = 1; + if (!empty($originalShow)) { + $before = 0; + foreach ($paged_questions as $keyQuestion => $list) { + if ($originalShow > $keyQuestion) { + $before += count($list); + } + } + $questionCounter = $before + 1; + } + foreach ($questions as $key => &$question) { $ch_type = 'ch_'.$question['type']; + //$questionNumber = $question['sort']; + $questionNumber = $questionCounter; $display = new $ch_type(); // @todo move this in a function. $form->addHtml('
'); - $form->addHtml('
'.$question['sort'].'. '.strip_tags($question['survey_question']).'
'); + $form->addHtml('
'.$questionNumber.'. '.strip_tags($question['survey_question']).'
'); $userAnswerData = SurveyUtil::get_answers_of_question_by_user($question['survey_id'], $question['question_id']); $finalAnswer = null; @@ -1254,6 +1283,7 @@ if (isset($questions) && is_array($questions)) { } $display->render($form, $question, $finalAnswer); $form->addHtml('
'); + $questionCounter++; } } diff --git a/main/survey/preview.php b/main/survey/preview.php index f41a4c9038..a571fe4067 100755 --- a/main/survey/preview.php +++ b/main/survey/preview.php @@ -5,8 +5,8 @@ * @package chamilo.survey * * @author unknown, the initial survey that did not make it in 1.8 because of bad code - * @author Patrick Cool , Ghent University: cleanup, refactoring and rewriting large parts of the code - * @author Julio Montoya Armas , Chamilo: Personality Test modifications + * @author Patrick Cool , Ghent University: cleanup, refactoring and rewriting code + * @author Julio Montoya , Chamilo: Personality Test modifications * * @version $Id: survey_list.php 10680 2007-01-11 21:26:23Z pcool $ */ @@ -25,7 +25,7 @@ $table_survey_invitation = Database::get_course_table(TABLE_SURVEY_INVITATION); $course_id = api_get_course_int_id(); $courseInfo = $course_id ? api_get_course_info_by_id($course_id) : []; $userId = api_get_user_id(); -$surveyId = intval($_GET['survey_id']); +$surveyId = (int) $_GET['survey_id']; $userInvited = 0; $userAnonymous = 0; @@ -49,12 +49,10 @@ if (!isset($_GET['survey_id']) || !is_numeric($_GET['survey_id'])) { true, Display::return_message(get_lang('InvallidSurvey'), 'error', false) ); - exit; } // Getting the survey information -$survey_id = intval($_GET['survey_id']); -$survey_data = SurveyManager::get_survey($survey_id); +$survey_data = SurveyManager::get_survey($surveyId); if (empty($survey_data)) { api_not_allowed( @@ -71,12 +69,12 @@ if (api_is_allowed_to_edit()) { 'name' => get_lang('SurveyList'), ]; $interbreadcrumb[] = [ - 'url' => api_get_path(WEB_CODE_PATH).'survey/survey.php?survey_id='.$survey_id.'&'.api_get_cidreq(), + 'url' => api_get_path(WEB_CODE_PATH).'survey/survey.php?survey_id='.$surveyId.'&'.api_get_cidreq(), 'name' => $urlname, ]; } $courseCode = isset($_GET['cidReq']) ? $_GET['cidReq'] : null; -$surveyAnonymous = SurveyManager::get_survey($survey_id, 0, $courseCode); +$surveyAnonymous = SurveyManager::get_survey($surveyId, 0, $courseCode); $surveyAnonymous = $surveyAnonymous['anonymous']; if ($surveyAnonymous == 0 && api_is_anonymous()) { api_not_allowed(true); @@ -89,7 +87,7 @@ if ($surveyAnonymous == 0 && api_is_anonymous()) { Display::display_header(get_lang('SurveyPreview')); // We exit here is the first or last question is a pagebreak (which causes errors) -SurveyUtil::check_first_last_question($survey_id, false); +SurveyUtil::check_first_last_question($surveyId, false); $counter_question = 0; // Only a course admin is allowed to preview a survey: you are a course admin if (api_is_course_admin() || @@ -127,7 +125,10 @@ if (api_is_course_admin() || $paged_questions = []; $counter = 0; $sql = "SELECT * FROM $table_survey_question - WHERE c_id = $course_id AND survey_id = '".$survey_id."' + WHERE + survey_question NOT LIKE '%{{%' AND + c_id = $course_id AND + survey_id = '".$surveyId."' ORDER BY sort ASC"; $result = Database::query($sql); $questions_exists = true; @@ -143,6 +144,16 @@ if (api_is_course_admin() || $questions_exists = false; } + $sql = "SELECT count(survey_question.question_id) as count + FROM $table_survey_question survey_question + WHERE + survey_question.survey_id = '".$surveyId."' AND + survey_question.c_id = $course_id AND + survey_question LIKE '%{{%' "; + $result = Database::query($sql); + $sourceQuestions = Database::fetch_array($result, 'ASSOC'); + $sourceQuestions = $sourceQuestions['count']; + if (array_key_exists($_GET['show'], $paged_questions)) { $sql = "SELECT survey_question.question_id, @@ -161,24 +172,27 @@ if (api_is_course_admin() || survey_question.question_id = survey_question_option.question_id AND survey_question_option.c_id = $course_id WHERE - survey_question.survey_id = '".$survey_id."' AND + survey_question.survey_id = '".$surveyId."' AND survey_question.question_id IN (".Database::escape_string(implode(',', $paged_questions[$_GET['show']]), null, false).") AND - survey_question.c_id = $course_id + survey_question.c_id = $course_id AND + survey_question NOT LIKE '%{{%' ORDER BY survey_question.sort, survey_question_option.sort ASC"; $result = Database::query($sql); $question_counter_max = Database::num_rows($result); $limit = 0; + while ($row = Database::fetch_array($result)) { // If the type is not a pagebreak we store it in the $questions array if ($row['type'] != 'pagebreak') { - $questions[$row['sort']]['question_id'] = $row['question_id']; - $questions[$row['sort']]['survey_id'] = $row['survey_id']; - $questions[$row['sort']]['survey_question'] = $row['survey_question']; - $questions[$row['sort']]['display'] = $row['display']; - $questions[$row['sort']]['type'] = $row['type']; - $questions[$row['sort']]['options'][intval($row['option_sort'])] = $row['option_text']; - $questions[$row['sort']]['maximum_score'] = $row['max_value']; + $sort = $row['sort']; + $questions[$sort]['question_id'] = $row['question_id']; + $questions[$sort]['survey_id'] = $row['survey_id']; + $questions[$sort]['survey_question'] = $row['survey_question']; + $questions[$sort]['display'] = $row['display']; + $questions[$sort]['type'] = $row['type']; + $questions[$sort]['options'][intval($row['option_sort'])] = $row['option_text']; + $questions[$sort]['maximum_score'] = $row['max_value']; } else { // If the type is a pagebreak we are finished loading the questions for this page break; @@ -188,23 +202,29 @@ if (api_is_course_admin() || } } + $before = 0; + if (isset($_GET['show']) && isset($paged_questions[$_GET['show'] - 1])) { + $before = count($paged_questions[$_GET['show'] - 1]); + } + // Selecting the maximum number of pages $sql = "SELECT * FROM $table_survey_question WHERE + survey_question NOT LIKE '%{{%' AND c_id = $course_id AND - type = '".Database::escape_string('pagebreak')."' AND - survey_id = '".$survey_id."'"; + type = 'pagebreak' AND + survey_id = '".$surveyId."'"; $result = Database::query($sql); $numberofpages = Database::num_rows($result) + 1; // Displaying the form with the questions + $show = 0; if (isset($_GET['show'])) { $show = (int) $_GET['show'] + 1; - } else { - $show = 0; } + $originalShow = isset($_GET['show']) ? (int) $_GET['show'] : 0; - $url = api_get_self().'?survey_id='.$survey_id.'&show='.$show; + $url = api_get_self().'?survey_id='.$surveyId.'&show='.$show.'&'.api_get_cidreq(); $form = new FormValidator( 'question-survey', 'post', @@ -215,14 +235,25 @@ if (api_is_course_admin() || ); if (is_array($questions) && count($questions) > 0) { + $counter = 1; + if (!empty($originalShow)) { + $before = 0; + foreach ($paged_questions as $keyQuestion => $list) { + if ($originalShow > $keyQuestion) { + $before += count($list); + } + } + $counter = $before + 1; + } foreach ($questions as $key => &$question) { $ch_type = 'ch_'.$question['type']; /** @var survey_question $display */ $display = new $ch_type(); $form->addHtml('
'); - $form->addHtml('
'.$key.'. '.strip_tags($question['survey_question']).'
'); + $form->addHtml('
'.$counter.'. '.strip_tags($question['survey_question']).'
'); $display->render($form, $question); $form->addHtml('
'); + $counter++; } } $form->addHtml('
'); diff --git a/main/survey/question.php b/main/survey/question.php index d157d9549c..7a92ec9f9a 100755 --- a/main/survey/question.php +++ b/main/survey/question.php @@ -115,12 +115,12 @@ $surveyQuestion = new $ch_type(); $formData = []; $formData['answers'] = ['', '']; -if ($_GET['type'] == 'yesno') { +switch ($_GET['type']) { + case 'yesno': $formData['answers'][0] = get_lang('Yes'); $formData['answers'][1] = get_lang('No'); -} - -if ($_GET['type'] == 'personality') { + break; + case 'personality': $formData['answers'][0] = 1; $formData['answers'][1] = 2; $formData['answers'][2] = 3; @@ -132,6 +132,10 @@ if ($_GET['type'] == 'personality') { $formData['values'][2] = 1; $formData['values'][3] = 2; $formData['values'][4] = 3; + break; + case 'open': + Display::addFlash(Display::return_message(get_lang('QuestionTags'))); + break; } // We are editing a question @@ -150,7 +154,5 @@ if ($surveyQuestion->getForm()->validate()) { } Display::display_header($tool_name, 'Survey'); - echo $surveyQuestion->getForm()->returnForm(); - Display :: display_footer(); diff --git a/main/survey/reporting.php b/main/survey/reporting.php index 73252d82d3..4cf1c841d7 100755 --- a/main/survey/reporting.php +++ b/main/survey/reporting.php @@ -45,7 +45,6 @@ if (!api_is_allowed_to_edit(false, true) || $isDrhOfCourse) { // Show error message if the survey can be seen only by tutors if ($survey_data['visible_results'] == SURVEY_VISIBLE_TUTOR) { api_not_allowed(true); - exit; } Display::display_header(get_lang('ToolSurvey')); @@ -62,7 +61,7 @@ $format = isset($_REQUEST['export_format']) ? $_REQUEST['export_format'] : ''; if (!empty($exportReport) && !empty($format)) { switch ($format) { case 'xls': - $filename = 'survey_results_'.$survey_id.'.xlsx'; + $filename = 'survey_results_'.$survey_id; $data = SurveyUtil::export_complete_report_xls( $survey_data, $filename,