Files
crm.clientright.ru/layouts/v7/modules/Vtiger/DocumentsSummaryWidgetContents.tpl
Fedor 7e3f0dcede Исправление путей к папкам проектов в 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 теперь открывается по правильному пути!
2025-11-01 12:22:12 +03:00

102 lines
7.3 KiB
Smarty
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{*<!--
/*********************************************************************************
** The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*
********************************************************************************/
-->*}
{strip}
<div class="paddingLeft5px">
<span class="col-sm-5">
<strong>{vtranslate('Title','Documents')}</strong>
</span>
<span class="col-sm-7">
<strong>{vtranslate('File Name', 'Documents')}</strong>
</span>
{foreach item=RELATED_RECORD from=$RELATED_RECORDS}
{assign var=DOWNLOAD_FILE_URL value=$RELATED_RECORD->getDownloadFileURL()}
{assign var=DOWNLOAD_STATUS value=$RELATED_RECORD->get('filestatus')}
{assign var=DOWNLOAD_LOCATION_TYPE value=$RELATED_RECORD->get('filelocationtype')}
<div class="recentActivitiesContainer row">
<ul class="" style="padding-left: 0px;list-style-type: none;">
<li>
<div class="" id="documentRelatedRecord pull-left">
<span class="col-sm-5 textOverflowEllipsis">
<a href="{$RELATED_RECORD->getDetailViewUrl()}" id="{$MODULE}_{$RELATED_MODULE}_Related_Record_{$RELATED_RECORD->get('id')}" title="{$RELATED_RECORD->getDisplayValue('notes_title')}">
{$RELATED_RECORD->getDisplayValue('notes_title')}
</a>
</span>
<span class="col-sm-4 textOverflowEllipsis" id="DownloadableLink">
{if $DOWNLOAD_STATUS eq 1}
{$RELATED_RECORD->getDisplayValue('filename', $RELATED_RECORD->getId(), $RELATED_RECORD)}
{else}
{$RELATED_RECORD->get('filename')}
{/if}
</span>
<span class="col-sm-3">
{* Documents list view special actions *}
{assign var=RECORD_ID value=$RELATED_RECORD->getId()}
{if isPermitted('Documents', 'DetailView', $RECORD_ID) eq 'yes'}
{assign var="DOCUMENT_RECORD_MODEL" value=Vtiger_Record_Model::getInstanceById($RECORD_ID)}
{* Кнопка редактирования в CRM *}
<a name="relationEdit" href="{$RELATED_RECORD->getEditViewUrl()}" title="{vtranslate('LBL_EDIT', 'Documents')}">
<i class="fa fa-pencil alignMiddle"></i>
</a>&nbsp;
{* Кнопка отвязать *}
<a class="relationDelete" href="javascript:void(0)" onclick="unlinkDocumentFromWidget({$RECORD_ID}, this)" title="{vtranslate('LBL_UNLINK', 'Documents')}">
<i class="vicon-linkopen alignMiddle"></i>
</a>&nbsp;
{* Кнопка просмотра файла *}
{if $DOCUMENT_RECORD_MODEL->get('filename') && $DOCUMENT_RECORD_MODEL->get('filestatus')}
<a name="viewfile" href="javascript:void(0)" data-filelocationtype="{$DOCUMENT_RECORD_MODEL->get('filelocationtype')}" data-filename="{$DOCUMENT_RECORD_MODEL->get('filename')}" onclick="Vtiger_Header_Js.previewFile(event,{$RECORD_ID})">
<i title="{vtranslate('LBL_VIEW_FILE', 'Documents')}" class="fa fa-picture-o alignMiddle"></i>
</a>&nbsp;
{/if}
{* Кнопка скачивания - показываем для всех файлов *}
{if $DOCUMENT_RECORD_MODEL->get('filename') && $DOCUMENT_RECORD_MODEL->get('filestatus')}
<a name="downloadfile" href="{$DOCUMENT_RECORD_MODEL->getDownloadFileURL()}" onclick="event.stopImmediatePropagation();">
<i title="{vtranslate('LBL_DOWNLOAD_FILE', 'Documents')}" class="fa fa-download alignMiddle"></i>
</a>&nbsp;
{/if}
{* Кнопки редактирования *}
{if $DOCUMENT_RECORD_MODEL->get('filestatus')}
<a name="editInNextcloud" href="javascript:void(0)" onclick="editInNextcloud({$RECORD_ID}, '{$DOCUMENT_RECORD_MODEL->get('filename')|escape:'javascript'}')">
<i title="⚡ Редактировать (быстро, OnlyOffice напрямую)" class="fa fa-bolt alignMiddle" style="color: #ff6b35;"></i>
</a>&nbsp;
<a name="openViaNextcloud" href="javascript:void(0)" onclick="openViaNextcloud({$RECORD_ID}, '{$DOCUMENT_RECORD_MODEL->get('filename')|escape:'javascript'}')">
<i title="📚 Через Nextcloud (с версионированием)" class="fa fa-cloud alignMiddle" style="color: #007cba;"></i>
</a>&nbsp;
{/if}
{* Кнопка удаления *}
<a name="deletefile" href="javascript:void(0)" onclick="deleteDocumentFromWidget({$RECORD_ID}, this)">
<i title="{vtranslate('LBL_DELETE_FILE', 'Documents')}" class="fa fa-trash alignMiddle" style="color: red;"></i>
</a>
{/if}
</span>
</div>
</li>
</ul>
</div>
{/foreach}
</div>
{assign var=NUMBER_OF_RECORDS value=count($RELATED_RECORDS)}
{if ($NUMBER_OF_RECORDS == -1)}
<div class="row np">
<div class="pull-right">
<a class="moreRecentDocuments cursorPointer">{vtranslate('LBL_MORE',$MODULE_NAME)}</a>
</div>
</div>
{/if}
{/strip}