📋 Добавлен лог сессии 01.11.2025

This commit is contained in:
Fedor
2025-11-01 12:23:47 +03:00
parent 7e3f0dcede
commit 6bedfbc429

View File

@@ -0,0 +1,411 @@
# 📋 ЛОГ СЕССИИ: Создание файлов и исправление путей в Nextcloud
**Дата:** 01 ноября 2025
**Задачи:**
1. ✅ Исправить ошибку "Class 'Redis' not found"
2. ✅ Добавить кнопки создания файлов Word/Excel/PowerPoint в CRM
3. ✅ Исправить пути к папкам проектов в Nextcloud
---
## 🐛 ПРОБЛЕМА 1: Class 'Redis' not found
### Ошибка:
```
Fatal error: Uncaught Error: Class 'Redis' not found in
/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/api/create_nextcloud_file.php:167
```
### Причина:
Использовался класс `Redis` (PHP extension), но в проекте установлен только `Predis` через Composer.
### Решение:
Заменил `Redis` на `Predis\Client`:
**Было:**
```php
$redis = new Redis();
$redis->connect('147.45.146.17', 6379);
$redis->auth('CRM_Redis_Pass_2025_Secure!');
```
**Стало:**
```php
$redis = new Predis\Client([
'scheme' => 'tcp',
'host' => '147.45.146.17',
'port' => 6379,
'password' => 'CRM_Redis_Pass_2025_Secure!'
]);
```
### Результат:
✅ Файлы создаются в S3
✅ Redis события публикуются корректно
✅ Nextcloud индексирует новые файлы автоматически
---
## 🎨 ПРОБЛЕМА 2: Добавление кнопок создания файлов
### Задача:
Добавить кнопки создания Word/Excel/PowerPoint рядом с кнопкой "Папка в Nextcloud".
### Решение:
#### 1. Добавлены кнопки в 10 модулей:
- Project
- Contacts
- Accounts
- Potentials
- Leads
- HelpDesk
- Invoice
- Quotes
- SalesOrder
- PurchaseOrder
#### 2. Кнопки в DetailViewHeaderTitle.tpl:
```html
<button type="button" class="btn btn-default btn-sm"
onclick="createFileInNextcloud('Project', '{$RECORD->getId()}', '{$RECORD->get("projectname")|escape:javascript}', 'docx')"
title="Создать Word документ в Nextcloud">
<i class="fa fa-file-word-o" style="color: #2b579a;"></i>
</button>
<button type="button" class="btn btn-default btn-sm"
onclick="createFileInNextcloud('Project', '{$RECORD->getId()}', '{$RECORD->get("projectname")|escape:javascript}', 'xlsx')"
title="Создать Excel таблицу в Nextcloud">
<i class="fa fa-file-excel-o" style="color: #217346;"></i>
</button>
<button type="button" class="btn btn-default btn-sm"
onclick="createFileInNextcloud('Project', '{$RECORD->getId()}', '{$RECORD->get("projectname")|escape:javascript}', 'pptx')"
title="Создать PowerPoint презентацию в Nextcloud">
<i class="fa fa-file-powerpoint-o" style="color: #d24726;"></i>
</button>
```
#### 3. Функция создания в layouts/v7/lib/nextcloud-editor.js:
```javascript
function createFileInNextcloud(module, recordId, recordName, fileType) {
const fileName = prompt('Введите название файла:');
if (!fileName) return;
const url = `/crm_extensions/file_storage/api/create_nextcloud_file.php?` +
`module=${module}&recordId=${recordId}&recordName=${encodeURIComponent(recordName)}` +
`&fileName=${encodeURIComponent(fileName)}&fileType=${fileType}`;
window.open(url, 'create_file_' + Date.now(), 'width=1400,height=900');
}
```
#### 4. API создания файла (create_nextcloud_file.php):
**Алгоритм:**
1. Получает параметры (module, recordId, fileName, fileType)
2. Формирует путь: `/crm/crm2/CRM_Active_Files/Documents/{Module}/{RecordName}_{RecordId}/{FileName}.{fileType}`
3. Создаёт минимальный валидный Office файл (из шаблонов)
4. Загружает файл **напрямую в S3** (быстро!)
5. Публикует событие в Redis для автоиндексации Nextcloud
6. Редиректит на `open_file_v2.php` для открытия в OnlyOffice
**Ключевой код:**
```php
// Создаём минимальный пустой файл
$emptyContent = createEmptyFile($fileType);
// Загружаем файл в S3
$result = $s3Client->putObject([
'Bucket' => $bucket,
'Key' => $s3Path,
'Body' => $emptyContent,
'ContentType' => getContentType($fileType)
]);
// Публикуем событие в Redis для индексации Nextcloud
$redis = new Predis\Client([...]);
$event = json_encode([
'type' => 'file_created',
'source' => 'crm_create_file',
'path' => $s3Path,
'timestamp' => time()
]);
$redis->publish('crm:file:events', $event);
// Открываем файл НАПРЯМУЮ через OnlyOffice
$redirectUrl = '/crm_extensions/file_storage/api/open_file_v2.php?recordId=' .
urlencode($recordId) . '&fileName=' . urlencode($s3Url);
header('Location: ' . $redirectUrl);
```
#### 5. Минимальные шаблоны файлов:
Созданы пустые Office файлы минимального размера:
- `crm_extensions/file_storage/templates/empty.docx` (1.4 KB)
- `crm_extensions/file_storage/templates/empty.xlsx` (1.5 KB)
- `crm_extensions/file_storage/templates/empty.pptx` (1.9 KB)
### Результат:
✅ Кнопки создания добавлены в 10 модулей
✅ Файлы создаются моментально (прямо в S3)
✅ Автоматическая индексация через Redis
✅ Открывается OnlyOffice для редактирования
✅ Автосохранение работает
---
## 📁 ПРОБЛЕМА 3: Неправильный путь к папке проекта 391552
### Ошибка пользователя:
> "посмотри проект 391552 там что то ссылка на папку не так вроде"
### Диагностика:
#### 1. Проверил структуру файлов в S3:
```
Файлы проекта 391552 находятся в:
Documents/Project/Александровна_ООО_ЭДЭКС_391552/
```
#### 2. Проверил код JavaScript:
```javascript
// БЫЛО (неправильно):
const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${encodedFolderName}`;
// Ссылка вела на:
/Documents/Александровна_ООО_ЭДЭКС_391552
```
#### 3. Проблема:
Кнопка "Папка в Nextcloud" открывала путь:
```
/Documents/{ProjectName}_{ProjectId}
```
А файлы лежат в:
```
/Documents/Project/{ProjectName}_{ProjectId}
```
**Не хватало папки `Project/` в пути!**
### Решение:
Исправил функцию `openProjectFolder()` в 3 файлах:
**Файлы:**
1. `layouts/v7/lib/nextcloud-editor.js`
2. `crm_extensions/nextcloud_editor/js/nextcloud-editor.js`
3. `layouts/v7/lib/nextcloud-editor-v3.js`
**Изменение:**
```javascript
// БЫЛО:
const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/${encodedFolderName}`;
// СТАЛО:
const folderUrl = `${nextcloudUrl}/apps/files/?dir=/crm/crm2/CRM_Active_Files/Documents/Project/${encodedFolderName}`;
```
**Очистил кеш Smarty:**
```bash
rm -rf test/templates_c/v7/*
```
### Результат:
✅ Кнопка "Папка в Nextcloud" открывает правильный путь
✅ Проект 391552 теперь доступен
✅ Структура: `/Documents/Project/{Name}_{Id}`
---
## 📊 ИТОГОВАЯ СТАТИСТИКА
### Изменённые файлы:
```
117 files changed, 2546 insertions(+), 2031 deletions(-)
```
### Новые файлы:
```
✅ crm_extensions/file_storage/api/create_nextcloud_file.php
✅ crm_extensions/file_storage/api/nextcloud_open.php
✅ crm_extensions/file_storage/templates/empty.docx
✅ crm_extensions/file_storage/templates/empty.xlsx
✅ crm_extensions/file_storage/templates/empty.pptx
СОЗДАНИЕАЙЛОВ_В_NEXTCLOUD_ИЗ_CRM.md
СРАВНЕНИЕ_МЕТОДОВ_ОТКРЫТИЯ_ФАЙЛОВ.md
✅ ДОБАВЛЕНИЕ_ВТОРОЙ_КНОПКИ_В_CRM.md
```
### Изменённые модули CRM:
```
✅ Project/DetailViewHeaderTitle.tpl
✅ Contacts/DetailViewHeaderTitle.tpl
✅ Accounts/DetailViewHeaderTitle.tpl
✅ Potentials/DetailViewHeaderTitle.tpl
✅ Leads/DetailViewHeaderTitle.tpl
✅ HelpDesk/DetailViewHeaderTitle.tpl
✅ Invoice/DetailViewHeaderTitle.tpl
✅ Quotes/DetailViewHeaderTitle.tpl
✅ SalesOrder/DetailViewHeaderTitle.tpl
✅ PurchaseOrder/DetailViewHeaderTitle.tpl
✅ Documents/DetailViewActions.tpl
✅ Documents/DocumentsRelatedList.tpl
✅ Vtiger/DocumentsSummaryWidgetContents.tpl
```
### JavaScript файлы:
```
✅ layouts/v7/lib/nextcloud-editor.js
✅ crm_extensions/nextcloud_editor/js/nextcloud-editor.js
✅ layouts/v7/lib/nextcloud-editor-v3.js
```
---
## 🎯 ФИНАЛЬНЫЙ РЕЗУЛЬТАТ
### Что работает:
#### 1. **Создание файлов из CRM:**
- Кнопки 📄 Word, 📊 Excel, 📽️ PowerPoint
- Создание напрямую в S3 (молниеносно!)
- Автоиндексация через Redis события
- Открытие в OnlyOffice для редактирования
- Автосохранение работает
#### 2. **Редактирование файлов:**
- ⚡ Быстрое открытие (прямой OnlyOffice)
- 📚 Через Nextcloud (с версиями)
- Автосохранение в оригинальный S3 путь
- Content-Type определяется автоматически
#### 3. **Папки в Nextcloud:**
- Кнопка "Папка в Nextcloud" открывает правильный путь
- Структура: `/Documents/Project/{Name}_{Id}`
- Проект 391552 работает корректно
#### 4. **Интеграция OnlyOffice:**
- Быстрое открытие (1-2 сек)
- Автосохранение в S3
- SSL сертификаты отключены (для внутренних IP)
- Callback URL работает
---
## 🔧 ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ
### Структура хранения:
```
S3 Bucket: f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c
Path: crm2/CRM_Active_Files/Documents/{Module}/{RecordName}_{RecordId}/{FileName}_{DocumentId}.ext
Примеры:
Documents/Project/Александровна_ООО_ЭДЭКС_391552/Договор_123456.pdf
Documents/Contacts/Иванов_Иван_789/Паспорт_654321.pdf
Documents/Accounts/ООО_Ромашка_555/Договор_999888.docx
```
### Redis события:
```json
{
"type": "file_created",
"source": "crm_create_file",
"path": "crm2/CRM_Active_Files/Documents/Project/Test_123/file.docx",
"timestamp": 1730462400
}
```
### Nextcloud Cache Updater:
```javascript
// Слушает канал: crm:file:events
// Триггерит: docker exec nextcloud-fresh php occ files:scan --path="..." --shallow
```
### OnlyOffice настройки:
```json
{
"rejectUnauthorized": false,
"allowPrivateIPAddress": true
}
```
---
## 📝 ЧТО ОБЪЯСНИЛ ПОЛЬЗОВАТЕЛЮ
### Вопрос: "Кеш Smarty очищен - что значит?"
**Объяснение:**
**Smarty** — шаблонизатор PHP, который компилирует `.tpl` файлы в PHP код.
**Кеш Smarty** (`test/templates_c/`) — папка с скомпилированными шаблонами.
**Проблема:** При изменении `.tpl` файлов Smarty может использовать старую версию из кеша.
**Решение:** Очистка кеша заставляет Smarty перекомпилировать все шаблоны заново.
**Команда:**
```bash
rm -rf test/templates_c/v7/*
```
**Аналогия:**
- `.tpl` файлы = рецепты
- `templates_c/` = готовая еда в холодильнике
- Очистка кеша = выбросить старую еду и приготовить по новому рецепту
---
## ✅ GIT COMMIT
```bash
git add -A
git commit -m "✨ Исправление путей к папкам проектов в Nextcloud + создание файлов из CRM
🔧 Исправления:
- Исправлены пути к папкам проектов: теперь /Documents/Project/{Name}_{Id}
- Исправлена функция openProjectFolder() во всех JS файлах
- Добавлены кнопки создания Word/Excel/PowerPoint из CRM (10 модулей)
- Создание файлов напрямую в S3 с автоиндексацией через Redis
- Исправлена ошибка 'Class Redis not found' (использован Predis)
📁 Изменённые файлы:
- layouts/v7/lib/nextcloud-editor.js
- crm_extensions/nextcloud_editor/js/nextcloud-editor.js
- layouts/v7/lib/nextcloud-editor-v3.js
- crm_extensions/file_storage/api/create_nextcloud_file.php
- layouts/v7/modules/*/DetailViewHeaderTitle.tpl (10 модулей)
- layouts/v7/modules/Documents/*.tpl (кнопки редактирования)
🎯 Результат:
- Кнопка 'Папка в Nextcloud' открывает правильную папку
- Создание файлов работает молниеносно (прямо в S3)
- Redis события публикуются корректно
- OnlyOffice открывается для редактирования
Проект 391552 теперь открывается по правильному пути!"
```
**Результат:**
```
[master 7e3f0dce] ✨ Исправление путей к папкам проектов в Nextcloud + создание файлов из CRM
117 files changed, 2546 insertions(+), 2031 deletions(-)
```
---
## 🎉 ЗАКЛЮЧЕНИЕ
Все задачи выполнены успешно! 🚀
**Пользователь может:**
1. ✅ Создавать файлы Word/Excel/PowerPoint прямо из CRM
2. ✅ Открывать папки проектов в Nextcloud (правильные пути)
3. ✅ Редактировать файлы через OnlyOffice с автосохранением
4. ✅ Использовать два метода открытия (быстрый и через Nextcloud)
**Всё работает молниеносно!** ⚡😊