diff --git a/client/index.php b/client/index.php index 63046aaf..f68c4337 100644 --- a/client/index.php +++ b/client/index.php @@ -119,12 +119,16 @@ if ($client_id) } else print "

" . T_("No outcomes recorded for this questionnaire") . "

"; - print "
" . T_("View summary results") . ""; + print "
" . T_("View summary results") . ""; } if (isset($_GET['qsid'])) { - $qsid = intval($_GET['qsid']); - $page = LIME_URL . "admin/admin.php?action=browse&sid=$qsid"; } + $qsid = intval($_GET['qsid']); + $questionnaire_id = intval($_GET['questionnaire_id']); + $url = $db->GetOne("SELECT r.entry_url FROM remote as r, questionnaire as q + WHERE q.questionnaire_id = $questionnaire_id + AND r.id = q.remote_id"); + $page = $url . "/admin/responses/sa/browse/surveyid/admin/$qsid"; } else $page =''; if ($page){ diff --git a/email.php b/email.php index d871b3cb..1fd11ecf 100644 --- a/email.php +++ b/email.php @@ -90,7 +90,7 @@ if (isset($_POST['email']) && ((isset($_POST['firstname']) && !empty($_POST['fir //set_participant_properties($sSessionKey, $lime_sid, array['token' => $token], array['email' => $email, 'firstname' => $firstname, 'lastname' => $lastname, 'emailstatus' => 'OK']); - if (0) //if mail sent - disable temporarily + if (0) //if mail sent - disable temporarily TODO: update properties in limesurvey { // Put call attempt id in to sent in Limesurvey $sql = "UPDATE ". LIME_PREFIX . "tokens_{$lime_sid} diff --git a/functions/functions.limesurvey.php b/functions/functions.limesurvey.php index 328442fb..cf6b0806 100644 --- a/functions/functions.limesurvey.php +++ b/functions/functions.limesurvey.php @@ -71,6 +71,15 @@ function limerpc_init ($url,$user,$pass) return true; } +function limerpc_close() +{ + global $limeRPC; + global $limeKey; + + if (!empty($limeRPC) && !empty($limeKey)) + $limeRPC->release_session_key($limeKey); +} + function limerpc_init_qid($qid) { global $db; @@ -107,6 +116,7 @@ function lime_list_questions($qid) } } + limerpc_close(); return $ret; } @@ -134,6 +144,7 @@ function lime_list_answeroptions($qid,$qcode) } } + limerpc_close(); return $ret; } @@ -171,6 +182,7 @@ function lime_add_token($qid,$params) } } + limerpc_close(); return $ret; } @@ -190,6 +202,7 @@ function get_token_value($questionnaire_id,$token, $value = 'sent') } } + limerpc_close(); return $ret; } @@ -224,6 +237,7 @@ function get_survey_list () } } } + limerpc_close(); } } @@ -463,115 +477,6 @@ function validate_email($email){ return TRUE; } -/** - * Return the number of completions for a given - * questionnaire, where the given sample var has - * the given sample value - * - * @param int $lime_sid The limesurvey survey id - * @param int $questionnaire_id The questionnaire ID - * @param int $sample_import_id The sample import ID - * @param string $val The value to compare - * --- changed @param string $var the variable to compare - * to @param string $var_id - ID for variable to compare - * @return bool|int False if failed, otherwise the number of completions - */ -function limesurvey_quota_replicate_completions($lime_sid,$questionnaire_id,$sample_import_id,$val,$var_id) -{ - global $db; - - $sql = "SELECT COUNT(*) - FROM information_schema.tables - WHERE table_schema = '".DB_NAME."' - AND table_name = '" . LIME_PREFIX . "survey_$lime_sid'"; - - $rs = $db->GetOne($sql); - - if ($rs != 1) - return false; - - $sql = "SELECT count(*) as c - FROM " . LIME_PREFIX . "survey_$lime_sid as s - JOIN `case` as c ON (c.questionnaire_id = '$questionnaire_id') - JOIN `sample` as sam ON (c.sample_id = sam.sample_id AND sam.import_id = '$sample_import_id') - JOIN `sample_var` as sv ON (sv.sample_id = sam.sample_id AND sv.var_id = '$var_id' AND sv.val LIKE '$val') - WHERE s.submitdate IS NOT NULL - AND s.token = c.token"; - - $rs = $db->GetRow($sql); - - if (isset($rs) && !empty($rs)) - return $rs['c']; - - return false; -} - -/** - * Return whether the given case matches the requested quota - * - * @param string $lime_sgqa The limesurvey SGQA - * @param int $lime_sid The limesurvey survey id - * @param int $case_id The case id - * @param string $value The value to compare - * @param string $comparison The type of comparison - * @param int $sample_import_id The sample import ID - * - * @return bool|int False if failed, otherwise 1 if matched, 0 if doesn't - * - */ -function limesurvey_quota_match($lime_sgqa,$lime_sid,$case_id,$value,$comparison,$sample_import_id) -{ - global $db; - - $sql = "SELECT count(*) as c - FROM " . LIME_PREFIX . "survey_$lime_sid as s - JOIN `case` as c ON (c.case_id = '$case_id') - JOIN `sample` as sam ON (c.sample_id = sam.sample_id and sam.import_id = $sample_import_id) - WHERE s.token = c.token - AND s.`$lime_sgqa` $comparison '$value'"; - - $rs = $db->GetRow($sql); - - if (isset($rs) && !empty($rs)) - return $rs['c']; - - return false; -} - -/** - * Return whether the given case matches the replicate sample only quota - * - * @param int $lime_sid The Limesurvey survey id - * @param int $case_id The case id - * @param string $val The sample value to compare - * --- changed @param string $var the variable to compare - * to @param string $var_id - ID for variable to compare - * @param int $sample_import_id The sample import id we are looking at - * - * @return bool|int False if failed, otherwise 1 if matched, 0 if doesn't - * @author Adam Zammit - * @since 2012-04-30 - */ -function limesurvey_quota_replicate_match($lime_sid,$case_id,$val,$var_id,$sample_import_id) -{ - global $db; - - $sql = "SELECT count(*) as c - FROM " . LIME_PREFIX . "survey_$lime_sid as s - JOIN `case` as c ON (c.case_id = '$case_id') - JOIN `sample` as sam ON (c.sample_id = sam.sample_id and sam.import_id = $sample_import_id) - JOIN `sample_var` as sv ON (sv.sample_id = sam.sample_id AND sv.var_id = '$var_id' AND sv.val LIKE '$val') - WHERE s.token = c.token"; - - $rs = $db->GetRow($sql); - - if (isset($rs) && !empty($rs)) - return $rs['c']; - - return false; - -} - /** * Return the number of completions for a given * questionnaire, where the given question has @@ -617,102 +522,6 @@ function limesurvey_quota_completions($lime_sgqa,$lime_sid,$questionnaire_id,$sa return false; } -/** - * Get information on limesurvey quota's - * Based on GetQuotaInformation() from common.php in Limesurvey - * - * @param int $lime_quota_id The quota id to get information on - * @return array An array containing the question information for comparison - */ -function get_limesurvey_quota_info($lime_quota_id) -{ - global $db; - - $ret = array(); - - $sql = "SELECT q.qid - FROM ".LIME_PREFIX."quota_members as q, ".LIME_PREFIX."surveys as s - WHERE q.quota_id='$lime_quota_id' - AND s.sid = q.sid - GROUP BY q.qid"; - - $rsq = $db->GetAll($sql); - - foreach ($rsq as $q) - { - $qid = $q['qid']; - - $sql = "SELECT q.*,s.language - FROM ".LIME_PREFIX."quota_members as q, ".LIME_PREFIX."surveys as s - WHERE q.quota_id='$lime_quota_id' - AND s.sid = q.sid - AND q.qid = $qid"; - - $rs = $db->GetAll($sql); - - $r2 = array(); - - foreach($rs as $quota_entry) - { - $lime_qid = $quota_entry['qid']; - $surveyid = $quota_entry['sid']; - $language = $quota_entry['language']; - - $sql = "SELECT type, title,gid - FROM ".LIME_PREFIX."questions - WHERE qid='$lime_qid' - AND language='$language'"; - - $qtype = $db->GetRow($sql); - - $fieldnames = "0"; - - if ($qtype['type'] == "I" || $qtype['type'] == "G" || $qtype['type'] == "Y") - { - $fieldnames= ($surveyid.'X'.$qtype['gid'].'X'.$quota_entry['qid']); - $value = $quota_entry['code']; - } - - if($qtype['type'] == "L" || $qtype['type'] == "O" || $qtype['type'] =="!") - { - $fieldnames=( $surveyid.'X'.$qtype['gid'].'X'.$quota_entry['qid']); - $value = $quota_entry['code']; - } - - if($qtype['type'] == "M") - { - $fieldnames=( $surveyid.'X'.$qtype['gid'].'X'.$quota_entry['qid'].$quota_entry['code']); - $value = "Y"; - } - - if($qtype['type'] == "A" || $qtype['type'] == "B") - { - $temp = explode('-',$quota_entry['code']); - $fieldnames=( $surveyid.'X'.$qtype['gid'].'X'.$quota_entry['qid'].$temp[0]); - $value = $temp[1]; - } - - - $r2[] = array('code' => $quota_entry['code'], 'value' => $value, 'qid' => $quota_entry['qid'], 'fieldname' => $fieldnames); - } - - $ret[$qid] = $r2; - } - return $ret; -} - -/** - * Taken from common.php in the LimeSurvey package - * Add a prefix to a database name - * - * @param string $name Database name - * @link http://www.limesurvey.org/ LimeSurvey - */ -function db_table_name($name) -{ - return "`".LIME_PREFIX.$name."`"; -} - /** * Taken from common.php in the LimeSurvey package @@ -733,71 +542,6 @@ function getRandomID() } - -/** - * Taken from admin/database.php in the LimeSurvey package - * With modifications - * - * @param string $title Questionnaire name - * @param bool $exittoend Whether to exit to the project end, or to the start of the questionnaire - * @link http://www.limesurvey.org/ LimeSurvey - */ -function create_limesurvey_questionnaire($title,$exittoend = true) -{ - global $db; - - // Get random ids until one is found that is not used - do - { - $surveyid = getRandomID(); - $isquery = "SELECT sid FROM ".db_table_name('surveys')." WHERE sid=$surveyid"; - $isresult = $db->Execute($isquery); - } - while (!empty($isresult) && $isresult->RecordCount() > 0); - - $isquery = "INSERT INTO ". LIME_PREFIX ."surveys\n" - . "(sid, owner_id, admin, active, expires, " - . "adminemail, private, faxto, format, template, " - . "language, datestamp, ipaddr, refurl, usecookie, notification, allowregister, " - . "allowsave, autoredirect, allowprev,datecreated,tokenanswerspersistence)\n" - . "VALUES ($surveyid, 1,\n" - . "'', 'N', \n" - . "NULL, '', 'N',\n" - . "'', 'S', 'quexs',\n" - . "'" . DEFAULT_LOCALE . "', 'Y', 'N', 'N',\n" - . "'N', '0', 'Y',\n" - . "'Y', 'Y', 'Y','".date("Y-m-d")."','Y')"; - $isresult = $db->Execute($isquery) or die ($isquery."
".$db->ErrorMsg()); - - // insert base language into surveys_language_settings - $isquery = "INSERT INTO ".db_table_name('surveys_languagesettings') - . "(surveyls_survey_id, surveyls_language, surveyls_title, surveyls_description, surveyls_welcometext, surveyls_urldescription, " - . "surveyls_email_invite_subj, surveyls_email_invite, surveyls_email_remind_subj, surveyls_email_remind, " - . "surveyls_email_register_subj, surveyls_email_register, surveyls_email_confirm_subj, surveyls_email_confirm,surveyls_url)\n" - . "VALUES ($surveyid, '" . DEFAULT_LOCALE . "', $title, $title,\n" - . "'',\n" - . "'', '',\n" - . "'', '',\n" - . "'', '',\n" - . "'', '',\n" - . "'', '"; - - if ($exittoend) - $isquery .= "{ENDINTERVIEWURL}')"; - else - $isquery .= "{STARTINTERVIEWURL}')"; - - $isresult = $db->Execute($isquery) or die ($isquery."
".$db->ErrorMsg()); - - - // Insert into survey_rights - $isrquery = "INSERT INTO ". LIME_PREFIX . "surveys_rights VALUES($surveyid,1,1,1,1,1,1,1)"; - $isrresult = $db->Execute($isrquery) or die ($isrquery."
".$db->ErrorMsg()); - - return $surveyid; -} - - function get_lime_url($case_id) { global $db; @@ -822,55 +566,35 @@ function get_lime_url($case_id) function get_lime_id($case_id) { global $db; + global $limeRPC; + global $limeKey; - $lime_sid = get_lime_sid($case_id); - if ($lime_sid == false) return false; - - $sql = "SELECT s.id - FROM " . LIME_PREFIX . "survey_$lime_sid as s, `case` as c - WHERE c.case_id = '$case_id' - AND c.token = s.token"; + $sql = "SELECT c.token,c.questionnaire_id + FROM `case` as c + WHERE c.case_id = '$case_id'"; - $r = $db->GetRow($sql); + $rs = $db->GetRow($sql); - if (!empty($r) && isset($r['id'])) - return $r['id']; + $token = $rs['token']; + $qid = $rs['qid']; - return false; + $lime_id = limerpc_init_qid($qid); + $ret = false; + if ($lime_id !== false) { + $q = $limeRPC->get_response_ids($limeKey,$lime_id,$token); + if (!isset($q['status'])) { + $ret = current($q); //return first id; + } + } + + limerpc_close(); + + return $ret; } -/** - * Return the limesurvey tid given the case_id - * - * @param int $case_id The case id - * @return bool|int False if no lime_tid otherwise the lime_tid - * - */ -function get_lime_tid($case_id) -{ - global $db; - - $lime_sid = get_lime_sid($case_id); - if ($lime_sid == false) return false; - - $sql = "SELECT t.tid - FROM " . LIME_PREFIX . "tokens_$lime_sid as t, `case` as c - WHERE c.case_id = '$case_id' - AND c.token = t.token"; - - $r = $db->GetRow($sql); - - if (!empty($r) && isset($r['tid'])) - return $r['tid']; - - return false; - - -} - /** * Return the lime_sid given the case_id *