Skip to content

Commit

Permalink
Dev Ported email attachment feature to 2.05
Browse files Browse the repository at this point in the history
  • Loading branch information
SamMousa committed Mar 20, 2013
1 parent cf78898 commit fd2c43e
Show file tree
Hide file tree
Showing 5 changed files with 285 additions and 177 deletions.
65 changes: 52 additions & 13 deletions application/controllers/admin/emailtemplates.php
Expand Up @@ -67,6 +67,7 @@ function index($iSurveyId)
{
$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['attrib'][$key]['attachments'] = unserialize($aData['attrib'][$key]['attachments']);
$aData['defaulttexts'][$key] = templateDefaultTexts($aData['bplangs'][$key],$sEscapeMode);
}

Expand All @@ -82,6 +83,10 @@ function index($iSurveyId)
*/
function update($iSurveyId)
{
$uploadUrl = Yii::app()->getBaseUrl(true) . Yii::app()->getConfig('uploadurl');
// We need the real path since we check that the resolved file name starts with this path.
$uploadDir = realpath(Yii::app()->getConfig('uploaddir'));

$clang = $this->getController()->lang;
if (Permission::model()->hasSurveyPermission($iSurveyId, 'surveylocale','update'))
{
Expand All @@ -90,20 +95,54 @@ function update($iSurveyId)
array_filter($languagelist);
foreach ($languagelist as $langname)
{
if (isset($_POST['attachments'][$langname]))
{
foreach ($_POST['attachments'][$langname] as $template => &$attachments)
{
foreach ($attachments as $index => &$attachment)
{
// We again take the real path.
$localName = realpath(str_replace($uploadUrl, $uploadDir, $attachment['url']));
if ($localName !== false)
{
if (strpos($localName, $uploadDir) === 0)
{
$attachment['url'] = $localName;
$attachment['size'] = filesize($localName);
}
else
{
unset($attachments[$index]);
}
}
else
{
unset($attachments[$index]);
}
}
unset($attachments);
}
}
else
{
$_POST['attachments'][$langname] = array();
}

$attributes = array(
'surveyls_email_invite_subj' => $_POST['email_invite_subj_'.$langname],
'surveyls_email_invite' => $_POST['email_invite_'.$langname],
'surveyls_email_remind_subj' => $_POST['email_remind_subj_'.$langname],
'surveyls_email_remind' => $_POST['email_remind_'.$langname],
'surveyls_email_register_subj' => $_POST['email_register_subj_'.$langname],
'surveyls_email_register' => $_POST['email_register_'.$langname],
'surveyls_email_confirm_subj' => $_POST['email_confirm_subj_'.$langname],
'surveyls_email_confirm' => $_POST['email_confirm_'.$langname],
'email_admin_notification_subj' => $_POST['email_admin_notification_subj_'.$langname],
'email_admin_notification' => $_POST['email_admin_notification_'.$langname],
'email_admin_responses_subj' => $_POST['email_admin_responses_subj_'.$langname],
'email_admin_responses' => $_POST['email_admin_responses_'.$langname]
);
'surveyls_email_invite_subj' => $_POST['email_invitation_subj_'.$langname],
'surveyls_email_invite' => $_POST['email_invitation_'.$langname],
'surveyls_email_remind_subj' => $_POST['email_reminder_subj_'.$langname],
'surveyls_email_remind' => $_POST['email_reminder_'.$langname],
'surveyls_email_register_subj' => $_POST['email_registration_subj_'.$langname],
'surveyls_email_register' => $_POST['email_registration_'.$langname],
'surveyls_email_confirm_subj' => $_POST['email_confirmation_subj_'.$langname],
'surveyls_email_confirm' => $_POST['email_confirmation_'.$langname],
'email_admin_notification_subj' => $_POST['email_admin_notification_subj_'.$langname],
'email_admin_notification' => $_POST['email_admin_notification_'.$langname],
'email_admin_responses_subj' => $_POST['email_admin_detailed_notification_subj_'.$langname],
'email_admin_responses' => $_POST['email_admin_detailed_notification_'.$langname],
'attachments' => serialize($_POST['attachments'][$langname])
);
$usquery = Surveys_languagesettings::model()->updateAll($attributes,'surveyls_survey_id = :ssid AND surveyls_language = :sl', array(':ssid' => $iSurveyId, ':sl' => $langname));
}
Yii::app()->session['flashmessage'] = $clang->gT("Email templates successfully saved.");
Expand Down
34 changes: 33 additions & 1 deletion application/controllers/admin/tokens.php
Expand Up @@ -1366,7 +1366,39 @@ function email($iSurveyId, $tokenids = null)
}
else
{
if (SendEmailMessage($modmessage, $modsubject, $to, $from, Yii::app()->getConfig("sitename"), $bHtml, getBounceEmail($iSurveyId), null, $customheaders))
/*
* Get attachments.
*/
if ($sSubAction == 'email')
{
$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'];
}
}
}
}
}

if (SendEmailMessage($modmessage, $modsubject, $to, $from, Yii::app()->getConfig("sitename"), $bHtml, getBounceEmail($iSurveyId), $aRelevantAttachments, $customheaders))
{
// Put date into sent
$udequery = Tokens_dynamic::model($iSurveyId)->findByPk($emrow['tid']);
Expand Down
61 changes: 55 additions & 6 deletions application/helpers/frontend_helper.php
Expand Up @@ -1031,13 +1031,28 @@ function submittokens($quotaexit=false)
}

//Only send confirmation email if there is a valid email address
if (validateEmailAddress($to))
if (validateEmailAddress($to)) {
$aAttachments = unserialize($thissurvey['attachments']);

$aRelevantAttachments = array();
/*
* Iterate through attachments and check them for relevance.
*/
if (isset($aAttachments['confirmation']))
{
SendEmailMessage($message, $subject, $to, $from, $sitename,$ishtml);
foreach ($aAttachments['confirmation'] as $aAttachment)
{
$relevance = $aAttachment['relevance'];
// If the attachment is relevant it will be added to the mail.
if (LimeExpressionManager::ProcessRelevance($relevance) && file_exists($aAttachment['url']))
{
$aRelevantAttachments[] = $aAttachment['url'];
}
}
}
SendEmailMessage($message, $subject, $to, $from, $sitename, $ishtml, null, $aRelevantAttachments);
}
else
{
} else {
// Leave it to send optional confirmation at closed token
}
}
Expand Down Expand Up @@ -1178,6 +1193,24 @@ function sendSubmitNotifications($surveyid)

$sFrom = $thissurvey['adminname'].' <'.$thissurvey['adminemail'].'>';

$aAttachments = unserialize($thissurvey['attachments']);

$aRelevantAttachments = array();
/*
* Iterate through attachments and check them for relevance.
*/
if (isset($aAttachments['admin_notification']))
{
foreach ($aAttachments['admin_notification'] as $aAttachment)
{
$relevance = $aAttachment['relevance'];
// If the attachment is relevant it will be added to the mail.
if (LimeExpressionManager::ProcessRelevance($relevance) && file_exists($aAttachment['url']))
{
$aRelevantAttachments[] = $aAttachment['url'];
}
}
}

$redata=compact(array_keys(get_defined_vars()));
if (count($aEmailNotificationTo)>0)
Expand All @@ -1186,7 +1219,7 @@ function sendSubmitNotifications($surveyid)
$sSubject=templatereplace($thissurvey['email_admin_notification_subj'],$aReplacementVars,$redata,'frontend_helper[1399]',($thissurvey['anonymized'] == "Y"));
foreach ($aEmailNotificationTo as $sRecipient)
{
if (!SendEmailMessage($sMessage, $sSubject, $sRecipient, $sFrom, $sitename, true, getBounceEmail($surveyid)))
if (!SendEmailMessage($sMessage, $sSubject, $sRecipient, $sFrom, $sitename, true, getBounceEmail($surveyid), $aRelevantAttachments))
{
if ($debug>0)
{
Expand All @@ -1196,13 +1229,29 @@ function sendSubmitNotifications($surveyid)
}
}

$aRelevantAttachments = array();
/*
* Iterate through attachments and check them for relevance.
*/
if (isset($aAttachments['detailed_admin_notification']))
{
foreach ($aAttachments['detailed_admin_notification'] as $aAttachment)
{
$relevance = $aAttachment['relevance'];
// If the attachment is relevant it will be added to the mail.
if (LimeExpressionManager::ProcessRelevance($relevance) && file_exists($aAttachment['url']))
{
$aRelevantAttachments[] = $aAttachment['url'];
}
}
}
if (count($aEmailResponseTo)>0)
{
$sMessage=templatereplace($thissurvey['email_admin_responses'],$aReplacementVars,$redata,'frontend_helper[1414]',($thissurvey['anonymized'] == "Y"));
$sSubject=templatereplace($thissurvey['email_admin_responses_subj'],$aReplacementVars,$redata,'frontend_helper[1415]',($thissurvey['anonymized'] == "Y"));
foreach ($aEmailResponseTo as $sRecipient)
{
if (!SendEmailMessage($sMessage, $sSubject, $sRecipient, $sFrom, $sitename, true, getBounceEmail($surveyid)))
if (!SendEmailMessage($sMessage, $sSubject, $sRecipient, $sFrom, $sitename, true, getBounceEmail($surveyid), $aRelevantAttachments))
{
if ($debug>0)
{
Expand Down

0 comments on commit fd2c43e

Please sign in to comment.