$clang->gT("ARMSCII-8 Armenian") ,"ascii"=>$clang->gT("US ASCII") ,"auto"=>$clang->gT("Automatic") ,"big5"=>$clang->gT("Big5 Traditional Chinese") ,"binary"=>$clang->gT("Binary pseudo charset") ,"cp1250"=>$clang->gT("Windows Central European") ,"cp1251"=>$clang->gT("Windows Cyrillic") ,"cp1256"=>$clang->gT("Windows Arabic") ,"cp1257"=>$clang->gT("Windows Baltic") ,"cp850"=>$clang->gT("DOS West European") ,"cp852"=>$clang->gT("DOS Central European") ,"cp866"=>$clang->gT("DOS Russian") ,"cp932"=>$clang->gT("SJIS for Windows Japanese") ,"dec8"=>$clang->gT("DEC West European") ,"eucjpms"=>$clang->gT("UJIS for Windows Japanese") ,"euckr"=>$clang->gT("EUC-KR Korean") ,"gb2312"=>$clang->gT("GB2312 Simplified Chinese") ,"gbk"=>$clang->gT("GBK Simplified Chinese") ,"geostd8"=>$clang->gT("GEOSTD8 Georgian") ,"greek"=>$clang->gT("ISO 8859-7 Greek") ,"hebrew"=>$clang->gT("ISO 8859-8 Hebrew") ,"hp8"=>$clang->gT("HP West European") ,"keybcs2"=>$clang->gT("DOS Kamenicky Czech-Slovak") ,"koi8r"=>$clang->gT("KOI8-R Relcom Russian") ,"koi8u"=>$clang->gT("KOI8-U Ukrainian") ,"latin1"=>$clang->gT("cp1252 West European") ,"latin2"=>$clang->gT("ISO 8859-2 Central European") ,"latin5"=>$clang->gT("ISO 8859-9 Turkish") ,"latin7"=>$clang->gT("ISO 8859-13 Baltic") ,"macce"=>$clang->gT("Mac Central European") ,"macroman"=>$clang->gT("Mac West European") ,"sjis"=>$clang->gT("Shift-JIS Japanese") ,"swe7"=>$clang->gT("7bit Swedish") ,"tis620"=>$clang->gT("TIS620 Thai") ,"ucs2"=>$clang->gT("UCS-2 Unicode") ,"ujis"=>$clang->gT("EUC-JP Japanese") ,"utf8"=>$clang->gT("UTF-8 Unicode")); if (isset($_POST['csvcharset']) && $_POST['csvcharset']) //sanitize charset - if encoding is not found sanitize to 'auto' { $uploadcharset=$_POST['csvcharset']; if (!array_key_exists($uploadcharset,$encodingsarray)) {$uploadcharset='auto';} $filterduplicatetoken=(isset($_POST['filterduplicatetoken']) && $_POST['filterduplicatetoken']=='on'); $filterblankemail=(isset($_POST['filterblankemail']) && $_POST['filterblankemail']=='on'); } } if ($subaction == "importldap" || $subaction == "uploadldap" ) { $filterduplicatetoken=(isset($_POST['filterduplicatetoken']) && $_POST['filterduplicatetoken']=='on'); $filterblankemail=(isset($_POST['filterblankemail']) && $_POST['filterblankemail']=='on'); } $tokenoutput = ""; if ($subaction == "export" && ( bHasRight($surveyid, 'export')) )//EXPORT FEATURE SUBMITTED BY PIETERJAN HEYSE { header("Content-Disposition: attachment; filename=tokens_".$surveyid.".csv"); header("Content-type: text/comma-separated-values; charset=UTF-8"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Pragma: cache"); $bquery = "SELECT * FROM ".db_table_name("tokens_$surveyid").' where 1=1'; if (trim($_POST['filteremail'])!='') { if ($databasetype=='odbc_mssql' || $databasetype=='odbtp' || $databasetype=='mssql_n' || $connect->databaseType == 'mssqlnative') { $bquery .= ' and CAST(email as varchar) like '.db_quoteall('%'.$_POST['filteremail'].'%', true); } else { $bquery .= ' and email like '.db_quoteall('%'.$_POST['filteremail'].'%', true); } } if ($_POST['tokenstatus']==1) { $bquery .= " and completed<>'N'"; } if ($_POST['tokenstatus']==2) { $bquery .= " and completed='N'"; if ($thissurvey['private']=='N') { $bquery .=" and token not in (select token from ".db_table_name("survey_$surveyid")." group by token)"; } } if ($_POST['tokenstatus']==3 && $thissurvey['private']=='N') { $bquery .= " and completed='N' and token in (select token from ".db_table_name("survey_$surveyid")." group by token)"; } if ($_POST['invitationstatus']==1) { $bquery .= " and sent<>'N'"; } if ($_POST['invitationstatus']==2) { $bquery .= " and sent='N'"; } if ($_POST['reminderstatus']==1) { $bquery .= " and remindersent<>'N'"; } if ($_POST['reminderstatus']==2) { $bquery .= " and remindersent='N'"; } if ($_POST['tokenlanguage']!='') { $bquery .= " and language=".db_quoteall($_POST['tokenlanguage']); } $bquery .= " ORDER BY tid"; $bresult = db_execute_assoc($bquery) or die ("$bquery
".htmlspecialchars($connect->ErrorMsg())); $bfieldcount=$bresult->FieldCount(); // Export UTF8 WITH BOM $tokenoutput = chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF')); $tokenoutput .= "tid,firstname,lastname,email,emailstatus,token,language,validfrom,validuntil,invited,reminded,remindercount,completed"; $attrfieldnames = GetAttributeFieldnames($surveyid); $attrfielddescr = GetTokenFieldsAndNames($surveyid, true); foreach ($attrfieldnames as $attr_name) { $tokenoutput .=", $attr_name"; if (isset($attrfielddescr[$attr_name])) $tokenoutput .=" <".str_replace(","," ",$attrfielddescr[$attr_name]).">"; } $tokenoutput .="\n"; while ($brow = $bresult->FetchRow()) { if (trim($brow['validfrom']!='')) { $datetimeobj = new Date_Time_Converter($brow['validfrom'] , "Y-m-d H:i:s"); $brow['validfrom']=$datetimeobj->convert('Y-m-d H:i'); } if (trim($brow['validuntil']!='')) { $datetimeobj = new Date_Time_Converter($brow['validuntil'] , "Y-m-d H:i:s"); $brow['validuntil']=$datetimeobj->convert('Y-m-d H:i'); } $tokenoutput .= '"'.trim($brow['tid']).'",'; $tokenoutput .= '"'.trim($brow['firstname']).'",'; $tokenoutput .= '"'.trim($brow['lastname']).'",'; $tokenoutput .= '"'.trim($brow['email']).'",'; $tokenoutput .= '"'.trim($brow['emailstatus']).'",'; $tokenoutput .= '"'.trim($brow['token']).'",'; $tokenoutput .= '"'.trim($brow['language']).'",'; $tokenoutput .= '"'.trim($brow['validfrom']).'",'; $tokenoutput .= '"'.trim($brow['validuntil']).'",'; $tokenoutput .= '"'.trim($brow['sent']).'",'; $tokenoutput .= '"'.trim($brow['remindersent']).'",'; $tokenoutput .= '"'.trim($brow['remindercount']).'",'; $tokenoutput .= '"'.trim($brow['completed']).'",'; foreach ($attrfieldnames as $attr_name) { $tokenoutput .='"'.trim($brow[$attr_name]).'",'; } $tokenoutput = substr($tokenoutput,0,-1); // remove last comma $tokenoutput .= "\n"; } echo $tokenoutput; exit; } if ($subaction == "delete" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) ) { $_SESSION['metaHeader']=""; } $tokenoutput .= "\n"; // MAKE SURE THAT THERE IS A SID if (!isset($surveyid) || !$surveyid) { $tokenoutput .= "\t
" .$clang->gT("Token control")."
\n" ."\t
".$clang->gT("Error")."
" ."
".$clang->gT("You have not selected a survey")."

" ."
\n" ."
\n"; return; } // MAKE SURE THAT THE SURVEY EXISTS $thissurvey=getSurveyInfo($surveyid); if ($thissurvey===false) { $tokenoutput .= "\t
\n
\n" .$clang->gT("Token control")."
\n" ."\t
".$clang->gT("Error")."
" ."
".$clang->gT("The survey you selected does not exist") ."

\n\t
" ."
\n"; return; } else // A survey DOES exist { $tokenoutput .= "\t
\n" ."
".$clang->gT("Token table could not be created.")."
\n" .$clang->gT("Error").": \n" . $connect->ErrorMsg() . "\n" ."
".htmlspecialchars(implode(" ",$sqlarray))."
\n" ."
" ."\n" ."
\n" ."\n"; } else { $createtokentableindex = $dict->CreateIndexSQL("{$tabname}_idx", $tabname, array('token')); $dict->ExecuteSQLArray($createtokentableindex, false) or safe_die ("Failed to create token table index
$createtokentableindex

".$connect->ErrorMsg()); if ($connect->databaseType == 'mysql' || $connect->databaseType == 'mysqli') { $query = 'CREATE INDEX idx_'.$tabname.'_efl ON '.$tabname.' ( email(120), firstname, lastname )'; $result=$connect->Execute($query) or safe_die("Failed Rename!
".$query."
".$connect->ErrorMsg()); } $tokenoutput .= "\t

\n" ."".$clang->gT("A token table has been created for this survey.")." (\"".$dbprefix."tokens_$surveyid\")

\n" ."\n"; } return; } elseif (returnglobal('restoretable') == "Y" && returnglobal('oldtable') && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { $query = db_rename_table(returnglobal('oldtable') , db_table_name_nq("tokens_$surveyid")); $result=$connect->Execute($query) or safe_die("Failed Rename!
".$query."
".$connect->ErrorMsg()); $tokenoutput .= "\t

\n" ."
".$clang->gT("Import old tokens")."
" ."
".$clang->gT("A token table has been created for this survey and the old tokens were imported.")." (\"".$dbprefix."tokens_$surveyid\")

\n" ."\n" ."
\n"; return; } else { $query=db_select_tables_like("{$dbprefix}old_tokens_".$surveyid."_%"); $result=db_execute_num($query) or safe_die("Couldn't get old table list
".$query."
".$connect->ErrorMsg()); $tcount=$result->RecordCount(); if ($tcount > 0) { while($rows=$result->FetchRow()) { $oldlist[]=$rows[0]; } } $tokenoutput .= "\t
\n" ."
".$clang->gT("Warning")."
\n" ."
".$clang->gT("Tokens have not been initialised for this survey.")."

\n"; if (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) { $tokenoutput .= "".$clang->gT("If you initialise tokens for this survey then this survey will only be accessible to users who provide a token either manually or by URL.") ."

\n"; $thissurvey=getSurveyInfo($surveyid); if ($thissurvey['private'] == 'Y') { $tokenoutput .= "".$clang->gT("Note: If you turn on the -Anonymous answers- option for this survey then LimeSurvey will mark your completed tokens only with a 'Y' instead of date/time to ensure the anonymity of your participants.") ."

\n"; } $tokenoutput .= "".$clang->gT("Do you want to create a token table for this survey?"); $tokenoutput .= "

\n"; $tokenoutput .= "\n"; } $tokenoutput .= "
\n"; // Do not offer old postgres token tables for restore since these are having an issue with missing index if ($tcount>0 && $databasetype!='postgres' && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) ) { $tokenoutput .= "
".$clang->gT("Restore options")."
\n" ."
\n" ."
\n" .$clang->gT("The following old token tables could be restored:")."

\n" ."

\n" ."\n" ."\n" ."\n" ."
\n"; } return; } } #Lookup the names of the attributes /*$query = "SELECT attribute1, attribute2 FROM ".db_table_name('surveys')." WHERE sid=$surveyid"; $result = db_execute_assoc($query) or safe_die("Couldn't execute query:
$query
".$connect->ErrorMsg()); $row = $result->FetchRow(); if ($row["attribute1"]) {$attr1_name = $row["attribute1"];} else {$attr1_name=$clang->gT("Attribute 1");} if ($row["attribute2"]) {$attr2_name = $row["attribute2"];} else {$attr2_name=$clang->gT("Attribute 2");}*/ // IF WE MADE IT THIS FAR, THEN THERE IS A TOKENS TABLE, SO LETS DEVELOP THE MENU ITEMS $tokenoutput .= "\t\n"; // SEE HOW MANY RECORDS ARE IN THE TOKEN TABLE $tksq = "SELECT count(tid) FROM ".db_table_name("tokens_$surveyid"); $tksr = db_execute_num($tksq); $tkr = $tksr->FetchRow(); $tkcount = $tkr[0]; // GIVE SOME INFORMATION ABOUT THE TOKENS if ($subaction==''){ $tokenoutput .= "\t
".$clang->gT("Token summary")."
\n" ."
\n" ."\t\n" ."\n"; $tksq = "SELECT count(*) FROM ".db_table_name("tokens_$surveyid")." WHERE token IS NULL OR token=''"; $tksr = db_execute_num($tksq); while ($tkr = $tksr->FetchRow()) {$tokenoutput .= "\n";} $tksq = "SELECT count(*) FROM ".db_table_name("tokens_$surveyid")." WHERE (sent!='N' and sent<>'')"; $tksr = db_execute_num($tksq); while ($tkr = $tksr->FetchRow()) {$tokenoutput .= "\n";} $tksq = "SELECT count(*) FROM ".db_table_name("tokens_$surveyid")." WHERE (completed!='N' and completed<>'')"; $tksr = db_execute_num($tksq) or safe_die ("Couldn't execute token selection query
$abquery
".$connect->ErrorMsg()); while ($tkr = $tksr->FetchRow()) {$tokenoutput .= "\n" ."\t\n" ."
\n" .$clang->gT("Total records in this token table")." $tkcount
".$clang->gT("Total with no unique Token")." $tkr[0] / $tkcount
".$clang->gT("Total invitations sent")." $tkr[0] / $tkcount
".$clang->gT("Total surveys completed")." $tkr[0] / $tkcount\n";} $tokenoutput .= "

\n"; } ############################################################################################# // NOW FOR VARIOUS ACTIONS: if(isset($surveyid) && getEmailFormat($surveyid) == 'html') { $ishtml=true; } else { $ishtml=false; } if ($subaction == "exportdialog" && bHasRight($surveyid, 'export') )//EXPORT FEATURE SUBMITTED BY PIETERJAN HEYSE { $langquery = "SELECT language FROM ".db_table_name("tokens_$surveyid")." group by language"; $langresult = db_execute_assoc($langquery); $tokenoutput .= "\t
".$clang->gT("Token export options")."
\n"; $tokenoutput .= "
\n" ."" ."

" ."" ."" ."" ."

"; } if ($subaction == "emailsettings") { $grplangs = GetAdditionalLanguagesFromSurveyID($surveyid); $baselang = GetBaseLanguageFromSurveyID($surveyid); array_unshift($grplangs,$baselang); $tokenoutput .= PrepareEditorScript(); $tokenoutput .="" . "
\n" . "".$clang->gT("Edit email settings")."
\n" . "
\n" . '
'; $surveyinfo=getSurveyInfo($surveyid); foreach ($grplangs as $grouplang) { // this one is created to get the right default texts fo each language $bplang = new limesurvey_lang($grouplang); $esquery = "SELECT * FROM ".db_table_name("surveys_languagesettings")." WHERE surveyls_survey_id=$surveyid and surveyls_language='$grouplang'"; $esresult = db_execute_assoc($esquery); $esrow = $esresult->FetchRow(); $tokenoutput .= '

'.getLanguageNameFromCode($esrow['surveyls_language'],false); if ($esrow['surveyls_language']==GetBaseLanguageFromSurveyID($surveyid)) {$tokenoutput .= '('.$clang->gT("Base language").')';} $tokenoutput .= '

'; $tokenoutput .= "\t
".$clang->gT("Invitation email subject:")."\n" . "\n" . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Invitation email:")."\n" . "\n" . getEditor("email-inv","email_invite_{$grouplang}", "[".$clang->gT("Invitation email:", "js")."](".$grouplang.")",$surveyid,'','',$action) . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Email reminder subject:")."\n" . "\n" . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Email reminder:")."\n" . "\n" . getEditor("email-rem","email_remind_{$grouplang}", "[".$clang->gT("Email reminder:", "js")."](".$grouplang.")",$surveyid,'','',$action) . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Confirmation email subject:")."\n" . "\n" . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Confirmation email:")."\n" . "\n" . getEditor("email-conf","email_confirm_{$grouplang}", "[".$clang->gT("Confirmation email", "js")."](".$grouplang.")",$surveyid,'','',$action) . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Public registration email subject:")."\n" . "\n" . "\n" . "\n" . "\t
\n"; $tokenoutput .= "\t
".$clang->gT("Public registration email:")."\n" . "\n" . getEditor("email-reg","email_register_{$grouplang}", "[".$clang->gT("Public registration email:", "js")."](".$grouplang.")",$surveyid,'','',$action) . "\n" . "\n" . "\t











\n
"; } $tokenoutput .= '
'; $tokenoutput .= "\t

\n" . "\t\n" . "\t\n" . "\t\n" . "\t\n" . "\t

\n" . "
\n"; } // Save the updated email settings if ($subaction == "updateemailsettings" && bHasRight($surveyid, 'activate_survey') ) { $_POST = array_map('db_quote', $_POST); $languagelist = GetAdditionalLanguagesFromSurveyID($surveyid); $languagelist[]=GetBaseLanguageFromSurveyID($surveyid); foreach ($languagelist as $langname) { if ($langname) { $usquery = "UPDATE ".db_table_name('surveys_languagesettings')." \n" . "SET surveyls_email_invite_subj='".$_POST['email_invite_subj_'.$langname]."',\n" . "surveyls_email_invite='".$_POST['email_invite_'.$langname]."', surveyls_email_remind_subj='".$_POST['email_remind_subj_'.$langname]."',\n" . "surveyls_email_remind='".$_POST['email_remind_'.$langname]."', surveyls_email_register_subj='".$_POST['email_register_subj_'.$langname]."',\n" . "surveyls_email_register='".$_POST['email_register_'.$langname]."', surveyls_email_confirm_subj='".$_POST['email_confirm_subj_'.$langname]."',\n" . "surveyls_email_confirm='".$_POST['email_confirm_'.$langname]."'\n" . "WHERE surveyls_survey_id=".$surveyid." and surveyls_language='".$langname."'"; $usresult = $connect->Execute($usquery) or safe_die("Error updating
".$usquery."

".$connect->ErrorMsg()); } } $tokenoutput .= "
".$clang->gT("Edit email settings")."
\n" ."
" ."\t
".$clang->gT("Token email settings have been saved.")."
\n" ."
"; } if ($subaction == "deleteall" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) ) { $query="DELETE FROM ".db_table_name("tokens_$surveyid"); $result=$connect->Execute($query) or safe_die ("Couldn't update sent field
$query
".$connect->ErrorMsg()); $tokenoutput .= "
".$clang->gT("Delete all token entries")."
\n" ."
".$clang->gT("All token entries have been deleted.")."

\n"; $subaction=""; } if ($subaction == "clearinvites" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) ) { $query="UPDATE ".db_table_name("tokens_$surveyid")." SET sent='N', remindersent='N', remindercount=0"; $result=$connect->Execute($query) or safe_die ("Couldn't update sent field
$query
".$connect->ErrorMsg()); $tokenoutput .= "
".$clang->gT("Reset token invitation status")."
\n" ."
".$clang->gT("All token entries have been set to 'Not invited'.")."

\n"; $subaction=""; } if ($subaction == "cleartokens" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) ) { $query="UPDATE ".db_table_name("tokens_$surveyid")." SET token=''"; $result=$connect->Execute($query) or safe_die("Couldn't reset the tokens field
$query
".$connect->ErrorMsg()); $tokenoutput .= "
".$clang->gT("Remove unique token numbers")."
\n" ."
".$clang->gT("All unique token numbers have been removed.")."

\n"; $subaction=""; } if (!$subaction && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { $tokenoutput .= "\t
".$clang->gT("Token database administration options")."
\n" ."
\n"; } if ($subaction == "browse" || $subaction == "search") { if (!isset($limit)) {$limit = 100;} if (!isset($start)) {$start = 0;} if ($limit > $tkcount) {$limit=$tkcount;} $next=$start+$limit; $last=$start-$limit; $end=$tkcount-$limit; if ($end < 0) {$end=0;} if ($last <0) {$last=0;} if ($next >= $tkcount) {$next=$tkcount-$limit;} if ($end < 0) {$end=0;} $baselanguage = GetBaseLanguageFromSurveyID($surveyid); //ALLOW SELECTION OF NUMBER OF RECORDS SHOWN $tokenoutput .= "\t\n"; $tokenoutput .= "\n"; //COLUMN HEADINGS $tokenoutput .= "\t\n" ."\n" //Checkbox ."\n" // ID ."\n" //Actions ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n"; $attrfieldnames=GetTokenFieldsAndNames($surveyid,true); foreach ($attrfieldnames as $attr_name=>$attr_translation) { $tokenoutput .= "\n"; } $tokenoutput .="\t\n"; $tokenfieldorder=array('tid', 'firstname', 'lastname', 'email', 'emailstatus', 'token', 'language', 'sent', 'remindersent', 'remindercount', 'completed', 'validfrom', 'validuntil'); foreach ($attrfieldnames as $attr_name=>$attr_translation) { $tokenfieldorder[]=$attr_name; } while ($brow = $bresult->FetchRow()) { $brow['token'] = trim($brow['token']); if (trim($brow['validfrom'])!=''){ $datetimeobj = new Date_Time_Converter($brow['validfrom'] , "Y-m-d H:i:s"); $brow['validfrom']=$datetimeobj->convert($dateformatdetails['phpdate'].' H:i'); }; if (trim($brow['validuntil'])!=''){ $datetimeobj = new Date_Time_Converter($brow['validuntil'] , "Y-m-d H:i:s"); $brow['validuntil']=$datetimeobj->convert($dateformatdetails['phpdate'].' H:i'); }; if ($bgc == "evenrow") {$bgc = "oddrow";} else {$bgc = "evenrow";} $tokenoutput .= "\t\n"; $tokenoutput .= "\n"; foreach ($tokenfieldorder as $tokenfieldname) { if ($tokenfieldname =='email' && $brow['emailstatus'] != 'OK') { if ($brow['emailstatus']!='OptOut') { $tokenoutput .= "\n"; } else { $tokenoutput .= "\n"; } } elseif ($tokenfieldname != 'emailstatus') { if ($tokenfieldname=='tid') { $tokenoutput.=""; } else { $tokenoutput .= "\n"; } } if ($tokenfieldname=='tid') { $tokenoutput .= "\n"; } } $tokenoutput .= "\t\n"; } // Multiple item actions if ($bresult->rowCount() > 0) { $tokenoutput .= "\n" . "\n" . "\n"; $tokenoutput .= "\n"; } //End multiple item actions $tokenoutput .= "
" ."" .""
	.$clang->gT("Sort by: ")
	."ID"."ID".$clang->gT("Actions")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("First name")
	."".$clang->gT("First name")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Last name")
	."".$clang->gT("Last name")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Email address")
	."".$clang->gT("Email address")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Token")
	."".$clang->gT("Token")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Language")
	."".$clang->gT("Language")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Invite sent?")
	."".$clang->gT("Invite sent?")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Reminder sent?")
	."".$clang->gT("Reminder sent?")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Reminder count")
	."".$clang->gT("Reminder count")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Completed?")
	."".$clang->gT("Completed?")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Valid from")
	."".$clang->gT("Valid from")."" ."" .""
	.$clang->gT("Sort by: ")
	.$clang->gT("Valid until")
	."".$clang->gT("Valid until")."" ."" ."".$attr_translation."
" ."" ."$brow[$tokenfieldname]" ."" ."$brow[$tokenfieldname]".$brow[$tokenfieldname]."$brow[$tokenfieldname]\n"; if (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) { if (($brow['completed'] == "N" || $brow['completed'] == "") &&$brow['token']) { $toklang = ($brow['language'] == '') ? $baselanguage : $brow['language']; $tokenoutput .= "\n"; } else { $tokenoutput .= ""; } $tokenoutput .="" ."gT("Are you sure you want to delete this entry?","js")." (".$brow['tid'].")')) {".get2post("$scriptname?action=tokens&sid=$surveyid&subaction=delete&tid=".$brow['tid']."&limit=$limit&start=$start&order=$order")."}\" />"; } if ($brow['completed'] != "N" && $brow['completed']!="" && $surveyprivate == "N" && $thissurvey['active']=='Y') { // Get response Id $query="SELECT id FROM ".db_table_name('survey_'.$surveyid)." WHERE token='{$brow['token']}' ORDER BY id desc"; $result=db_execute_num($query) or safe_die ("
Could not find token!
\n" .$connect->ErrorMsg()); list($id) = $result->FetchRow(); // UPDATE button to the tokens display in the MPID Actions column if ($id) { $tokenoutput .= "\n"; } } elseif ($brow['completed'] == "N" && $brow['token'] && $brow['sent'] == "N" && trim($brow['email'])!='') { $tokenoutput .= ""; } elseif ($brow['completed'] == "N" && $brow['token'] && $brow['sent'] != "N" && trim($brow['email'])!='') // reminder button { $tokenoutput .= ""; } $tokenoutput .= "\n
" . "" . "gT("Are you sure you want to delete the selected entries?","js") ."')) {".get2post("{$scriptname}?action=tokens&sid={$surveyid}&subaction=delete&tids=document.getElementById('tokenboxeschecked').value&limit={$limit}&start={$start}&order={$order}")."}\" />" . " " . "" . " " . "" . "
\n
\n"; } if ($subaction == "kill" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey')) ) { $date = date('YmdHis'); $tokenoutput .= "
".$clang->gT("Delete Tokens Table")."
\n" ."
\n"; // ToDo: Just delete it if there is no token in the table if (!isset($_POST['ok']) || !$_POST['ok']) { $tokenoutput .= "
".$clang->gT("Warning")."

\n" .$clang->gT("If you delete this table tokens will no longer be required to access this survey.")."
".$clang->gT("A backup of this table will be made if you proceed. Your system administrator will be able to access this table.")."
\n" ."( \"old_tokens_{$surveyid}_$date\" )

\n" ."\n" ."\n"; } elseif (isset($_POST['ok']) && $_POST['ok'] == "surething") { $oldtable = "tokens_$surveyid"; $newtable = "old_tokens_{$surveyid}_$date"; $deactivatequery = db_rename_table( db_table_name_nq($oldtable), db_table_name_nq($newtable)); if ($databasetype=='postgres') { // If you deactivate a postgres table you have to rename the according sequence too and alter the id field to point to the changed sequence $oldTableJur = db_table_name_nq($oldtable); $deactivatequery = db_rename_table(db_table_name_nq($oldtable),db_table_name_nq($newtable).'_tid_seq'); $deactivateresult = $connect->Execute($deactivatequery) or die ("oldtable : ".$oldtable. " / oldtableJur : ". $oldTableJur . " / ".htmlspecialchars($deactivatequery)." / Could not rename the old sequence for this token table. The database reported the following error:
".htmlspecialchars($connect->ErrorMsg())."

".$clang->gT("Main Admin Screen").""); $setsequence="ALTER TABLE ".db_table_name_nq($newtable)."_tid_seq ALTER COLUMN tid SET DEFAULT nextval('".db_table_name_nq($newtable)."_tid_seq'::regclass);"; $deactivateresult = $connect->Execute($setsequence) or die (htmlspecialchars($setsequence)." Could not alter the field tid to point to the new sequence name for this token table. The database reported the following error:
".htmlspecialchars($connect->ErrorMsg())."

Survey was not deactivated either.

".$clang->gT("Main Admin Screen").""); $setidx="ALTER INDEX ".db_table_name_nq($oldtable)."_idx RENAME TO ".db_table_name_nq($newtable)."_idx;"; $deactivateresult = $connect->Execute($setidx) or die (htmlspecialchars($setidx)." Could not alter the index for this token table. The database reported the following error:
".htmlspecialchars($connect->ErrorMsg())."

Survey was not deactivated either.

".$clang->gT("Main Admin Screen").""); } else { $deactivateresult = $connect->Execute($deactivatequery) or die ("Couldn't deactivate because:
\n".htmlspecialchars($connect->ErrorMsg())." - Query: ".htmlspecialchars($deactivatequery)."

\nAdmin\n"); } $tokenoutput .= '
'.$clang->gT("The tokens table has now been removed and tokens are no longer required to access this survey.")."
".$clang->gT("A backup of this table has been made and can be accessed by your system administrator.")."
\n" ."(\"{$dbprefix}old_tokens_{$surveyid}_$date\")"."

\n" ."\n"; } $tokenoutput .= "
\n"; } if ($subaction == "email" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { if (getEmailFormat($surveyid) == 'html') { $ishtml=true; } else { $ishtml=false; } $tokenoutput .= PrepareEditorScript(); $tokenoutput .= "\t
" .$clang->gT("Send email invitations")."
\n" ."\t

\n"; if (!isset($_POST['ok']) || !$_POST['ok']) { if ($thissurvey['active']!='Y') { $tokenoutput .="
".$clang->gT('Warning!')."
".$clang->gT("This survey is not yet activated and so your participants won't be able to fill out the survey.")."
"; } $tokenoutput .= "
"; $surveylangs = GetAdditionalLanguagesFromSurveyID($surveyid); $baselang = GetBaseLanguageFromSurveyID($surveyid); array_unshift($surveylangs,$baselang); $tokenoutput .= "
"; foreach ($surveylangs as $language) { //GET SURVEY DETAILS $thissurvey=getSurveyInfo($surveyid,$language); if (!$thissurvey['email_invite']) { if ($ishtml===true) { $thissurvey['email_invite']=html_escape(str_replace("\n", "
", $clang->gT("Dear {FIRSTNAME},\n\nYou have been invited to participate in a survey.\n\nThe survey is titled:\n\"{SURVEYNAME}\"\n\n\"{SURVEYDESCRIPTION}\"\n\nTo participate, please click on the link below.\n\nSincerely,\n\n{ADMINNAME} ({ADMINEMAIL})\n\n----------------------------------------------\nClick here to do the survey:\n{SURVEYURL}",'unescaped')."\n\n".$bplang->gT("If you do not want to participate in this survey and don't want to receive any more invitations please click the following link:\n{OPTOUTURL}",'unescaped'))); } else { $thissurvey['email_invite']=str_replace("\n", "\r\n", $clang->gT("Dear {FIRSTNAME},\n\nYou have been invited to participate in a survey.\n\nThe survey is titled:\n\"{SURVEYNAME}\"\n\n\"{SURVEYDESCRIPTION}\"\n\nTo participate, please click on the link below.\n\nSincerely,\n\n{ADMINNAME} ({ADMINEMAIL})\n\n----------------------------------------------\nClick here to do the survey:\n{SURVEYURL}")."\n\n".$bplang->gT("If you do not want to participate in this survey and don't want to receive any more invitations please click the following link:\n{OPTOUTURL}")); } } if (!$thissurvey['email_invite_subj']) { $thissurvey['email_invite_subj']=$clang->gT("Invitation to participate in survey"); } $fieldsarray["{ADMINNAME}"]= $thissurvey['adminname']; $fieldsarray["{ADMINEMAIL}"]=$thissurvey['adminemail']; $fieldsarray["{SURVEYNAME}"]=$thissurvey['name']; $fieldsarray["{SURVEYDESCRIPTION}"]=$thissurvey['description']; $fieldsarray["{EXPIRY}"]=$thissurvey["expiry"]; $fieldsarray["{EXPIRY-DMY}"]=date("d-m-Y",strtotime($thissurvey["expiry"])); $fieldsarray["{EXPIRY-MDY}"]=date("m-d-Y",strtotime($thissurvey["expiry"])); $subject=Replacefields($thissurvey['email_invite_subj'], $fieldsarray); $textarea=Replacefields($thissurvey['email_invite'], $fieldsarray); if ($ishtml!==true){$textarea=str_replace(array('',''),array(''),$textarea);} $tokenoutput .= '

'.getLanguageNameFromCode($language,false); if ($language==$baselang) { $tokenoutput .= "(".$clang->gT("Base Language").")"; } $tokenoutput .= "

\n"; $tokenoutput .= "\t
    \n" ."
  • \n" ."\" />
  • \n" ."
  • \n" ."
  • \n" ."
  • \n" ."\n" . getEditor("email-inv","message_$language","[".$clang->gT("Invitation Email:", "js")."](".$language.")",$surveyid,'','',$action) ."
  • \n" ."\t
\n"; } $tokenoutput .= "
"; /* if (isset($tokenid)) { $tokenoutput .= "
  • ".$tokenid ."
  • "; } if (isset($tokenids) && count($tokenids) > 0) { $tokenoutput .= "
  • ".implode(", ", $tokenids) ."
  • "; } else { $tokenoutput .= "
  • " .$clang->gT("All tokens who have not yet been sent an invitation") ."
  • "; } */ $tokenoutput .="\t

    \n" ."\t

    \n" ."\t\n" ."\t\n" ."\t\n" ."\t\n"; if (isset($tokenid)) {$tokenoutput .= "\t\n";} if (isset($tokenids)) {$tokenoutput .= "\n\n";} $tokenoutput .= "

    \n"; } else { $tokenoutput .= "
    \n" ."\t
    \n"; $tokenoutput .= $clang->gT("Sending invitations..."); $tokenoutput .= "\n\t
    \n"; if (isset($tokenid)) {$tokenoutput .= " (".$clang->gT("Sending to Token ID").": {$tokenid})";} if (isset($tokenids)) {$tokenoutput .= " (".$clang->gT("Sending to Token IDs").": ".implode(", ", $tokenids).")";} $tokenoutput .= "
    \n"; if (isset($_POST['bypassbademails']) && $_POST['bypassbademails'] == 'Y') { $SQLemailstatuscondition = " AND emailstatus = 'OK'"; } else { $SQLemailstatuscondition = " AND emailstatus <> 'OptOut'"; } $ctquery = "SELECT * FROM ".db_table_name("tokens_{$surveyid}")." WHERE ((completed ='N') or (completed='')) AND ((sent ='N') or (sent='')) AND token !='' AND email != '' $SQLemailstatuscondition"; if (isset($tokenid)) {$ctquery .= " AND tid='{$tokenid}'";} if (isset($tokenids)) {$ctquery .= " AND tid IN ('".implode("', '", $tokenids)."')";} $tokenoutput .= "\n"; $ctresult = $connect->Execute($ctquery) or safe_die("Database error!
    \n" . $connect->ErrorMsg()); $ctcount = $ctresult->RecordCount(); $ctfieldcount = $ctresult->FieldCount(); $emquery = "SELECT * FROM ".db_table_name("tokens_{$surveyid}")." WHERE ((completed ='N') or (completed='')) AND ((sent ='N') or (sent='')) AND token !='' AND email != '' $SQLemailstatuscondition"; if (isset($tokenid)) {$emquery .= " and tid='{$tokenid}'";} if (isset($tokenids)) {$emquery .= " AND tid IN ('".implode("', '", $tokenids)."')";} $tokenoutput .= "\n\n\n\n"; $emresult = db_select_limit_assoc($emquery,$maxemails) or safe_die ("Couldn't do query.
    \n$emquery
    \n".$connect->ErrorMsg()); $emcount = $emresult->RecordCount(); $tokenoutput .= "\n" ."
    ".$clang->gT("Warning")."

    \n" ."
    " .$clang->gT("There are more emails pending than can be sent in one batch. Continue sending emails by clicking below.")."

    \n"; $tokenoutput .= str_replace("{EMAILCOUNT}", "$lefttosend", $clang->gT("There are {EMAILCOUNT} emails still to be sent.")); $tokenoutput .= "

    \n"; $tokenoutput .= "\n" ."\n" ."\n" ."\n" ."\n" ."\n"; foreach ($surveylangs as $language) { $message = html_escape($_POST['message_'.$language]); $subject = html_escape($_POST['subject_'.$language]); $tokenoutput .="\n" ."\n" ."\n"; } $tokenoutput .="
    \n"; } } else { $tokenoutput .= "
    ".$clang->gT("Warning")."
    \n".$clang->gT("There were no eligible emails to send. This will be because none satisfied the criteria of:") ."
     
    • ".$clang->gT("having a valid email address")."
    • " ."
    • ".$clang->gT("not having been sent an invitation already")."
    • " ."
    • ".$clang->gT("having already completed the survey")."
    • " ."
    • ".$clang->gT("having a token")."
    "; } } $tokenoutput .= "
    \n
    \n"; } if ($subaction == "remind" && //XXX (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { $tokenoutput .= PrepareEditorScript(); $tokenoutput .= "\t
    " .$clang->gT("Send email reminder")."

    \n"; if (!isset($_POST['ok']) || !$_POST['ok']) { if ($thissurvey['active']!='Y') { $tokenoutput .="
    ".$clang->gT('Warning!')."
    ".$clang->gT("This survey is not yet activated and so your participants won't be able to fill out the survey.")."
    "; } //GET SURVEY DETAILS $tokenoutput .= "
    "; $surveylangs = GetAdditionalLanguagesFromSurveyID($surveyid); $baselang = GetBaseLanguageFromSurveyID($surveyid); array_unshift($surveylangs,$baselang); $tokenoutput .= "
    "; foreach ($surveylangs as $language) { //GET SURVEY DETAILS $thissurvey=getSurveyInfo($surveyid,$language); if (!$thissurvey['email_remind']) {$thissurvey['email_remind']=str_replace("\n", "\r\n", $clang->gT("Dear {FIRSTNAME},\n\nRecently we invited you to participate in a survey.\n\nWe note that you have not yet completed the survey, and wish to remind you that the survey is still available should you wish to take part.\n\nThe survey is titled:\n\"{SURVEYNAME}\"\n\n\"{SURVEYDESCRIPTION}\"\n\nTo participate, please click on the link below.\n\nSincerely,\n\n{ADMINNAME} ({ADMINEMAIL})\n\n----------------------------------------------\nClick here to do the survey:\n{SURVEYURL}")."\n\n".$bplang->gT("If you do not want to participate in this survey and don't want to receive any more invitations please click the following link:\n{OPTOUTURL}"));} $tokenoutput .= '

    '.getLanguageNameFromCode($language,false); if ($language==$baselang) { $tokenoutput .= "(".$clang->gT("Base Language").")"; } $tokenoutput .= "

      \n" ."
    • \n" ."\" />
    • \n" ."
    • \n"; $fieldsarray["{ADMINNAME}"]= $thissurvey['adminname']; $fieldsarray["{ADMINEMAIL}"]=$thissurvey['adminemail']; $fieldsarray["{SURVEYNAME}"]=$thissurvey['name']; $fieldsarray["{SURVEYDESCRIPTION}"]=$thissurvey['description']; $fieldsarray["{EXPIRY}"]=$thissurvey["expiry"]; $fieldsarray["{EXPIRY-DMY}"]=date("d-m-Y",strtotime($thissurvey["expiry"])); $fieldsarray["{EXPIRY-MDY}"]=date("m-d-Y",strtotime($thissurvey["expiry"])); $subject=Replacefields($thissurvey['email_remind_subj'], $fieldsarray); $textarea=Replacefields($thissurvey['email_remind'], $fieldsarray); if ($ishtml!==true){$textarea=str_replace(array('',''),array(''),$textarea);} $tokenoutput .= "
    • \n"; $tokenoutput .= "\t
    • \n" ."\n" ."\n" . getEditor("email-rem","message_$language","[".$clang->gT("Reminder Email:", "js")."](".$language.")",$surveyid,'','',$action) ."
    • \n" ."
    "; } $tokenoutput .= "

    \n" ."\n" ."\t\n" ."\t\n" ."\t\n"; if (isset($tokenid)) {$tokenoutput .= "\t\n";} if (isset($tokenids)) {$tokenoutput .= "\n\n";} $tokenoutput .= "

    \n"; } else { $tokenoutput .= "
    \n" . "
    "; $tokenoutput .= $clang->gT("Sending Reminders") ."

    \n"; $surveylangs = GetAdditionalLanguagesFromSurveyID($surveyid); $baselanguage = GetBaseLanguageFromSurveyID($surveyid); array_unshift($surveylangs,$baselanguage); foreach ($surveylangs as $language) { $_POST['message_'.$language]=auto_unescape($_POST['message_'.$language]); $_POST['subject_'.$language]=auto_unescape($_POST['subject_'.$language]); } if (isset($starttokenid)) {$tokenoutput .= " (".$clang->gT("From Token ID").": {$starttokenid})";} if (isset($tokenid)) {$tokenoutput .= " (".$clang->gT("Sending to Token ID").": {$tokenid})";} if (isset($tokenids)) {$tokenoutput .= " (".$clang->gT("Sending to Token IDs").": ".implode("|", $tokenids).")";} if (isset($_POST['bypassbademails']) && $_POST['bypassbademails'] == 'Y') { $SQLemailstatuscondition = " AND emailstatus = 'OK'"; } else { $SQLemailstatuscondition = ""; } if (isset($_POST['maxremindercount']) && $_POST['maxremindercount'] != '' && intval($_POST['maxremindercount']) != 0) { $SQLremindercountcondition = " AND remindercount < ".intval($_POST['maxremindercount']); } else { $SQLremindercountcondition = ""; } if (isset($_POST['minreminderdelay']) && $_POST['minreminderdelay'] != '' && intval($_POST['minreminderdelay']) != 0) { // $_POST['minreminderdelay'] in days (86400 seconds per day) $compareddate = date_shift( date("Y-m-d H:i:s",time() - 86400 * intval($_POST['minreminderdelay'])), "Y-m-d H:i", $timeadjust); $SQLreminderdelaycondition = " AND ( " . " (remindersent = 'N' AND sent < '".$compareddate."') " . " OR " . " (remindersent < '".$compareddate."'))"; } else { $SQLreminderdelaycondition = ""; } $ctquery = "SELECT * FROM ".db_table_name("tokens_{$surveyid}")." WHERE (completed ='N' or completed ='') AND sent<>'' AND sent<>'N' AND token <>'' AND email <> '' $SQLemailstatuscondition $SQLremindercountcondition $SQLreminderdelaycondition"; if (isset($starttokenid)) {$ctquery .= " AND tid > '{$starttokenid}'";} if (isset($tokenid) && $tokenid) {$ctquery .= " AND tid = '{$tokenid}'";} if (isset($tokenids)) {$ctquery .= " AND tid IN (".implode(", ", $tokenids).")";} $tokenoutput .= "\n"; $ctresult = $connect->Execute($ctquery) or safe_die ("Database error!
    \n" . $connect->ErrorMsg()); $ctcount = $ctresult->RecordCount(); $ctfieldcount = $ctresult->FieldCount(); $emquery = "SELECT * FROM ".db_table_name("tokens_{$surveyid}")." WHERE (completed = 'N' or completed = '') AND sent <> 'N' and sent <>'' AND token <>'' AND EMAIL <>'' $SQLemailstatuscondition $SQLremindercountcondition $SQLreminderdelaycondition"; if (isset($starttokenid)) {$emquery .= " AND tid > '{$starttokenid}'";} if (isset($tokenid) && $tokenid) {$emquery .= " AND tid = '{$tokenid}'";} if (isset($tokenids)) {$emquery .= " AND tid IN (".implode(", ", $tokenids).")";} $emquery .= " ORDER BY tid "; $emresult = db_select_limit_assoc($emquery, $maxemails) or safe_die ("Couldn't do query.
    $emquery
    ".$connect->ErrorMsg()); $emcount = $emresult->RecordCount(); $tokenoutput .= "\n" ."\t\n" ."\n" ."\t\n" ."\t" ."\n" ."\t\n" ."\t\n" ."\t\n" ."\t\n" ."\t\n"; //Include values for constraints minreminderdelay and maxremindercount if they exist if (isset($_POST['minreminderdelay']) && $_POST['minreminderdelay'] != '' && intval($_POST['minreminderdelay']) != 0) { $tokenoutput .= "\t\n"; } if (isset($_POST['maxremindercount']) && $_POST['maxremindercount'] != '' && intval($_POST['maxremindercount']) != 0) { $tokenoutput .= "\t\n"; } // foreach ($surveylangs as $language) { $message = html_escape($_POST['message_'.$language]); $tokenoutput .="\n" ."\n" ."\n"; } $tokenoutput.="\t\n" ."\t\n"; } } else { $tokenoutput .= "
    ".$clang->gT("Warning")."
    \n" .$clang->gT("There were no eligible emails to send. This will be because none satisfied the criteria of - having an email address, having been sent an invitation, but not having yet completed the survey.")."\n" ."

    \n" ."\n"; } $tokenoutput .= "\t
    \n" ."
    \n"; $attributes=GetTokenFieldsAndNames($surveyid); if ($emcount > 0) { while ($emrow = $emresult->FetchRow()) { unset($fieldsarray); $to = $emrow['email']; $fieldsarray["{EMAIL}"]=$emrow['email']; $fieldsarray["{FIRSTNAME}"]=$emrow['firstname']; $fieldsarray["{LASTNAME}"]=$emrow['lastname']; $fieldsarray["{TOKEN}"]=$emrow['token']; $fieldsarray["{LANGUAGE}"]=$emrow['language']; foreach ($attributes as $attributefield=>$attributedescription) { $fieldsarray['{'.strtoupper($attributefield).'}']=$emrow[$attributefield]; } $emrow['language']=trim($emrow['language']); if ($emrow['language']=='') {$emrow['language']=$baselanguage;} //if language is not give use default $found = array_search($emrow['language'], $surveylangs); if ($found==false) {$emrow['language']=$baselanguage;} $from = $_POST['from_'.$emrow['language']]; if (getEmailFormat($surveyid) == 'html') { $ishtml=true; } else { $ishtml=false; } if ($ishtml == false) { $fieldsarray["{OPTOUTURL}"]="$publicurl/optout.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}"; if ( $modrewrite ) { $fieldsarray["{SURVEYURL}"]="$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}"; } else { $fieldsarray["{SURVEYURL}"]="$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}"; } } else { $fieldsarray["{OPTOUTURL}"]="".htmlspecialchars("$publicurl/optout.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}").""; if ( $modrewrite ) { $fieldsarray["{SURVEYURL}"]="".htmlspecialchars("$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}").""; $fieldsarray["@@SURVEYURL@@"]="$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}"; } else { $fieldsarray["{SURVEYURL}"]="".htmlspecialchars("$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}").""; $fieldsarray["@@SURVEYURL@@"]="$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}"; $_POST['message_'.$emrow['language']] = html_entity_decode($_POST['message_'.$emrow['language']], ENT_QUOTES, $emailcharset); } } $msgsubject=Replacefields($_POST['subject_'.$emrow['language']], $fieldsarray); $sendmessage=Replacefields($_POST['message_'.$emrow['language']], $fieldsarray); if (trim($emrow['validfrom'])!='' && convertDateTimeFormat($emrow['validfrom'],'Y-m-d H:i:s','U')*1>date('U')*1) { $tokenoutput .= $emrow['tid'] ." ".ReplaceFields($clang->gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) delayed: Token is not yet valid.")."
    ", $fieldsarray); } elseif (trim($emrow['validuntil'])!='' && convertDateTimeFormat($emrow['validuntil'],'Y-m-d H:i:s','U')*1gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) skipped: Token is not valid anymore.")."
    ", $fieldsarray); } elseif (SendEmailMessage($sendmessage, $msgsubject, $to, $from, $sitename,$ishtml,getBounceEmail($surveyid))) { // Put date into remindersent $today = date_shift(date("Y-m-d H:i:s"), "Y-m-d H:i", $timeadjust); $udequery = "UPDATE ".db_table_name("tokens_{$surveyid}")."\n" ."SET remindersent='$today',remindercount = remindercount+1 WHERE tid={$emrow['tid']}"; // $uderesult = $connect->Execute($udequery) or safe_die ("Could not update tokens
    $udequery
    ".$connect->ErrorMsg()); //orig: $tokenoutput .= "({$emrow['tid']})[".$clang->gT("Reminder sent to:")." {$emrow['firstname']} {$emrow['lastname']}]
    \n"; $tokenoutput .= "({$emrow['tid']}) [".$clang->gT("Reminder sent to:")." {$emrow['firstname']} {$emrow['lastname']} ($to)]
    \n"; } else { $tokenoutput .= $emrow['tid'] ." ".ReplaceFields($clang->gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) failed. Error Message:")." ".$maildebug."
    ", $fieldsarray); if ($debug>0) { $tokenoutput .= "
    Subject : $msgsubject

    ".htmlspecialchars($maildebugbody)."
    "; } } $lasttid = $emrow['tid']; } if ($ctcount > $emcount) { $lefttosend = $ctcount-$maxemails; $tokenoutput .= "
    \n" ."".$clang->gT("Warning")."

    \n" .$clang->gT("There are more emails pending than can be sent in one batch. Continue sending emails by clicking below.")."

    \n" .str_replace("{EMAILCOUNT}", $lefttosend, $clang->gT("There are {EMAILCOUNT} emails still to be sent.")) ."
    \n" ."\n" ."
    \n"; $tokenoutput .= "
    \n"; } } if ($subaction == "tokenify" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { $tokenoutput .= "
    ".$clang->gT("Create tokens")."
    \n"; $tokenoutput .= "
    \n"; if (!isset($_POST['ok']) || !$_POST['ok']) { $tokenoutput .= "".$clang->gT("Clicking yes will generate tokens for all those in this token list that have not been issued one. Is this OK?")."

    \n" ."\n" .$clang->gT("Yes")."' onclick=\"".get2post("$scriptname?action=tokens&sid=$surveyid&subaction=tokenify&ok=Y")."\" />\n" ."\n" ."
    \n"; } else { //get token length from survey settings $tlquery = "SELECT tokenlength FROM ".db_table_name("surveys")." WHERE sid=$surveyid"; $tlresult = db_execute_assoc($tlquery); while ($tlrow = $tlresult->FetchRow()) { $tokenlength = $tlrow['tokenlength']; } //if tokenlength is not set or there are other problems use the default value (15) if(!isset($tokenlength) || $tokenlength == '') { $tokenlength = 15; } // select all existing tokens $ntquery = "SELECT token FROM ".db_table_name("tokens_$surveyid")." group by token"; $ntresult = db_execute_assoc($ntquery); while ($tkrow = $ntresult->FetchRow()) { $existingtokens[$tkrow['token']]=null; } $newtokencount = 0; $tkquery = "SELECT tid FROM ".db_table_name("tokens_$surveyid")." WHERE token IS NULL OR token=''"; $tkresult = db_execute_assoc($tkquery) or safe_die ("Mucked up!
    $tkquery
    ".$connect->ErrorMsg()); while ($tkrow = $tkresult->FetchRow()) { $isvalidtoken = false; while ($isvalidtoken == false) { $newtoken = randomkey($tokenlength); if (!isset($existingtokens[$newtoken])) { $isvalidtoken = true; $existingtokens[$newtoken]=null; } } $itquery = "UPDATE ".db_table_name("tokens_$surveyid")." SET token='$newtoken' WHERE tid={$tkrow['tid']}"; $itresult = $connect->Execute($itquery); $newtokencount++; } $message=str_replace("{TOKENCOUNT}", $newtokencount, $clang->gT("{TOKENCOUNT} tokens have been created")); $tokenoutput .= "
    $message
    \n"; } $tokenoutput .= "
    \n"; } if ($subaction == "delete" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { $tokenoutput .= "
    \n" ."\t
    " .$clang->gT("Delete") ."\t
    \n" ."\t


    "; if(isset($tokenids) && count($tokenids)>0) { if(implode(", ", $tokenids) != "") { $dlquery = "DELETE FROM ".db_table_name("tokens_$surveyid")." WHERE tid IN (".implode(", ", $tokenids).")"; $dlresult = $connect->Execute($dlquery) or safe_die ("Couldn't delete record {$tokenid}
    ".$connect->ErrorMsg()."\n\n$dlquery"); $tokenoutput .= $clang->gT("Marked tokens have been deleted."); } else { $tokenoutput .= $clang->gT("No tokens were selected for deletion"); } } elseif (isset($tokenid)) { $dlquery = "DELETE FROM ".db_table_name("tokens_$surveyid")." WHERE tid={$tokenid}"; $dlresult = $connect->Execute($dlquery) or safe_die ("Couldn't delete record {$tokenid}
    ".$connect->ErrorMsg()); $tokenoutput .= $clang->gT("Token has been deleted."); } $tokenoutput .= "

    ".$clang->gT("Reloading Screen. Please wait.")."

    \n" ."

    \n
    \n"; } if ($subaction == "managetokenattributes" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { $tokenoutput .= "
    ".$clang->gT("Manage token attribute fields")."
    \n"; $tokenfields=GetTokenFieldsAndNames($surveyid,true); $nrofattributes=0; $tokenoutput.='
    ' .""; $exampledataquery = "SELECT * FROM ".db_table_name("tokens_$surveyid"); $exampledata = db_select_limit_assoc($exampledataquery,1) or safe_die ("Could not get example data!
    $exampledataquery
    ".$connect->ErrorMsg()); $examplerow = $exampledata->FetchRow(); foreach ($tokenfields as $tokenfield=>$tokendescription) { $nrofattributes++; $tokenoutput.=""; } $tokenoutput.="
    ".$clang->gT("Attribute field")."".$clang->gT("Field description")."".$clang->gT("Example data")."
    $tokenfield"; if ($examplerow!==false) { $tokenoutput.=htmlspecialchars($examplerow[$tokenfield]); } else { $tokenoutput.=$clang->gT(''); } $tokenoutput.="

    " .'' ."\n" ."\n" ."

    \n" .'


    '; $tokenoutput .= "
    ".$clang->gT("Add token attributes")."

    \n"; $tokenoutput .=sprintf($clang->gT('There are %s user attribute fields in this token table'),$nrofattributes).'

    ' .'
    ' .'

    ' .'' .'' .'

    ' .'

    ' .'' ."" ."" ."" ."

    " .'
    ' .'

    '; } if ($subaction == "updatetokenattributedescriptions" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { // find out the existing token attribute fieldnames $tokenattributefieldnames=GetAttributeFieldNames($surveyid); $fieldcontents=''; foreach ($tokenattributefieldnames as $fieldname) { $fieldcontents.=$fieldname.'='.strip_tags($_POST['description_'.$fieldname])."\n"; } $updatequery = "update ".db_table_name('surveys').' set attributedescriptions='.db_quoteall($fieldcontents,true)." where sid=$surveyid"; $execresult=db_execute_assoc($updatequery); $tokenoutput .= "\t
    ".$clang->gT("Update token attribute descriptions")."
    \n" ."\t
    "; if ($execresult===false) { $tokenoutput.="\t\t
    ".$clang->gT("Updating token attribute descriptions failed:")."".htmlspecialchars($connect->ErrorMsg())."
    " ."\t\t
    \n"; } else { $tokenoutput.="\t\t
    ".$clang->gT("Token attribute descriptions were successfully updated.")."
    " ."\t\t
    \n"; } $tokenoutput .= "\t
    "; } if ($subaction == "updatetokenattributes" && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey') )) { $number2add=sanitize_int($_POST['addnumber'],1,100); // find out the existing token attribute fieldnames $tokenfieldnames = array_values($connect->MetaColumnNames("{$dbprefix}tokens_$surveyid", true)); $tokenattributefieldnames=array_filter($tokenfieldnames,'filterforattributes'); $i=1; for ($b=0;$b<$number2add;$b++) { while (in_array('attribute_'.$i,$tokenattributefieldnames)!==false) { $i++; } $tokenattributefieldnames[]='attribute_'.$i; $fields[]=array('attribute_'.$i,'C','255'); } $dict = NewDataDictionary($connect); $sqlarray = $dict->ChangeTableSQL("{$dbprefix}tokens_$surveyid", $fields); $execresult=$dict->ExecuteSQLArray($sqlarray, false); $tokenoutput .= "\t
    ".$clang->gT("Update token attributes")."
    \n" ."\t
    "; if ($execresult==0) { $tokenoutput.="\t\t
    ".$clang->gT("Adding attribute fields failed:")."".htmlspecialchars($connect->ErrorMsg())."
    " ."\t\t
    \n"; } else { $tokenoutput.="\t\t
    ".sprintf($clang->gT("%s field(s) were successfully added."),$number2add)."
    " ."\t\t
    \n"; } $tokenoutput .= "\t
    "; } if (($subaction == "edit" || $subaction == "addnew") && (bHasRight($surveyid, 'edit_survey_property') || bHasRight($surveyid, 'activate_survey'))) { if ($subaction == "edit") { $edquery = "SELECT * FROM ".db_table_name("tokens_$surveyid")." WHERE tid={$tokenid}"; $edresult = db_execute_assoc($edquery); $edfieldcount = $edresult->FieldCount(); while($edrow = $edresult->FetchRow()) { //Create variables with the same names as the database column names and fill in the value foreach ($edrow as $Key=>$Value) {$$Key = $Value;} } } if ($subaction != "edit") { $edquery = "SELECT * FROM ".db_table_name("tokens_$surveyid"); $edresult = db_select_limit_assoc($edquery, 1); $edfieldcount = $edresult->FieldCount(); } $tokenoutput .= "
    "; if ($subaction == "edit") { $tokenoutput .=$clang->gT("Edit token entry"); } else { $tokenoutput .=$clang->gT("Add token entry"); } $tokenoutput .="
    " ."
    \n" ."
    \n" . "

    \n" . "\n" . "\n" . "

    \n\n"; } # END form function formldap($error=false) { global $surveyid, $tokenoutput, $ldap_queries, $clang, $scriptname; if ($error) {$tokenoutput .= $error . "

    \n";} if (!function_exists('ldap_connect')) { $tokenoutput .= '

    '; $tokenoutput .= $clang->gT('Sorry, but the LDAP module is missing in your PHP configuration.'); $tokenoutput .= '
    '; } elseif (! isset($ldap_queries) || ! is_array($ldap_queries) || count($ldap_queries) == 0) { $tokenoutput .= '
    '; $tokenoutput .= $clang->gT('LDAP is disabled or no LDAP query defined.'); $tokenoutput .= '


    '; } else { $tokenoutput .= "

    "; $tokenoutput .= '

    '; $tokenoutput .= $clang->gT("Select the LDAP query you want to run:")."
    "; $tokenoutput .= "
    "; $tokenoutput .= '

    '; $tokenoutput .= "

    \n" . "

    \n"; $tokenoutput .= ""; $tokenoutput .= ""; $tokenoutput .= "

    "; $tokenoutput .= '
    '; } } function getLine($file) { $buffer=""; // iterate over each character in line. while (!feof($file)) { // append the character to the buffer. $character = fgetc($file); $buffer .= $character; // check for end of line. if (($character == "\n") or ($character == "\r")) { // checks if the next character is part of the line ending, as in // the case of windows '\r\n' files, or not as in the case of // mac classic '\r', and unix/os x '\n' files. $character = fgetc($file); if ($character == "\n") { // part of line ending, append to buffer. $buffer .= $character; } else { // not part of line ending, roll back file pointer. fseek($file, -1, SEEK_CUR); } // end of line, so stop reading. break; } } // return the line buffer. return $buffer; } ?>