98 lines
3.0 KiB
PHP
98 lines
3.0 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* Открытие файла через Nextcloud + OnlyOffice
|
|||
|
|
* Для сравнения с прямым OnlyOffice
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
require_once '/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/shared/EnvLoader.php';
|
|||
|
|
EnvLoader::load('/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/.env');
|
|||
|
|
|
|||
|
|
error_reporting(E_ALL);
|
|||
|
|
ini_set('display_errors', 1);
|
|||
|
|
|
|||
|
|
$fileName = isset($_GET['fileName']) ? $_GET['fileName'] : '';
|
|||
|
|
$recordId = isset($_GET['recordId']) ? $_GET['recordId'] : '';
|
|||
|
|
|
|||
|
|
if (empty($fileName)) {
|
|||
|
|
die("❌ fileName не указан");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Извлекаем S3 путь
|
|||
|
|
$s3Path = '';
|
|||
|
|
if (strpos($fileName, 'http') === 0) {
|
|||
|
|
$fileName = urldecode($fileName);
|
|||
|
|
$bucketId = 'f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c';
|
|||
|
|
$pos = strpos($fileName, $bucketId . '/');
|
|||
|
|
if ($pos !== false) {
|
|||
|
|
$s3Path = substr($fileName, $pos + strlen($bucketId) + 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (empty($s3Path)) {
|
|||
|
|
die("❌ Не удалось извлечь путь из URL");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Nextcloud credentials
|
|||
|
|
$nextcloudUrl = 'https://office.clientright.ru:8443';
|
|||
|
|
$username = 'admin';
|
|||
|
|
$password = 'office';
|
|||
|
|
|
|||
|
|
// Формируем WebDAV путь
|
|||
|
|
$ncPath = '/crm/' . $s3Path;
|
|||
|
|
$webdavUrl = $nextcloudUrl . '/remote.php/dav/files/' . $username . $ncPath;
|
|||
|
|
|
|||
|
|
error_log("=== NEXTCLOUD OPEN ===");
|
|||
|
|
error_log("S3 Path: " . $s3Path);
|
|||
|
|
error_log("Nextcloud WebDAV: " . $webdavUrl);
|
|||
|
|
|
|||
|
|
// Получаем fileId через PROPFIND
|
|||
|
|
$ch = curl_init($webdavUrl);
|
|||
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PROPFIND');
|
|||
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|||
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
|||
|
|
'Depth: 0',
|
|||
|
|
'Content-Type: application/xml'
|
|||
|
|
]);
|
|||
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, '<?xml version="1.0"?>
|
|||
|
|
<d:propfind xmlns:d="DAV:" xmlns:oc="http://owncloud.org/ns">
|
|||
|
|
<d:prop>
|
|||
|
|
<oc:fileid/>
|
|||
|
|
</d:prop>
|
|||
|
|
</d:propfind>');
|
|||
|
|
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
|
|||
|
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
|||
|
|
|
|||
|
|
$response = curl_exec($ch);
|
|||
|
|
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|||
|
|
curl_close($ch);
|
|||
|
|
|
|||
|
|
error_log("PROPFIND HTTP код: " . $httpCode);
|
|||
|
|
|
|||
|
|
if ($httpCode !== 207) {
|
|||
|
|
die("❌ Файл не найден в Nextcloud (HTTP $httpCode). Возможно, он не проиндексирован.");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Извлекаем fileId из XML
|
|||
|
|
preg_match('/<oc:fileid>(\d+)<\/oc:fileid>/', $response, $matches);
|
|||
|
|
if (!isset($matches[1])) {
|
|||
|
|
die("❌ Не удалось получить fileId");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$fileId = $matches[1];
|
|||
|
|
error_log("Получен fileId: " . $fileId);
|
|||
|
|
|
|||
|
|
// Извлекаем директорию из пути
|
|||
|
|
$dirPath = dirname($ncPath);
|
|||
|
|
|
|||
|
|
// Формируем URL для открытия в Nextcloud
|
|||
|
|
// Nextcloud автоматически откроет OnlyOffice для редактирования
|
|||
|
|
$redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?dir=' . urlencode($dirPath) . '&openfile=true';
|
|||
|
|
|
|||
|
|
error_log("Redirect to: " . $redirectUrl);
|
|||
|
|
|
|||
|
|
// Редирект в Nextcloud
|
|||
|
|
header('Location: ' . $redirectUrl);
|
|||
|
|
exit;
|
|||
|
|
?>
|
|||
|
|
|