Files
crm.clientright.ru/layouts/v7/modules/ModuleBuilder/Index.tpl
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

171 lines
7.0 KiB
Smarty

{*+**********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.1
* ("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.
************************************************************************************}
{* modules/Settings/LayoutEditor/views/Index.php *}
{strip}
{include file="modules/Vtiger/partials/Topbar.tpl"}
<div class="container-fluid app-nav">
<div class="row">
{include file="partials/SidebarHeader.tpl"|vtemplate_path:$MODULE}
{include file="ModuleHeader.tpl"|vtemplate_path:$MODULE}
</div>
</div>
<div class="main-container main-container-ModuleBuilder">
<div id="modnavigator" class="module-nav editViewModNavigator">
<div class="hidden-xs hidden-sm mod-switcher-container">
{include file="modules/Vtiger/partials/Menubar.tpl"}
</div>
</div>
<div class="container-fluid" id="layoutEditorContainer">
<input id="selectedModuleName" type="hidden" value="{$SELECTED_MODULE_NAME}" />
<input type="hidden" id="selectedModuleLabel" value="{vtranslate($SELECTED_MODULE_NAME,$SELECTED_MODULE_NAME)}" />
<input type="hidden" id="token" name="token" value="{$smarty.request.token}" />
<input type="hidden" id="current_module" name="current_module" value="{$TKSMODULE}" />
<div class="widget_header row">
<label class="col-sm-2 textAlignCenter" style="padding-top: 8px;">
{vtranslate('LBL_ADD_FIELD_TO', $QUALIFIED_MODULE)}&nbsp;{$TKSMODULE}
</label>
<!--<div class="col-sm-6">
<select class="select2 col-sm-6" name="layoutEditorModules">
<option value=''>{vtranslate('LBL_SELECT_OPTION', $QUALIFIED_MODULE)}</option>
{*foreach item=MODULE_NAME from=$SUPPORTED_MODULES*}
<option value="{$MODULE_NAME}" {if $MODULE_NAME eq $SELECTED_MODULE_NAME} selected {/if}>
{* Calendar needs to be shown as TODO so we are translating using Layout editor specific translations*}
{if $MODULE_NAME eq 'Calendar'}
{vtranslate($MODULE_NAME, $QUALIFIED_MODULE)}
{else}
{vtranslate($MODULE_NAME, $MODULE_NAME)}
{/if}
</option>
{*/foreach*}
</select>
</div>-->
</div>
<span class="pull-right">
<button class="btn btn-success hide download" type="button" id="download"
data-container="body" data-toggle="popover" data-placement="left" data-content="{vtranslate('LBL_CLICK_DOWNLOAD', $MODULE)}">
<i class="icon-download"></i>&nbsp;&nbsp;<strong>{vtranslate('LBL_DOWNLOAD', $MODULE)}</strong>
</button>
<!--<button class="btn btn-success hide import" type="button" id="import"
data-container="body" data-toggle="popover" data-placement="left" data-content="{vtranslate('LBL_CLICK_INSTALL', $MODULE)}">
<strong>{vtranslate('LBL_INSTALL', $MODULE)}</strong>
</button> -->
</span>
{if $USER_MODEL->get('is_admin') eq 'on'}
<span class="btn-group pull-right">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<button class="btn dropdown-toggle" href="#" data-toggle="dropdown">
<i class="icon-wrench" alt="{vtranslate('LBL_SETTINGS', $MODULE)}" title="{vtranslate('LBL_SETTINGS', $MODULE)}"></i>&nbsp;&nbsp;
<i class="caret"></i>
</button>
<ul class="dropdown-menu">
<li><a href='{$UNINSTALLURL}'>{vtranslate('LBL_UNINSTALL_MODULE_BUILDER', $MODULE)}</a></li>
</ul>
</span>
{/if}
<br>
<br>
{if $SELECTED_MODULE_NAME}
<div class="contents tabbable" style="margin-left: 40px !important;overflow-y:scroll;height:500px">
<ul class="nav nav-tabs layoutTabs massEditTabs">
<li class="active detailviewTab"><a data-toggle="tab" href="#detailViewLayout"><strong>{vtranslate('LBL_DETAILVIEW_LAYOUT', $QUALIFIED_MODULE)}</strong></a></li>
<li class="relatedListTab"><a data-toggle="tab" href="#relatedTabOrder"><strong>{vtranslate('LBL_RELATION_SHIPS', $QUALIFIED_MODULE)}</strong></a></li>
</ul>
<div class="tab-content layoutContent themeTableColor overflowVisible" >
<div class="tab-pane active ibbb" id="detailViewLayout">
{include file=vtemplate_path('FieldsList.tpl',$QUALIFIED_MODULE)}
</div>
</div>
<div class="tab-pane active" id="relatedTabOrder">
<div class="clear relatedListContainer"></div>
<!--class="relatedTabModulesList"-->
</div>
</div>
<form class="tks_modulevalidatetks" name="tks_moduleentityvalidate" id="tks_moduleentityvalidate" novalidate="novalidate" method="post">
<div class='modal-overlay-footer clearfix'>
<div class="row clearfix">
<div class='textAlignCenter col-lg-12 col-md-12 col-sm-12 '>
<input type="hidden" name="module" value="{$MODULE}" />
<input type="hidden" name="action" value="BuildModule" />
<input type="hidden" name="mode" value="saveModule" />
<input type="hidden" id="noofblocks" name="noofblocks" value="1" />
<input type="hidden" id="tkssequence" name="tkssequence" value="" />
<input type="hidden" id="token" name="token" value="{$smarty.request.token}" />
<input type="hidden" id="selectedModuleName" name="selectedModuleName" value="{$MODULE_LABEL}" />
<button type='submit' id='tks_moduleentityvalidate' class='btn btn-success saveButton' data-content='Click to build the module & zip' >{vtranslate('LBL_SAVE', $MODULE)}</button>&nbsp;&nbsp;
<a class='cancelLink' href="javascript:history.back()" type="reset">{vtranslate('LBL_CANCEL', $MODULE)}</a>
</div>
</div>
</div>
</form>
</div>
{/if}
</div>
{if $FIELDS_INFO neq '[]'}
<script type="text/javascript">
var uimeta = (function () {
var fieldInfo = {$FIELDS_INFO};
var newFieldInfo = {$NEW_FIELDS_INFO};
return {
field: {
get: function (name, property) {
if (name && property === undefined) {
return fieldInfo[name];
}
if (name && property) {
return fieldInfo[name][property]
}
},
isMandatory: function (name) {
if (fieldInfo[name]) {
return fieldInfo[name].mandatory;
}
return false;
},
getType: function (name) {
if (fieldInfo[name]) {
return fieldInfo[name].type
}
return false;
},
getNewFieldInfo: function () {
if (newFieldInfo['newfieldinfo']) {
return newFieldInfo['newfieldinfo']
}
return false;
}
}
};
})();
</script>
{/if}
{if !$REQUEST_INSTANCE->isAjax()}
<script type="text/javascript">
{literal}
jQuery(document).ready(function () {
var instance = new ModuleBuilder_LayoutEditor_Js();
instance.registerEvents();
});
{/literal}
</script>
{/if}
{/strip}