diff --git a/main/survey/fillsurvey.php b/main/survey/fillsurvey.php index 90894abb48..13849c0b04 100644 --- a/main/survey/fillsurvey.php +++ b/main/survey/fillsurvey.php @@ -75,7 +75,7 @@ $table_user = Database :: get_main_table(TABLE_MAIN_USER); $table_survey_invitation = Database :: get_course_table(TABLE_SURVEY_INVITATION, $_course['db_name']); // first we check if the needed parameters are present -if (!isset ($_GET['course']) || !isset ($_GET['invitationcode'])) +if ((!isset ($_GET['course']) || !isset ($_GET['invitationcode']))&& !isset($_GET['user_id'])) { Display :: display_error_message(get_lang('SurveyParametersMissingUseCopyPaste'), false); Display :: display_footer(); @@ -94,7 +94,7 @@ if (Database :: num_rows($result) < 1) $survey_invitation = Database :: fetch_array($result, 'ASSOC'); // now we check if the user already filled the survey -if ($survey_invitation['answered'] == 1) +if ($survey_invitation['answered'] == 1 && !isset($_GET['user_id'])) { Display :: display_error_message(get_lang('YouAlreadyFilledThisSurvey'), false); Display :: display_footer(); @@ -606,6 +606,18 @@ if (isset ($_GET['show']) || isset ($_POST['personality'])) } if (key_exists($_GET['show'], $paged_questions)) { + if (isset($_GET['user_id'])) { + $sql = "SELECT survey_question.survey_group_sec1, survey_question.survey_group_sec2, survey_question.survey_group_pri, + survey_question.question_id, survey_question.survey_id, survey_question.survey_question, survey_question.display, survey_question.sort, survey_question.type, survey_question.max_value, + survey_question_option.question_option_id, survey_question_option.option_text, survey_question_option.sort as option_sort + FROM $table_survey_question survey_question + LEFT JOIN $table_survey_question_option survey_question_option + ON survey_question.question_id = survey_question_option.question_id + WHERE survey_question.survey_id = '" . Database :: escape_string($survey_invitation['survey_id']) . "' + AND survey_question.question_id NOT IN (SELECT sa.question_id FROM ".$table_survey_answer." sa WHERE sa.user=".api_get_user_id()." ) + ORDER BY survey_question.sort, survey_question_option.sort ASC"; + } else { + $sql = "SELECT survey_question.survey_group_sec1, survey_question.survey_group_sec2, survey_question.survey_group_pri, survey_question.question_id, survey_question.survey_id, survey_question.survey_question, survey_question.display, survey_question.sort, survey_question.type, survey_question.max_value, survey_question_option.question_option_id, survey_question_option.option_text, survey_question_option.sort as option_sort @@ -615,6 +627,7 @@ if (isset ($_GET['show']) || isset ($_POST['personality'])) WHERE survey_question.survey_id = '" . Database :: escape_string($survey_invitation['survey_id']) . "' AND survey_question.question_id IN (" . implode(',', $paged_questions[$_GET['show']]) . ") ORDER BY survey_question.sort, survey_question_option.sort ASC"; + } $result = api_sql_query($sql, __FILE__, __LINE__); $question_counter_max = Database :: num_rows($result); @@ -623,6 +636,7 @@ if (isset ($_GET['show']) || isset ($_POST['personality'])) $questions = array (); while ($row = Database :: fetch_array($result, 'ASSOC')) { + // 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']; @@ -1057,11 +1071,10 @@ if (isset ($_GET['show']) || isset ($_POST['personality'])) WHERE survey_question.survey_id = '" . Database :: escape_string($survey_invitation['survey_id']) . "' AND survey_question.question_id IN (" .$imploded. ") ORDER $order_sql "; - $result = api_sql_query($sql, __FILE__, __LINE__); + $result = api_sql_query($sql, __FILE__, __LINE__); $question_counter_max = Database :: num_rows($result); } - } - + } if (!is_null($result)) { $counter = 0; @@ -1130,7 +1143,9 @@ $g_ic = (isset ($_GET['invitationcode']) ? Security :: remove_XSS($_GET['invitat $g_cr = (isset ($_GET['cidReq']) ? Security :: remove_XSS($_GET['cidReq']) : ''); $p_l = (isset ($_POST['language']) ? Security :: remove_XSS($_POST['language']) : ''); -echo '
'; +$add_parameters=isset($_GET['user_id']) ? 'user_id='.$_GET['user_id'].'&': ''; + +echo ''; echo ''; if (isset ($questions) && is_array($questions)) diff --git a/main/survey/survey.lib.php b/main/survey/survey.lib.php index 35c09ecab5..7fb538ac27 100644 --- a/main/survey/survey.lib.php +++ b/main/survey/survey.lib.php @@ -24,7 +24,7 @@ * @package dokeos.survey * @author Patrick Cool , Ghent University: cleanup, refactoring and rewriting large parts (if not all) of the code @author Julio Montoya Armas , Dokeos: Personality Test modification and rewriting large parts of the code -* @version $Id: survey.lib.php 17360 2008-12-17 20:51:09Z iflorespaz $ +* @version $Id: survey.lib.php 17494 2008-12-31 21:15:21Z iflorespaz $ * * @todo move this file to inc/lib * @todo use consistent naming for the functions (save vs store for instance) @@ -4587,26 +4587,48 @@ class SurveyUtil { global $_course; // Database table definitions + $table_survey_question = Database :: get_course_table(TABLE_SURVEY_QUESTION); $table_survey_invitation = Database :: get_course_table(TABLE_SURVEY_INVITATION); $table_survey_answer = Database :: get_course_table(TABLE_SURVEY_ANSWER); $table_survey = Database :: get_course_table(TABLE_SURVEY); $table_user = Database :: get_main_table(TABLE_MAIN_USER); - + $all_question_id=array(); + + $sql='SELECT question_id from '.$table_survey_question; + $result=api_sql_query($sql,__FILE__,__LINE__); + + while($row=Database::fetch_array($result,'ASSOC')) { + $all_question_id[]=$row; + } + + $count=0; + for ($i=0;$i0) { + $link_add=true; + break; + } + } + + echo ''; + echo ''; + echo ' '; + echo ' '; + echo ''; $sql = "SELECT * FROM $table_survey survey, $table_survey_invitation survey_invitation WHERE survey_invitation.user = '".Database::escape_string($user_id)."' AND survey.code = survey_invitation.survey_code AND survey.avail_from <= '".date('Y-m-d H:i:s')."' AND survey.avail_till >= '".date('Y-m-d H:i:s')."' "; - $result = api_sql_query($sql, __FILE__, __LINE__); - - echo '
'.get_lang('SurveyName').''.get_lang('Anonymous').'
'; - echo ''; - echo ' '; - echo ' '; - echo ''; - $counter = 0; while ($row = Database::fetch_array($result,'ASSOC')) { @@ -4623,6 +4645,10 @@ class SurveyUtil { echo ($row['anonymous'] == 1)?get_lang('Yes'):get_lang('No'); echo ''; echo ''; + $link_available=self::show_link_available(api_get_user_id(),$row['code']); + if ($link_add===true && $link_available===true) { + echo ''; + } } echo '
'.get_lang('SurveyName').''.get_lang('Anonymous').'
'.get_lang('CompleteTheSurveysQuestions').'
'; } @@ -4868,6 +4894,36 @@ class SurveyUtil { } return $field_list_array; } + /** + * @author Isaac Flores Paz + * @param Integer user_id + * @return boolean + * + */ + function show_link_available($user_id,$survey_code) { + $table_survey = Database :: get_course_table(TABLE_SURVEY); + $table_survey_invitation = Database :: get_course_table(TABLE_SURVEY_INVITATION); + $table_survey_answer = Database :: get_course_table(TABLE_SURVEY_ANSWER); + $table_survey_question = Database :: get_course_table(TABLE_SURVEY_QUESTION); + + $sql='SELECT COUNT(*) as count FROM '.$table_survey_invitation.' WHERE user='.$user_id.' AND survey_code="'.$survey_code.'" AND answered="1";'; + $sql2='SELECT COUNT(*) as count FROM '.$table_survey.' s INNER JOIN '.$table_survey_question.' q ON s.survey_id=q.survey_id WHERE s.code="'.$survey_code.'";'; + $sql3='SELECT COUNT(*) as count FROM '.$table_survey_answer.' WHERE survey_id=(SELECT survey_id FROM '.$table_survey.' WHERE code="'.$survey_code.'" AND user='.$user_id.' )'; + + $result=api_sql_query($sql,__FILE__,__LINE__); + $result2=api_sql_query($sql2,__FILE__,__LINE__); + $result3=api_sql_query($sql3,__FILE__,__LINE__); + + $row=Database::fetch_array($result,'ASSOC'); + $row2=Database::fetch_array($result2,'ASSOC'); + $row3=Database::fetch_array($result3,'ASSOC'); + + if ($row['count']==1 && $row3['count']!=$row2['count']) { + return true; + } else { + return false; + } + } } ?>