📋 Добавлен лог сессии 01.11.2025
This commit is contained in:
411
ЛОГ_СЕССИИ_01_11_2025_СОЗДАНИЕ_ФАЙЛОВ_И_ИСПРАВЛЕНИЕ_ПУТЕЙ.md
Normal file
411
ЛОГ_СЕССИИ_01_11_2025_СОЗДАНИЕ_ФАЙЛОВ_И_ИСПРАВЛЕНИЕ_ПУТЕЙ.md
Normal 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)
|
||||
|
||||
**Всё работает молниеносно!** ⚡😊
|
||||
|
||||
Reference in New Issue
Block a user