$data = Users::prepareDataForExport($dataKogort, $date, $type);
$messagesSettings = UsersMessageManagement::find()->one();
- $message = '';
- if ($messagesSettings && $messagesSettings->{UsersMessageManagement::TYPE_MESSAGE[$type]}) {
- $message = $messagesSettings->replaceShortcodes(
- $messagesSettings->{UsersMessageManagement::TYPE_MESSAGE[$type]}, $targetDate->target_date
- );
+ $messages = [];
+
+ if ($messagesSettings) {
+ $messageType = UsersMessageManagement::TYPE_MESSAGE[$type];
+
+ if (is_array($messageType)) {
+ foreach ($messageType as $field) {
+ if (!empty($messagesSettings->{$field})) {
+ $messages[$field] = $messagesSettings->replaceShortcodes(
+ $messagesSettings->{$field},
+ $targetDate->target_date
+ );
+ }
+ }
+ } else {
+ if (!empty($messagesSettings->{$messageType})) {
+ $messages[] = $messagesSettings->replaceShortcodes(
+ $messagesSettings->{$messageType},
+ $targetDate->target_date
+ );
+ }
+ }
}
$models = ArrayHelper::index($data, 'phone');
'date' => $date,
'targetDate' => $targetDate,
'type' => $type,
- 'message' => $message,
+ 'messages' => $messages,
]);
}
return ['success' => false, 'message' => 'Invalid request'];
}
-
- public function actionSyncTelegramUsers()
- {
- $remoteDb = Yii::$app->dbRemote;
- $batchSize = 500;
- $offset = 0;
-
- //$csvFilePath = Yii::getAlias('@data/missing_users.csv');
- //$fileHandle = fopen($csvFilePath, 'w');
- //fputcsv($fileHandle, ['phone', 'username', 'chat_id', 'is-blocked', 'is_registered', 'reason'], ';');
-
- while (true) {
- $chatbotUsers = $remoteDb
- ->createCommand('SELECT * FROM chatbot_telegram_users LIMIT :limit OFFSET :offset', [
- ':limit' => $batchSize,
- ':offset' => $offset,
- ])->queryAll();
-
- if (empty($chatbotUsers)) {
- break;
- }
- if ($offset == 1500) {
- break;
- }
-
- foreach ($chatbotUsers as $remoteUser) {
- $phone = $remoteUser['phone'];
- $chatId = $remoteUser['chat_id'];
- $username = $remoteUser['username'];
- $firstName = $remoteUser['first_name'];
- $isBlocked = (int)$remoteUser['is_blocked'];
- $isRegistered = (int)$remoteUser['is_registered'];
-
- $user = UsersTelegram::findOne(['chat_id' => $chatId]);
-
- if (!$user) {
- $user = new UsersTelegram([
- 'chat_id' => $chatId,
- 'phone' => $phone,
- 'username' => $username ?? 'Клиент из чатбота',
- 'first_name' => $firstName ?? 'Клиент из чатбота',
- 'is_blocked' => $isBlocked,
- 'is_registered' => $isRegistered,
- ]);
- $user->save(false);
- }
- if (
- $user->is_blocked != $isBlocked ||
- $user->is_registered != $isRegistered ||
- $user->phone != $phone
- ) {
- $user->is_blocked = $isBlocked;
- $user->is_registered = $isRegistered;
- $user->phone = $phone;
- }
-
- $user->save(false);
-
- if (empty($phone)) {
- // fputcsv($fileHandle, [$phone, $username, $chatId, $isBlocked, $isRegistered, 'Отсутствует телефон'], ';');
- continue;
- }
-
- $existingLog = UsersTelegramLog::find()
- ->where(['phone' => $phone, 'date_end' => null])
- ->one();
-
- if ($existingLog) {
- if (
- $existingLog->is_blocked != $isBlocked ||
- $existingLog->is_registered != $isRegistered
- ) {
- $existingLog->date_end = date('Y-m-d H:i:s');
- $existingLog->save(false);
-
- $this->createTelegramLog($phone, $isBlocked, $isRegistered);
- }
- } else {
- $this->createTelegramLog($phone, $isBlocked, $isRegistered);
- }
-
-
- }
-
- $offset += $batchSize;
-
- }
-
- // fclose($fileHandle);
-
- return 'ok';
- }
-
- /**
- * Создает новую запись в таблице users_telegram_log.
- *
- * @param string $phone
- * @param int $isBlocked
- * @param int $isRegistered
- */
- protected function createTelegramLog($phone, $isBlocked, $isRegistered)
- {
- $log = new UsersTelegramLog([
- 'phone' => $phone,
- 'is_blocked' => $isBlocked,
- 'is_registered' => $isRegistered,
- 'active' => ($isBlocked == 0 && $isRegistered == 1) ? 1 : 0,
- ]);
- $log->save(false);
- }
}
use yii\grid\GridView;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
+use yii_app\records\UsersMessageManagement;
/** @var yii\data\ActiveDataProvider $dataProvider */
/** @var string $date */
/** @var string $targetDate */
/** @var string $type */
-/** @var string $message */
+/** @var array $messages */
$this->title = 'Когорта пользователей';
$this->params['breadcrumbs'][] = $this->title;
];
}, $attributes);
array_unshift($columns, ['class' => 'yii\grid\SerialColumn']);
-if ($message == '') {
- $message = Html::a('Нет сообщения для рассылки - сформируйте ее в интерфейсе', ['index'], ['class' => 'btn btn-link']);
-} else {
- $message = Html::encode($message);
-}
+
+
?>
<?= Html::a('Назад', ['index'], ['class' => 'btn btn-primary m-5']) ?>
<?php if ($type != 'call') { ?>
<div class="row mb-6">
+<?php foreach ($messages as $key => $message) {
+ if ($message == '') {
+ $message = Html::a('Нет сообщения для рассылки - сформируйте ее в интерфейсе', ['index'], ['class' => 'btn btn-link']);
+ } else {
+ $message = Html::encode($message);
+ }
+?>
<div class="col-lg-4 col-md-6 col-sm-8 col-xs-12 col-xl-4">
- <div class="accordion accordion-flush" id="accordionFlushExample">
+ <div class="accordion accordion-flush" id="accordionFlushExample<?php echo $key ?>">
<div class="accordion-item">
- <h2 class="accordion-header" id="flush-headingOne">
- <button class="accordion-button border collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseOne" aria-expanded="false" aria-controls="flush-collapseOne">
- Сообщение когорты:
+ <h2 class="accordion-header" id="flush-headingOne<?php echo $key ?>">
+ <button class="accordion-button border collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseOne<?php echo $key ?>" aria-expanded="false" aria-controls="flush-collapseOne<?php echo $key ?>">
+ <?php echo UsersMessageManagement::TYPE_MESSAGE_LABELS[$key] ?>:
</button>
</h2>
- <div id="flush-collapseOne" class="accordion-collapse collapse" aria-labelledby="flush-headingOne" data-bs-parent="#accordionFlushExample">
+ <div id="flush-collapseOne<?php echo $key ?>" class="accordion-collapse collapse" aria-labelledby="flush-headingOne<?php echo $key ?>" data-bs-parent="#accordionFlushExample<?php echo $key ?>">
<div class="accordion-body card card-body border"><?= $message ?></div>
</div>
</div>
</div>
</div>
+<?php } ?>
</div>
<?php } ?>