aTemplates['sendmail_massend'] = [ 'title' => _t('sendmail', 'Mail: Bulk Mailing'), 'description' => _t('sendmail', 'Notification sent in mass mailing'), 'vars' => [ '{msg}' => _t('sendmail', 'Message Text'), ], 'priority' => 1000, 'enotify' => Users::ENOTIFY_NEWS, ]; $this->app->hooks()->mailSendTemplate(function ($data) { do { if (! isset($data['vars'])) { break; } $tplVars = $data['vars']; if (! isset($data['name'])) { break; } $tplName = $data['name']; if (! isset($data['template'])) { break; } $template = $data['template']; $lang = $data['lang'] ?? $this->locale->getDefaultLanguage(); if (! empty($tplVars['user_id'])) { $force = ! empty($template['force_verified']); $user = Users::model()->userData($tplVars['user_id'], ['email', 'email_verified', 'phone_number', 'phone_number_verified', 'enotify']); if (empty($user)) { return false; } if ($force || ($user['phone_number'] && $user['phone_number_verified'])) { $sendSms = true; if (! $force && ! empty($tplVars['item_id']) && strpos($tplName, 'listings') !== false) { switch ($this->config('listings.items.sms.notify', 0, TYPE_UINT)) { case 1: # для всех break; case 2: # только для премиум if (bff::servicesEnabled('listings')) { $item = Listings::model()->itemData($tplVars['item_id'], ['svc']); if (! Listings::isItemService($item, 'premium')) { $sendSms = false; } } break; default: $sendSms = false; break; } } if ($sendSms) { $this->app->sendSmsTemplate($tplVars, $tplName, ['lang' => $lang]); } } if (! $force && ! $user['email_verified']) { return false; } if (! $force && ! empty($user['email'])) { $data['to'] = $user['email']; } if (! empty($template['enotify']) && ! ($template['enotify'] & $user['enotify'])) { return false; } } } while (false); return $data; }); } public function channelsInit() { return [ static::CHANNEL_SMS => ['t' => _t('sendmail', 'SMS')], ]; } /** * Формирование URL * @param string $key ключ * @param array $params доп. параметры * @param bool $dynamic динамическая ссылка * @return string */ public function url(string $key, array $params = [], $dynamic = false): string { return $this->router->url('sendmail-' . $key, $params, ['dynamic' => $dynamic, 'module' => 'sendmail']); } public function massendBodyMacroses() { $data = parent::massendBodyMacroses(); $data['{unsubscribe}'] = ['t' => _t('sendmail', 'Unsubscribe (URL)')]; foreach ($data as $k => &$v) { $v['id'] = $k; } unset($v); return $data; } }