/sondage/admin/remotecontrol/lsrc.helper.php
PHP | 2460 lines | 1837 code | 257 blank | 366 comment | 219 complexity | c7a88cb41d6052a07b3daa35dad8658a MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0, LGPL-2.1, GPL-3.0, BSD-3-Clause, GPL-2.0
Large files files are truncated, but you can click here to view the full file
- <?php
- /*
- * LimeSurvey
- * Copyright (C) 2007 The LimeSurvey Project Team / Carsten Schmitz
- * All rights reserved.
- * License: GNU/GPL License v2 or later, see LICENSE.php
- * LimeSurvey is free software. This version may have been modified pursuant
- * to the GNU General Public License, and as distributed it includes or
- * is derivative of works licensed under the GNU General Public License or
- * other free or open source software licenses.
- * See COPYRIGHT.php for copyright notices and details.
- *
- * $Id: lsrc.helper.php 9656 2011-01-07 20:48:39Z c_schmitz $
- *
- */
- /**
- * @author Wahrendorff
- *
- */
- class LsrcHelper {
-
- /**
- * simple debug function to make life a bit easier
- *
- * @param string $text
- */
- function debugLsrc($text)
- {
- include("lsrc.config.php");
- if($lsrcDebug)
- {
- error_log("\n".date("Y-m-d H:i:s")." ".$text, 3 , $lsrcDebugLog);
- }
- return;
- }
-
- /**
- * function to get the id of the surveyowner
- *
- * @param unknown_type $iVid
- * @return unknown
- */
- function getSurveyOwner($iVid)
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- //$this= new LsrcHelper();
- if($this->surveyExists($iVid))
- {
- $query2num = "SELECT owner_id FROM {$dbprefix}surveys WHERE sid=".sanitize_int($iVid)."";
- $rs = db_execute_assoc($query2num);
- $field=$rs->FetchRow();
- return $field['owner_id'];
-
- }else{return false;}
- }
-
- /**
- * This function changes data in LS-DB, its very sensitive, because every table can be changed.
- *
- * @param unknown_type $table
- * @param unknown_type $key
- * @param unknown_type $value
- * @param unknown_type $where
- * @return String
- */
- function changeTable($table, $key, $value, $where, $mode='0')//XXX
- {//be aware that this function may be a security risk
-
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- if($mode=='' || !isset($mode) || $mode=='0')
- {
- $where = str_replace("\\","",$where);
- $query2num = "SELECT {$key} FROM {$dbprefix}{$table} WHERE {$where}";
- $rs = db_execute_assoc($query2num);
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ($query2num)");
-
- $query2update = "update ".$dbprefix.$table." set ".$key."='".$value."' where ".$where."";
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ($query2update)");
-
- if($connect->Execute($query2update)){
- return $rs->RecordCount()." Rows changed";
- }
- else{
- return "nothing changed";
- }
- }
- if($mode==1 || $mode=='1')
- {
- $query2insert = "INSERT INTO {$dbprefix}{$table} ({$key}) VALUES ({$value});";
- $this->debugLsrc("wir sind in Line ".__LINE__.", inserting ($query2insert)");
- if($connect->Execute($query2insert))
- {
- $this->debugLsrc("wir sind in Line ".__LINE__.", inserting OK");
- return true;
-
- }
- else
- {
- return false;
- }
- }
-
-
- }
-
- /**
- *
- * Enter description here...
- * @param $surveyid
- * @param $type
- * @param $maxLsrcEmails
- * @return unknown_type
- */
- function emailSender($surveyid, $type, $maxLsrcEmails='') //XXX
- {
- global $publicurl,$maxemails;
- global $connect,$sitename ;
- global $dbprefix ;
- $surveyid = sanitize_int($surveyid);
- include("lsrc.config.php");
-
-
-
- // wenn maxmails ber den lsrc gegeben wird das nutzen, ansonsten die default werte aus der config.php
- if($maxLsrcEmails!='')
- $maxemails = $maxLsrcEmails;
-
- switch ($type){
- case "custom":
-
- break;
- case "invite":
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START invite ");
-
-
-
- if(isset($surveyid) && getEmailFormat($surveyid) == 'html')
- {
- $ishtml=true;
- }
- else
- {
- $ishtml=false;
- }
-
- //$tokenoutput .= ("Sending Invitations");
- //if (isset($tokenid)) {$tokenoutput .= " (".("Sending to Token ID").": {$tokenid})";}
- //$tokenoutput .= "\n";
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", $surveyid, $type");
- // Texte für Mails aus der Datenbank holen und in die POST Dinger schreiben. Nicht schön aber praktikabel
-
- $sql = "SELECT surveyls_language, surveyls_email_invite_subj, surveyls_email_invite ".
- "FROM {$dbprefix}surveys_languagesettings ".
- "WHERE surveyls_survey_id = ".$surveyid." ";
-
- //GET SURVEY DETAILS
- $thissurvey=getSurveyInfo($surveyid);
-
- // $connect->SetFetchMode(ADODB_FETCH_ASSOC);
- // $sqlResult=$connect->Execute($sql);
- $sqlResult = db_execute_assoc($sql);
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
-
- while($languageRow = $sqlResult->FetchRow())
- {
- $_POST['message_'.$languageRow['surveyls_language']] = $languageRow['surveyls_email_invite'];
- $_POST['subject_'.$languageRow['surveyls_language']] = $languageRow['surveyls_email_invite_subj'];
- }
-
- // if (isset($_POST['bypassbademails']) && $_POST['bypassbademails'] == 'Y')
- // {
- // $SQLemailstatuscondition = " AND emailstatus = 'OK'";
- // }
- // else
- // {
- // $SQLemailstatuscondition = "";
- // }
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
- $ctquery = "SELECT * FROM ".db_table_name("tokens_{$surveyid}")." WHERE ((completed ='N') or (completed='')) AND ((sent ='N') or (sent='')) AND emailstatus = 'OK' ";
-
- if (isset($tokenid)) {$ctquery .= " AND tid='{$tokenid}'";}
- //$tokenoutput .= "<!-- ctquery: $ctquery -->\n";
- $ctresult = $connect->Execute($ctquery);
- $ctcount = $ctresult->RecordCount();
- $ctfieldcount = $ctresult->FieldCount();
-
- $emquery = "SELECT * ";
- //if ($ctfieldcount > 7) {$emquery .= ", attribute_1, attribute_2";}
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
-
- $emquery .= " FROM ".db_table_name("tokens_{$surveyid}")." WHERE ((completed ='N') or (completed='')) AND ((sent ='N') or (sent='')) AND emailstatus = 'OK' ";
-
- if (isset($tokenid)) {$emquery .= " and tid='{$tokenid}'";}
- //$tokenoutput .= "\n\n<!-- emquery: $emquery -->\n\n";
- $emresult = db_select_limit_assoc($emquery,$maxemails);
- $emcount = $emresult->RecordCount();
-
- //$tokenoutput .= "<table width='500px' align='center' >\n"
- ////."\t<tr>\n"
- //."\t\t<td><font size='1'>\n";
-
- $surveylangs = GetAdditionalLanguagesFromSurveyID($surveyid);
- $baselanguage = GetBaseLanguageFromSurveyID($surveyid);
- array_unshift($surveylangs,$baselanguage);
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
-
- foreach ($surveylangs as $language)
- {
- $_POST['message_'.$language]=auto_unescape($_POST['message_'.$language]);
- $_POST['subject_'.$language]=auto_unescape($_POST['subject_'.$language]);
- if ($ishtml) $_POST['message_'.$language] = html_entity_decode($_POST['message_'.$language], ENT_QUOTES, $emailcharset);
-
- }
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
- if ($emcount > 0)
- {
- $mailsSend = 0;
- while ($emrow = $emresult->FetchRow())
- {
- $c=1;
- 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'];
- while(isset($emrow["attribute_$c"]))
- {
- $fieldsarray["{ATTRIBUTE_$c}"]=$emrow["attribute_$c"];
- ++$c;
- }
- $fieldsarray["{ADMINNAME}"]= $thissurvey['adminname'];
- $fieldsarray["{ADMINEMAIL}"]=$thissurvey['adminemail'];
- $fieldsarray["{SURVEYNAME}"]=$thissurvey['name'];
- $fieldsarray["{SURVEYDESCRIPTION}"]=$thissurvey['description'];
- $fieldsarray["{EXPIRY}"]=$thissurvey["expiry"];
-
- $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 = $thissurvey['adminemail'];
-
-
- if ($ishtml === false)
- {
- 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
- {
- if ( $modrewrite )
- {
- $fieldsarray["{SURVEYURL}"]="<a href='$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}'>".htmlspecialchars("$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}")."</a>";
- }
- else
- {
- $fieldsarray["{SURVEYURL}"]="<a href='$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}'>".htmlspecialchars("$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}")."</a>";
- }
- }
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
- $modsubject=Replacefields($_POST['subject_'.$emrow['language']], $fieldsarray);
- $modmessage=Replacefields($_POST['message_'.$emrow['language']], $fieldsarray);
-
- if (SendEmailMessage($modmessage, $modsubject, $to , $from, $sitename, $ishtml, getBounceEmail($surveyid)))
- {
- // Put date into sent
- //$timeadjust = 0;
- $today = date("Y-m-d H:i");
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite Today:".$today);
- $udequery = "UPDATE ".db_table_name("tokens_{$surveyid}")."\n"
- ."SET sent='$today' WHERE tid={$emrow['tid']}";
- //
- $uderesult = $connect->Execute($udequery);
- $mailsSend++;
- //$tokenoutput .= "[".("Invitation sent to:")."{$emrow['firstname']} {$emrow['lastname']} ($to)]\n";
- }
- else
- {
- //$tokenoutput .= ReplaceFields(("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) failed. Error Message:")." ".$maildebug."", $fieldsarray);
- if($n==1)
- $failedAddresses .= ",".$to;
- else
- {
- $failedAddresses = $to;
- $n=1;
- }
- }
- }
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
- if ($ctcount > $emcount)
- {
- $lefttosend = $ctcount-$maxemails;
-
- }else{$lefttosend = 0;}
- }
- else
- {
- return "No Mails to send";
- }
-
- if($maxemails>0 && $maxemails!='')
- {
- $returnValue = "".$mailsSend." Mails send. ".$lefttosend." Mails left to send";
- if(isset($failedAddresses))
- $returnValue .= "\nCould not send to: ".$failedAddresses;
- return $returnValue;
- }
-
- if(isset($mailsSend))
- {
- $returnValue = "".$mailsSend." Mails send. ";
- if(isset($failedAddresses))
- $returnValue .= "\nCould not send to: ".$failedAddresses;
- return $returnValue;
- }
-
-
-
-
- break;
- case "remind":
- // XXX:
- // TODO:
- // if (!isset($_POST['ok']) || !$_POST['ok'])
- // {
-
- /*
- * look if there were reminders send in the past, and if some tokens got lesser reminders than others
- *
- * - if so: send reminders to the unremindet participants until they got the same remindcount than the others
- * - if not: send reminders normally
- */
-
- $remSQL = "SELECT tid, remindercount "
- . "FROM ".db_table_name("tokens_{$surveyid}")." "
- . "WHERE (completed = 'N' or completed = '') AND sent <> 'N' and sent <>'' AND token <>'' AND EMAIL <>'' "
- . "ORDER BY remindercount desc LIMIT 1";
-
- $this->debugLsrc("Executing SQL: ".$remSQL);
-
- $remResult = db_execute_assoc($remSQL);
- $remRow = $remResult->FetchRow();
-
- /* Get the reminder count from the row, if we have a row. If
- * we don't have a row then we set reminderCount to 0 to prevent
- * queries down below from bombing out. */
- $reminderCount = $remRow['remindercount'];
- if(empty($reminderCount)) {
- $this->debugLsrc("There are no reminders to send.");
- $reminderCount = 0;
- }
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", remind ".$remRow['tid']."; ".$reminderCount." ");
-
- $sendOnlySQL = "SELECT tid, remindercount "
- . "FROM ".db_table_name("tokens_{$surveyid}")." "
- . "WHERE (completed = 'N' or completed = '') AND sent <> 'N' and sent <>'' AND token <>'' AND EMAIL <>'' AND remindercount < ".$reminderCount." "
- . "ORDER BY tid asc LIMIT 1";
-
- $this->debugLsrc("Executing SQL: ".$sendOnlySQL);
-
- if($sendOnlyResult->RecordCount()>0)
- {
- $sendOnlyRow = $sendOnlyResult->FetchRow();
- $starttokenid = $sendOnlyRow['tid'];
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", remind ".$sendOnlyRow['tid']."; ".$sendOnlyRow['remindercount']." ");
- }
-
- if(isset($surveyid) && getEmailFormat($surveyid) == 'html')
- {
- $ishtml=true;
- }
- else
- {
- $ishtml=false;
- }
-
- //GET SURVEY DETAILS
- $thissurvey=getSurveyInfo($surveyid);
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", $surveyid, $type");
- // Texte für Mails aus der Datenbank holen.
-
- $sql = "SELECT surveyls_language, surveyls_email_remind_subj, surveyls_email_remind ".
- "FROM {$dbprefix}surveys_languagesettings ".
- "WHERE surveyls_survey_id = ".$surveyid." ";
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", invite ");
-
- $sqlResult = db_execute_assoc($sql);
-
- while($languageRow = $sqlResult->FetchRow())
- {
- $_POST['message_'.$languageRow['surveyls_language']] = $languageRow['surveyls_email_remind'];
- $_POST['subject_'.$languageRow['surveyls_language']] = $languageRow['surveyls_email_remind_subj'];
- }
-
- //$tokenoutput .= ("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]);
-
- }
-
- $SQLemailstatuscondition = " AND emailstatus = 'OK'";
-
- 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}'";}
- // //$tokenoutput .= "<!-- ctquery: $ctquery -->\n";
-
- $ctresult = $connect->Execute($ctquery) or $this->debugLsrc ("Database error!\n" . $connect->ErrorMsg());
- $ctcount = $ctresult->RecordCount();
- $ctfieldcount = $ctresult->FieldCount();
- $emquery = "SELECT * ";
- //if ($ctfieldcount > 7) {$emquery .= ", attribute_1, attribute_2";}
-
- // TLR change to put date into sent
- $emquery .= " 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}'";}
- $emquery .= " ORDER BY tid ";
- $emresult = db_select_limit_assoc($emquery, $maxemails);
- //$emresult = db_execute_assoc($emquery);
- $emcount = $emresult->RecordCount();
-
- if ($emcount > 0)
- {
- while ($emrow = $emresult->FetchRow())
- {
- $c=1;
- 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'];
- while(isset($emrow["attribute_$c"]))
- {
- $fieldsarray["{ATTRIBUTE_$c}"]=$emrow["attribute_$c"];
- ++$c;
- }
-
- $fieldsarray["{ADMINNAME}"]= $thissurvey['adminname'];
- $fieldsarray["{ADMINEMAIL}"]=$thissurvey['adminemail'];
- $fieldsarray["{SURVEYNAME}"]=$thissurvey['name'];
- $fieldsarray["{SURVEYDESCRIPTION}"]=$thissurvey['description'];
- $fieldsarray["{EXPIRY}"]=$thissurvey["expiry"];
-
- $emrow['language']=trim($emrow['language']);
- if ($emrow['language']=='') {$emrow['language']=$baselanguage;} //if language is not give use default
- if(!in_array($emrow['language'], $surveylangs)) {$emrow['language']=$baselanguage;} // if given language is not available use default
- $found = array_search($emrow['language'], $surveylangs);
- if ($found==false) {$emrow['language']=$baselanguage;}
-
- $from = $thissurvey['adminemail'];
-
- if (getEmailFormat($surveyid) == 'html')
- {
- $ishtml=true;
- }
- else
- {
- $ishtml=false;
- }
-
- if ($ishtml == false)
- {
- 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
- {
- if ( $modrewrite )
- {
- $fieldsarray["{SURVEYURL}"]="<a href='$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}'>".htmlspecialchars("$publicurl/$surveyid/lang-".trim($emrow['language'])."/tk-{$emrow['token']}")."</a>";
- }
- else
- {
- $fieldsarray["{SURVEYURL}"]="<a href='$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}'>".htmlspecialchars("$publicurl/index.php?lang=".trim($emrow['language'])."&sid=$surveyid&token={$emrow['token']}")."</a>";
- $_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 (SendEmailMessage($sendmessage, $msgsubject, $to, $from, $sitename, $ishtml, getBounceEmail($surveyid)))
- {
-
- // Put date into remindersent
- $today = date("Y-m-d H:i");
- $udequery = "UPDATE ".db_table_name("tokens_{$surveyid}")."\n"
- ."SET remindersent='$today',remindercount = remindercount+1 WHERE tid={$emrow['tid']}";
- //
- $uderesult = $connect->Execute($udequery) or $this->debugLsrc ("Could not update tokens$udequery".$connect->ErrorMsg());
- //orig: $tokenoutput .= "\t\t\t({$emrow['tid']})[".("Reminder sent to:")." {$emrow['firstname']} {$emrow['lastname']}]\n";
- //$tokenoutput .= "\t\t\t({$emrow['tid']}) [".("Reminder sent to:")." {$emrow['firstname']} {$emrow['lastname']} ($to)]\n";
- $mailsSend++;
- }
- else
- {
- //$tokenoutput .= ReplaceFields(("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) failed. Error Message:")." ".$maildebug."", $fieldsarray);
- if($n==1)
- $failedAddresses .= ",".$to;
- else
- {
- $failedAddresses = $to;
- $n=1;
- }
-
- }
- //$lasttid = $emrow['tid'];
-
- }
- if ($ctcount > $emcount)
- {
- $lefttosend = $ctcount-$maxemails;
- }else{$lefttosend = 0;}
- }
- else
- {
- return "No Reminders to send";
- }
-
- if($maxemails>0)
- {
- $returnValue = "".$mailsSend." Reminders send. ".$lefttosend." Reminders left to send";
- if(isset($failedAddresses))
- $returnValue .= "\nCould not send to: ".$failedAddresses;
- return $returnValue;
- }
-
- if(isset($mailsSend))
- {
- $returnValue = "".$mailsSend." Reminders send. ";
- if(isset($failedAddresses))
- $returnValue .= "\nCould not send to: ".$failedAddresses;
- return $returnValue;
- }
-
-
- break;
- default:
-
- break;
- }
- }
-
- /**
- * loginCheck for Lsrc, checks if the user with given password exists in LS Database and
- * sets the SESSION rights for this user
- * @param String $sUser
- * @param String $sPass
- * @return boolean
- */
- function checkUser($sUser, $sPass) // XXX
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- require(dirname(__FILE__)."/../classes/core/sha256.php");
-
- $query="SELECT uid, password, lang, superadmin FROM {$dbprefix}users WHERE users_name=".$connect->qstr(sanitize_user($sUser));
- // echo $query;
- $result = db_execute_assoc($query);
- $gv = $result->FetchRow();
- if($result->RecordCount() < 1)
- {
- return false;
- }
- else
- {
- if((SHA256::hashing($sPass)==$gv['password']))
- {
- $_SESSION['loginID']=$gv['uid'];
- $_SESSION['lang']=$gv['lang'];
-
- $squery = "SELECT create_survey, configurator, create_user, delete_user, superadmin, manage_template, manage_label FROM {$dbprefix}users WHERE uid={$gv['uid']}";
- $sresult = db_execute_assoc($squery); //Checked
- if ($sresult->RecordCount()>0)
- {
- $fields = $sresult->FetchRow();
- $_SESSION['USER_RIGHT_CREATE_SURVEY'] = $fields['create_survey'];
- $_SESSION['USER_RIGHT_CONFIGURATOR'] = $fields['configurator'];
- $_SESSION['USER_RIGHT_CREATE_USER'] = $fields['create_user'];
- $_SESSION['USER_RIGHT_DELETE_USER'] = $fields['delete_user'];
- $_SESSION['USER_RIGHT_SUPERADMIN'] = $fields['superadmin'];
- $_SESSION['USER_RIGHT_MANAGE_TEMPLATE'] = $fields['manage_template'];
- $_SESSION['USER_RIGHT_MANAGE_LABEL'] = $fields['manage_label'];
- }
- return true;
- }
- else
- {
- return false;
- }
- }
- }
-
- /**
- * Lsrc checks the existence of Surveys more than one time, so this makes sense to be DRY
- *
- * @param int $sid
- * @return boolean
- */
- function surveyExists($sid)//XXX
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
-
- $query="SELECT * FROM {$dbprefix}surveys WHERE sid = ".$sid;
- // echo $query;
- $result = db_execute_assoc($query);
- if($result->RecordCount() < 1)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
-
- /**
- * function to import surveys
- *
- * @param $iVid - desired survey id
- * @param $importFile - name of the file to import in core(survey) dir
- * @return boolean
- */
- function importSurvey($iVid, $importFile)
- {
- global $connect ;
- global $dbprefix ;
- global $clang;
-
- include("lsrc.config.php");
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ");
- // HINT FOR IMPORTERS: go to Line 714 to manipulate the Survey, while it's imported
-
- $the_full_file_path = $coreDir.$importFile;
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.",the_full_file_path ='$the_full_file_path' OK ");
-
- include("../import_functions.php");
- include("../admin_functions.php");
- if (!isset($copyfunction))
- {
- $sFullFilepath=$the_full_file_path;
- $aPathInfo = pathinfo($sFullFilepath);
- $sExtension = $aPathInfo['extension'];
- }
-
- if (isset($sExtension) && strtolower($sExtension)=='csv')
- {
- $aImportResults=CSVImportSurvey($sFullFilepath,$iVid);
- }
- elseif (isset($sExtension) && strtolower($sExtension)=='lss')
- {
- $aImportResults=XMLImportSurvey($sFullFilepath,NULL,NULL,$iVid);
- } elseif (isset($copyfunction))
- {
- $aImportResults=XMLImportSurvey('',$copysurveydata,$sNewSurveyName,$iVid);
- }
-
- //CANNOT BE USED BY LSRC RIGHT NOW
- // Translate INSERTANS codes if chosen
- // if (isset($aImportResults['fieldnames']) && $sTransLinks === true)
- // {
- // transInsertAns($aImportResults['newsid'],$aImportResults['oldsid'],$aImportResults['fieldnames']);
- // }
-
- return $aImportResults['newsid'];
- }
-
- /**
- * function to activate surveys based on new activate.php 5771 2008-10-13 02:28:40Z jcleeland $
- *
- * @param unknown_type $surveyid
- * @return boolean
- */
- function activateSurvey($surveyid)//XXX activateSurvey
- {
- global $dbprefix, $connect, $clang, $databasetype,$databasetabletype;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- include('../admin_functions.php');
- include('../activate_functions.php');
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- $returnOutput = activateSurvey($surveyid,$surveyid,'lsrc');
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", $returnOutput ");
-
- return $returnOutput;
- } // end activateSurvey();
-
- /**
- * not used, a test, thought this could maybe enhance security, may be deleted
- *
- * @return Error 404 fake
- */
- function fake404()// XXX
- {
- return '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
- <head>
- <title>Objekt nicht gefunden!</title>
- <link rev="made" href="" />
- <style type="text/css"><!--/*--><![CDATA[/*><!--*/
- body { color: #000000; background-color: #FFFFFF; }
- a:link { color: #0000CC; }
- p, address {margin-left: 3em;}
- span {font-size: smaller;}
- /*]]>*/--></style>
- </head>
-
- <body>
- <h1>Objekt nicht gefunden!</h1>
- <p>
-
-
- Der angeforderte URL konnte auf dem Server nicht gefunden werden.
-
-
-
- Sofern Sie den URL manuell eingegeben haben,
- überprüfen Sie bitte die Schreibweise und versuchen Sie es erneut.
-
-
-
- </p>
- <p>
- Sofern Sie dies für eine Fehlfunktion des Servers halten,
- informieren Sie bitte den
- <a href="mailto:webmaster@'.$_SERVER["SERVER_NAME"].'">Webmaster</a>
- hierüber.
-
- </p>
-
- <h2>Error 404</h2>
- <address>
-
- <a href="/">'.$_SERVER["SERVER_NAME"].'</a>
-
- <span>'.date("m/d/Y H:i:s").'
- Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color PHP/5.2.6 mod_jk/1.2.26</span>
- </address>
- </body>
- </html>
-
- ';
- }
-
- /**
- * importing a group into an existing survey
- *
- * @param int $iVid SurveyID
- * @param string $sMod Group that should be loaded into the Survey
- */
- function importGroup($surveyid, $sMod) //XXX
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- $newsid = $surveyid;
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
-
- $the_full_file_path = $modDir.$sMod.".csv";
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK $the_full_file_path ");
-
- $handle = fopen($the_full_file_path, "r");
- while (!feof($handle))
- {
- $buffer = fgets($handle);
- $bigarray[] = $buffer;
- }
- fclose($handle);
-
- if (substr($bigarray[0], 0, 23) != "# LimeSurvey Group Dump" && substr($bigarray[0], 0, 24) != "# PHPSurveyor Group Dump")
- {
- //$importgroup .= "<strong><font color='red'>".("Error")."</font></strong>\n";
- //$importgroup .= ("This file is not a LimeSurvey group file. Import failed.")."\n";
- //$importgroup .= "<input type='submit' value='".("Main Admin Screen")."' onclick=\"window.open('$scriptname', '_top')\">\n";
- //$importgroup .= "</td></tr></table>\n";
- //unlink($the_full_file_path);
- return false;
- }
-
- for ($i=0; $i<9; $i++)
- {
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
-
- //GROUPS
- if (array_search("# QUESTIONS TABLE\n", $bigarray))
- {
- $stoppoint = array_search("# QUESTIONS TABLE\n", $bigarray);
- }
- elseif (array_search("# QUESTIONS TABLE\r\n", $bigarray))
- {
- $stoppoint = array_search("# QUESTIONS TABLE\r\n", $bigarray);
- }
- else
- {
- $stoppoint = count($bigarray)-1;
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$grouparray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //QUESTIONS
- if (array_search("# ANSWERS TABLE\n", $bigarray))
- {
- $stoppoint = array_search("# ANSWERS TABLE\n", $bigarray);
- }
- elseif (array_search("# ANSWERS TABLE\r\n", $bigarray))
- {
- $stoppoint = array_search("# ANSWERS TABLE\r\n", $bigarray);
- }
- else
- {
- $stoppoint = count($bigarray)-1;
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$questionarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //ANSWERS
- if (array_search("# CONDITIONS TABLE\n", $bigarray))
- {
- $stoppoint = array_search("# CONDITIONS TABLE\n", $bigarray);
- }
- elseif (array_search("# CONDITIONS TABLE\r\n", $bigarray))
- {
- $stoppoint = array_search("# CONDITIONS TABLE\r\n", $bigarray);
- }
- else
- {
- $stoppoint = count($bigarray)-1;
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$answerarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //CONDITIONS
- if (array_search("# LABELSETS TABLE\n", $bigarray))
- {
- $stoppoint = array_search("# LABELSETS TABLE\n", $bigarray);
- }
- elseif (array_search("# LABELSETS TABLE\r\n", $bigarray))
- {
- $stoppoint = array_search("# LABELSETS TABLE\r\n", $bigarray);
- }
- else
- {
- $stoppoint = count($bigarray);
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$conditionsarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //LABELSETS
- if (array_search("# LABELS TABLE\n", $bigarray))
- {
- $stoppoint = array_search("# LABELS TABLE\n", $bigarray);
- }
- elseif (array_search("# LABELS TABLE\r\n", $bigarray))
- {
- $stoppoint = array_search("# LABELS TABLE\r\n", $bigarray);
- }
- else
- {
- $stoppoint = count($bigarray)-1;
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$labelsetsarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //LABELS
- if (array_search("# QUESTION_ATTRIBUTES TABLE\n", $bigarray))
- {
- $stoppoint = array_search("# QUESTION_ATTRIBUTES TABLE\n", $bigarray);
- }
- elseif (array_search("# QUESTION_ATTRIBUTES TABLE\r\n", $bigarray))
- {
- $stoppoint = array_search("# QUESTION_ATTRIBUTES TABLE\r\n", $bigarray);
- }
- else
- {
- $stoppoint = count($bigarray)-1;
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$labelsarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- $bigarray = array_values($bigarray);
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //LAST LOT (now question_attributes)
- if (!isset($noconditions) || $noconditions != "Y")
- {
- // stoppoint is the last line number
- // this is an empty line after the QA CSV lines
- $stoppoint = count($bigarray)-1;
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<=$stoppoint-1) {$question_attributesarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- }
- $bigarray = array_values($bigarray);
-
- $countgroups=0;
- if (isset($questionarray))
- {
- $questionfieldnames=convertCSVRowToArray($questionarray[0],',','"');
- unset($questionarray[0]);
- $countquestions = 0;
- }
-
- if (isset($answerarray))
- {
- $answerfieldnames=convertCSVRowToArray($answerarray[0],',','"');
- unset($answerarray[0]);
- $countanswers = 0;
- }
-
- $countconditions = 0;
- $countlabelsets=0;
- $countlabels=0;
- $countquestion_attributes = 0;
- $countanswers = 0;
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // first check that imported group, questions and labels support the
- // current survey's baselang
- $langcode = GetBaseLanguageFromSurveyID($newsid);
- if (isset($grouparray))
- {
- $groupfieldnames = convertCSVRowToArray($grouparray[0],',','"');
- $langfieldnum = array_search("language", $groupfieldnames);
- $gidfieldnum = array_search("gid", $groupfieldnames);
- $groupssupportbaselang = bDoesImportarraySupportsLanguage($grouparray,Array($gidfieldnum),$langfieldnum,$langcode,true);
- if (!$groupssupportbaselang)
- {
- //$importgroup .= "<strong><font color='red'>".("Error")."</font></strong>\n";
- //$importgroup .= ("You can't import a group which doesn't support the current survey's base language.")."\n";
- //$importgroup .= "<input type='submit' value='".("Main Admin Screen")."' onclick=\"window.open('$scriptname', '_top')\">\n";
- //$importgroup .= "</td></tr></table>\n";
- //unlink($the_full_file_path);
- return "Group does not support Surveys Baselanguage ($langcode)";
- }
- }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- if (isset($questionarray))
- {
- $langfieldnum = array_search("language", $questionfieldnames);
- $qidfieldnum = array_search("qid", $questionfieldnames);
- $questionssupportbaselang = bDoesImportarraySupportsLanguage($questionarray,Array($qidfieldnum), $langfieldnum,$langcode,false);
- if (!$questionssupportbaselang)
- {
- //$importgroup .= "<strong><font color='red'>".("Error")."</font></strong>\n";
- //$importgroup .= ("You can't import a question which doesn't support the current survey's base language.")."\n";
- //$importgroup .= "<input type='submit' value='".("Main Admin Screen")."' onclick=\"window.open('$scriptname', '_top')\">\n";
- //$importgroup .= "</td></tr></table>\n";
- //unlink($the_full_file_path);
- return "Group does not support Surveys Baselanguage ($langcode)";
- }
- }
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- if (isset($labelsetsarray))
- {
- $labelsetfieldname = convertCSVRowToArray($labelsetsarray[0],',','"');
- $langfieldnum = array_search("languages", $labelsetfieldname);
- $lidfilednum = array_search("lid", $labelsetfieldname);
- $labelsetssupportbaselang = bDoesImportarraySupportsLanguage($labelsetsarray,Array($lidfilednum),$langfieldnum,$langcode,true);
- if (!$labelsetssupportbaselang)
- {
- $importquestion .= "<strong><font color='red'>".("Error")."</font></strong>\n"
- .("You can't import label sets which don't support the current survey's base language")."\n"
- ."</td></tr></table>\n";
- //unlink($the_full_file_path);
- return "Group does not support Surveys Baselanguage ($langcode)";
- }
- }
-
- $newlids = array(); // this array will have the "new lid" for the label sets, the key will be the "old lid"
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //DO ANY LABELSETS FIRST, SO WE CAN KNOW WHAT THEIR NEW LID IS FOR THE QUESTIONS
- if (isset($labelsetsarray) && $labelsetsarray) {
- $csarray=buildLabelSetCheckSumArray(); // build checksums over all existing labelsets
- $count=0;
- foreach ($labelsetsarray as $lsa) {
- $fieldorders =convertCSVRowToArray($labelsetsarray[0],',','"');
- $fieldcontents=convertCSVRowToArray($lsa,',','"');
- if ($count==0) {$count++; continue;}
-
- $countlabelsets++;
-
- $labelsetrowdata=array_combine($fieldorders,$fieldcontents);
-
- // Save old labelid
- $oldlid=$labelsetrowdata['lid'];
- // set the new language
- unset($labelsetrowdata['lid']);
- $newvalues=array_values($labelsetrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $lsainsert = "INSERT INTO {$dbprefix}labelsets (".implode(',',array_keys($labelsetrowdata)).") VALUES (".implode(',',$newvalues).")"; //handle db prefix
- $lsiresult=$connect->Execute($lsainsert);
-
- // Get the new insert id for the labels inside this labelset
- $newlid=$connect->Insert_ID("{$dbprefix}labelsets",'lid');
-
- if ($labelsarray) {
- $count=0;
- foreach ($labelsarray as $la) {
- $lfieldorders =convertCSVRowToArray($labelsarray[0],',','"');
- $lfieldcontents=convertCSVRowToArray($la,',','"');
- if ($count==0) {$count++; continue;}
-
- // Combine into one array with keys and values since its easier to handle
- $labelrowdata=array_combine($lfieldorders,$lfieldcontents);
- $labellid=$labelrowdata['lid'];
- if ($labellid == $oldlid) {
- $labelrowdata['lid']=$newlid;
-
- // translate internal links
- $labelrowdata['title']=translink('label', $oldlid, $newlid, $labelrowdata['title']);
-
- $newvalues=array_values($labelrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $lainsert = "INSERT INTO {$dbprefix}labels (".implode(',',array_keys($labelrowdata)).") VALUES (".implode(',',$newvalues).")"; //handle db prefix
- $liresult=$connect->Execute($lainsert);
- $countlabels++;
- }
- }
- }
-
- //CHECK FOR DUPLICATE LABELSETS
- $thisset="";
- $query2 = "SELECT code, title, sortorder, language
- FROM {$dbprefix}labels
- WHERE lid=".$newlid."
- ORDER BY language, sortorder, code";
- $result2 = db_execute_num($query2) or $this->debugLsrc("Died querying labelset $lid$query2".$connect->ErrorMsg());
- while($row2=$result2->FetchRow())
- {
- $thisset .= implod…
Large files files are truncated, but you can click here to view the full file