|
|
![изображение](uploads/08b53f9b1ed3b3a419be90cc489b424f/изображение.png)
|
|
|
|
|
|
## Содержание
|
|
|
1. [Как отправить презентацию?](#как-отправить-презентацию?)
|
|
|
2. [Как это работает?](#как-это-работает?)
|
|
|
3. [Где ранятся записи?](#где-ранятся-записи?)
|
|
|
3.1. [Как убрать чекбокс?](#как-убрать-чекбокс?)
|
|
|
|
|
|
## Как отправить презентацию?
|
|
|
На текущий момент рассылка презентаций происходит только с [Foodretail](https://foodretail.ru/litecat/). И для того, чтобы появилась возможность отправки презентации, необходимо быть авторизированным на сайте, с правами доступа — **менеджера**.
|
|
|
|
|
|
Сама панель отправки презентаций находиться в **Менеджерском разделе** компании. Для примера, есть на сайте [Foodretail тестовая компания](https://foodretail.ru/litecat/testmeat-21-vek-378984#manager-section), на ее примере далее будет продолжаться повествование.
|
|
|
|
|
|
![изображение](uploads/ca3fdb3540daf37511a4ac688ab71742/изображение.png)
|
|
|
Рис. 1.1. - Пример панели рассылки.
|
|
|
|
|
|
На примере _Рис. 1.1._, можно увидеть, что отправка происходит с помощью чек боксов.
|
|
|
|
|
|
Причем:
|
|
|
| Отмеченные чек боксы | Не отмеченные чек боксы |
|
|
|
| ------ | ------ |
|
|
|
| Рассылка производилась не ранее 6 месяцев. | Рассылки либо не было, либо в базе данных сохранились значения и прошло более 6 месяцев. |
|
|
|
|
|
|
### Сама рассылка происходит по следующему алгоритму:
|
|
|
1. Нажимаем на нужный нам чекбокс;
|
|
|
2. Подтверждаем рассылку, нажав на кнопку "ОК".
|
|
|
|
|
|
![изображение](uploads/0cd80a20e15c9d601675d34cbc5835e8/изображение.png)
|
|
|
Рис. 1.2. - Пример отправки письма с презентацией от сайта **Meatinfo**.
|
|
|
|
|
|
Так же, нужно уточнить, что с недавней [задачей](http://lab.inline-ltd.ru/m16tech/m16/-/issues/5915), письма перестали отправляться с отправителем `Foodretail <noreply@foodretail.ru>`.
|
|
|
Теперь каждая презентация сайта отправляется с названием самого сайта.
|
|
|
|
|
|
**И письма приходят не сотрудникам компании, а на электронный адрес самой компании.**
|
|
|
|
|
|
["Как убрать чекбокс?" - смотри здесь.](#как-убрать-чекбокс?)
|
|
|
|
|
|
## Как это работает?
|
|
|
**Controller**
|
|
|
В файле `LitecatModule` есть блок кода в котором происходит вывод во `View` элемент данных презентаций. Данный массив `$presentations`, хранит название и `id` презентации. И в этом же блоке кода происходит поиск последних отправленных презентаций для текущей компании.
|
|
|
```php
|
|
|
if ($this->isManager) {
|
|
|
####### presentations #############
|
|
|
$presentations = [
|
|
|
1 => ['id' => 1, 'title' => "Grainboard - Портал участников рынка зерна, муки и смежных отраслей"],
|
|
|
2 => ['id' => 2, 'title' => "Milknet - Портал участников рынка молочных продуктов"],
|
|
|
3 => ['id' => 3, 'title' => "Fruitinfo - Портал участников рынка овощей, фруктов и смежных отраслей"],
|
|
|
4 => ['id' => 4, 'title' => "MeatInfo - Портал для участников рынка мяса и мясопродуктов"],
|
|
|
5 => ['id' => 5, 'title' => "Fishretail.ru - Портал для участников рыбного рынка"],
|
|
|
];
|
|
|
$companyId = (int)$companyData['id'];
|
|
|
|
|
|
$res = \AE_Registry::get('db')->query(
|
|
|
"SELECT presentation_id
|
|
|
FROM catalogue.company_presentation
|
|
|
WHERE date(created_at) >= date_sub(date(now()), interval 6 month)
|
|
|
AND company_id={$companyId}"
|
|
|
);
|
|
|
while ($row = $res->fetch()) {
|
|
|
$presentations[$row['presentation_id']]['sent'] = 1;
|
|
|
}
|
|
|
$this->assign('presentations', $presentations);
|
|
|
####################
|
|
|
}
|
|
|
```
|
|
|
|
|
|
**View**
|
|
|
Все что нужно знать, так это отображение чек боксов и связь с моделью происходит в файле `m16/layout/litecat/details.html`.
|
|
|
Отправка осуществляется с помощью JS. Пример с файла `details.html`:
|
|
|
```js
|
|
|
$(document).ready(function() {
|
|
|
$('ul#presentations input').on('click', function() {
|
|
|
if (!confirm("Отправить презентацию " + $(this).parent().text() + "?")) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
$(this).attr('disabled', 'disabled');
|
|
|
var presId = this.value;
|
|
|
|
|
|
$.get( "/litecat/setPresentation?pres_id=" + presId + '&comp_id={$companyData.id}', function( data2 ) {
|
|
|
console.log('');
|
|
|
}, 'json');
|
|
|
});
|
|
|
});
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Model**
|
|
|
Модель принимает два параметра:
|
|
|
- `comp_id`: ИД компании,
|
|
|
- `pres_id`: ИД презентации.
|
|
|
|
|
|
Далее, через проверку на ранее отправленные презентации происходит попытка рассылки.
|
|
|
```php
|
|
|
$res = $db->query(
|
|
|
"SELECT *
|
|
|
FROM catalogue.company_presentation
|
|
|
WHERE company_id=$companyId AND presentation_id=$presId"
|
|
|
);
|
|
|
```
|
|
|
|
|
|
Теперь, для того, чтобы понять, откуда берутся письма мы переходим в папку `litecat/presentations/`.
|
|
|
![изображение](uploads/5d419b9a1d2837bfed50f52b2606824f/изображение.png)
|
|
|
Рис. 2.1. - Папка с письмами презентаций.
|
|
|
|
|
|
Идем далее по коду. И видим следующие строки. Они означают, что презентация не будет отправлена, если у компании не указан хотя бы один email адрес и конфигурация — не продакшн.
|
|
|
```php
|
|
|
if ($emails && \AE_Registry::get('config')->production) {
|
|
|
```
|
|
|
И, для того чтобы тестировать отправку, необходимо временно отключить данное условие на локальном, либо на стейдж сервере.
|
|
|
|
|
|
Ну и последнее, чтобы просмотреть презентации из писем. Идем в папку `/www/files/presentations/`
|
|
|
|
|
|
![изображение](uploads/98827352d02b45c1ae11a0011bd62e8e/изображение.png)
|
|
|
Рис. 2.2. - Папка с файлами презентаций.
|
|
|
|
|
|
## Где ранятся записи?
|
|
|
![изображение](uploads/7865c8f05bddf86708d9a5cc6f8af55f/изображение.png)
|
|
|
Рис 3.1. - Таблица отправленных презентации.
|
|
|
|
|
|
Вся информация об отправленных презентаций находиться в `catalogue.company_presentation`.
|
|
|
|
|
|
### Как убрать чекбокс?
|
|
|
Для этого в [adminer](http://adminer-prod.a505.ru/?server=dbhost&username=root&db=catalogue&select=company_presentation) находим нужную нам компанию по `comany_id` и удаляем/подменяем запись. Таким образом, чекбокс должен стать **uncheck**. И презентацию можно повторно отправить. |