- 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.
267 lines
19 KiB
Smarty
267 lines
19 KiB
Smarty
{*<!--
|
|
/* * *******************************************************************************
|
|
* The content of this file is subject to the ITS4YouEmails license.
|
|
* ("License"); You may not use this file except in compliance with the License
|
|
* The Initial Developer of the Original Code is IT-Solutions4You s.r.o.
|
|
* Portions created by IT-Solutions4You s.r.o. are Copyright(C) IT-Solutions4You s.r.o.
|
|
* All Rights Reserved.
|
|
* ****************************************************************************** */
|
|
-->*}
|
|
{strip}
|
|
<div class="SendEmailFormStep2 modal-dialog" id="composeEmailContainer" style="width: 70vw; height: 80vh;">
|
|
<div class="modal-content">
|
|
<form class="form-horizontal" id="massEmailForm" method="post" action="index.php" enctype="multipart/form-data" name="massEmailForm">
|
|
{include file="ModalHeader.tpl"|vtemplate_path:$MODULE TITLE={vtranslate('LBL_COMPOSE_EMAIL', $MODULE)}}
|
|
<div class="modal-body">
|
|
<input type="hidden" name="selected_ids" value={ZEND_JSON::encode($SELECTED_IDS)}>
|
|
<input type="hidden" name="excluded_ids" value={ZEND_JSON::encode($EXCLUDED_IDS)}>
|
|
<input type="hidden" name="viewname" value="{$VIEWNAME}"/>
|
|
<input type="hidden" name="module" value="{$MODULE}"/>
|
|
<input type="hidden" name="mode" value="massSave"/>
|
|
<input type="hidden" name="view" value="MassSaveAjax"/>
|
|
<input type="hidden" name="selected_sourceid" value="{$SELECTED_SOURCEID}">
|
|
{foreach item=source_name key=SID name="sourcenames" from=$SOURCE_NAMES}
|
|
<input type="hidden" name="{$SID}toemailinfo" value='{ZEND_JSON::encode($TOMAIL_INFO[$SID])}'/>
|
|
<input type="hidden" name="{$SID}ccemailinfo" value='{ZEND_JSON::encode($CCMAIL_INFO[$SID])}'/>
|
|
<input type="hidden" name="{$SID}bccemailinfo" value='{ZEND_JSON::encode($BCCMAIL_INFO[$SID])}'/>
|
|
<input type="hidden" name="{$SID}toMailNamesList" value='{ZEND_JSON::encode($TOMAIL_NAMES_LIST[$SID])}'/>
|
|
<input type="hidden" name="{$SID}ccMailNamesList" value='{ZEND_JSON::encode($CCMAIL_NAMES_LIST[$SID])}'/>
|
|
<input type="hidden" name="{$SID}bccMailNamesList" value='{ZEND_JSON::encode($BCCMAIL_NAMES_LIST[$SID])}'/>
|
|
{/foreach}
|
|
<input type="hidden" name="to" value='{ZEND_JSON::encode($TO)}'/>
|
|
<input type="hidden" name="cc" value='{ZEND_JSON::encode($CC)}'/>
|
|
<input type="hidden" name="bcc" value='{ZEND_JSON::encode($BCC)}'/>
|
|
|
|
<input type="hidden" id="flag" name="flag" value=""/>
|
|
<input type="hidden" id="maxUploadSize" value="{$MAX_UPLOAD_SIZE}"/>
|
|
<input type="hidden" id="documentIds" name="documentids" value='{Zend_Json::encode($DOCUMENT_IDS)}' />
|
|
<input type="hidden" name="emailMode" value="{$EMAIL_MODE}"/>
|
|
<input type="hidden" name="source_module" value="{$SOURCE_MODULE}"/>
|
|
{if !empty($PARENT_EMAIL_ID)}
|
|
<input type="hidden" name="parent_id" value="{$PARENT_EMAIL_ID}"/>
|
|
<input type="hidden" name="parent_record_id" value="{$PARENT_RECORD}"/>
|
|
{/if}
|
|
{if !empty($RECORDID)}
|
|
<input type="hidden" name="record" value="{$RECORDID}"/>
|
|
{/if}
|
|
<input type="hidden" name="search_key" value="{$SEARCH_KEY}"/>
|
|
<input type="hidden" name="operator" value="{$OPERATOR}"/>
|
|
<input type="hidden" name="search_value" value="{$ALPHABET_VALUE}"/>
|
|
<input type="hidden" name="search_params" value='{ZEND_JSON::encode($SEARCH_PARAMS)}'/>
|
|
<input type="hidden" name="email_template_ids" value='{$EMAIL_TEMPLATE_IDS}'/>
|
|
<input type="hidden" name="email_template_language" value='{$EMAIL_TEMPLATE_LANGUAGE}'/>
|
|
<input type="hidden" name="pdf_template_ids" value='{$PDF_TEMPLATE_IDS}'/>
|
|
<input type="hidden" name="pdf_template_language" value='{$PDF_TEMPLATE_LANGUAGE}'/>
|
|
{if $IS_MERGE_TEMPLATES}
|
|
<input type="hidden" name="is_merge_templates" value='{$IS_MERGE_TEMPLATES}'/>
|
|
{/if}
|
|
<div class="topContent">
|
|
<div class="row toEmailField">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_FROM_EMAIL',$MODULE)} </span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<select name="from_email" class="select2 inputElement">
|
|
<optgroup label="{vtranslate('LBL_FROM_EMAIL',$MODULE)}">
|
|
{html_options options=$FROM_EMAILS selected=$SELECTED_DEFAULT_FROM}
|
|
</optgroup>
|
|
{if $SMTP_RECORDS}
|
|
<optgroup label="{vtranslate('LBL_SMTP',$MODULE)}">
|
|
{foreach from=$SMTP_RECORDS item=SMTP_RECORD key=SMTP_RECORD_ID}
|
|
{if !$SMTP_RECORD->isEmpty('from_email_field')}
|
|
<option value="s::{$SMTP_RECORD->getId()}">{$SMTP_RECORD->get('from_name_field')} <{$SMTP_RECORD->get('from_email_field')}></option>
|
|
{/if}
|
|
{/foreach}
|
|
</optgroup>
|
|
{/if}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{if $SINGLE_RECORD neq 'yes'}
|
|
<div class="row toEmailField">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_RECORDS_LIST',$SOURCEMODULE)} </span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<select name="emailSourcesList" class="select2 inputElement emailSourcesList">
|
|
{html_options options=$SOURCE_NAMES selected=$SELECTED_SOURCEID}
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{/if}
|
|
<div class="row toEmailField">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_TO',$MODULE)} <span class="redColor">*</span></span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<input id="emailField" style="width:100%" name="toEmail" type="text" class="autoComplete sourceField select2" data-rule-required="true" data-rule-multiEmails="true" value="" placeholder="{vtranslate('LBL_TYPE_AND_SEARCH',$MODULE)}">
|
|
<!-- //ITS4You:{Zend_Json::encode($TO_EMAILS)}-->
|
|
</div>
|
|
<div class="col-lg-4 input-group">
|
|
<select style="width: 140px;" class="select2 emailModulesList pull-right">
|
|
{foreach item=MODULE_NAME from=$RELATED_MODULES}
|
|
<option value="{$MODULE_NAME}" {if $MODULE_NAME eq $RELATED_MODULE_SELECTED} selected {/if}>{vtranslate($MODULE_NAME,$MODULE_NAME)}</option>
|
|
{/foreach}
|
|
</select>
|
|
<a href="#" class="clearReferenceSelection cursorPointer" name="clearToEmailField"> X </a>
|
|
<span class="input-group-addon">
|
|
<span class="selectEmail cursorPointer">
|
|
<i class="fa fa-search" title="{vtranslate('LBL_SELECT', $MODULE)}"></i>
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row {if empty($CC)} hide {/if} ccContainer ccEmailField">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_CC',$MODULE)}</span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<input id="emailccField" style="width:100%" name="ccEmail" type="text" class="autoComplete sourceField select2" data-rule-multiEmails="true" value="" placeholder="{vtranslate('LBL_TYPE_AND_SEARCH',$MODULE)}">
|
|
</div>
|
|
<div class="col-lg-4"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row {if empty($BCC)} hide {/if} bccContainer bccEmailField">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_BCC',$MODULE)}</span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<input id="emailbccField" style="width:100%" name="bccEmail" type="text" class="autoComplete sourceField select2" data-rule-multiEmails="true" value="" placeholder="{vtranslate('LBL_TYPE_AND_SEARCH',$MODULE)}">
|
|
</div>
|
|
<div class="col-lg-4"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row {if (!empty($CC)) and (!empty($BCC))} hide {/if} ">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<a href="#" class="cursorPointer {if (!empty($CC))}hide{/if}" id="ccLink">{vtranslate('LBL_ADD_CC', $MODULE)}</a>
|
|
<a href="#" class="cursorPointer {if (!empty($BCC))}hide{/if}" id="bccLink">{vtranslate('LBL_ADD_BCC', $MODULE)}</a>
|
|
</div>
|
|
<div class="col-lg-4"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row subjectField">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_SUBJECT',$MODULE)} <span class="redColor">*</span></span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<input type="text" name="subject" value="{$SUBJECT}" data-rule-required="true" id="subject" spellcheck="true" class="inputElement"/>
|
|
</div>
|
|
<div class="col-lg-4"></div>
|
|
</div>
|
|
</div>
|
|
<div class="row attachment">
|
|
<div class="col-lg-12">
|
|
<div class="col-lg-2">
|
|
<span class="pull-right">{vtranslate('LBL_ATTACHMENT',$MODULE)}</span>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<div class="dropdown display-inline-block">
|
|
<div class="dropdown-toggle btn btn-default" data-toggle="dropdown">
|
|
<span style="margin-right: 1rem;">{vtranslate('LBL_MORE', $MODULE)}</span>
|
|
<i class="fa fa-caret-down"></i>
|
|
</div>
|
|
<ul class="dropdown-menu dropdown-menu-right">
|
|
<li>
|
|
<div class="dropdown-item" style="padding: 4px 6px;">
|
|
<input type="file" class="{if $FILE_ATTACHED}removeNoFileChosen{/if}" id="multiFile" name="file[]" title="{vtranslate('LBL_UPLOAD', $MODULE)}"/>
|
|
</div>
|
|
</li>
|
|
<li>
|
|
<a class="dropdown-item" href="#" id="browseCrm" data-url="{$DOCUMENTS_URL}" title="{vtranslate('LBL_BROWSE_CRM',$MODULE)}">{vtranslate('LBL_BROWSE_CRM',$MODULE)}</a>
|
|
</li>
|
|
{if $RECORD_DOCUMENTS_URL}
|
|
<li>
|
|
<a class="dropdown-item" href="#" id="browseRecord" data-url="{$RECORD_DOCUMENTS_URL}" title="{vtranslate('LBL_BROWSE_RECORD',$MODULE)}">{vtranslate('LBL_BROWSE_RECORD',$MODULE)}</a>
|
|
</li>
|
|
{/if}
|
|
</ul>
|
|
</div>
|
|
<div>
|
|
<div id="attachments" style="margin-top: 1rem;">
|
|
{foreach item=ATTACHMENT from=$ATTACHMENTS}
|
|
{if ('docid'|array_key_exists:$ATTACHMENT)}
|
|
{assign var=DOCUMENT_ID value=$ATTACHMENT['docid']}
|
|
{assign var=FILE_TYPE value="document"}
|
|
{else}
|
|
{assign var=FILE_TYPE value="file"}
|
|
{/if}
|
|
<div class="MultiFile-label customAttachment" data-file-id="{$ATTACHMENT['fileid']}" data-file-type="{$FILE_TYPE}" data-file-size="{$ATTACHMENT['size']}" {if $FILE_TYPE eq "document"} data-document-id="{$DOCUMENT_ID}"{/if}>
|
|
{if $ATTACHMENT['nondeletable'] neq true}
|
|
<a name="removeAttachment" class="removeAttachment cursorPointer">x </a>
|
|
{/if}
|
|
<span>{$ATTACHMENT['attachment']}</span>
|
|
</div>
|
|
{/foreach}
|
|
</div>
|
|
{if $PDF_TEMPLATES}
|
|
<input type="hidden" name="pdftemplateids" value="{$PDF_TEMPLATE_IDS}">
|
|
<input type="hidden" name="pdflanguage" value="{$PDF_TEMPLATE_LANGUAGE}">
|
|
{foreach key=PDF_TEMPLATE_ID item=PDF_TEMPLATE_NAME from=$PDF_TEMPLATES}
|
|
<div class="row">
|
|
<a href="#" class="generatePreviewPDF cursorPointer" data-templateid="{$PDF_TEMPLATE_ID}">
|
|
<i class="fa fa-file-pdf-o" aria-hidden="true"></i>
|
|
<span style="margin-left: 1rem">{$PDF_TEMPLATE_NAME}</span>
|
|
</a>
|
|
</div>
|
|
{/foreach}
|
|
{/if}
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4 insertTemplate" style="text-align: right;">
|
|
<button id="selectEmailTemplate" class="btn btn-success pull-right" data-url="{ITS4YouEmails_Record_Model::getSelectTemplateUrl($SOURCERECORD, $SOURCEMODULE)}">{vtranslate('LBL_SELECT_EMAIL_TEMPLATE',$MODULE)}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<button type="button" class="btn btn-default includeSignature">{vtranslate('LBL_INCLUDE_SIGNATURE',$MODULE)}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="container-fluid hide" id='emailTemplateWarning'>
|
|
<div class="alert alert-warning fade in">
|
|
<a href="#" class="close" data-dismiss="alert">×</a>
|
|
<p>{vtranslate('LBL_EMAILTEMPLATE_WARNING_CONTENT',$MODULE)}</p>
|
|
</div>
|
|
</div>
|
|
<div class="row templateContent">
|
|
<div class="col-lg-12">
|
|
<textarea style="width:390px;height:200px;" id="description" name="description">{$DESCRIPTION}</textarea>
|
|
</div>
|
|
</div>
|
|
|
|
{if $RELATED_LOAD eq true}
|
|
<input type="hidden" name="related_load" value={$RELATED_LOAD}/>
|
|
{/if}
|
|
<input type="hidden" name="attachments" value='{ZEND_JSON::encode($ATTACHMENTS)}'/>
|
|
<div id="emailTemplateWarningContent" style="display: none;">
|
|
{vtranslate('LBL_EMAILTEMPLATE_WARNING_CONTENT',$MODULE)}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal-footer">
|
|
<div class="pull-right cancelLinkContainer">
|
|
<a href="#" class="cancelLink" type="reset" data-dismiss="modal">{vtranslate('LBL_CANCEL', $MODULE)}</a>
|
|
</div>
|
|
<button id="sendEmail" name="sendemail" class="btn btn-success" title="{vtranslate("LBL_SEND_EMAIL",$MODULE)}" type="submit"><strong>{vtranslate("LBL_SEND_EMAIL",$MODULE)}</strong></button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
{/strip} |