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:
277
CreateCourtEvent.php
Normal file
277
CreateCourtEvent.php
Normal file
@@ -0,0 +1,277 @@
|
||||
<?php
|
||||
/**
|
||||
* Создание события в календаре CRM для судебного заседания
|
||||
*
|
||||
* Принимает POST запрос с данными:
|
||||
* - project_id: ID проекта (обязательно)
|
||||
* - event_name: Название события
|
||||
* - event_date: Дата события (формат DD.MM.YYYY)
|
||||
* - event_time: Время события (формат HH:MM)
|
||||
* - location: Место проведения
|
||||
* - result: Результат события
|
||||
* - basis: Основание
|
||||
* - note: Примечание
|
||||
* - publication_date: Дата размещения
|
||||
*
|
||||
* Возвращает JSON:
|
||||
* {
|
||||
* "success": true,
|
||||
* "event_id": "4x12345",
|
||||
* "message": "Событие успешно создано"
|
||||
* }
|
||||
*/
|
||||
|
||||
// Устанавливаем рабочую директорию
|
||||
chdir(__DIR__);
|
||||
|
||||
require_once 'config.inc.php';
|
||||
require_once 'include/utils/utils.php';
|
||||
require_once 'includes/Loader.php';
|
||||
vimport('includes.runtime.Globals');
|
||||
require_once 'include/database/PearDatabase.php';
|
||||
require_once 'modules/Users/Users.php';
|
||||
require_once 'include/Webservices/Utils.php';
|
||||
require_once 'include/Webservices/Create.php';
|
||||
require_once 'include/Webservices/Retrieve.php';
|
||||
require_once 'include/Webservices/Update.php';
|
||||
|
||||
// Логирование
|
||||
function log_event_creation($level, $message) {
|
||||
$log_file = 'logs/create_court_event.log';
|
||||
$timestamp = date('Y-m-d H:i:s');
|
||||
$log_entry = "{$timestamp} - {$level}: {$message}\n";
|
||||
file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX);
|
||||
}
|
||||
|
||||
// Функция для форматирования даты в формат CRM (YYYY-MM-DD)
|
||||
function formatDateForCRM($dateString) {
|
||||
if (empty($dateString)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// Если формат DD.MM.YYYY
|
||||
if (preg_match('/^(\d{2})\.(\d{2})\.(\d{4})$/', $dateString, $matches)) {
|
||||
return $matches[3] . '-' . $matches[2] . '-' . $matches[1];
|
||||
}
|
||||
|
||||
// Если уже в формате YYYY-MM-DD
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $dateString)) {
|
||||
return $dateString;
|
||||
}
|
||||
|
||||
return $dateString;
|
||||
}
|
||||
|
||||
// Функция для форматирования времени в формат CRM (HH:MM:SS)
|
||||
function formatTimeForCRM($timeString) {
|
||||
if (empty($timeString)) {
|
||||
return '10:00:00'; // Время по умолчанию
|
||||
}
|
||||
|
||||
// Если формат HH:MM
|
||||
if (preg_match('/^(\d{1,2}):(\d{2})$/', $timeString, $matches)) {
|
||||
return sprintf('%02d:%02d:00', $matches[1], $matches[2]);
|
||||
}
|
||||
|
||||
// Если уже в формате HH:MM:SS
|
||||
if (preg_match('/^\d{2}:\d{2}:\d{2}$/', $timeString)) {
|
||||
return $timeString;
|
||||
}
|
||||
|
||||
return '10:00:00';
|
||||
}
|
||||
|
||||
try {
|
||||
log_event_creation('INFO', '=== НАЧАЛО ОБРАБОТКИ ЗАПРОСА ===');
|
||||
|
||||
// Получаем данные из POST, stdin или argv
|
||||
$data = [];
|
||||
|
||||
// Пробуем получить из stdin
|
||||
$input = file_get_contents('php://stdin');
|
||||
if (!empty($input)) {
|
||||
log_event_creation('DEBUG', "Входные данные из stdin: " . $input);
|
||||
$data = json_decode($input, true);
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
throw new Exception('Ошибка декодирования JSON из stdin: ' . json_last_error_msg());
|
||||
}
|
||||
}
|
||||
|
||||
// Если stdin пустой, пробуем php://input (для POST запросов)
|
||||
if (empty($data)) {
|
||||
$input = file_get_contents('php://input');
|
||||
if (!empty($input)) {
|
||||
log_event_creation('DEBUG', "Входные данные из php://input: " . $input);
|
||||
$data = json_decode($input, true);
|
||||
if (json_last_error() !== JSON_ERROR_NONE) {
|
||||
throw new Exception('Ошибка декодирования JSON из php://input: ' . json_last_error_msg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Если всё ещё пусто, используем $_POST
|
||||
if (empty($data)) {
|
||||
log_event_creation('DEBUG', "Используем \$_POST");
|
||||
$data = $_POST;
|
||||
}
|
||||
|
||||
// Если всё ещё пусто, пробуем argv
|
||||
if (empty($data) && !empty($argv)) {
|
||||
log_event_creation('DEBUG', "Пробуем argv");
|
||||
for ($i = 1; $i < count($argv); $i++) {
|
||||
if (strpos($argv[$i], '=') !== false) {
|
||||
list($key, $value) = explode('=', $argv[$i], 2);
|
||||
$data[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log_event_creation('DEBUG', "Итоговые данные: " . json_encode($data, JSON_UNESCAPED_UNICODE));
|
||||
|
||||
// Проверяем обязательные параметры
|
||||
if (empty($data['project_id'])) {
|
||||
throw new Exception('Параметр project_id обязателен');
|
||||
}
|
||||
|
||||
$projectId = $data['project_id'];
|
||||
|
||||
// Извлекаем данные события
|
||||
$eventName = $data['event_name'] ?? 'Судебное заседание';
|
||||
$eventDate = $data['event_date'] ?? '';
|
||||
$eventTime = $data['event_time'] ?? '';
|
||||
$location = $data['location'] ?? '';
|
||||
$result = $data['result'] ?? '';
|
||||
$basis = $data['basis'] ?? '';
|
||||
$note = $data['note'] ?? '';
|
||||
$publicationDate = $data['publication_date'] ?? '';
|
||||
|
||||
log_event_creation('INFO', "Создаем событие для проекта: $projectId");
|
||||
log_event_creation('DEBUG', "Название: $eventName, Дата: $eventDate, Время: $eventTime");
|
||||
|
||||
// Проверяем что дата не пустая
|
||||
if (empty($eventDate)) {
|
||||
throw new Exception('Дата события обязательна');
|
||||
}
|
||||
|
||||
// Инициализируем пользователя CRM
|
||||
$current_user = new Users();
|
||||
$current_user->retrieveCurrentUserInfoFromFile(8); // Фёдор Коробков
|
||||
|
||||
log_event_creation('DEBUG', "Пользователь инициализирован: " . $current_user->user_name);
|
||||
|
||||
// Получаем проект через webservices чтобы узнать владельца
|
||||
$projectWsId = vtws_getWebserviceEntityId('Project', $projectId);
|
||||
$project = vtws_retrieve($projectWsId, $current_user);
|
||||
|
||||
log_event_creation('DEBUG', "Проект получен: " . $project['projectname']);
|
||||
log_event_creation('DEBUG', "Владелец проекта: " . $project['assigned_user_id']);
|
||||
|
||||
// Форматируем дату и время для CRM
|
||||
$formattedDate = formatDateForCRM($eventDate);
|
||||
$formattedTime = formatTimeForCRM($eventTime);
|
||||
|
||||
// Формируем описание события
|
||||
$description = "Автоматически созданное событие из судебного дела\n\n";
|
||||
|
||||
if (!empty($location)) {
|
||||
$description .= "Место: $location\n";
|
||||
}
|
||||
|
||||
if (!empty($result)) {
|
||||
$description .= "Результат: $result\n";
|
||||
}
|
||||
|
||||
if (!empty($basis)) {
|
||||
$description .= "Основание: $basis\n";
|
||||
}
|
||||
|
||||
if (!empty($note)) {
|
||||
$description .= "Примечание: $note\n";
|
||||
}
|
||||
|
||||
if (!empty($publicationDate)) {
|
||||
$description .= "Дата размещения: $publicationDate\n";
|
||||
}
|
||||
|
||||
// Создаем событие через webservices
|
||||
$eventData = [
|
||||
'subject' => $eventName,
|
||||
'date_start' => $formattedDate,
|
||||
'time_start' => $formattedTime,
|
||||
'due_date' => $formattedDate,
|
||||
'time_end' => date('H:i:s', strtotime($formattedTime) + 3600), // +1 час
|
||||
'assigned_user_id' => $project['assigned_user_id'],
|
||||
'activitytype' => 'Meeting', // Тип события
|
||||
'eventstatus' => 'Planned', // Статус
|
||||
'location' => $location,
|
||||
'description' => $description,
|
||||
'visibility' => 'Public'
|
||||
];
|
||||
|
||||
log_event_creation('DEBUG', "Данные для создания события: " . json_encode($eventData, JSON_UNESCAPED_UNICODE));
|
||||
|
||||
// Создаем событие
|
||||
$createdEvent = vtws_create('Calendar', $eventData, $current_user);
|
||||
|
||||
log_event_creation('SUCCESS', "Событие создано: " . $createdEvent['id']);
|
||||
|
||||
// Связываем событие с проектом через vtiger_seactivityrel
|
||||
list(, $eventNumericId) = explode('x', $createdEvent['id']);
|
||||
|
||||
$adb = PearDatabase::getInstance();
|
||||
$query = "INSERT INTO vtiger_seactivityrel (crmid, activityid) VALUES (?, ?)";
|
||||
$adb->pquery($query, [$projectId, $eventNumericId]);
|
||||
|
||||
log_event_creation('SUCCESS', "Событие привязано к проекту");
|
||||
|
||||
// Обновляем поля проекта с информацией о последнем событии
|
||||
try {
|
||||
$updateData = [
|
||||
'id' => $projectWsId,
|
||||
'cf_1682' => $formattedDate, // Дата события
|
||||
'cf_1684' => $formattedTime // Время события
|
||||
];
|
||||
|
||||
vtws_update($updateData, $current_user);
|
||||
log_event_creation('SUCCESS', "Поля проекта обновлены (cf_1682, cf_1684)");
|
||||
} catch (Exception $e) {
|
||||
log_event_creation('WARNING', "Не удалось обновить поля проекта: " . $e->getMessage());
|
||||
}
|
||||
|
||||
// Формируем успешный ответ
|
||||
$response = [
|
||||
'success' => true,
|
||||
'event_id' => $createdEvent['id'],
|
||||
'event_numeric_id' => $eventNumericId,
|
||||
'event_name' => $eventName,
|
||||
'event_date' => $formattedDate,
|
||||
'event_time' => $formattedTime,
|
||||
'project_id' => $projectId,
|
||||
'message' => 'Событие успешно создано и привязано к проекту'
|
||||
];
|
||||
|
||||
log_event_creation('SUCCESS', "=== ОБРАБОТКА ЗАВЕРШЕНА УСПЕШНО ===");
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
|
||||
exit(0);
|
||||
|
||||
} catch (Exception $e) {
|
||||
$error_message = $e->getMessage();
|
||||
log_event_creation('ERROR', "Ошибка: $error_message");
|
||||
log_event_creation('ERROR', "Стек: " . $e->getTraceAsString());
|
||||
|
||||
$response = [
|
||||
'success' => false,
|
||||
'error' => $error_message,
|
||||
'timestamp' => date('Y-m-d H:i:s')
|
||||
];
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
http_response_code(500);
|
||||
echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
|
||||
|
||||
exit(1);
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user