/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
- <?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 .= implode('.', $row2);
- } // while
- $newcs=dechex(crc32($thisset)*1);
- unset($lsmatch);
- if (isset($csarray))
- {
- foreach($csarray as $key=>$val)
- {
- if ($val == $newcs)
- {
- $lsmatch=$key;
- }
- }
- }
- if (isset($lsmatch))
- {
- //There is a matching labelset. So, we will delete this one and refer
- //to the matched one.
- $query = "DELETE FROM {$dbprefix}labels WHERE lid=$newlid";
- $result=$connect->Execute($query) or $this->debugLsrc("Couldn't delete labels$query".$connect->ErrorMsg());
- $query = "DELETE FROM {$dbprefix}labelsets WHERE lid=$newlid";
- $result=$connect->Execute($query) or $this->debugLsrc("Couldn't delete labelset$query".$connect->ErrorMsg());
- $newlid=$lsmatch;
- }
- else
- {
- //There isn't a matching labelset, add this checksum to the $csarray array
- $csarray[$newlid]=$newcs;
- }
- //END CHECK FOR DUPLICATES
- $labelreplacements[]=array($oldlid, $newlid);
- $newlids[$oldlid] = $newlid;
- }
- }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //these arrays will aloud to insert correctly groups an questions multi languague survey imports correctly, and will eliminate the need to "searh" the imported data
- //$newgids = array(); // this array will have the "new gid" for the groups, the kwy will be the "old gid" <-- not needed when importing groups
- $newqids = array(); // this array will have the "new qid" for the questions, the kwy will be the "old qid"
-
- // DO GROUPS, QUESTIONS FOR GROUPS, THEN ANSWERS FOR QUESTIONS IN A __NOT__ NESTED FORMAT!
- if (isset($grouparray) && $grouparray)
- {
- $surveylanguages=GetAdditionalLanguagesFromSurveyID($surveyid);
- $surveylanguages[]=GetBaseLanguageFromSurveyID($surveyid);
-
- // do GROUPS
- $gafieldorders=convertCSVRowToArray($grouparray[0],',','"');
- unset($grouparray[0]);
- $newgid = 0;
- $group_order = 0; // just to initialize this variable
- foreach ($grouparray as $ga)
- {
- //GET ORDER OF FIELDS
- $gacfieldcontents=convertCSVRowToArray($ga,',','"');
- $grouprowdata=array_combine($gafieldorders,$gacfieldcontents);
-
- // Skip not supported languages
- if (!in_array($grouprowdata['language'],$surveylanguages))
- {
- $skippedlanguages[]=$grouprowdata['language']; // this is for the message in the end.
- continue;
- }
-
- // replace the sid
- $oldsid=$grouprowdata['sid'];
- $grouprowdata['sid']=$newsid;
-
- // replace the gid or remove it if needed (it also will calculate the group order if is a new group)
- $oldgid=$grouprowdata['gid'];
- if ($newgid == 0)
- {
- unset($grouprowdata['gid']);
-
- // find the maximum group order and use this grouporder+1 to assign it to the new group
- $qmaxgo = "select max(group_order) as maxgo from ".db_table_name('groups')." where sid=$newsid";
- $gres = db_execute_assoc($qmaxgo) or $this->debugLsrc (("Error")." Failed to find out maximum group order value\n$qmaxqo\n".$connect->ErrorMsg());
- $grow=$gres->FetchRow();
- $group_order = $grow['maxgo']+1;
- }
- else
- $grouprowdata['gid'] = $newgid;
-
- $grouprowdata["group_order"]= $group_order;
-
- // Everything set - now insert it
- $grouprowdata=array_map('convertCsvreturn2return', $grouprowdata);
-
-
- // translate internal links
- $grouprowdata['group_name']=translink('survey', $oldsid, $newsid, $grouprowdata['group_name']);
- $grouprowdata['description']=translink('survey', $oldsid, $newsid, $grouprowdata['description']);
-
- $newvalues=array_values($grouprowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $ginsert = "insert INTO {$dbprefix}groups (".implode(',',array_keys($grouprowdata)).") VALUES (".implode(',',$newvalues).")";
- $gres = $connect->Execute($ginsert) or $this->debugLsrc("Error: ".": Failed to insert group\n$ginsert\n".$connect->ErrorMsg());
-
- //GET NEW GID .... if is not done before and we count a group if a new gid is required
- if ($newgid == 0)
- {
- $newgid = $connect->Insert_ID("{$dbprefix}groups",'gid');
- $countgroups++;
- }
- }
- // GROUPS is DONE
-
- // do QUESTIONS
- if (isset($questionarray) && $questionarray)
- {
- foreach ($questionarray as $qa)
- {
- $qacfieldcontents=convertCSVRowToArray($qa,',','"');
- $questionrowdata=array_combine($questionfieldnames,$qacfieldcontents);
-
- // Skip not supported languages
- if (!in_array($questionrowdata['language'],$surveylanguages))
- continue;
-
- // replace the sid
- $questionrowdata["sid"] = $newsid;
-
- // replace the gid (if the gid is not in the oldgid it means there is a problem with the exported record, so skip it)
- if ($questionrowdata['gid'] == $oldgid)
- $questionrowdata['gid'] = $newgid;
- else
- continue; // a problem with this question record -> don't consider
-
- // replace the qid or remove it if needed
- $oldqid = $questionrowdata['qid'];
- if (isset($newqids[$oldqid]))
- $questionrowdata['qid'] = $newqids[$oldqid];
- else
- unset($questionrowdata['qid']);
-
- // replace the lid for the new one (if there is no new lid in the $newlids array it mean that was not imported -> error, skip this record)
- if (in_array($questionrowdata["type"], array("F","W","Z","H", "1", ":", ";"))) // only fot the questions that uses a label set.
- if (isset($newlids[$questionrowdata["lid"]]))
- {
- $questionrowdata["lid"] = $newlids[$questionrowdata["lid"]];
- if(isset($newlids[$questionrowdata["lid1"]]))
- {
- $questionrowdata["lid1"] = $newlids[$questionrowdata["lid1"]];
- }
- }
- else
- {
- continue; // a problem with this question record -> don't consider
- }
- // $other = $questionrowdata["other"]; //Get 'other' field value
- // $oldlid = $questionrowdata['lid'];
-
- // Everything set - now insert it
- $questionrowdata=array_map('convertCsvreturn2return', $questionrowdata);
-
- // translate internal links ///XXX rakete may change question data here
- // $questionrowdata['title']=translink('survey', $oldsid, $newsid, $questionrowdata['title']);
- // $questionrowdata['question']=translink('survey', $oldsid, $newsid, $questionrowdata['question']);
- // $questionrowdata['help']=translink('survey', $oldsid, $newsid, $questionrowdata['help']);
-
- $newvalues=array_values($questionrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $qinsert = "insert INTO {$dbprefix}questions (".implode(',',array_keys($questionrowdata)).") VALUES (".implode(',',$newvalues).")";
- $qres = $connect->Execute($qinsert) or $this->debugLsrc ("Error: "."Failed to insert question\n$qinsert\n".$connect->ErrorMsg());
-
- //GET NEW QID .... if is not done before and we count a question if a new qid is required
- if (!isset($newqids[$oldqid]))
- {
- $newqids[$oldqid] = $connect->Insert_ID("{$dbprefix}questions",'qid');
- $myQid=$newqids[$oldqid];
- $countquestions++;
- }
- else
- {
- $myQid=$newqids[$oldqid];
- }
- }
- }
- // QESTIONS is DONE
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // do ANSWERS
- if (isset($answerarray) && $answerarray)
- {
- foreach ($answerarray as $aa)
- {
- $aacfieldcontents=convertCSVRowToArray($aa,',','"');
- $answerrowdata=array_combine($answerfieldnames,$aacfieldcontents);
-
- // Skip not supported languages
- if (!in_array($answerrowdata['language'],$surveylanguages))
- continue;
-
- // replace the qid for the new one (if there is no new qid in the $newqids array it mean that this answer is orphan -> error, skip this record)
- if (isset($newqids[$answerrowdata["qid"]]))
- $answerrowdata["qid"] = $newqids[$answerrowdata["qid"]];
- else
- continue; // a problem with this answer record -> don't consider
-
- // Everything set - now insert it
- $answerrowdata = array_map('convertCsvreturn2return', $answerrowdata);
-
- // translate internal links
- $answerrowdata['answer']=translink('survey', $oldsid, $newsid, $answerrowdata['answer']);
-
- $newvalues=array_values($answerrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $ainsert = "insert INTO {$dbprefix}answers (".implode(',',array_keys($answerrowdata)).") VALUES (".implode(',',$newvalues).")";
- $ares = $connect->Execute($ainsert) or $this->debugLsrc ("Error: "."Failed to insert answer\n$ainsert\n".$connect->ErrorMsg());
- $countanswers++;
- }
- }
- // ANSWERS is DONE
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // Fix question group sortorder
- fixSortOrderGroups($surveyid);
- $baselang = GetBaseLanguageFromSurveyID($surveyid);
- $cdresult = db_execute_assoc("SELECT gid FROM ".db_table_name('groups')." WHERE sid='{$surveyid}' AND language='{$baselang}' ORDER BY group_order, group_name");
- $position=0;
- while ($cdrow=$cdresult->FetchRow())
- {
- $cd2query="UPDATE ".db_table_name('groups')." SET group_order='{$position}' WHERE gid='{$cdrow['gid']}' ";
- $cd2result = $connect->Execute($cd2query) or $this->debugLsrc ("Couldn't update group_order$cd2query".$connect->ErrorMsg()); //Checked
- $position++;
- }
-
-
- //... and for the questions inside the groups
- // get all group ids and fix questions inside each group
- $gquery = "SELECT gid FROM {$dbprefix}groups where sid=$newsid group by gid ORDER BY gid"; //Get last question added (finds new qid)
- $gres = db_execute_assoc($gquery);
- while ($grow = $gres->FetchRow())
- {
- //fixsortorderQuestions(0,$grow['gid']);
- $qid=sanitize_int(0);
- $gid=sanitize_int($grow['gid']);
- $baselang = GetBaseLanguageFromSurveyID($surveyid);
- if ($gid == 0)
- {
- $result = db_execute_assoc("SELECT gid FROM ".db_table_name('questions')." WHERE qid='{$qid}' and language='{$baselang}'"); //Checked
- $row=$result->FetchRow();
- $gid=$row['gid'];
- }
- $cdresult = db_execute_assoc("SELECT qid FROM ".db_table_name('questions')." WHERE gid='{$gid}' and language='{$baselang}' ORDER BY question_order, title ASC"); //Checked
- $position=0;
- while ($cdrow=$cdresult->FetchRow())
- {
- $cd2query="UPDATE ".db_table_name('questions')." SET question_order='{$position}' WHERE qid='{$cdrow['qid']}' ";
- $cd2result = $connect->Execute($cd2query) or $this->debugLsrc ("Couldn't update question_order$cd2query".$connect->ErrorMsg()); //Checked
- $position++;
- }
- }
- }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // do ATTRIBUTES
- if (isset($question_attributesarray) && $question_attributesarray)
- {
- $fieldorders =convertCSVRowToArray($question_attributesarray[0],',','"');
- unset($question_attributesarray[0]);
- foreach ($question_attributesarray as $qar) {
- $fieldcontents=convertCSVRowToArray($qar,',','"');
- $qarowdata=array_combine($fieldorders,$fieldcontents);
-
- // replace the qid for the new one (if there is no new qid in the $newqids array it mean that this attribute is orphan -> error, skip this record)
- if (isset($newqids[$qarowdata["qid"]]))
- $qarowdata["qid"] = $newqids[$qarowdata["qid"]];
- else
- continue; // a problem with this answer record -> don't consider
-
- unset($qarowdata["qaid"]);
-
- // Everything set - now insert it
- $newvalues=array_values($qarowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $qainsert = "insert INTO {$dbprefix}question_attributes (".implode(',',array_keys($qarowdata)).") VALUES (".implode(',',$newvalues).")";
- $result=$connect->Execute($qainsert) or $this->debugLsrc ("Couldn't insert question_attribute$qainsert".$connect->ErrorMsg());
- $countquestion_attributes++;
- }
- }
- // ATTRIBUTES is DONE
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // do CONDITIONS
- if (isset($conditionsarray) && $conditionsarray)
- {
- $fieldorders=convertCSVRowToArray($conditionsarray[0],',','"');
- unset($conditionsarray[0]);
- foreach ($conditionsarray as $car) {
- $fieldcontents=convertCSVRowToArray($car,',','"');
- $conditionrowdata=array_combine($fieldorders,$fieldcontents);
-
- $oldqid = $conditionrowdata["qid"];
- $oldcqid = $conditionrowdata["cqid"];
-
- // replace the qid for the new one (if there is no new qid in the $newqids array it mean that this condition is orphan -> error, skip this record)
- if (isset($newqids[$oldqid]))
- $conditionrowdata["qid"] = $newqids[$oldqid];
- else
- continue; // a problem with this answer record -> don't consider
-
- // replace the cqid for the new one (if there is no new qid in the $newqids array it mean that this condition is orphan -> error, skip this record)
- if (isset($newqids[$oldcqid]))
- $conditionrowdata["cqid"] = $newqids[$oldcqid];
- else
- continue; // a problem with this answer record -> don't consider
-
- list($oldcsid, $oldcgid, $oldqidanscode) = explode("X",$conditionrowdata["cfieldname"],3);
-
- if ($oldcgid != $oldgid) // this means that the condition is in another group (so it should not have to be been exported -> skip it
- continue;
-
- unset($conditionrowdata["cid"]);
-
- // recreate the cfieldname with the new IDs
- $newcfieldname = $newsid . "X" . $newgid . "X" . $conditionrowdata["cqid"] .substr($oldqidanscode,strlen($oldqid));
-
- $conditionrowdata["cfieldname"] = $newcfieldname;
- if (!isset($conditionrowdata["method"]) || trim($conditionrowdata["method"])=='')
- {
- $conditionrowdata["method"]='==';
- }
- $newvalues=array_values($conditionrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $conditioninsert = "insert INTO {$dbprefix}conditions (".implode(',',array_keys($conditionrowdata)).") VALUES (".implode(',',$newvalues).")";
- $result=$connect->Execute($conditioninsert) or $this->debugLsrc ("Couldn't insert condition$conditioninsert".$connect->ErrorMsg());
- $countconditions++;
- }
- }
- $this->debugLsrc("wir sind in - ".__FUNCTION__." Line ".__LINE__.", FERTIG ");
- // CONDITIONS is DONE
- return array('gid'=>$newgid,'qid'=>$myQid);
- //return $newgid;
- }
-
- /**
- *
- * Enter description here...
- * @param $surveyid
- * @param $sMod
- * @param $newGroup
- * @return unknown_type
- */
- function importQuestion($surveyid, $sMod, $newGroup=false) //XXX
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- $newsid = $surveyid;
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", START OK $dbprefix ");
-
- //$getGidSql = "SELECT gid FROM {$dbprefix} ";
- $getGidSql = "SELECT gid
- FROM {$dbprefix}groups
- WHERE sid=".$surveyid." AND language='".GetBaseLanguageFromSurveyID($surveyid)."'
- ORDER BY gid desc ";
- $getGidRs = db_execute_num($getGidSql);
- $gidRow=$getGidRs->FetchRow();
- $gid = $gidRow[0];
-
- if($gid=='')#
- {
- $this->debugLsrc("No Group for importing the question, available!");
- return "No Group for importing the question, available! Import failed.";
- }
-
- if($newGroup===true)
- ++$gid;
-
- $the_full_file_path = $queDir.$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, 10240); //To allow for very long survey welcomes (up to 10k)
- $bigarray[] = $buffer;
- }
- fclose($handle);
-
- // Now we try to determine the dataformat of the survey file.
- if ((substr($bigarray[1], 0, 24) == "# SURVEYOR QUESTION DUMP")&& (substr($bigarray[4], 0, 29) == "# http://www.phpsurveyor.org/"))
- {
- $importversion = 100; // version 1.0 file
- }
- elseif
- ((substr($bigarray[1], 0, 24) == "# SURVEYOR QUESTION DUMP")&& (substr($bigarray[4], 0, 37) == "# http://phpsurveyor.sourceforge.net/"))
- {
- $importversion = 99; // Version 0.99 file or older - carries a different URL
- }
- elseif
- (substr($bigarray[0], 0, 26) == "# LimeSurvey Question Dump" || substr($bigarray[0], 0, 27) == "# PHPSurveyor Question Dump")
- { // Wow.. this seems to be a >1.0 version file - these files carry the version information to read in line two
- $importversion=substr($bigarray[1], 12, 3);
- }
- else // unknown file - show error message
- {
- // $importquestion .= "<strong><font color='red'>".("Error")."</font></strong>\n";
- // $importquestion .= ("This file is not a LimeSurvey question file. Import failed.")."\n";
- // $importquestion .= "</font></td></tr></table>\n";
- // $importquestion .= "</body>\n</html>\n";
- // unlink($the_full_file_path);
- return "This is not a Limesurvey question file. Import failed";
- }
-
- // if ($importversion != $dbversionnumber)
- // {
- //// $importquestion .= "<strong><font color='red'>".("Error")."</font></strong>\n";
- //// $importquestion .= ("Sorry, importing questions is limited to the same version. Import failed.")."\n";
- //// $importquestion .= "</font></td></tr></table>\n";
- //// $importquestion .= "</body>\n</html>\n";
- //// unlink($the_full_file_path);
- // return;
- // }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- for ($i=0; $i<9; $i++) //skipping the first lines that are not needed
- {
- 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("# 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)-1;
- }
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-2) {$answerarray[] = str_replace("`default`", "`default_value`", $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 ");
- //Question_attributes
- if (!isset($noconditions) || $noconditions != "Y")
- {
- $stoppoint = count($bigarray);
- for ($i=0; $i<=$stoppoint+1; $i++)
- {
- if ($i<$stoppoint-1) {$question_attributesarray[] = $bigarray[$i];}
- unset($bigarray[$i]);
- }
- }
- $bigarray = array_values($bigarray);
-
- if (isset($questionarray)) {$countquestions = count($questionarray)-1;} else {$countquestions=0;}
- if (isset($answerarray))
- {
- $answerfieldnames=convertCSVRowToArray($answerarray[0],',','"');
- unset($answerarray[0]);
- $countanswers = count($answerarray);
- }
- else {$countanswers=0;}
- if (isset($labelsetsarray)) {$countlabelsets = count($labelsetsarray)-1;} else {$countlabelsets=0;}
- if (isset($labelsarray)) {$countlabels = count($labelsarray)-1;} else {$countlabels=0;}
- if (isset($question_attributesarray)) {$countquestion_attributes = count($question_attributesarray)-1;} else {$countquestion_attributes=0;}
-
- $languagesSupported = array(); // this array will keep all the languages supported for the survey
-
- // Let's check that imported objects support at least the survey's baselang
- $langcode = GetBaseLanguageFromSurveyID($surveyid);
-
- $languagesSupported[$langcode] = 1; // adds the base language to the list of supported languages
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- if ($countquestions > 0)
- {
- $questionfieldnames = convertCSVRowToArray($questionarray[0],',','"');
- $langfieldnum = array_search("language", $questionfieldnames);
- $qidfieldnum = array_search("qid", $questionfieldnames);
- $questionssupportbaselang = bDoesImportarraySupportsLanguage($questionarray,Array($qidfieldnum), $langfieldnum,$langcode,true);
- if (!$questionssupportbaselang)
- {
- // $importquestion .= "<strong><font color='red'>".("Error")."</font></strong>\n"
- // .("You can't import a question which doesn't support the current survey's base language")."\n"
- // ."</td></tr></table>\n";
- // unlink($the_full_file_path);
- return "You can't import a question which doesn't support the current survey's base language";
- }
- }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- foreach (GetAdditionalLanguagesFromSurveyID($surveyid) as $language)
- {
- $languagesSupported[$language] = 1;
- }
-
- // Let's assume that if the questions do support tye baselang
- // Then the answers do support it as well.
- // ==> So the following section is commented for now
- //if ($countanswers > 0)
- //{
- // $langfieldnum = array_search("language", $answerfieldnames);
- // $answercodefilednum1 = array_search("qid", $answerfieldnames);
- // $answercodefilednum2 = array_search("code", $answerfieldnames);
- // $answercodekeysarr = Array($answercodefilednum1,$answercodefilednum2);
- // $answerssupportbaselang = bDoesImportarraySupportsLanguage($answerarray,$answercodekeysarr,$langfieldnum,$langcode);
- // if (!$answerssupportbaselang)
- // {
- // $importquestion .= "<strong><font color='red'>".("Error")."</font></strong>\n"
- // .("You can't import answers which don't support current survey's base language")."\n"
- // ."</td></tr></table>\n";
- // return;
- // }
- //
- //}
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- if ($countlabelsets > 0)
- {
- $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 "You can't import label sets which don't support the current survey's base language";
- }
- }
- // I assume that if a labelset supports the survey's baselang,
- // then it's labels do support it as well
-
- // GET SURVEY AND GROUP DETAILS
- //$surveyid=$postsid;
- //$gid=$postgid;
- $newsid=$surveyid;
- $newgid=$gid;
-
- $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;
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- foreach ($labelsetsarray as $lsa) {
- $fieldorders =convertCSVRowToArray($labelsetsarray[0],',','"');
- $fieldcontents=convertCSVRowToArray($lsa,',','"');
- if ($count==0) {$count++; continue;}
-
- $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);
- }
- }
- }
-
- //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 .= implode('.', $row2);
- } // while
- $newcs=dechex(crc32($thisset)*1);
- unset($lsmatch);
- if (isset($csarray))
- {
- foreach($csarray as $key=>$val)
- {
- if ($val == $newcs)
- {
- $lsmatch=$key;
- }
- }
- }
- if (isset($lsmatch))
- {
- //There is a matching labelset. So, we will delete this one and refer
- //to the matched one.
- $query = "DELETE FROM {$dbprefix}labels WHERE lid=$newlid";
- $result=$connect->Execute($query) or $this->debugLsrc("Couldn't delete labels$query".$connect->ErrorMsg());
- $query = "DELETE FROM {$dbprefix}labelsets WHERE lid=$newlid";
- $result=$connect->Execute($query) or $this->debugLsrc("Couldn't delete labelset$query".$connect->ErrorMsg());
- $newlid=$lsmatch;
- }
- else
- {
- //There isn't a matching labelset, add this checksum to the $csarray array
- $csarray[$newlid]=$newcs;
- }
- //END CHECK FOR DUPLICATES
- $labelreplacements[]=array($oldlid, $newlid);
- }
- }
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
-
- // QUESTIONS, THEN ANSWERS FOR QUESTIONS IN A NESTED FORMAT!
- if (isset($questionarray) && $questionarray) {
- $qafieldorders=convertCSVRowToArray($questionarray[0],',','"');
- unset($questionarray[0]);
-
- //Assuming we will only import one question at a time we will now find out the maximum question order in this group
- //and save it for later
- $qmaxqo = "SELECT MAX(question_order) AS maxqo FROM ".db_table_name('questions')." WHERE sid=$newsid AND gid=$newgid";
- $qres = db_execute_assoc($qmaxqo) or $this->debugLsrc ("Error: ".": Failed to find out maximum question order value\n$qmaxqo\n".$connect->ErrorMsg());
- $qrow=$qres->FetchRow();
- $newquestionorder=$qrow['maxqo']+1;
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
-
- foreach ($questionarray as $qa) {
- $qacfieldcontents=convertCSVRowToArray($qa,',','"');
- $newfieldcontents=$qacfieldcontents;
- $questionrowdata=array_combine($qafieldorders,$qacfieldcontents);
- if (isset($languagesSupported[$questionrowdata["language"]]))
- {
- $oldqid = $questionrowdata['qid'];
- $oldsid = $questionrowdata['sid'];
- $oldgid = $questionrowdata['gid'];
-
- // Remove qid field if there is no newqid; and set it to newqid if it's set
- if (!isset($newqid))
- unset($questionrowdata['qid']);
- else
- $questionrowdata['qid'] = $newqid;
-
- $questionrowdata["sid"] = $newsid;
- $questionrowdata["gid"] = $newgid;
- $questionrowdata["question_order"] = $newquestionorder;
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // Now we will fix up the label id
- $type = $questionrowdata["type"]; //Get the type
- if ($type == "F" || $type == "H" || $type == "1" || $type == ":" || $type == ";" )
- {//IF this is a flexible label array, update the lid entry
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
-
- if (isset($labelreplacements)) {
- foreach ($labelreplacements as $lrp) {
- if ($lrp[0] == $questionrowdata["lid"]) {
- $questionrowdata["lid"]=$lrp[1];
- }
- if ($lrp[0] == $questionrowdata["lid1"]) {
- $questionrowdata["lid1"]=$lrp[1];
- }
- }
- }
- }
- $other = $questionrowdata["other"]; //Get 'other' field value
- $oldlid = $questionrowdata["lid"];
- $questionrowdata=array_map('convertCsvreturn2return', $questionrowdata);
-
- // translate internal links
- $questionrowdata['title']=translink('survey', $oldsid, $newsid, $questionrowdata['title']);
- $questionrowdata['question']=translink('survey', $oldsid, $newsid, $questionrowdata['question']);
- $questionrowdata['help']=translink('survey', $oldsid, $newsid, $questionrowdata['help']);
-
- $newvalues=array_values($questionrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $qinsert = "INSERT INTO {$dbprefix}questions (".implode(',',array_keys($questionrowdata)).") VALUES (".implode(',',$newvalues).")";
- $qres = $connect->Execute($qinsert) or $this->debugLsrc ("Error: ".": Failed to insert question\n$qinsert\n".$connect->ErrorMsg());
-
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // set the newqid only if is not set
- if (!isset($newqid))
- $newqid=$connect->Insert_ID("{$dbprefix}questions","qid");
- }
- }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- //NOW DO ANSWERS FOR THIS QID - Is called just once and only if there was a question
- if (isset($answerarray) && $answerarray) {
- foreach ($answerarray as $aa) {
- $answerfieldcontents=convertCSVRowToArray($aa,',','"');
- $answerrowdata=array_combine($answerfieldnames,$answerfieldcontents);
- if ($answerrowdata===false)
- {
- $importquestion.=''.("Faulty line in import - fields and data don't match").":".implode(',',$answerfieldcontents);
- }
- if (isset($languagesSupported[$answerrowdata["language"]]))
- {
- $code=$answerrowdata["code"];
- $thisqid=$answerrowdata["qid"];
- $answerrowdata["qid"]=$newqid;
-
- // translate internal links
- $answerrowdata['answer']=translink('survey', $oldsid, $newsid, $answerrowdata['answer']);
-
- $newvalues=array_values($answerrowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $ainsert = "INSERT INTO {$dbprefix}answers (".implode(',',array_keys($answerrowdata)).") VALUES (".implode(',',$newvalues).")";
- $ares = $connect->Execute($ainsert) or $this->debugLsrc ("Error: ".": Failed to insert answer\n$ainsert\n".$connect->ErrorMsg());
- }
- }
- }
- $this->debugLsrc("wir sind in ".__FILE__." - ".__FUNCTION__." Line ".__LINE__.", OK ");
- // Finally the question attributes - Is called just once and only if there was a question
- if (isset($question_attributesarray) && $question_attributesarray) {//ONLY DO THIS IF THERE ARE QUESTION_ATTRIBUES
- $fieldorders =convertCSVRowToArray($question_attributesarray[0],',','"');
- unset($question_attributesarray[0]);
- foreach ($question_attributesarray as $qar) {
- $fieldcontents=convertCSVRowToArray($qar,',','"');
- $qarowdata=array_combine($fieldorders,$fieldcontents);
- $qarowdata["qid"]=$newqid;
- unset($qarowdata["qaid"]);
-
- $newvalues=array_values($qarowdata);
- $newvalues=array_map(array(&$connect, "qstr"),$newvalues); // quote everything accordingly
- $qainsert = "INSERT INTO {$dbprefix}question_attributes (".implode(',',array_keys($qarowdata)).") VALUES (".implode(',',$newvalues).")";
- $result=$connect->Execute($qainsert) or $this->debugLsrc ("Couldn't insert question_attribute$qainsert".$connect->ErrorMsg());
- }
- }
-
- }
- $this->debugLsrc("wir sind in - ".__FUNCTION__." Line ".__LINE__.", FERTIG ");
- // CONDITIONS is DONE
- return array('gid'=>$newgid,'qid'=>$newqid);
- //return $newgid;
- }
-
- /**
- * function to delete a Survey with all questions and answersand Tokentable....
- *
- * @param int $surveyid
- * @return boolean
- */
- function deleteSurvey($surveyid)
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ");
-
- $tablelist = $connect->MetaTables();
- $dict = NewDataDictionary($connect);
-
- if (in_array("{$dbprefix}survey_$surveyid", $tablelist)) //delete the survey_$surveyid table
- {
- $dsquery = $dict->DropTableSQL("{$dbprefix}survey_$surveyid");
- //$dict->ExecuteSQLArray($sqlarray);
- $dsresult = $dict->ExecuteSQLArray($dsquery);
- }
-
- if (in_array("{$dbprefix}tokens_$surveyid", $tablelist)) //delete the tokens_$surveyid table
- {
- $dsquery = $dict->DropTableSQL("{$dbprefix}tokens_$surveyid");
- $dsresult = $dict->ExecuteSQLArray($dsquery) or $this->debugLsrc ("Couldn't \"$dsquery\" because ".$connect->ErrorMsg());
- }
-
- $dsquery = "SELECT qid FROM {$dbprefix}questions WHERE sid=$surveyid";
- $dsresult = db_execute_assoc($dsquery) or $this->debugLsrc ("Couldn't find matching survey to delete: \n $dsquery \n".$connect->ErrorMsg());
- while ($dsrow = $dsresult->FetchRow())
- {
- $asdel = "DELETE FROM {$dbprefix}answers WHERE qid={$dsrow['qid']}";
- $asres = $connect->Execute($asdel);
- $cddel = "DELETE FROM {$dbprefix}conditions WHERE qid={$dsrow['qid']}";
- $cdres = $connect->Execute($cddel) or die();
- $qadel = "DELETE FROM {$dbprefix}question_attributes WHERE qid={$dsrow['qid']}";
- $qares = $connect->Execute($qadel);
- }
-
- $qdel = "DELETE FROM {$dbprefix}questions WHERE sid=$surveyid";
- $qres = $connect->Execute($qdel);
-
- $scdel = "DELETE FROM {$dbprefix}assessments WHERE sid=$surveyid";
- $scres = $connect->Execute($scdel);
-
- $gdel = "DELETE FROM {$dbprefix}groups WHERE sid=$surveyid";
- $gres = $connect->Execute($gdel);
-
- $slsdel = "DELETE FROM {$dbprefix}surveys_languagesettings WHERE surveyls_survey_id=$surveyid";
- $slsres = $connect->Execute($slsdel);
-
- $srdel = "DELETE FROM {$dbprefix}surveys_permissions WHERE sid=$surveyid";
- $srres = $connect->Execute($srdel);
-
- $srdel = "DELETE FROM {$dbprefix}saved_control WHERE sid=$surveyid";
- $srres = $connect->Execute($srdel);
-
- $sdel = "DELETE FROM {$dbprefix}surveys WHERE sid=$surveyid";
- $sres = $connect->Execute($sdel);
- $surveyid=false;
-
- return true;
-
- }
-
- /**
- * This function pulls a CSV representation of the Field map
- *
- * @param mixed $surveyid - the survey ID you want the Fieldmap for
- * @return String $fieldmap
- */
- function FieldMap2CSV($surveyid)
- {
- $fields=array("fieldname", "type", "sid", "gid", "qid", "aid",'title','question','group_name','lid','lid1');
- $fieldmap=createFieldMap($surveyid,'full');
-
- $result='"'.implode('","',$fields).'"'."\n";
- foreach ($fieldmap as $entry)
- {
-
- $destfieldmap=array();
- foreach ($fields as $field)
- {
- if (isset($entry[$field]))
- {
- $destfieldmap[$field]=$entry[$field];
- }
- else
- {
- $destfieldmap[$field]='';
- }
- }
- $entry=array_map('CSVEscape',array_values($destfieldmap));
- $result.=implode(',',$entry)."\n";
- }
- return $result;
- }
-
- function sendStatistic($surveyid, $to, $tempFile, $html=null)
- {
- include("lsrc.config.php");
- global $sitename;
- global $clang;
-
-
- if($tempFile==null && isset($html))
- {
- $css = "<style type='text/css'>"
- ."table.statisticstable, table.statisticssummary {
- background-color:#EEF6FF;
- border-collapse:collapse;
- border-width: 0px;
- border-style: none;
- }
-
- .statisticssummary thead th
- {
- background:#D2E0F2;
- }
-
- .statisticssummary th:first-child,
- .statisticstable td:first-child {
- text-align:right;
- }
-
- .statisticssummary thead th:first-child
- {
- text-align:center;
- }
-
- .statisticssummary th, .statisticssummary td, .statisticstable td {
- padding:3px 10px;
-
- }
-
- .statisticstable tr {
- border-color: #fff;
- border-style: solid;
- border-width: 1px;
- }
-
- .statisticstable thead th
- {
- background:#D2E0F2;
- text-align:center;
- color:#1D2D45;
- padding:4 10px;
- }
-
- .statisticstable tfoot tr {
- background:#D2E0F2;
- text-align:center;
- }"
- ."</style>";
-
- $message = sprintf($clang->gT("This is your personal statistic sheet for survey #%s"),$css."<center>".$message.$surveyid."<br/>".$html."</center>");
- return SendEmailMessage($message, sprintf($clang->gT("Statistics Survey #%s"),$surveyid), $to, getBounceEmail($surveyid), $sitename, true);
- }
- else
- {
- $message = sprintf($clang->gT("This is your personal statistic sheet for survey #%s"),$surveyid);
- return SendEmailMessage($message, sprintf($clang->gT("Statistics Survey #%s"),$surveyid), $to , getBounceEmail($surveyid), $sitename, $ishtml, getBounceEmail($surveyid), $tempFile);
- }
-
- }
- private function getqtypelist($SelectedCode = "T", $ReturnType = "array")
- {
- include("lsrc.config.php");
- global $publicurl;
- //global $sourcefrom, $clang;
-
-
- $qtypes = array(
- "1"=>"Array (Flexible Labels) Dual Scale",
- "5"=>"5 Point Choice",
- "A"=>"Array (5 Point Choice)",
- "B"=>"Array (10 Point Choice)",
- "C"=>"Array (Yes/No/Uncertain)",
- "D"=>"Date",
- "E"=>"Array (Increase, Same, Decrease)",
- "F"=>"Array (Flexible Labels)",
- "G"=>"Gender",
- "H"=>"Array (Flexible Labels) by Column",
- "I"=>"Language Switch",
- "K"=>"Multiple Numerical Input",
- "L"=>"List (Radio)",
- "M"=>"Multiple choice",
- "N"=>"Numerical Input",
- "O"=>"List With Comment",
- "P"=>"Multiple choice with comments",
- "Q"=>"Multiple Short Text",
- "R"=>"Ranking",
- "S"=>"Short Free Text",
- "T"=>"Long Free Text",
- "U"=>"Huge Free Text",
- "W"=>"List (Flexible Labels) (Dropdown)",
- "X"=>"Boilerplate Question",
- "Y"=>"Yes/No",
- "Z"=>"List (Flexible Labels) (Radio)",
- "!"=>"List (Dropdown)",
- ":"=>"Array (Multi Flexible) (Numbers)",
- ";"=>"Array (Multi Flexible) (Text)",
- );
- asort($qtypes);
- if ($ReturnType == "array")
- {return $qtypes;}
-
-
- }
- /**
- * This function removes the UTF-8 Byte Order Mark from a string
- *
- * @param string $str
- * @return string
- */
- private function removeBOM($str=""){
- if(substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) {
- $str=substr($str, 3);
- }
- return $str;
- }
- /**
- * create a token table for the given survey id
- * @param $iVid
- * @return unknown_type
- */
- function createTokenTable($iVid, $att=0)
- {
- global $connect;
- global $dbprefix;
-
- global $databasetabletype;
- global $databasetype;
-
- global $rootdir;
-
- global $defaultlang;
-
- include("lsrc.config.php");
-
- require_once($rootdir.'/classes/core/language.php');
- $clang = new limesurvey_lang($defaultlang);
- // check if the Token table already exists, if not, create it...
- if(!db_tables_exist("{$dbprefix}tokens_".$iVid))
- {
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", Token Table existiert nicht ");
- $createtokentable =
- "tid int I NOT NULL AUTO PRIMARY,\n "
- . "firstname C(40) ,\n "
- . "lastname C(40) ,\n ";
- //MSSQL needs special treatment because of some strangeness in ADODB
- if ($databasetype == 'odbc_mssql' || $databasetype == 'odbtp' || $databasetype == 'mssql_n' || $databasetype == 'mssqlnative')
- {
- $createtokentable.= "email text ,\n "
- ."emailstatus text ,\n ";
- }
- else
- {
- $createtokentable.= "email text ,\n "
- ."emailstatus text ,\n ";
- }
-
- $createtokentable.= "token C(36) ,\n "
- . "language C(25) ,\n "
- . "sent C(17) DEFAULT 'N',\n "
- . "remindersent C(17) DEFAULT 'N',\n "
- . "remindercount int I DEFAULT 0,\n "
- . "completed C(17) DEFAULT 'N',\n "
- . "validfrom date ,\n "
- . "validuntil date ,\n "
- . "mpid I ";
-
- $tabname = "{$dbprefix}tokens_{$iVid}"; # not using db_table_name as it quotes the table name (as does CreateTableSQL)
- $taboptarray = array('mysql' => 'ENGINE='.$databasetabletype.' CHARACTER SET utf8 COLLATE utf8_unicode_ci',
- 'mysqli' => 'ENGINE='.$databasetabletype.' CHARACTER SET utf8 COLLATE utf8_unicode_ci');
- $dict = NewDataDictionary($connect);
- $sqlarray = $dict->CreateTableSQL($tabname, $createtokentable, $taboptarray);
- $execresult = $dict->ExecuteSQLArray($sqlarray, false);
-
- $createtokentableindex = $dict->CreateIndexSQL("{$tabname}_idx", $tabname, array('token'));
- $dict->ExecuteSQLArray($createtokentableindex, false);
- if($execresult!=0)
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", token table created ");
- else
- {
- $this->debugLsrc("WARNING: ".__FUNCTION__." Line ".__LINE__.", token table NOT created ");
- $this->debugLsrc($createtokentable);
- while(list($key, $value)= each($sqlarray) )
- {
- $this->debugLsrc("$key - $value");
- }
- }
- $n=1;
- while($att>=$n)
- {
- $sql = "ALTER TABLE {$dbprefix}tokens_$iVid ADD COLUMN attribute_$n VARCHAR(255); ";
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", Attribute_$n anlegen ,sql: $sql");
- //modify_database("","$sql");
- $connect->Execute($sql);
- ++$n;
- }
- }
- return;
- }
- /**
- * The new one...
- * * Function to insert Participant data while auto creating token if non is supported...
- * @param $sUser
- * @param $sPass
- * @param $iVid
- * @param $sParticipantData (FIRSTNAME;LASTNAME;EMAIL;LANG;TOKEN;VALIDFROM;VALIDTO;attrib1,attrib2,attrib3,attrib4,attrib5::)
- * @return unknown_type
- */
- function insertParticipants($iVid, $sParticipantData)
- {
- global $connect ;
- global $dbprefix ;
- $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
- include("lsrc.config.php");
- //$this = new lsrcHelper();
- // check for appropriate rights
- // if(!$this->checkUser($sUser, $sPass))
- // {
- // throw new SoapFault("Authentication: ", "User or password wrong");
- // exit;
- // }
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", $iVid, $sParticipantData ");
-
- // check if there is a $iVid, else abort
- if(!isset($iVid) || $iVid=='' || $iVid==0 )
- {
- return 0;
- }
-
- // check if the Survey we want to populate with data and tokens already exists, else -> Fault
- if(!$this->surveyExists($iVid))
- {
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", survey does not exist ");
- return 0;
- }
-
- $this->createTokenTable($iVid);
-
- //set the Seperators to default if nothing is set in the lsrc.config.php
- if(!isset($sDatasetSeperator) || $sDatasetSeperator=='')
- {$sDatasetSeperator = "::";}
- if(!isset($sDatafieldSeperator) || $sDatafieldSeperator=='')
- {$sDatafieldSeperator = ";";}
-
- // prepare to fill the table lime_tokens_*
- // this is sensitiv, if the Seperator is not the defined one, almost everything could happen, BE AWARE OF YOUR SEPERATOR!...
- $asDataset = explode($sDatasetSeperator, $sParticipantData);
- // write the tokens to the token_table
- $iCountParticipants = count($asDataset);
- $iInsertedParticipants=0;
-
- foreach($asDataset as $sData)
- {
- //some extra sql statement comes in here later
- $attributes='';
- $attributesData='';
- $validity='';
- $validityData='';
- if($sData!='')
- {
- $asDatafield = explode($sDatafieldSeperator, $sData);
- $checkCnt=1;
-
- $iDataLength = count($asDatafield);
- for($n=0;$n>=$iDataLength;++$n)
- {
- if($asDatafield[$n]=='')
- {
- $asDatafield[$n]=null;
- }
- }
-
- // token generieren
-
-
- while($checkCnt>0)
- {
- $value = sRandomChars(10); //change sRandomChars value for different tokenlength (up to 36 chars max.)
- $cQuery= "select token from ".$dbprefix."tokens_".$iVid." where token = '".$value."'; ";
- $result = db_execute_assoc($cQuery);
- $checkCnt = $result->RecordCount();
- }
- if(!isset($asDatafield[4]) || $asDatafield[4]=='')
- {
- $asDatafield[4]= $value;
- }
-
- //set session language if no language is set
- if(!isset($asDatafield[3]) || $asDatafield[3]=='')
- {
- $asDatafield[3] = $_SESSION['lang'];
- }
-
- //Begin to prepare our statement here. One array for the columns to insert and a parallel array with the values.
- $insertColumns = array('firstname', 'lastname', 'email', 'language', 'token');
- $insertValues = array($asDatafield[0], $asDatafield[1], $asDatafield[2], $asDatafield[3], $asDatafield[4]);
-
- if(isset($asDatafield[5]) && $asDatafield[5]!=null)
- {
- //$validity .= ',validfrom';
- //$validityData .=",'$asDatafield[5]'";
- $insertColumns[] = 'validfrom';
- $insertValues[] = $asDatafield[5];
- }
- if(isset($asDatafield[6]) && $asDatafield[5]!=null)
- {
- //$validity .= ',validuntil';
- //$validityData .=",'$asDatafield[6]'";
- $insertColumns[] = 'validuntil';
- $insertValues[] = $asDatafield[6];
- }
-
- if(isset($asDatafield[7]) && $asDatafield[7]!='')
- {
- $asAttributes = explode(",", $asDatafield[7]);
- $n=0;
- foreach($asAttributes as $attribute)
- {
-
- ++$n;
- //$check = "SELECT attribute_$n FROM {$dbprefix}_tokens_$iVid ";
-
- $sql = "ALTER TABLE {$dbprefix}tokens_$iVid ADD COLUMN attribute_$n VARCHAR(255); ";
- //$attributes.=",attribute_$n";
- //$attributesData.= ",'$attribute'";
- $insertColumns[] = "attribute_$n";
- $insertValues[] = $attribute;
-
- $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", Attribute_$n mit $attribute anlegen ,sql: $sql");
- //modify_database("","$sql");
- $connect->Execute($sql);
-
- }
- }
-
-
- /*$sInsertParti = "INSERT INTO ".$dbprefix."tokens_".$iVid
- ."(firstname,lastname,email,token,"
- ."language $validity $attributes) "
- ."VALUES ('{$asDatafield[0]}', '{$asDatafield[1]}' , '{$asDatafield[2]}', '{$asDatafield[4]}' , "
- ."'{$asDatafield[3]}' $validityData $attributesData) ";*/
-
- $sInsertParti = "INSERT INTO {$dbprefix}tokens_$iVid (".implode(',', $insertColumns).") VALUES (".trim(str_repeat('?,', count($insertColumns)), ',').");";
-
-
-
- $this->debugLsrc("$sInsertParti");
-
-
- // $sInsertParti = "INSERT INTO ".$dbprefix."tokens_".$iVid
- // ."(firstname,lastname,email,emailstatus,token,"
- // ."language,sent,completed,attribute_1,attribute_2,mpid)"
- // ."VALUES ('".$asDatafield[0]."' ,
- // '".$asDatafield[1]."' , '".$asDatafield[2]."' , 'OK' , '".$asDatafield[5]."',
- // '".$_SESSION['lang']."', 'N', 'N', '".$asDatafield[3]."' , '".$asDatafield[4]."' , NULL); ";
- //
- if($connect->Execute($sInsertParti, $insertValues))
- {
- ++$iInsertedParticipants;
- // check participants eMail status and set it
- // see http://data.iana.org/TLD/tlds-alpha-by-domain.txt
- $maxrootdomainlength = 32;
- if(1==preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,".$maxrootdomainlength."}))$/ix", $asDatafield[2]))
- $this->changeTable("tokens_".$iVid,"emailstatus","OK","email='{$asDatafield[2]}'");
-
- // if(isset($asDatafield[7]) && $asDatafield[7]!='')
- // {
- // $asAttributes = explode(",", $asDatafield[7]);
- // $n=0;
- // foreach($asAttributes as $attribute)
- // {
- //
- // ++$n;
- // //$check = "SELECT attribute_$n FROM {$dbprefix}_tokens_$iVid ";
- //
- // $sql = "ALTER TABLE {$dbprefix}tokens_$iVid ADD COLUMN attribute_$n VARCHAR(255); ";
- // $attributes.=",attribute_$n";
- // $attributesData.= ",'$attribute'";
- //
- // $this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", Attribute_$n mit $attribute anlegen ,sql: $sql");
- // //modify_database("","$sql");
- // $connect->Execute($sql);
- //
- //
- // $insert = "UPDATE {$dbprefix}tokens_$iVid "
- // . " SET attribute_$n='$attribute' WHERE token='$asDatafield[4]' ";
- //
- // $this->debugLsrc("$insert");
- // $connect->Execute($insert);
- // }
- // }
- }
-
- }
-
- }
- return "".$iCountParticipants."Datasets given, ".$iInsertedParticipants." rows inserted. ";
- }
- }