feat: Обновлены все URL Nextcloud с office.klientprav.tech на office.clientright.ru

Обновленные файлы:
- crm_extensions/nextcloud_api.php (2 места)
- modules/Documents/actions/NcPrepareEdit.php
- crm_extensions/nextcloud_editor/js/nextcloud-editor.js
- crm_extensions/file_storage/api/get_edit_urls.php
- crm_extensions/file_storage/api/simple_edit.php
- crm_extensions/README.md
- NEXTCLOUD_EDIT_BUTTON_IMPLEMENTATION.md
- crm_extensions/docs/NEXTCLOUD_EDITOR.md
- test_syntax_check.html
- crm_extensions/tests/test_edit_button.html

Все ссылки теперь указывают на новый сервер office.clientright.ru
Backup файлы и тестовые директории не изменены
This commit is contained in:
Fedor
2025-10-20 17:17:34 +03:00
parent 0f32f271d5
commit 75d3f7942b
62 changed files with 3502 additions and 15 deletions

View File

@@ -0,0 +1,153 @@
<?php
set_time_limit(0); // Снимаем ограничение по времени работы скрипта
// Устанавливаем заголовок для JSON-ответа
header('Content-Type: application/json');
// Функция для записи логов
function log_message($message) {
$date = date('Y-m-d H:i:s');
file_put_contents('logs/parser.log', "[$date] $message" . PHP_EOL, FILE_APPEND);
}
// Подключение к базе данных
$host = 'localhost'; // хост
$dbname = 'court'; // имя базы данных
$user = 'court_usr'; // пользователь
$password = 'yOrjA9HdgwXO4JGJ'; // пароль
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
log_message("Успешное подключение к базе данных '$dbname'.");
} catch (PDOException $e) {
log_message("Ошибка подключения к базе данных: " . $e->getMessage());
die(json_encode(["status" => "error", "message" => "Ошибка подключения: " . $e->getMessage()]));
}
// Получаем параметры
$status = $_POST['status'] ?? null;
$link = $_POST['link1'] ?? ($_POST['link2'] ?? $_POST['link3'] ?? null);
$case_number = $_POST['case_number'] ?? null;
$uid = $_POST['uid'] ?? null;
if (!$status || !$link || !$case_number) {
echo json_encode(["status" => "error", "message" => "Ошибка: Не все необходимые параметры переданы."]);
exit;
}
log_message("Старт парсинга $case_number для статуса: $status");
log_message("Парсим данные из ссылки: $link");
// Загружаем HTML-контент страницы дела
$html = @file_get_contents($link);
if ($html === false) {
log_message("Ошибка: не удалось загрузить страницу по ссылке: $link");
echo json_encode(["status" => "error", "message" => "Ошибка: не удалось загрузить страницу по ссылке: $link"]);
exit;
}
log_message("Страница успешно загружена. Начинаем парсинг...");
// Парсим HTML с помощью DOMDocument и XPath
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
// Определяем div для парсинга
$div_id = ($status === 'представительство в суде 1й инстанции' ||
$status === 'выдача листа' ||
$status === 'исполнительное производство' ||
$status === 'заявление на лист') ? 'cont2' : 'cont3';
$rows = $xpath->query("//div[@id='$div_id']//tr");
log_message("Найдено строк (tr) в div с id '$div_id': " . $rows->length);
// Массив для хранения последнего события
$last_event = null;
// Обрабатываем каждую строку таблицы
foreach ($rows as $row) {
$event_name = trim($xpath->query('./td[1]', $row)->item(0)->nodeValue ?? '');
$event_date = trim($xpath->query('./td[2]', $row)->item(0)->nodeValue ?? '');
$event_time = trim($xpath->query('./td[3]', $row)->item(0)->nodeValue ?? '');
$location = trim($xpath->query('./td[4]', $row)->item(0)->nodeValue ?? '');
$event_result = trim($xpath->query('./td[5]', $row)->item(0)->nodeValue ?? '');
$event_basis = trim($xpath->query('./td[6]', $row)->item(0)->nodeValue ?? '');
$note = trim($xpath->query('./td[7]', $row)->item(0)->nodeValue ?? '');
$publication_date = trim($xpath->query('./td[8]', $row)->item(0)->nodeValue ?? '');
// Логируем каждую строку
log_message("Найдено событие: $event_name, Дата: $event_date, Время: $event_time, Место: $location, Результат: $event_result, Основание: $event_basis, Примечание: $note, Дата размещения: $publication_date");
// Пропускаем записи, если название события не указано или дата неверная
if (empty($event_name) || empty($event_date) || $event_date === '1970-01-01') {
log_message("Пропущено событие: название или дата не указаны.");
continue; // Пропустить итерацию
}
// Форматируем даты
$formatted_date = date('Y-m-d', strtotime($event_date));
$current_datetime = date('Y-m-d H:i:s');
$formatted_publication_date = date('Y-m-d', strtotime($publication_date));
// Проверяем на дублирование
$checkQuery = "SELECT COUNT(*) FROM subject WHERE event_name = ? AND event_date = ? AND publication_date = ?";
$checkStmt = $pdo->prepare($checkQuery);
$checkStmt->execute([$event_name, $formatted_date, $formatted_publication_date]);
$exists = $checkStmt->fetchColumn() > 0;
if ($exists) {
log_message("Дубликат найден для события: $event_name, пропускаем запись.");
continue; // Пропустить запись
}
// Запись данных в таблицу subject
$insertQuery = "INSERT INTO subject (case_number, uid, event_name, event_date, event_time, location, event_result, event_basis, note, publication_date, update_datetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$insertStmt = $pdo->prepare($insertQuery);
$insertStmt->execute([$case_number, $uid, $event_name, $formatted_date, $event_time, $location, $event_result, $event_basis, $note, $formatted_publication_date, $current_datetime]);
log_message("Данные успешно записаны в таблицу subject для события: $event_name");
$last_event = [
'event_name' => $event_name,
'event_date' => $formatted_date,
'event_time' => $event_time,
'location' => $location,
'event_result' => $event_result,
'event_basis' => $event_basis,
'note' => $note,
'publication_date' => $formatted_publication_date,
];
}
// Формируем ответ
if ($last_event) {
// Преобразуем форматы дат
$formatted_event_date = DateTime::createFromFormat('Y-m-d', $last_event['event_date'])->format('d.m.Y');
$formatted_publication_date = DateTime::createFromFormat('Y-m-d', $last_event['publication_date'])->format('d.m.Y');
echo json_encode([
"status" => "success",
"message" => "Парсинг завершен.",
"last_event" => [
"Наименование" => $last_event['event_name'],
"Дата" => $formatted_event_date,
"Время" => $last_event['event_time'],
"Место" => $last_event['location'],
"Результат" => $last_event['event_result'],
"Основание" => $last_event['event_basis'],
"Примечание" => $last_event['note'],
"Дата размещения" => $formatted_publication_date
]
]);
} else {
echo json_encode([
"status" => "success",
"message" => "Парсинг завершен, но нет новых событий."
]);
}
log_message("Парсинг завершен.");
?>