/** * Load edit email template screen. * @param mixed $iSurveyId * @return */ function index($iSurveyId) { $clang = $this->getController()->lang; $iSurveyId = sanitize_int($iSurveyId); $this->getController()->_css_admin_includes(Yii::app()->getConfig('adminstyleurl') . "superfish.css"); Yii::app()->loadHelper('admin.htmleditor'); Yii::app()->loadHelper('surveytranslator'); Yii::app()->session['FileManagerContext'] = "edit:assessments:{$iSurveyId}"; if (isset($iSurveyId) && getEmailFormat($iSurveyId) == 'html') { $ishtml = true; } else { $ishtml = false; } $grplangs = Survey::model()->findByPk($iSurveyId)->additionalLanguages; $baselang = Survey::model()->findByPk($iSurveyId)->language; array_unshift($grplangs, $baselang); $sEditScript = PrepareEditorScript(false, $this->getController()); $aData['attrib'] = array(); $aData['bplangs'] = array(); $aData['defaulttexts'] = array(); if ($ishtml) { $sEscapeMode = 'html'; } else { $sEscapeMode = 'unescaped'; } foreach ($grplangs as $key => $grouplang) { $aData['bplangs'][$key] = new limesurvey_lang($grouplang); $aData['attrib'][$key] = Surveys_languagesettings::model()->find('surveyls_survey_id = :ssid AND surveyls_language = :ls', array(':ssid' => $iSurveyId, ':ls' => $grouplang)); $aData['defaulttexts'][$key] = templateDefaultTexts($aData['bplangs'][$key], $sEscapeMode); } $aData['surveyid'] = $iSurveyId; $aData['ishtml'] = $ishtml; $aData['grplangs'] = $grplangs; $this->_renderWrappedTemplate('emailtemplates', array('output' => $sEditScript, 'emailtemplates_view'), $aData); }
/** * Defines the customs validation rule lsdefault * * @param mixed $attribute * @param mixed $params */ public function lsdefault($attribute, $params) { $oLanguageTranslator = new Limesurvey_lang($this->surveyls_language); $aDefaultTexts = templateDefaultTexts($oLanguageTranslator, 'unescaped'); $aDefaultTextData = array('surveyls_email_invite_subj' => $aDefaultTexts['invitation_subject'], 'surveyls_email_invite' => $aDefaultTexts['invitation'], 'surveyls_email_remind_subj' => $aDefaultTexts['reminder_subject'], 'surveyls_email_remind' => $aDefaultTexts['reminder'], 'surveyls_email_confirm_subj' => $aDefaultTexts['confirmation_subject'], 'surveyls_email_confirm' => $aDefaultTexts['confirmation'], 'surveyls_email_register_subj' => $aDefaultTexts['registration_subject'], 'surveyls_email_register' => $aDefaultTexts['registration'], 'email_admin_notification_subj' => $aDefaultTexts['admin_notification_subject'], 'email_admin_notification' => $aDefaultTexts['admin_notification'], 'email_admin_responses_subj' => $aDefaultTexts['admin_detailed_notification_subject'], 'email_admin_responses' => $aDefaultTexts['admin_detailed_notification']); if (getEmailFormat($this->surveyls_survey_id) == "html") { $aDefaultTextData['admin_detailed_notification'] = $aDefaultTexts['admin_detailed_notification_css'] . $aDefaultTexts['admin_detailed_notification']; } if (empty($this->{$attribute})) { $this->{$attribute} = $aDefaultTextData[$attribute]; } }
/** * Defines the customs validation rule lsdefault * * @param mixed $attribute * @param mixed $params */ public function lsdefault($attribute, $params) { $oSurvey = Survey::model()->findByPk($this->surveyls_survey_id); $sEmailFormat = $oSurvey->htmlemail == 'Y' ? 'html' : ''; $aDefaultTexts = templateDefaultTexts($this->surveyls_language, 'unescaped', $sEmailFormat); $aDefaultTextData = array('surveyls_email_invite_subj' => $aDefaultTexts['invitation_subject'], 'surveyls_email_invite' => $aDefaultTexts['invitation'], 'surveyls_email_remind_subj' => $aDefaultTexts['reminder_subject'], 'surveyls_email_remind' => $aDefaultTexts['reminder'], 'surveyls_email_confirm_subj' => $aDefaultTexts['confirmation_subject'], 'surveyls_email_confirm' => $aDefaultTexts['confirmation'], 'surveyls_email_register_subj' => $aDefaultTexts['registration_subject'], 'surveyls_email_register' => $aDefaultTexts['registration'], 'email_admin_notification_subj' => $aDefaultTexts['admin_notification_subject'], 'email_admin_notification' => $aDefaultTexts['admin_notification'], 'email_admin_responses_subj' => $aDefaultTexts['admin_detailed_notification_subject'], 'email_admin_responses' => $aDefaultTexts['admin_detailed_notification']); if ($sEmailFormat == "html") { $aDefaultTextData['admin_detailed_notification'] = $aDefaultTexts['admin_detailed_notification_css'] . $aDefaultTexts['admin_detailed_notification']; } if (empty($this->{$attribute})) { $this->{$attribute} = $aDefaultTextData[$attribute]; } }
/** * Load edit email template screen. * @param mixed $iSurveyId * @return */ function index($iSurveyId) { $iSurveyId = sanitize_int($iSurveyId); Yii::app()->loadHelper('admin.htmleditor'); Yii::app()->loadHelper('surveytranslator'); Yii::app()->session['FileManagerContext'] = "edit:emailsettings:{$iSurveyId}"; initKcfinder(); if (isset($iSurveyId) && getEmailFormat($iSurveyId) == 'html') { $ishtml = true; } else { $ishtml = false; } $grplangs = Survey::model()->findByPk($iSurveyId)->additionalLanguages; $baselang = Survey::model()->findByPk($iSurveyId)->language; array_unshift($grplangs, $baselang); $sEditScript = PrepareEditorScript(false, $this->getController()); $aData['attrib'] = array(); $aData['bplangs'] = array(); $aData['defaulttexts'] = array(); if ($ishtml) { $sEscapeMode = 'html'; } else { $sEscapeMode = 'unescaped'; } foreach ($grplangs as $key => $grouplang) { $aData['bplangs'][$key] = $grouplang; $aData['attrib'][$key] = SurveyLanguageSetting::model()->find('surveyls_survey_id = :ssid AND surveyls_language = :ls', array(':ssid' => $iSurveyId, ':ls' => $grouplang)); $aData['attrib'][$key]['attachments'] = unserialize($aData['attrib'][$key]['attachments']); $aData['defaulttexts'][$key] = templateDefaultTexts($aData['bplangs'][$key], $sEscapeMode); } $aData['sidemenu']['state'] = false; $surveyinfo = Survey::model()->findByPk($iSurveyId)->surveyinfo; $aData['title_bar']['title'] = $surveyinfo['surveyls_title'] . "(" . gT("ID") . ":" . $iSurveyId . ")"; $aData['surveybar']['savebutton']['form'] = 'frmeditgroup'; $aData['surveybar']['saveandclosebutton']['form'] = 'frmeditgroup'; if (!Permission::model()->hasSurveyPermission($iSurveyId, 'surveycontent', 'update')) { unset($aData['surveybar']['savebutton']); unset($aData['surveybar']['saveandclosebutton']); } $aData['surveybar']['closebutton']['url'] = 'admin/survey/sa/view/surveyid/' . $iSurveyId; // Close button $aData['surveyid'] = $iSurveyId; $aData['ishtml'] = $ishtml; $aData['grplangs'] = $grplangs; $this->_renderWrappedTemplate('emailtemplates', array('output' => $sEditScript, 'emailtemplates_view'), $aData); }
/** * Load edit email template screen. * @param mixed $iSurveyId * @return */ function index($iSurveyId) { $iSurveyId = sanitize_int($iSurveyId); App()->getClientScript()->registerPackage('jquery-superfish'); Yii::app()->loadHelper('admin.htmleditor'); Yii::app()->loadHelper('surveytranslator'); Yii::app()->session['FileManagerContext'] = "edit:emailsettings:{$iSurveyId}"; initKcfinder(); if (isset($iSurveyId) && getEmailFormat($iSurveyId) == 'html') { $ishtml = true; } else { $ishtml = false; } $grplangs = Survey::model()->findByPk($iSurveyId)->additionalLanguages; $baselang = Survey::model()->findByPk($iSurveyId)->language; array_unshift($grplangs, $baselang); $sEditScript = PrepareEditorScript(false, $this->getController()); $aData['attrib'] = array(); $aData['bplangs'] = array(); $aData['defaulttexts'] = array(); if ($ishtml) { $sEscapeMode = 'html'; } else { $sEscapeMode = 'unescaped'; } foreach ($grplangs as $key => $grouplang) { $aData['bplangs'][$key] = $grouplang; $aData['attrib'][$key] = SurveyLanguageSetting::model()->find('surveyls_survey_id = :ssid AND surveyls_language = :ls', array(':ssid' => $iSurveyId, ':ls' => $grouplang)); $aData['attrib'][$key]['attachments'] = unserialize($aData['attrib'][$key]['attachments']); $aData['defaulttexts'][$key] = templateDefaultTexts($aData['bplangs'][$key], $sEscapeMode); } $aData['surveyid'] = $iSurveyId; $aData['ishtml'] = $ishtml; $aData['grplangs'] = $grplangs; $this->_renderWrappedTemplate('emailtemplates', array('output' => $sEditScript, 'emailtemplates_view'), $aData); }
/** * RPC Routine to add an empty survey with minimum details. * Used as a placeholder for importing groups and/or questions. * * @access public * @param string $sSessionKey Auth credentials * @param int $iSurveyID The wish id of the Survey to add * @param string $sSurveyTitle Title of the new Survey * @param string $sSurveyLanguage Default language of the Survey * @param string $sformat Question appearance format * @return array|string|int */ public function add_survey($sSessionKey, $iSurveyID, $sSurveyTitle, $sSurveyLanguage, $sformat = 'G') { Yii::app()->loadHelper("surveytranslator"); if ($this->_checkSessionKey($sSessionKey)) { if (Permission::model()->hasGlobalPermission('surveys', 'create')) { if ($sSurveyTitle == '' || $sSurveyLanguage == '' || !array_key_exists($sSurveyLanguage, getLanguageDataRestricted()) || !in_array($sformat, array('A', 'G', 'S'))) { return array('status' => 'Faulty parameters'); } $aInsertData = array('template' => 'default', 'owner_id' => Yii::app()->session['loginID'], 'active' => 'N', 'language' => $sSurveyLanguage, 'format' => $sformat); if (!is_null($iSurveyID)) { $aInsertData['wishSID'] = $iSurveyID; } try { $iNewSurveyid = Survey::model()->insertNewSurvey($aInsertData); if (!$iNewSurveyid) { return array('status' => 'Creation Failed'); } $sTitle = html_entity_decode($sSurveyTitle, ENT_QUOTES, "UTF-8"); // Load default email templates for the chosen language $oLanguage = new Limesurvey_lang($sSurveyLanguage); $aDefaultTexts = templateDefaultTexts($oLanguage, 'unescaped'); unset($oLanguage); $bIsHTMLEmail = false; $aInsertData = array('surveyls_survey_id' => $iNewSurveyid, 'surveyls_title' => $sTitle, 'surveyls_language' => $sSurveyLanguage); $langsettings = new SurveyLanguageSetting(); $langsettings->insertNewSurvey($aInsertData); Permission::model()->giveAllSurveyPermissions(Yii::app()->session['loginID'], $iNewSurveyid); return (int) $iNewSurveyid; } catch (Exception $e) { return array('status' => $e->getmessage()); } } else { return array('status' => 'No permission'); } } else { return array('status' => 'Invalid session key'); } }
function upgradeSurveys145() { global $modifyoutputt; $sSurveyQuery = "SELECT * FROM {{surveys}} where notification<>'0'"; $oSurveyResult = dbExecuteAssoc($sSurveyQuery); foreach ($oSurveyResult->readAll() as $aSurveyRow) { if ($aSurveyRow['notification'] == '1' && trim($aSurveyRow['adminemail']) != '') { $aEmailAddresses = explode(';', $aSurveyRow['adminemail']); $sAdminEmailAddress = $aEmailAddresses[0]; $sEmailnNotificationAddresses = implode(';', $aEmailAddresses); $sSurveyUpdateQuery = "update {{surveys}} set adminemail='{$sAdminEmailAddress}', emailnotificationto='{$sEmailnNotificationAddresses}' where sid=" . $aSurveyRow['sid']; Yii::app()->getDb()->createCommand($sSurveyUpdateQuery)->execute(); } else { $aEmailAddresses = explode(';', $aSurveyRow['adminemail']); $sAdminEmailAddress = $aEmailAddresses[0]; $sEmailDetailedNotificationAddresses = implode(';', $aEmailAddresses); if (trim($aSurveyRow['emailresponseto']) != '') { $sEmailDetailedNotificationAddresses = $sEmailDetailedNotificationAddresses . ';' . trim($aSurveyRow['emailresponseto']); } $sSurveyUpdateQuery = "update {{surveys}} set adminemail='{$sAdminEmailAddress}', emailnotificationto='{$sEmailDetailedNotificationAddresses}' where sid=" . $aSurveyRow['sid']; Yii::app()->getDb()->createCommand($sSurveyUpdateQuery)->execute(); } } $sSurveyQuery = "SELECT * FROM {{surveys_languagesettings}}"; $oSurveyResult = Yii::app()->getDb()->createCommand($sSurveyQuery)->queryAll(); foreach ($oSurveyResult as $aSurveyRow) { $sLanguage = App()->language; $aDefaultTexts = templateDefaultTexts($sLanguage, 'unescaped'); unset($sLanguage); $aDefaultTexts['admin_detailed_notification'] = $aDefaultTexts['admin_detailed_notification'] . $aDefaultTexts['admin_detailed_notification_css']; $sSurveyUpdateQuery = "update {{surveys_languagesettings}} set\n email_admin_responses_subj=" . $aDefaultTexts['admin_detailed_notification_subject'] . ",\n email_admin_responses=" . $aDefaultTexts['admin_detailed_notification'] . ",\n email_admin_notification_subj=" . $aDefaultTexts['admin_notification_subject'] . ",\n email_admin_notification=" . $aDefaultTexts['admin_notification'] . "\n where surveyls_survey_id=" . $aSurveyRow['surveyls_survey_id']; Yii::app()->getDb()->createCommand()->update('{{surveys_languagesettings}}', array('email_admin_responses_subj' => $aDefaultTexts['admin_detailed_notification_subject'], 'email_admin_responses' => $aDefaultTexts['admin_detailed_notification'], 'email_admin_notification_subj' => $aDefaultTexts['admin_notification_subject'], 'email_admin_notification' => $aDefaultTexts['admin_notification']), "surveyls_survey_id={$aSurveyRow['surveyls_survey_id']}"); } }
?> </ul> <?php echo CHtml::form(array("admin/tokens/sa/email/surveyid/{$surveyid}"), 'post', array('id'=>'sendinvitation', 'name'=>'sendinvitation', 'class'=>'form30')); ?> <?php foreach ($surveylangs as $language) { //GET SURVEY DETAILS $bplang = new limesurvey_lang($language); if ($ishtml === true) { $aDefaultTexts = templateDefaultTexts($bplang); } else { $aDefaultTexts = templateDefaultTexts($bplang, 'unescaped'); } if (!$thissurvey[$language]['email_invite']) { if ($ishtml === true) { $thissurvey[$language]['email_invite'] = HTMLEscape($aDefaultTexts['invitation']); } else { $thissurvey[$language]['email_invite'] = $aDefaultTexts['invitation']; } } if (!$thissurvey[$language]['email_invite_subj']) { $thissurvey[$language]['email_invite_subj'] = $aDefaultTexts['invitation_subject'];
/** * Handle email action */ public function email($iSurveyId, $tokenids = null) { $iSurveyId = sanitize_int($iSurveyId); $aData = array(); if (!Permission::model()->hasSurveyPermission($iSurveyId, 'tokens', 'update')) { Yii::app()->session['flashmessage'] = gT("You do not have permission to access this page."); $this->getController()->redirect(array("/admin/survey/sa/view/surveyid/{$iSurveyId}")); } // CHECK TO SEE IF A TOKEN TABLE EXISTS FOR THIS SURVEY $bTokenExists = tableExists('{{tokens_' . $iSurveyId . '}}'); if (!$bTokenExists) { self::_newtokentable($iSurveyId); } $surveyinfo = Survey::model()->findByPk($iSurveyId)->surveyinfo; $aData['sidemenu']['state'] = false; $aData["surveyinfo"] = $surveyinfo; $aData['title_bar']['title'] = $surveyinfo['surveyls_title'] . "(" . gT("ID") . ":" . $iSurveyId . ")"; $aData['sidemenu']["token_menu"] = TRUE; $aData['token_bar']['closebutton']['url'] = 'admin/tokens/sa/index/surveyid/' . $iSurveyId; // Close button if (Yii::app()->request->getParam('action') == "remind") { $aData['token_bar']['sendreminderbutton'] = true; } else { $aData['token_bar']['sendinvitationbutton'] = true; // Invitation button } $aTokenIds = $tokenids; if (empty($tokenids)) { $aTokenIds = Yii::app()->request->getPost('tokenids', false); } if (!empty($aTokenIds)) { $aTokenIds = explode('|', $aTokenIds); $aTokenIds = array_filter($aTokenIds); $aTokenIds = array_map('sanitize_int', $aTokenIds); } $aTokenIds = array_unique(array_filter((array) $aTokenIds)); $sSubAction = Yii::app()->request->getParam('action', 'invite'); $sSubAction = !in_array($sSubAction, array('invite', 'remind')) ? 'invite' : $sSubAction; $bEmail = $sSubAction == 'invite'; Yii::app()->loadHelper('surveytranslator'); Yii::app()->loadHelper('/admin/htmleditor'); Yii::app()->loadHelper('replacements'); $token = Token::model($iSurveyId)->find(); $aExampleRow = isset($token) ? $token->attributes : array(); $aSurveyLangs = Survey::model()->findByPk($iSurveyId)->additionalLanguages; $sBaseLanguage = Survey::model()->findByPk($iSurveyId)->language; array_unshift($aSurveyLangs, $sBaseLanguage); $aTokenFields = getTokenFieldsAndNames($iSurveyId, true); $iAttributes = 0; $bHtml = getEmailFormat($iSurveyId) == 'html'; $timeadjust = Yii::app()->getConfig("timeadjust"); $aData['thissurvey'] = getSurveyInfo($iSurveyId); foreach ($aSurveyLangs as $sSurveyLanguage) { $aData['thissurvey'][$sSurveyLanguage] = getSurveyInfo($iSurveyId, $sSurveyLanguage); } $aData['surveyid'] = $iSurveyId; $aData['sSubAction'] = $sSubAction; $aData['bEmail'] = $bEmail; $aData['aSurveyLangs'] = $aData['surveylangs'] = $aSurveyLangs; $aData['baselang'] = $sBaseLanguage; $aData['tokenfields'] = array_keys($aTokenFields); $aData['nrofattributes'] = $iAttributes; $aData['examplerow'] = $aExampleRow; $aData['tokenids'] = $aTokenIds; $aData['ishtml'] = $bHtml; $iMaxEmails = Yii::app()->getConfig('maxemails'); if (Yii::app()->request->getPost('bypassbademails') == '1') { $SQLemailstatuscondition = "emailstatus = 'OK'"; } else { $SQLemailstatuscondition = "emailstatus <> 'OptOut'"; } if (!Yii::app()->request->getPost('ok')) { // Fill empty email template by default text foreach ($aSurveyLangs as $sSurveyLanguage) { $aData['thissurvey'][$sSurveyLanguage] = getSurveyInfo($iSurveyId, $sSurveyLanguage); $bDefaultIsNeeded = empty($aData['surveylangs'][$sSurveyLanguage]["email_{$sSubAction}"]) || empty($aData['surveylangs'][$sSurveyLanguage]["email_{$sSubAction}_subj"]); if ($bDefaultIsNeeded) { $sNewlines = $bHtml ? 'html' : 'text'; // This broke included style for admin_detailed_notification $aDefaultTexts = templateDefaultTexts($sSurveyLanguage, 'unescaped', $sNewlines); if (empty($aData['thissurvey'][$sSurveyLanguage]["email_{$sSubAction}"])) { if ($sSubAction == 'invite') { $aData['thissurvey'][$sSurveyLanguage]["email_{$sSubAction}"] = $aDefaultTexts["invitation"]; } elseif ($sSubAction == 'remind') { $aData['thissurvey'][$sSurveyLanguage]["email_{$sSubAction}"] = $aDefaultTexts["reminder"]; } } } } if (empty($aData['tokenids'])) { $aTokens = TokenDynamic::model($iSurveyId)->findUninvitedIDs($aTokenIds, 0, $bEmail, $SQLemailstatuscondition); foreach ($aTokens as $aToken) { $aData['tokenids'][] = $aToken; } } $this->_renderWrappedTemplate('token', array($sSubAction), $aData); } else { $SQLremindercountcondition = ""; $SQLreminderdelaycondition = ""; if (!$bEmail) { if (Yii::app()->request->getPost('maxremindercount') && Yii::app()->request->getPost('maxremindercount') != '' && intval(Yii::app()->request->getPost('maxremindercount')) != 0) { $SQLremindercountcondition = "remindercount < " . intval(Yii::app()->request->getPost('maxremindercount')); } if (Yii::app()->request->getPost('minreminderdelay') && Yii::app()->request->getPost('minreminderdelay') != '' && intval(Yii::app()->request->getPost('minreminderdelay')) != 0) { // Yii::app()->request->getPost('minreminderdelay') in days (86400 seconds per day) $compareddate = dateShift(date("Y-m-d H:i:s", time() - 86400 * intval(Yii::app()->request->getPost('minreminderdelay'))), "Y-m-d H:i", $timeadjust); $SQLreminderdelaycondition = " ( " . " (remindersent = 'N' AND sent < '" . $compareddate . "') " . " OR " . " (remindersent < '" . $compareddate . "'))"; } } $ctresult = TokenDynamic::model($iSurveyId)->findUninvitedIDs($aTokenIds, 0, $bEmail, $SQLemailstatuscondition, $SQLremindercountcondition, $SQLreminderdelaycondition); $ctcount = count($ctresult); $emresult = TokenDynamic::model($iSurveyId)->findUninvited($aTokenIds, $iMaxEmails, $bEmail, $SQLemailstatuscondition, $SQLremindercountcondition, $SQLreminderdelaycondition); $emcount = count($emresult); foreach ($aSurveyLangs as $language) { // See #08683 : this allow use of {TOKEN:ANYTHING}, directly replaced by {ANYTHING} $sSubject[$language] = preg_replace("/{TOKEN:([A-Z0-9_]+)}/", "{" . "\$1" . "}", Yii::app()->request->getPost('subject_' . $language)); $sMessage[$language] = preg_replace("/{TOKEN:([A-Z0-9_]+)}/", "{" . "\$1" . "}", Yii::app()->request->getPost('message_' . $language)); if ($bHtml) { $sMessage[$language] = html_entity_decode($sMessage[$language], ENT_QUOTES, Yii::app()->getConfig("emailcharset")); } } $tokenoutput = ""; $bInvalidDate = false; $bSendError = false; if ($emcount > 0) { foreach ($emresult as $emrow) { $to = $fieldsarray = array(); $aEmailaddresses = preg_split("/(,|;)/", $emrow['email']); foreach ($aEmailaddresses as $sEmailaddress) { $to[] = $emrow['firstname'] . " " . $emrow['lastname'] . " <{$sEmailaddress}>"; } foreach ($emrow as $attribute => $value) { $fieldsarray['{' . strtoupper($attribute) . '}'] = $value; } $emrow['language'] = trim($emrow['language']); $found = array_search($emrow['language'], $aSurveyLangs); if ($emrow['language'] == '' || $found == false) { $emrow['language'] = $sBaseLanguage; } $from = Yii::app()->request->getPost('from_' . $emrow['language']); $fieldsarray["{OPTOUTURL}"] = $this->getController()->createAbsoluteUrl("/optout/tokens", array("surveyid" => $iSurveyId, "langcode" => trim($emrow['language']), "token" => $emrow['token'])); $fieldsarray["{OPTINURL}"] = $this->getController()->createAbsoluteUrl("/optin/tokens", array("surveyid" => $iSurveyId, "langcode" => trim($emrow['language']), "token" => $emrow['token'])); $fieldsarray["{SURVEYURL}"] = $this->getController()->createAbsoluteUrl("/survey/index", array("sid" => $iSurveyId, "token" => $emrow['token'], "lang" => trim($emrow['language']))); // Add some var for expression : actually only EXPIRY because : it's used in limereplacement field and have good reason to have it. $fieldsarray["{EXPIRY}"] = $aData['thissurvey']["expires"]; $customheaders = array('1' => "X-surveyid: " . $iSurveyId, '2' => "X-tokenid: " . $fieldsarray["{TOKEN}"]); global $maildebug; $modsubject = $sSubject[$emrow['language']]; $modmessage = $sMessage[$emrow['language']]; foreach (array('OPTOUT', 'OPTIN', 'SURVEY') as $key) { $url = $fieldsarray["{{$key}URL}"]; if ($bHtml) { $fieldsarray["{{$key}URL}"] = "<a href='{$url}'>" . htmlspecialchars($url) . '</a>'; } $modsubject = str_replace("@@{$key}URL@@", $url, $modsubject); $modmessage = str_replace("@@{$key}URL@@", $url, $modmessage); } $modsubject = Replacefields($modsubject, $fieldsarray); $modmessage = Replacefields($modmessage, $fieldsarray); if (!App()->request->getPost('bypassdatecontrol') == '1' && trim($emrow['validfrom']) != '' && convertDateTimeFormat($emrow['validfrom'], 'Y-m-d H:i:s', 'U') * 1 > date('U') * 1) { $tokenoutput .= $emrow['tid'] . " " . htmlspecialchars(ReplaceFields(gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) delayed: Token is not yet valid.", 'unescaped'), $fieldsarray)) . "<br />"; $bInvalidDate = true; } elseif (!App()->request->getPost('bypassdatecontrol') == '1' && trim($emrow['validuntil']) != '' && convertDateTimeFormat($emrow['validuntil'], 'Y-m-d H:i:s', 'U') * 1 < date('U') * 1) { $tokenoutput .= $emrow['tid'] . " " . htmlspecialchars(ReplaceFields(gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) skipped: Token is not valid anymore.", 'unescaped'), $fieldsarray)) . "<br />"; $bInvalidDate = true; } else { /* * Get attachments. */ if ($sSubAction == 'invite') { $sTemplate = 'invitation'; } elseif ($sSubAction == 'remind') { $sTemplate = 'reminder'; } $aRelevantAttachments = array(); if (isset($aData['thissurvey'][$emrow['language']]['attachments'])) { $aAttachments = unserialize($aData['thissurvey'][$emrow['language']]['attachments']); if (!empty($aAttachments)) { if (isset($aAttachments[$sTemplate])) { LimeExpressionManager::singleton()->loadTokenInformation($aData['thissurvey']['sid'], $emrow['token']); foreach ($aAttachments[$sTemplate] as $aAttachment) { if (LimeExpressionManager::singleton()->ProcessRelevance($aAttachment['relevance'])) { $aRelevantAttachments[] = $aAttachment['url']; } } } } } /** * Event for email handling. * Parameter type description: * subject rw Body of the email * to rw Recipient(s) * from rw Sender(s) * type r "invitation" or "reminder" * send w If true limesurvey will send the email. Setting this to false will cause limesurvey to assume the mail has been sent by the plugin. * error w If set and "send" is true, log the error as failed email attempt. * token r Raw token data. */ $event = new PluginEvent('beforeTokenEmail'); $event->set('survey', $iSurveyId); $event->set('type', $sTemplate); $event->set('model', $sSubAction); $event->set('subject', $modsubject); $event->set('to', $to); $event->set('body', $modmessage); $event->set('from', $from); $event->set('bounce', getBounceEmail($iSurveyId)); $event->set('token', $emrow); App()->getPluginManager()->dispatchEvent($event); $modsubject = $event->get('subject'); $modmessage = $event->get('body'); $to = $event->get('to'); $from = $event->get('from'); $bounce = $event->get('bounce'); if ($event->get('send', true) == false) { // This is some ancient global used for error reporting instead of a return value from the actual mail function.. $maildebug = $event->get('error', $maildebug); $success = $event->get('error') == null; } else { $success = SendEmailMessage($modmessage, $modsubject, $to, $from, Yii::app()->getConfig("sitename"), $bHtml, $bounce, $aRelevantAttachments, $customheaders); } if ($success) { // Put date into sent $token = Token::model($iSurveyId)->findByPk($emrow['tid']); if ($bEmail) { $tokenoutput .= gT("Invitation sent to:"); $token->sent = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i", Yii::app()->getConfig("timeadjust")); } else { $tokenoutput .= gT("Reminder sent to:"); $token->remindersent = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i", Yii::app()->getConfig("timeadjust")); $token->remindercount++; } $token->save(); //Update central participant survey_links if (!empty($emrow['participant_id'])) { $slquery = SurveyLink::model()->find('participant_id = :pid AND survey_id = :sid AND token_id = :tid', array(':pid' => $emrow['participant_id'], ':sid' => $iSurveyId, ':tid' => $emrow['tid'])); if (!is_null($slquery)) { $slquery->date_invited = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i", Yii::app()->getConfig("timeadjust")); $slquery->save(); } } $tokenoutput .= htmlspecialchars(ReplaceFields("{$emrow['tid']}: {FIRSTNAME} {LASTNAME} ({EMAIL})", $fieldsarray)) . "<br />\n"; if (Yii::app()->getConfig("emailsmtpdebug") == 2) { $tokenoutput .= $maildebug; } } else { $tokenoutput .= htmlspecialchars(ReplaceFields(gT("Email to {FIRSTNAME} {LASTNAME} ({EMAIL}) failed. Error message:", 'unescaped') . " " . $maildebug, $fieldsarray)) . "<br />"; $bSendError = true; } } unset($fieldsarray); } $aViewUrls = array('emailpost'); $aData['tokenoutput'] = $tokenoutput; if ($ctcount > $emcount) { $i = 0; if (isset($aTokenIds)) { while ($i < $iMaxEmails) { array_shift($aTokenIds); $i++; } $aData['tids'] = implode('|', $aTokenIds); } $aData['lefttosend'] = $ctcount - $iMaxEmails; $aViewUrls[] = 'emailwarning'; } else { if (!$bInvalidDate && !$bSendError) { $aData['tokenoutput'] .= "<strong class='result success text-success'>" . gT("All emails were sent.") . "<strong>"; } else { $aData['tokenoutput'] .= "<strong class='result warning text-warning'>" . gT("Not all emails were sent:") . "<strong><ul class='list-unstyled'>"; if ($bInvalidDate) { $aData['tokenoutput'] .= "<li>" . gT("Some entries had a validity date set which was not yet valid or not valid anymore.") . "</li>"; } if ($bSendError) { $aData['tokenoutput'] .= "<li>" . gT("Some emails were not sent because the server did not accept the email(s) or some other error occured.") . "</li>"; } $aData['tokenoutput'] .= '</ul>'; $aData['tokenoutput'] .= '<p><a href="' . App()->createUrl('admin/tokens/sa/index/surveyid/' . $iSurveyId) . '" title="" class="btn btn-default btn-lg">' . gT("Ok") . '</a></p>'; } } $this->_renderWrappedTemplate('token', $aViewUrls, $aData); } else { $aData['sidemenu']['state'] = false; $this->_renderWrappedTemplate('token', array('message' => array('title' => gT("Warning"), 'message' => gT("There were no eligible emails to send. This will be because none satisfied the criteria of:") . "<br/> <ul class='list-unstyled'><li>" . gT("having a valid email address") . "</li>" . "<li>" . gT("not having been sent an invitation already") . "</li>" . "<li>" . gT("not having already completed the survey") . "</li>" . "<li>" . gT("having a token") . "</li></ul>" . '<p><a href="' . App()->createUrl('admin/tokens/sa/index/surveyid/' . $iSurveyId) . '" title="" class="btn btn-default btn-lg">' . gT("Cancel") . '</a></p>')), $aData); } } }