Yii::app()->lang иногда не работает с LimeSurvey
Я работаю над пользовательским сценарием для автоматической отправки приглашений и напоминаний. У меня все работает нормально до определенного момента. Моя функция для отправки приглашений выглядит так:
function sendInvites($iSurveyID) {
$oSurvey = Survey::model()->findByPk($iSurveyID);
if (!isset($oSurvey)) {
die("could not load survey");
}
if(!tableExists("{{tokens_$iSurveyID}}")) {
die("survey has no tokens or something");
}
$SQLemailstatuscondition = "emailstatus = 'OK'";
$SQLremindercountcondition = '';
$SQLreminderdelaycondition = '';
$iMaxEmails = (int)Yii::app()->getConfig("maxemails");
$iMaxReminders = 1;
if(!is_null($iMaxReminders)) {
$SQLremindercountcondition = "remindercount < " . $iMaxReminders;
}
$oTokens = Tokens_dynamic::model($iSurveyID);
$aResultTokens = $oTokens->findUninvited(false, $iMaxEmails, true, $SQLemailstatuscondition, $SQLremindercountcondition, $SQLreminderdelaycondition);
if (empty($aResultTokens)) {
die("No tokens to send invites to");
}
$aResult = emailTokens($iSurveyID, $aResultTokens, 'invite');
}
У меня также есть простой маленький файл, который запускает Yii:
Yii::createApplication('LSYii_Application', APPPATH . 'config/config' . EXT);
Yii::app()->loadHelper('admin/token');
Yii::app()->loadHelper('common');
Все работает, как и ожидалось, до тех пор, пока я не попытаюсь отправить электронные письма на токены. Я отследил проблему до следующего, в одной из функций, вызываемых emailTokens:
$clang = Yii::app()->lang;
$aBasicTokenFields=array('firstname'=>array(
'description'=>$clang->gT('First name'),
'mandatory'=>'N',
'showregister'=>'Y'
),
Часть Yii::app()->lang, кажется, вызывает проблемы, потому что тогда php не может вызвать метод gT. Однако, когда LimeSurvey работает "правильно", этого никогда не происходит. Я даже не могу найти, где "lang" находится в источнике LimeSurvey.
Что я могу сделать, чтобы это работало?
2 ответа
Может быть
Yii::import('application.libraries.Limesurvey_lang');
$clang = new Limesurvey_lang($oTokens->language);
Почему вы делаете это так тяжело для себя и не используете API RemoteControl2? См. http://manual.limesurvey.org/wiki/RemoteControl_2_API.
На этой странице вы также найдете пример сценария PHP.