示例#1
0
 public function execute($context)
 {
     $context['APPLICATION']->AddHeadScript('/js/forms.js');
     // проверка прав доступа к разделу
     if (!$this->registry->getModel('Auth')->checkAccess($_SESSION['accesses'], 'project_edit', $context['project']['projectID'])) {
         $this->registry->getModel('Auth')->restrict();
     }
     // выбираем языки проекта
     $projectLanguagesIds = json_decode($context['project']['~languages']);
     $languages = $this->registry->getDbHelper('TranslationHelper')->getSortedLanguages();
     $projectLanguages = array();
     foreach ($languages as $language) {
         if (in_array($language['langID'], $projectLanguagesIds)) {
             $projectLanguages[] = $language;
         }
     }
     $this->component->arResult['projectLanguages'] = $projectLanguages;
     switch ($this->getType()) {
         case '360':
             $events = array('fi' => array('name' => 'MailEvent_360_FirstInvite', 'title' => 'Первое уведомление респондента', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого (или список при групповой отправке)', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента', '#RESPONDENT_FILL_LINK#' => 'Ссылка на опросник респондента (недоступно при групповой отправке)')), 'nrn' => array('name' => 'MailEvent_360_NextRespondentNotification', 'title' => 'Последующее уведомление респондента', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого (или список при групповой отправке)', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента', '#RESPONDENT_FILL_LINK#' => 'Ссылка на опросник респондента (недоступно при групповой отправке)')), 'asr' => array('name' => 'MailEvent_360_AssessSelectRespondents', 'title' => 'Информирование оцениваемого о выборе респондентов', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого', '#ASSESS_LK_LINK#' => 'Ссылка на ЛК оцениваемого')), 'rsa' => array('name' => 'MailEvent_360_RespondentSelectAssess', 'title' => 'Информирование респондента о выборе оцениваемых', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого', '#ASSESS_LK_LINK#' => 'Ссылка на ЛК оцениваемого')), 'rasr' => array('name' => 'MailEvent_360_AssessSelectRespondentsRemind', 'title' => 'Напоминание оцениваемому о выборе респондентов', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого', '#ASSESS_LK_LINK#' => 'Ссылка на ЛК оцениваемого')), 'rrsa' => array('name' => 'MailEvent_360_RespondentSelectAssessRemind', 'title' => 'Напоминание респонденту о выборе оцениваемых', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого', '#ASSESS_LK_LINK#' => 'Ссылка на ЛК оцениваемого')), 'mr' => array('name' => 'MailEvent_360_MemeberReportNotification', 'title' => 'Информирование участника о доступности отчета', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия оцениваемого', '#REPORT_LINK#' => 'Ссылка на отчет')), 'dhr' => array('name' => 'MailEvent_360_DirectHeadReportNotification', 'title' => 'Информирование руководителя о доступности отчета', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#ASSESS#' => 'Имя Фамилия руководителя', '#REPORT_LINK#' => 'Ссылка на отчет', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента')), 'dn' => array('name' => 'MailEvent_360_DirectHeadNotification', 'title' => 'Информирование руководителя о необходимости подтвердить списки респондентов по подчиненным', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#DIRECT_HEAD#' => 'Имя Фамилия руководителя', '#ASSESS#' => 'Имя Фамилия подчиненного', '#LINK#' => 'Ссылка на страницу подтверждения')));
             break;
         case 'testing':
             $events = array('fi' => array('name' => 'MailEvent_Testing_FirstInvite', 'title' => 'Первое уведомление респондента', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента')), 'gkfi' => array('name' => 'MailEvent_Testing_GroupKey_FirstInvite', 'title' => 'Уведомление о групповой ссылке', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#GROUP_KEY_LINK#' => 'Групповая ссылка')), 'gknrn' => array('name' => 'MailEvent_Testing_GroupKey_Notification', 'title' => 'Напоминание о групповой ссылке', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#GROUP_KEY_LINK#' => 'Групповая ссылка')), 'mr' => array('name' => 'MailEvent_Testing_MailResend', 'title' => 'Напоминание о заполнении', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента')), 'rr' => array('name' => 'MailEvent_Testing_RespondentReport', 'title' => 'Письмо с последним отчетом тестируемого', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо')));
             break;
         case 'linear':
             $events = array('fi' => array('name' => 'MailEvent_Linear_FirstInvite', 'title' => 'Первое уведомление респондента', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента', '#SEANCE_LINK#' => 'Ссылка на анкету')), 'nrn' => array('name' => 'MailEvent_Linear_NextRespondentNotification', 'title' => 'Последующее уведомление респондента', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#RESPONDENT_LK_LINK#' => 'Ссылка на ЛК респондента', '#SEANCE_LINK#' => 'Ссылка на анкету')), 'gkfi' => array('name' => 'MailEvent_Linear_GroupKey_FirstInvite', 'title' => 'Уведомление о групповой ссылке', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#GROUP_KEY_LINK#' => 'Групповая ссылка')), 'gknrn' => array('name' => 'MailEvent_Linear_GroupKey_Notification', 'title' => 'Напоминание о групповой ссылке', 'replaces' => array('#EMAIL_FROM#' => 'email адрес отправителя письма', '#EMAIL_TO#' => 'email адрес на который отправляется письмо', '#RESPONDENT#' => 'Имя Фамилия того, кому отправляем письмо', '#GROUP_KEY_LINK#' => 'Групповая ссылка')));
             break;
     }
     $this->component->arResult['events'] = $events;
     // ищем шаблоны проекта
     $projectTemplatesSrc = $this->registry->getDbHelper('EmailHelper')->getProjectTemplates($context['project']['projectID']);
     $projectTemplates = array();
     foreach ($projectTemplatesSrc as $template) {
         // определяем ключ ивента
         $ek = null;
         foreach ($events as $key => $event) {
             if ($event['name'] == $template['event']) {
                 $ek = $key;
                 break;
             }
         }
         if ($ek) {
             $templateData = array('from' => $template['from'], 'to' => $template['to'], 'is_html' => $template['is_html'], 'id' => $template['ID'], 'lang' => array());
             foreach ($projectLanguages as $language) {
                 if ($language['is_default']) {
                     $templateData['lang'][$language['abbr']] = array('theme' => $template['theme'], 'body' => $template['body']);
                 } else {
                     $translation = $this->registry->getDbHelper('TranslationHelper')->findTranslation('email_theme', $template['ID'], $language['langID']);
                     if ($translation) {
                         $templateData['lang'][$language['abbr']]['theme'] = $translation['value'];
                         $templateData['lang'][$language['abbr']]['theme_id'] = $translation['translationID'];
                     }
                     $translation = $this->registry->getDbHelper('TranslationHelper')->findTranslation('email_body', $template['ID'], $language['langID']);
                     if ($translation) {
                         $templateData['lang'][$language['abbr']]['body'] = $translation['value'];
                         $templateData['lang'][$language['abbr']]['body_id'] = $translation['translationID'];
                     }
                 }
             }
             $projectTemplates[$ek] = $templateData;
         }
     }
     $this->component->arResult['projectTemplates'] = $projectTemplates;
     $errors = array();
     if (isset($_POST['send'])) {
         $validations = array();
         $required = array();
         foreach ($events as $ek => $event) {
             $validations[$ek . '_from'] = 'anything';
             $validations[$ek . '_to'] = 'anything';
             $required[] = $ek . '_from';
             $required[] = $ek . '_to';
         }
         $validator = new \Ecoplay\Form\Validator($validations, $required, array());
         if (!$validator->validate($_POST)) {
             $errors = $validator->getErrors();
         } else {
             foreach ($events as $ek => $event) {
                 // заполняем шаблоны для каждого события
                 $translations = array();
                 $templateID = 0;
                 if (array_key_exists($ek, $projectTemplates)) {
                     // шаблон уже есть в базе, обновляем его
                     $templateData = array('from' => trim($_POST[$ek . '_from']), 'to' => trim($_POST[$ek . '_to']), 'is_html' => isset($_POST[$ek . '_is_html']) ? 1 : 0);
                     // обрабатываем языки
                     foreach ($projectLanguages as $language) {
                         if ($language['is_default']) {
                             $templateData['theme'] = trim($_POST[$ek . '_' . $language['abbr'] . '_theme']);
                             $templateData['body'] = trim($_POST[$ek . '_' . $language['abbr'] . '_body']);
                         } else {
                             $translations[$language['langID']] = array('theme' => trim($_POST[$ek . '_' . $language['abbr'] . '_theme']), 'body' => trim($_POST[$ek . '_' . $language['abbr'] . '_body']), 'lang' => $language['abbr']);
                         }
                     }
                     $this->registry->getDbHelper('EmailHelper')->editProjectTemplate($projectTemplates[$ek]['id'], $templateData);
                     $templateID = $projectTemplates[$ek]['id'];
                     $this->registry->getModel('ActionsLogger')->log($context['USER']->GetID(), 'email_template', $templateID, \Ecoplay\Helper\Db\LogsHelper::ACTION_TYPE_CHANGE, $projectTemplatesSrc[$templateID]);
                 } else {
                     // шаблона в базе нет, добавляем его
                     $templateData = array('projectID' => $context['project']['projectID'], 'event' => $event['name'], 'from' => trim($_POST[$ek . '_from']), 'to' => trim($_POST[$ek . '_to']), 'is_html' => isset($_POST[$ek . '_is_html']) ? 1 : 0);
                     // обрабатываем языки
                     foreach ($projectLanguages as $language) {
                         if ($language['is_default']) {
                             $templateData['theme'] = trim($_POST[$ek . '_' . $language['abbr'] . '_theme']);
                             $templateData['body'] = trim($_POST[$ek . '_' . $language['abbr'] . '_body']);
                         } else {
                             $translations[$language['langID']] = array('theme' => trim($_POST[$ek . '_' . $language['abbr'] . '_theme']), 'body' => trim($_POST[$ek . '_' . $language['abbr'] . '_body']), 'lang' => $language['abbr']);
                         }
                     }
                     $templateID = $this->registry->getDbHelper('EmailHelper')->addProjectTemplate($templateData);
                     $this->registry->getModel('ActionsLogger')->log($context['USER']->GetID(), 'email_template', $templateID, \Ecoplay\Helper\Db\LogsHelper::ACTION_TYPE_ADD, null);
                 }
                 foreach ($translations as $langID => $translation) {
                     if ($translation['theme']) {
                         $translationData = array('objectType' => 'email_theme', 'objectID' => $templateID, 'langID' => $langID, 'value' => $translation['theme'], 'projectID' => $context['project']['projectID']);
                         if ($projectTemplates[$ek]['lang'][$translation['lang']]['theme_id']) {
                             $this->registry->getDbHelper('TranslationHelper')->editTranslation($projectTemplates[$ek]['lang'][$translation['lang']]['theme_id'], $translationData);
                         } else {
                             $this->registry->getDbHelper('TranslationHelper')->addTranslation($translationData);
                         }
                     } elseif ($projectTemplates[$ek]['lang'][$translation['lang']]['theme_id']) {
                         // удаляем перевод
                         $this->registry->getDbHelper('TranslationHelper')->deleteTranslationByID($projectTemplates[$ek]['lang'][$translation['lang']]['theme_id']);
                     }
                     if ($translation['body']) {
                         $translationData = array('objectType' => 'email_body', 'objectID' => $templateID, 'langID' => $langID, 'value' => $translation['body'], 'projectID' => $context['project']['projectID']);
                         if ($projectTemplates[$ek]['lang'][$translation['lang']]['body_id']) {
                             $this->registry->getDbHelper('TranslationHelper')->editTranslation($projectTemplates[$ek]['lang'][$translation['lang']]['body_id'], $translationData);
                         } else {
                             $this->registry->getDbHelper('TranslationHelper')->addTranslation($translationData);
                         }
                     } elseif ($projectTemplates[$ek]['lang'][$translation['lang']]['body_id']) {
                         // удаляем перевод
                         $this->registry->getDbHelper('TranslationHelper')->deleteTranslationByID($projectTemplates[$ek]['lang'][$translation['lang']]['body_id']);
                     }
                 }
             }
             if (!isset($_GET['TYPE']) || !$_GET['TYPE']) {
                 LocalRedirect('/projects/' . $context['project']['projectID'] . '/settings/email/');
             } else {
                 LocalRedirect('/projects/' . $context['project']['projectID'] . '/settings/' . $_GET['TYPE'] . '/email/');
             }
         }
     }
     $viewHelper = new \Ecoplay\View\Helper();
     $context['APPLICATION']->SetPageProperty('pageMainTitle', 'Почтовые шаблоны');
     $navigationLinks = array(0 => array('link' => '/', 'title' => 'Главная'), 1 => array('link' => '/projects/', 'title' => 'Проекты'), 2 => array('link' => '/projects/' . $context['project']['projectID'] . '/continuing/stat/', 'title' => $context['project']['project_name']), 3 => array('title' => 'Почтовые шаблоны'));
     $context['APPLICATION']->SetPageProperty('navigation', $viewHelper->generateNavigation($navigationLinks));
     $this->component->arResult['errors'] = $viewHelper->prepareJsonErrors($errors);
     $this->component->IncludeComponentTemplate();
 }