This commit is contained in:
mac 2026-06-25 15:08:38 +03:00
parent 71da29e572
commit fcbf943e10
2 changed files with 661 additions and 581 deletions

View File

@ -1186,7 +1186,7 @@ ORDER BY date_sort ASC";
$sql_objs = "SELECT id, nazv, adres FROM objects WHERE id IN (" . implode(',', $obj_ids) . ")";
$rez_objs = mysql_query($sql_objs);
if ($rez_objs && mysql_num_rows($rez_objs) > 0) {
echo '<div class="message" style="margin-top:5px;font-size:13px;"><b>Объекты:</b><br/>';
echo '<div class="message" style="margin-top:10px;font-size:13px;"><b>Объекты:</b><br/>';
while ($obj_row = mysql_fetch_assoc($rez_objs)) {
echo '<a href="javascript:{}" class="show_object" data-id="' . intval($obj_row['id']) . '" style="color:#1976d2;">' . htmlspecialchars($obj_row['nazv']) . ' (' . htmlspecialchars($obj_row['adres']) . ')</a><br/>';
}
@ -1197,25 +1197,25 @@ ORDER BY date_sort ASC";
$sql_inner_docs = "SELECT d.id, d.name FROM inner_docs d JOIN deal_inner_doc did ON did.inner_doc_id = d.id WHERE did.deal_id = " . intval($deal_id_for_edit);
$rez_inner_docs = mysql_query($sql_inner_docs);
if ($rez_inner_docs && mysql_num_rows($rez_inner_docs) > 0) {
echo '<div class="message" style="margin-top:5px;font-size:13px;"><b>Документы:</b>';
echo '<div class="message" style="margin-top:15px; padding-top: 0; font-size:13px;"><b>Документы:</b>';
while ($doc_row = mysql_fetch_assoc($rez_inner_docs)) {
echo '<div class="document" data-id="' . $doc_row['id'] . '" style="margin-top:5px;">';
echo '<a href="javascript:{}" class="no-border pull-right">';
echo '<a href="javascript:{}" class="no-border pull-right" style="border: none;color: #000 !important;">';
echo '<span class="jw__small-popup ti-more" data-id="document_' . $doc_row['id'] . '"></span>';
echo '<div class="jw__popup actions-document" id="popup__document_' . $doc_row['id'] . '">';
echo '<div class="actions-document__inner">';
echo '<a href="javascript:{}" onclick="previewInnerDoc(' . $doc_row['id'] . ')">Предпросмотр</a>';
echo '<a href="javascript:{}" onclick="editInnerDoc(' . $doc_row['id'] . ')">Редактировать</a>';
echo '<a href="javascript:{}" onclick="sendInnerDocWin(' . $doc_row['id'] . ')">Отправить</a>';
echo '<a href="javascript:{}" onclick="confirmDeleteInnerDoc(' . $doc_row['id'] . ')">Удалить</a>';
echo '<a href="javascript:{}" onclick="previewInnerDoc(' . $doc_row['id'] . ')" style="border: none;color: #000 !important;">Предпросмотр</a>';
echo '<a href="javascript:{}" onclick="editInnerDoc(' . $doc_row['id'] . ')" style="border: none;color: #000 !important;">Редактировать</a>';
echo '<a href="javascript:{}" onclick="sendInnerDocWin(' . $doc_row['id'] . ')" style="border: none;color: #000 !important;">Отправить</a>';
echo '<a href="javascript:{}" onclick="confirmDeleteInnerDoc(' . $doc_row['id'] . ')" style="border: none;color: #000 !important;">Удалить</a>';
echo '</div>';
echo '</div>';
echo '</a>';
echo '<ul style="margin:0;padding:0;list-style:none;">';
echo '<li>';
echo '<a title="Скачать файл" download="" href="/ajax/getInnerDoc.php?id=' . $doc_row['id'] . '&download_pdf=true&t=' . time() . '">';
echo '<span class="file-span ti-file"></span>';
echo '<span class="file-name" data-id="' . $doc_row['id'] . '">' . htmlspecialchars($doc_row['name']) . '.pdf</span>';
echo '<span class="file-span ti-file" style="border: none;color: #000 !important;"></span>';
echo '<span style="border: none;color: #000 !important;" class="file-name" data-id="' . $doc_row['id'] . '">' . htmlspecialchars($doc_row['name']) . '.pdf</span>';
echo '</a>';
echo '</li>';
echo '</ul>';

View File

@ -1,11 +1,22 @@
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/engine/helpers/external_listing_events.php");
$pdo = new MysqlPdo(hst, ndb, user, pass);
$sql = "SET NAMES 'utf8'";
$pdo->query($sql);
if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
// Offset-free: object_id приходит ЛИБО числовым (+src=ext для листинга от openEventsWindow), ЛИБО витринным EXT-{el.id}
// (reload панели задач после правки/коммента в crm.js гоняет именно EXT-id — единственный носитель листинг-ности в editEventObj→changeEventsObj).
// Принимаем оба: иначе is_numeric отбивал EXT-id → пустой ответ → белая модалка задач (повторное открытие через openEventsWindow слало числовой id и работало).
$objIdRaw = isset($_GET['object_id']) ? trim($_GET['object_id']) : '';
$isExtId = (preg_match('/^EXT-?(\d+)$/i', $objIdRaw, $mEl) === 1);
$objIdNum = $isExtId ? (int)$mEl[1] : (is_numeric($objIdRaw) ? (int)$objIdRaw : 0);
if ($_SESSION['id'] && $objIdNum) {
// Снимаем лок файла сессии (ниже сессия только читается) — чтобы парный AJAX getObjectInfoForEvents
// грузился параллельно, а не ждал освобождения сессии (PHP держит её эксклюзивно на время запроса).
session_write_close();
$gmtmsk = get_time_zone_user();
@ -19,6 +30,10 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
$get = clearInputData($_GET);
// Offset-free: листинг определяем по явному маркеру src=ext (openEventsWindow добавляет его листингам), а не
// по диапазону id — после снятия смещения el.id коллизит с objects.id. $get['object_id'] == реальный el.id.
$is_listing = $isExtId || (isset($_GET['src']) && $_GET['src'] === 'ext');
// обновляем метку у меню календаря
// считаем события объектов
$sql = "SELECT count(id) FROM user_object_events WHERE user_id = $_SESSION[id] and calendar_view = 0
@ -33,17 +48,35 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
$clientEventCount = mysql_result($rez,0);
// суммарное количество событий по объектам и пользователям
$sumCount = intval($objectEventCount) + intval($clientEventCount);
$sumCount = intval($objectEventCount) + intval($clientEventCount) + get_user_listing_tasks_count($_SESSION['id']);
echo "<script>$('#calendarCounter').html('".$sumCount."');</script>";
// Сделка недоступна на найденном листинге (read-only; сервер addObjectDeal тоже отбивает) — прячем пункт
// меню «+»; для обычного объекта возвращаем. Грузится при каждом открытии модалки задач объекта.
echo "<script>$('#chat__new-deal').".($is_listing ? 'hide' : 'show')."();</script>";
// «Файл» (вложение к задаче) на найденном листинге не поддержан (clients_files привязывается только к
// событиям обычных объектов) — прячем пункт меню «+» для листингов, как «Сделку».
echo "<script>$('#chat__new-file').".($is_listing ? 'hide' : 'show')."();</script>";
// Витринный id для onclick-редактирования: у листинга — EXT-{el.id}. Offset-free: crm.js (editEventObj) гоняет
// object_id через getEventForObjId→changeEventsObj без отдельного флага; единственный сквозной носитель —
// само значение object_id. EXT-{n} различает листинг без диапазона id (el.id коллизит с objects.id).
$objectIdForEdit = $is_listing ? ('EXT-' . $objIdNum) : $objIdNum;
// Сводку по objects тянем ТОЛЬКО для своих объектов — у листинга строки в objects нет, а el.id коллизит
// с objects.id, поэтому без гарда подтянулся бы чужой одноимённый объект.
$obj = array();
if (!$is_listing) {
$sqlObj = "SELECT objects.*, DATE_FORMAT(objects.date_add,'%d.%m.%Y %H:%i') as date_add
FROM objects
WHERE objects.id=$_GET[object_id]";
WHERE objects.id=$objIdNum";
$rezObj = mysql_query($sqlObj);
$obj = mysql_fetch_assoc($rezObj);
}
$user = new User;
$user->get($_SESSION['id']);
@ -128,7 +161,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
) as sub_comment_user_for
FROM user_object_events AS e
LEFT JOIN user_sub_comments AS s ON s.event_id = e.id AND s.section_id = 1
WHERE (e.user_id IN (" . implode(",", $agentIds) . ") or e.from_id IN (" . implode(",", $agentIds) . ")) AND e.object_id = '$get[object_id]'
WHERE (e.user_id IN (" . implode(",", $agentIds) . ") or e.from_id IN (" . implode(",", $agentIds) . ")) AND e.object_id = '$objIdNum'
GROUP BY e.id
ORDER BY e.create_date ASC;";
//echo $sql;
@ -149,10 +182,54 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
) as sub_comment_user_for
FROM user_object_events AS e
LEFT JOIN user_sub_comments AS s ON s.event_id = e.id AND s.section_id = 1
WHERE (e.user_id = '$_SESSION[id]' or e.from_id = '$_SESSION[id]') AND e.object_id = '$get[object_id]'
WHERE (e.user_id = '$_SESSION[id]' or e.from_id = '$_SESSION[id]') AND e.object_id = '$objIdNum'
GROUP BY e.id
ORDER BY e.create_date ASC;";
}
// Найденный листинг парсера: история событий из таблицы событий листинга.
// Offset-free: листинг определяем по явному маркеру src=ext (openEventsWindow добавляет его листингам), а не по
// диапазону id — после снятия смещения el.id коллизит с objects.id. object_id == реальный el.id.
// Шейп e.* близок к user_object_events; полей sum/req_id у листинга нет — рендер читает их через проверку > 0, отсутствие колонки безвредно.
// Суб-комменты листинг-событий — в общей user_sub_comments, но со СВОИМ section_id=4:
// id события листинга и id user_object_events — разные нумерации, общий section_id=1 дал бы коллизию строк.
// Доступ — свои события (e.user_id = me ИЛИ e.from_id = me): у листинга нет владельца id_add_user.
if ($is_listing) {
$external_listing_id = $objIdNum;
// Видимость как у своих объектов: руководитель/агентство/админ видят события агентства и подчинённых
// ($agentIds построен выше по роли — листинг id_add_user=0, поэтому в ветку agentIds входим именно по роли),
// обычный агент — только свои. Изоляция между агентствами: $agentIds = только пользователи СВОЕГО агентства,
// поэтому события чужих агентств на ОБЩЕМ листинге не видны.
if ($_SESSION['agency'] or $_SESSION['manager'] or $_SESSION['users_admin']) {
$listingEventScope = "(e.user_id IN (" . implode(",", $agentIds) . ") or e.from_id IN (" . implode(",", $agentIds) . "))";
} else {
$listingEventScope = "(e.user_id = '$_SESSION[id]' or e.from_id = '$_SESSION[id]')";
}
$sql = "SELECT e.*,
e.external_listing_id AS object_id,
IF(IFNULL(s.id, '') = '', 0, s.id) AS sub_id,
IF(IFNULL(s.sub_comment, '') = '', NULL, s.sub_comment) AS sub_comment,
IF(s.created_by <> 0, (
SELECT CONCAT(u.last_name, ' ', u.first_name, ' ', u.middle_name)
FROM users as u WHERE u.id = s.created_by
), NULL
) as sub_comment_author,
IF(s.user_for <> 0, (
SELECT CONCAT(u.last_name, ' ', u.first_name, ' ', u.middle_name)
FROM users as u WHERE u.id = s.user_for
), NULL
) as sub_comment_user_for
FROM external_listing_events AS e
LEFT JOIN user_sub_comments AS s ON s.event_id = e.id AND s.section_id = 4
WHERE $listingEventScope AND e.external_listing_id = '$external_listing_id'
GROUP BY e.id
ORDER BY e.create_date ASC;";
}
// Контекст событий для onclick-хендлеров (deleteEvent/addEventSubComment/…):
// у листинга СВОЯ таблица событий — передача 'objects' удаляла/писала бы по чужому id в user_object_events/user_sub_comments.
$events_from = $is_listing ? 'listing' : 'objects';
//echo $sql;
$rez = mysql_query($sql);
@ -190,6 +267,9 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
$class_ev = " is__left";
}
// Бейдж «Перенесено из Поиска»: событие перенесено в объект при копировании найденного (листинг/старый парсер), исходная дата сохранена
$movedBadge = !empty($event['moved_on_copy']) ? '<div class="moved-from-search" title="Перенесено в объект при копировании из Поиска — исходная дата сохранена" style="display:inline-block;float:right;margin:0;padding:2px 8px;font-size:11px;line-height:1.4;color:#6b7280;background:#eef1f5;border-radius:10px;">Перенесено из Поиска</div>' : '';
$sql_user = "SELECT user_logo, CONCAT(last_name, ' ', first_name, ' ', middle_name) as user_fio FROM users WHERE id = {$from_id}
UNION SELECT user_logo, CONCAT(last_name, ' ', first_name, ' ', middle_name, ' (удален)') as user_fio FROM users_delete WHERE user_id = {$from_id}";
@ -248,11 +328,11 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="message"> <?= $name_files ?><?= (!empty($file_list)) ? '<br/><ul>' . $file_list . '</ul>' : ''; ?><?= $event['comment']; ?></div>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<div class="message" style="margin-top: 10px;">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<!--<a href="javascript:{}" class="no-border" onclick="sendEventFilesWin('<?=$event['id']?>', 'object')" title="Отправить">
<span class="simple-button send"><i class="ti-email"></i></span>
</a>-->
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
</div>
@ -290,7 +370,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="chat-complete<?=!in_array($event['user_id'], $usersCanEdit) ? ' hidden' : '' ?>">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" />
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" data-from="<?=$events_from?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
@ -319,11 +399,11 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}?>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<div class="message" style="margin-top: 10px;">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
</div>
@ -361,11 +441,11 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="message"><?=$event['comment']?></div>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<div class="message" style="margin-top: 10px;">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
</div>
@ -403,11 +483,11 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="message"><?=$event['comment']?></div>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<!--<?php if($event['user_id'] == $_SESSION['id']){ ?>
<div class="message" style="margin-top: 10px;">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
</div>
@ -445,7 +525,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="chat-complete<?=!in_array($event['user_id'], $usersCanEdit) ? ' hidden' : '' ?>">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" />
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" data-from="<?=$events_from?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
@ -471,13 +551,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Редактировать комментарий к задаче">
<span class="simple-button edit"><i class="jw-action-icon-edit-text"></i></span>
</a>
<a href="javascript:{}"
class="no-border"
onclick="deleteEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="deleteEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Удалить комментарий к задаче">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
@ -496,19 +576,19 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}?>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<div class="message" style="margin-top: 10px;">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
<?php } ?>
<?php if ($is_who_work && empty($event['sub_comment'])) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?=$event['id']?>', 'objects')"
onclick="showEventSubComment('<?=$event['id']?>', '<?=$events_from?>')"
title="Добавить комментарий к задаче">
<span class="simple-button plus"><i class="jw-action-icon-plus"></i></span>
</a>
@ -548,7 +628,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="chat-complete<?=!in_array($event['user_id'], $usersCanEdit) ? ' hidden' : '' ?>">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" />
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" data-from="<?=$events_from?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
@ -574,13 +654,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Редактировать комментарий к задаче">
<span class="simple-button edit"><i class="jw-action-icon-edit-text"></i></span>
</a>
<a href="javascript:{}"
class="no-border"
onclick="deleteEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="deleteEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Удалить комментарий к задаче">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
@ -599,19 +679,19 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}?>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<div class="message" style="margin-top: 10px;">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<?php if ($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
<?php } ?>
<?php if ($is_who_work && empty($event['sub_comment'])) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?=$event['id']?>', 'objects')"
onclick="showEventSubComment('<?=$event['id']?>', '<?=$events_from?>')"
title="Добавить комментарий к задаче">
<span class="simple-button plus"><i class="jw-action-icon-plus"></i></span>
</a>
@ -650,7 +730,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="chat-complete">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" />
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" data-from="<?=$events_from?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
@ -785,13 +865,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?= $event['id'] ?>', 'objects', 'moderation', '<?=$event['sub_id']?>')"
onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', 'moderation', '<?=$event['sub_id']?>')"
title="Редактировать комментарий к задаче">
<span class="simple-button edit"><i class="jw-action-icon-edit-text"></i></span>
</a>
<a href="javascript:{}"
class="no-border"
onclick="deleteEventSubComment('<?= $event['id'] ?>', 'objects', '<?=$event['object_id']?>', '<?=$event['sub_id']?>')"
onclick="deleteEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?=$event['object_id']?>', '<?=$event['sub_id']?>')"
title="Удалить комментарий к задаче">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
@ -829,13 +909,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?= $event['id'] ?>', 'objects', 'moderation', '<?=$sub_comment['sub_id']?>')"
onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', 'moderation', '<?=$sub_comment['sub_id']?>')"
title="Редактировать комментарий к задаче">
<span class="simple-button edit"><i class="jw-action-icon-edit-text"></i></span>
</a>
<a href="javascript:{}"
class="no-border"
onclick="deleteEventSubComment('<?= $event['id'] ?>', 'objects', '<?=$event['object_id']?>' , '<?=$sub_comment['sub_id']?>')"
onclick="deleteEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?=$event['object_id']?>' , '<?=$sub_comment['sub_id']?>')"
title="Удалить комментарий к задаче">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
@ -847,19 +927,19 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}
?>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<div class="message" style="margin-top: 10px;">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$event['sub_id']?>')" title="Редактировать">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects', '<?=$event['sub_id']?>')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>', '<?=$event['sub_id']?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
<?php } ?>
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?=$event['id']?>', 'objects', 'moderation')"
onclick="showEventSubComment('<?=$event['id']?>', '<?=$events_from?>', 'moderation')"
title="Добавить комментарий к задаче">
<span class="simple-button plus"><i class="jw-action-icon-plus"></i></span>
</a>
@ -902,7 +982,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="chat-complete<?=!in_array($event['user_id'], $usersCanEdit) ? ' hidden' : '' ?>">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" />
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" data-from="<?=$events_from?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
@ -931,13 +1011,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Редактировать комментарий к задаче">
<span class="simple-button edit"><i class="jw-action-icon-edit-text"></i></span>
</a>
<a href="javascript:{}"
class="no-border"
onclick="deleteEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="deleteEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Удалить комментарий к задаче">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
@ -956,19 +1036,19 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}?>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<div class="message" style="margin-top: 10px;">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1){ ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
<?php } ?>
<?php if ($is_who_work && empty($event['sub_comment'])) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?=$event['id']?>', 'objects')"
onclick="showEventSubComment('<?=$event['id']?>', '<?=$events_from?>')"
title="Добавить комментарий к задаче">
<span class="simple-button plus"><i class="jw-action-icon-plus"></i></span>
</a>
@ -1008,7 +1088,7 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<div class="chat-complete<?=!in_array($event['user_id'], $usersCanEdit) ? ' hidden' : '' ?>">
<div class="complete-button" data-id="<?=$event['id']?>">
<input type="checkbox" />
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" title="Выполнено">
<div class="complete-action-button-obj<?=($event['calendar_view'] == 1) ? ' active' : ''?>" id="groupAB__<?=$event['id']?>" data-from="<?=$events_from?>" title="Выполнено">
<span class="check-button-box"></span>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve" width="512px" height="512px">
<g>
@ -1107,13 +1187,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}
?>
<?php if (!$event['cancel']) { ?>
<div style="position:absolute;top:8px;right:8px;" class="d-flex gap-1">
<a href="javascript:{}" class="no-border" onclick="cancelEvent(<?=$event['id']?>)" title="Отменить сделку" style="color:#e57373;font-size:16px;line-height:1;">
<i class="ti-close"></i>
</a>
<div style="margin-top:8px;text-align:right;" class="d-flex gap-1">
<a href="javascript:{}" class="no-border" onclick="if(window.editDeal){window.editDeal(<?=intval($event['req_id'] ?: 0)?>, <?=$deal_id_for_edit?>)}" title="Редактировать сделку" style="color:#999;font-size:16px;line-height:1;">
<i class="jw-action-icon-settings"></i>
</a>
<a href="javascript:{}" class="no-border" onclick="cancelEvent(<?=$event['id']?>)" title="Отменить сделку" style="color:#e57373;font-size:16px;line-height:1;">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
</div>
<?php } ?>
<?php } else { ?>
@ -1128,13 +1208,13 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
<?php if ($is_who_work) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Редактировать комментарий к задаче">
<span class="simple-button edit"><i class="jw-action-icon-edit-text"></i></span>
</a>
<a href="javascript:{}"
class="no-border"
onclick="deleteEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>')"
onclick="deleteEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>')"
title="Удалить комментарий к задаче">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
@ -1239,19 +1319,19 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
}?>
<span class="time"><?=date("H:i", strtotime($time_zone, strtotime($event['create_date'])))?></span>
<div class="message" style="margin-top: 10px;">
<div class="message" style="margin-top: 10px;"><?= $movedBadge ?>
<?php if($from_id == $_SESSION['id'] || $_SESSION['id'] == $agencyId || $_SESSION['superadmin'] == 1) { ?>
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>')" title="Редактировать">
<a href="javascript:{}" class="no-border" onclick="editEventObj('<?=$event['id']?>', '<?=$event['type']?>', '<?=$objectIdForEdit?>')" title="Редактировать">
<span class="simple-button settings"><i class="jw-action-icon-settings"></i></span>
</a>
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', 'objects')" title="Удалить">
<a href="javascript:{}" class="no-border" onclick="deleteEvent('<?=$event['id']?>', '<?=$events_from?>')" title="Удалить">
<span class="simple-button delete"><i class="jw-action-icon-delete"></i></span>
</a>
<?php } ?>
<?php if ($is_who_work && empty($event['sub_comment'])) { ?>
<a href="javascript:{}"
class="no-border"
onclick="showEventSubComment('<?=$event['id']?>', 'objects')"
onclick="showEventSubComment('<?=$event['id']?>', '<?=$events_from?>')"
title="Добавить комментарий к задаче">
<span class="simple-button plus"><i class="jw-action-icon-plus"></i></span>
</a>
@ -1296,8 +1376,8 @@ if ($_SESSION['id'] && $_GET['object_id'] && is_numeric($_GET['object_id'])) {
</span>
</label>
<textarea id="sub_comment_<?php echo $event['id']; ?>" style="overflow-y: auto; height: 106px; min-height: 106px;"><?php echo $event['sub_comment']; ?></textarea>
<button class="fr-btn edit-btn steel close" style="line-height: normal;" onclick="showEventSubComment('<?= $event['id'] ?>', 'objects')">Закрыть</button>
<button class="fr-btn edit-btn steel save" style="line-height: normal; margin-right: 0.5rem;" onclick="addEventSubComment('<?= $event['id'] ?>', 'objects', '<?= $event['object_id'] ?>', '<?= $event['req_id'] ?>', '<?=$event['type']?>')" data-sub="" data-id="<?php echo $event['id']; ?>">Сохранить</button>
<button class="fr-btn edit-btn steel close" style="line-height: normal;" onclick="showEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>')">Закрыть</button>
<button class="fr-btn edit-btn steel save" style="line-height: normal; margin-right: 0.5rem;" onclick="addEventSubComment('<?= $event['id'] ?>', '<?=$events_from?>', '<?= $event['object_id'] ?>', '<?= $event['req_id'] ?>', '<?=$event['type']?>')" data-sub="" data-id="<?php echo $event['id']; ?>">Сохранить</button>
</div>
<?php }
}