diff --git a/main/lang/english/survey.inc.php b/main/lang/english/survey.inc.php index d69b68ad23..b214a4e0fd 100644 --- a/main/lang/english/survey.inc.php +++ b/main/lang/english/survey.inc.php @@ -203,4 +203,5 @@ $ChooseDifferentCategories = "Choose different categories"; $Version = "Version"; $Normal = "Normal"; $NoLogOfDuration = "No log of duration"; +$AutoInviteLink = "Users who are not invited can use this link to do the survey:"; ?> \ No newline at end of file diff --git a/main/survey/fillsurvey.php b/main/survey/fillsurvey.php index 13849c0b04..da3e601d19 100644 --- a/main/survey/fillsurvey.php +++ b/main/survey/fillsurvey.php @@ -56,7 +56,7 @@ require_once (api_get_path(LIBRARY_PATH) . 'course.lib.php'); // breadcrumbs if (!empty ($_user)) { - $interbreadcrumb[] = array ("url" => 'survey_list.php','name' => get_lang('SurveyList')); + $interbreadcrumb[] = array ("url" => 'survey_list.php?cidReq='.$_GET['course'],'name' => get_lang('SurveyList')); } // Header @@ -81,10 +81,42 @@ if ((!isset ($_GET['course']) || !isset ($_GET['invitationcode']))&& !isset($_GE Display :: display_footer(); exit; } +$invitationcode = $_GET['invitationcode']; +// start auto-invitation feature FS#3403 (all-users-can-do-the-survey-URL handling) +if ($invitationcode == "auto" && isset($_GET['scode'])){ + // not intended for anonymous users + if (!(isset ($_user['user_id']) && $_user['user_id']) || api_is_anonymous($_user['user_id'],true)) { + api_not_allowed(); + } + $userid = $_user['user_id']; + $scode = Database::escape_string($_GET['scode']); //survey_code of the survey + $autoInvitationcode = "auto-$userid-".$scode; //new invitation code from userid + // the survey code must exist in this course, or the URL is invalid + $sql = "SELECT * FROM $table_survey WHERE code='" . $scode . "'"; + $result = api_sql_query($sql, __FILE__, __LINE__); + if (Database :: num_rows($result) > 0){ // ok + // check availability + $row = Database :: fetch_array($result, 'ASSOC'); // + $tempdata = survey_manager :: get_survey($row['survey_id']); + check_time_availability($tempdata); //exit if survey not available anymore + // check for double invitation records (insert should be done once) + $sql = "select user from $table_survey_invitation where invitation_code = '".Database::escape_string($autoInvitationcode)."'"; + $result = api_sql_query($sql, __FILE__, __LINE__); + if (Database :: num_rows($result) == 0){ // ok + $sql = "insert into $table_survey_invitation (survey_code,user, invitation_code, invitation_date) "; + $sql .= " values (\"$scode\", \"$userid\", \"$autoInvitationcode\", now())"; + api_sql_query($sql, __FILE__, __LINE__); + } + // from here we use the new invitationcode auto-userid-surveycode string + $_GET['invitationcode'] = $autoInvitationcode; + $invitationcode = $autoInvitationcode; + } +} +// end auto-invitation feature // now we check if the invitationcode is valid -$sql = "SELECT * FROM $table_survey_invitation WHERE invitation_code = '" . Database :: escape_string($_GET['invitationcode']) . "'"; -$result = api_sql_query($sql, __FILE__, __LINE__); +$sql = "SELECT * FROM $table_survey_invitation WHERE invitation_code = '" . Database :: escape_string($invitationcode) . "'"; +$result = api_sql_query($sql, __FILE__, false); // false=suppress errors if (Database :: num_rows($result) < 1) { Display :: display_error_message(get_lang('WrongInvitationCode'), false); @@ -261,21 +293,7 @@ echo '
' . $survey_data['survey_title'] . '
'; echo '
' . $survey_data['survey_subtitle'] . '
'; // checking time availability -$start_date = mktime(0, 0, 0, substr($survey_data['start_date'], 5, 2), substr($survey_data['start_date'], 8, 2), substr($survey_data['start_date'], 0, 4)); -$end_date = mktime(0, 0, 0, substr($survey_data['end_date'], 5, 2), substr($survey_data['end_date'], 8, 2), substr($survey_data['end_date'], 0, 4)); -$cur_date = time(); - -if ($cur_date < $start_date) { - Display :: display_warning_message(get_lang('SurveyNotAvailableYet'), false); - Display :: display_footer(); - exit; -} -if ($cur_date > $end_date) -{ - Display :: display_warning_message(get_lang('SurveyNotAvailableAnymore'), false); - Display :: display_footer(); - exit; -} +check_time_availability($survey_data); // displaying the survey introduction if (!isset ($_GET['show'])) @@ -510,7 +528,7 @@ if ($survey_data['form_fields'] && $survey_data['anonymous'] == 0 && is_array($u // build SQL query $sql = "UPDATE $table_user SET"; foreach ($user_data as $key => $value) - { + { if (substr($key, 0, 6) == 'extra_') //an extra field { $extras[substr($key, 6)] = $value; @@ -1290,4 +1308,26 @@ echo ''; // Footer Display :: display_footer(); + +/** + * Check if this survey has ended. If so, display message and exit rhis script + */ +function check_time_availability($surv_data){ + $start_date = mktime(0, 0, 0, substr($surv_data['start_date'], 5, 2), substr($surv_data['start_date'], 8, 2), substr($surv_data['start_date'], 0, 4)); + $end_date = mktime(0, 0, 0, substr($surv_data['end_date'], 5, 2), substr($surv_data['end_date'], 8, 2), substr($surv_data['end_date'], 0, 4)); + $cur_date = time(); + + if ($cur_date < $start_date) { + Display :: display_warning_message(get_lang('SurveyNotAvailableYet'), false); + Display :: display_footer(); + exit; + } + if ($cur_date > $end_date) + { + Display :: display_warning_message(get_lang('SurveyNotAvailableAnymore'), false); + Display :: display_footer(); + exit; + } +} + ?> \ No newline at end of file diff --git a/main/survey/survey_invite.php b/main/survey/survey_invite.php index 14a40b63df..5de5f4abd5 100644 --- a/main/survey/survey_invite.php +++ b/main/survey/survey_invite.php @@ -143,6 +143,12 @@ $form->addElement('submit', 'submit', get_lang('Ok')); // The rules (required fields) $form->addRule('mail_title', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('mail_text', get_lang('ThisFieldIsRequired'), 'required'); +// show the URL that can be used by users to fill a survey without invitation +$auto_survey_link = $_configuration['root_web'].$_configuration['code_append']. + 'survey/'.'fillsurvey.php?course='.$_course['sysCode']. + '&invitationcode=auto&scode='.$survey_data['survey_code']; +$form->addElement('static',null, null, '

' . get_lang('AutoInviteLink')); +$form->addElement('static',null, null, $auto_survey_link); if ($form->validate()) { $values = $form->exportValues(); diff --git a/main/survey/survey_list.php b/main/survey/survey_list.php index f573ebd4a7..0cf1bf4ca0 100644 --- a/main/survey/survey_list.php +++ b/main/survey/survey_list.php @@ -1,4 +1,4 @@ -, Ghent University: cleanup, refactoring and rewriting large parts of the code * @author Julio Montoya Armas , Dokeos: Personality Test modification and rewriting large parts of the code -* @version $Id: survey_list.php 16890 2008-11-24 20:22:56Z yannoo $ +* @version $Id: survey_list.php 17572 2009-01-07 18:01:58Z derrj $ * * @todo use quickforms for the forms */ // name of the language file that needs to be included $language_file = 'survey'; - +if (!isset ($_GET['cidReq'])){ + $_GET['cidReq']='none'; // prevent sql errors + $cidReset = true; +} // including the global dokeos file require ('../inc/global.inc.php');