1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
template.php
См. документацию.
1<?php
8namespace Bitrix\Sender;
9
10use Bitrix\Main\DB;
11use Bitrix\Main\ORM;
12use Bitrix\Main\Type as MainType;
13use Bitrix\Main\Localization\Loc;
14use Bitrix\Main\Loader;
15use Bitrix\Fileman\Block\Editor as BlockEditor;
16use Bitrix\Fileman\Block\EditorMail as BlockEditorMail;
17
18Loc::loadMessages(__FILE__);
19
37{
38 const LOCAL_DIR_IMG = '/images/sender/preset/template/';
39 public const PER_PAGE_LIMIT = 9;
40 private static array $loadedTemplates = [];
41
50 public static function onPresetTemplateList($templateType = null, $templateId = null)
51 {
52 $resultList = array();
53 if($templateType && $templateType !== 'USER')
54 {
55 return $resultList;
56 }
57
58 if (!empty(self::$loadedTemplates[$templateId]))
59 {
60 return self::$loadedTemplates[$templateId];
61 }
62
63 $localPathOfIcon = static::LOCAL_DIR_IMG . 'my.png';
64 //$fullPathOfIcon = Loader::getLocal($localPathOfIcon);
65
66 // return only active templates, but if requested template by id return any
67 $filter = array();
68 if($templateId)
69 {
70 $filter['ID'] = $templateId;
71 }
72 else
73 {
74 $filter['ACTIVE'] = 'Y';
75 }
76
77 $templateDb = static::getList([
78 'filter' => $filter,
79 'order' => ['ID' => 'DESC'],
80 'limit' => self::PER_PAGE_LIMIT,
81 ]);
82
83 $count = static::getCount($filter);
84
85 while ($template = $templateDb->fetch())
86 {
87 $resultList[] = array(
88 'TYPE' => 'USER',
89 'ID' => $template['ID'],
90 'NAME' => $template['NAME'],
91 'ICON' => '',//(!empty($fullPathOfIcon) ? '/bitrix'.$localPathOfIcon : ''),
92 'FIELDS' => array(
93 'MESSAGE' => array(
94 'CODE' => 'MESSAGE',
95 'VALUE' => Security\Sanitizer::fixTemplateStyles($template['CONTENT']),
96 'ON_DEMAND' => static::isContentForBlockEditor($template['CONTENT'])
97 ),
98 'SUBJECT' => array(
99 'CODE' => 'SUBJECT',
100 'VALUE' => $template['NAME'],
101 ),
102 ),
103 'COUNT' => $count,
104 );
105 }
106 self::$loadedTemplates[$templateId] = $resultList;
107 return $resultList;
108 }
109
115 public static function incUseCount($id)
116 {
117 return static::update($id, array(
118 'USE_COUNT' => new DB\SqlExpression('?# + 1', 'USE_COUNT'),
119 'DATE_USE' => new MainType\DateTime()
120 ))->isSuccess();
121 }
122
128 public static function getTableName()
129 {
130 return 'b_sender_preset_template';
131 }
132
138 public static function getMap()
139 {
140 return array(
141 'ID' => array(
142 'data_type' => 'integer',
143 'autocomplete' => true,
144 'primary' => true,
145 ),
146 'ACTIVE' => array(
147 'data_type' => 'string',
148 'required' => true,
149 'default_value' => 'Y',
150 ),
151 'NAME' => array(
152 'data_type' => 'string',
153 'required' => true,
154 'title' => Loc::getMessage('SENDER_ENTITY_TEMPLATE_FIELD_TITLE_NAME')
155 ),
156 'CONTENT' => array(
157 'data_type' => 'string',
158 'required' => true,
159 'title' => Loc::getMessage('SENDER_ENTITY_TEMPLATE_FIELD_TITLE_CONTENT'),
160 'save_data_modification' => array('\Bitrix\Main\Text\Emoji', 'getSaveModificator'),
161 'fetch_data_modification' => array('\Bitrix\Main\Text\Emoji', 'getFetchModificator'),
162 ),
163 'USE_COUNT' => array(
164 'data_type' => 'integer',
165 'default_value' => 0,
166 'required' => true,
167 ),
168 'DATE_INSERT' => array(
169 'data_type' => 'datetime',
170 'required' => true,
171 'default_value' => new MainType\DateTime(),
172 ),
173 'DATE_USE' => array(
174 'data_type' => 'datetime',
175 ),
176 );
177 }
178
183 public static function onBeforeAdd(ORM\Event $event)
184 {
186 $data = $event->getParameters();
187 $data['fields']['CONTENT'] = Security\Sanitizer::fixTemplateStyles($data['fields']['CONTENT']);
188 $result->modifyFields($data['fields']);
189
190 return $result;
191 }
192
193 public static function onAfterAdd(ORM\Event $event)
194 {
196 $data = $event->getParameters();
197 if (isset($data['fields']['CONTENT']))
198 {
199 \Bitrix\Sender\FileTable::syncFiles($data['primary']['ID'], 1, $data['fields']['CONTENT']);
200 }
201
202 return $result;
203 }
204
211 public static function onBeforeUpdate(ORM\Event $event)
212 {
214
215 $data = $event->getParameters();
216 if (array_key_exists('CONTENT', $data['fields']))
217 {
218 $data['fields']['CONTENT'] = Security\Sanitizer::fixTemplateStyles($data['fields']['CONTENT']);
219 $result->modifyFields($data['fields']);
220 \Bitrix\Sender\FileTable::syncFiles($data['primary']['ID'], 1, $data['fields']['CONTENT']);
221 }
222
223 return $result;
224 }
225
232 public static function onBeforeDelete(ORM\Event $event)
233 {
235 $data = $event->getParameters();
236 $chainListDb = MailingChainTable::getList(array(
237 'select' => array('ID', 'SUBJECT', 'MAILING_ID', 'MAILING_NAME' => 'TITLE'),
238 'filter' => array('TEMPLATE_TYPE' => 'USER', 'TEMPLATE_ID' => $data['primary']['ID']),
239 'order' => array('MAILING_NAME' => 'ASC', 'ID')
240 ));
241
242 if($chainListDb->getSelectedRowsCount() > 0)
243 {
244 $template = static::getRowById($data['primary']['ID']);
245 $messageList = array();
246 while($chain = $chainListDb->fetch())
247 {
248 $messageList[$chain['MAILING_NAME']] = '[' . $chain['ID'] . '] ' . htmlspecialcharsbx($chain['SUBJECT']) . "\n";
249 }
250
251 $message = Loc::getMessage('SENDER_ENTITY_TEMPLATE_DELETE_ERROR_TEMPLATE', array('#NAME#' => $template['NAME'])) . "\n";
252 foreach($messageList as $mailingName => $messageItem)
253 {
254 $message .= Loc::getMessage('SENDER_ENTITY_TEMPLATE_DELETE_ERROR_MAILING', array('#NAME#' => $mailingName)) . "\n" . $messageItem . "\n";
255 }
256
257 $result->addError(new ORM\EntityError($message));
258 }
259
260 if (!$result->getErrors())
261 {
262 \Bitrix\Sender\FileTable::syncFiles($data['primary']['ID'], 1, '');
263 }
264 return $result;
265 }
266
273 public static function isContentForBlockEditor($content)
274 {
275 Loader::includeModule('fileman');
276 return BlockEditor::isContentSupported($content);
277 }
278
285 public static function initEditor(array $params)
286 {
287 $fieldName = $params['FIELD_NAME'];
288 $fieldValue = $params['FIELD_VALUE'];
289 $isUserHavePhpAccess = $params['HAVE_USER_ACCESS'];
290 $showSaveTemplate = isset($params['SHOW_SAVE_TEMPLATE']) ? $params['SHOW_SAVE_TEMPLATE'] : true;
291 $site = isset($params['SITE']) ? $params['SITE'] : '';
292 $charset = isset($params['CHARSET']) ? $params['CHARSET'] : '';
293 $contentUrl = isset($params['CONTENT_URL']) ? $params['CONTENT_URL'] : '';
294 $templateTypeInput = isset($params['TEMPLATE_TYPE_INPUT']) ? $params['TEMPLATE_TYPE_INPUT'] : 'TEMPLATE_TYPE';
295 $templateIdInput = isset($params['TEMPLATE_ID_INPUT']) ? $params['TEMPLATE_ID_INPUT'] : 'TEMPLATE_ID';
296 $templateType = isset($params['TEMPLATE_TYPE']) ? $params['TEMPLATE_TYPE'] : '';
297 $templateId = isset($params['TEMPLATE_ID']) ? $params['TEMPLATE_ID'] : '';
298 $isTemplateMode = isset($params['IS_TEMPLATE_MODE']) ? (bool) $params['IS_TEMPLATE_MODE'] : true;
299 if(!empty($params['PERSONALIZE_LIST']) && is_array($params['PERSONALIZE_LIST']))
300 {
302 }
303
304 static $isInit;
305
306 $isDisplayBlockEditor = ($templateType && $templateId) || static::isContentForBlockEditor($fieldValue);
307
308 $editorHeight = '650px';
309 $editorWidth = '100%';
310
311 Loader::includeModule('fileman');
312
313 \CJSCore::RegisterExt("sender_editor", Array(
314 "js" => array("/bitrix/js/sender/editor/htmleditor.js"),
315 "rel" => array()
316 ));
317 \CJSCore::Init(array("sender_editor"));
318
319 ob_start();
320 ?>
321 <div id="bx-sender-visual-editor-<?=$fieldName?>" style="<?if($isDisplayBlockEditor):?>display: none;<?endif;?>">
322 <script>
323 BX.ready(function(){
324 <?if(!$isInit): $isInit = true;?>
325 var letterManager = new SenderLetterManager;
326 letterManager.setPlaceHolderList(<?=\CUtil::PhpToJSObject(PostingRecipientTable::getPersonalizeList());?>);
327 <?endif;?>
328 });
329
330 BX.message({
331 "BXEdPlaceHolderSelectorTitle" : "<?=Loc::getMessage('SENDER_TEMPLATE_EDITOR_PLACEHOLDER')?>"
332 });
333 </script>
334 <textarea id="bxed_<?=htmlspecialcharsbx($fieldName)?>"
335 name="<?=htmlspecialcharsbx($fieldName)?>"
336 style="height: <?=htmlspecialcharsbx($editorHeight)?>; width: <?=htmlspecialcharsbx($editorWidth)?>;"
337 class="typearea"
338 ><?=htmlspecialcharsbx($fieldValue)?></textarea>
339
340 </div>
341
342 <div id="bx-sender-block-editor-<?=htmlspecialcharsbx($fieldName)?>" style="<?if(!$isDisplayBlockEditor):?>display: none;<?endif;?>">
343 <br/>
344 <input type="hidden" name="<?=htmlspecialcharsbx($templateTypeInput)?>" value="<?=htmlspecialcharsbx($templateType)?>" />
345 <input type="hidden" name="<?=htmlspecialcharsbx($templateIdInput)?>" value="<?=htmlspecialcharsbx($templateId)?>" />
346 <?
347 $url = '';
348 if($isDisplayBlockEditor)
349 {
350 if($templateType && $templateId)
351 {
352 $url = '/bitrix/admin/sender_template_admin.php?';
353 $url .= 'action=get_template&template_type=' . $templateType . '&template_id=' . $templateId;
354 $url .= '&lang=' . LANGUAGE_ID . '&' . bitrix_sessid_get();
355 }
356 else
357 {
358 $url = $contentUrl;
359 }
360 }
361 echo BlockEditorMail::show(array(
362 'id' => $fieldName,
363 'charset' => $charset,
364 'site' => $site,
365 'own_result_id' => 'bxed_' . $fieldName,
366 'url' => $url,
367 'templateType' => $templateType,
368 'templateId' => $templateId,
369 'isTemplateMode' => $isTemplateMode,
370 'isUserHavePhpAccess' => $isUserHavePhpAccess,
371 ));
372 ?>
373 </div>
374
375 <?
376 if($showSaveTemplate):
377 ?>
378 <script>
379 function ToggleTemplateSaveDialog()
380 {
381 BX('TEMPLATE_ACTION_SAVE_NAME_CONT').value = '';
382
383 var currentDisplay = BX('TEMPLATE_ACTION_SAVE_NAME_CONT').style.display;
384 BX('TEMPLATE_ACTION_SAVE_NAME_CONT').style.display = BX.toggle(currentDisplay, ['inline', 'none']);
385 }
386 </script>
387 <div class="adm-detail-content-item-block-save">
388 <span>
389 <input type="checkbox" value="Y" name="TEMPLATE_ACTION_SAVE" id="TEMPLATE_ACTION_SAVE" onclick="ToggleTemplateSaveDialog();">
390 <label for="TEMPLATE_ACTION_SAVE"><?=Loc::getMessage('SENDER_TEMPLATE_EDITOR_SAVE')?></label>
391 </span>
392 <span id="TEMPLATE_ACTION_SAVE_NAME_CONT" style="display: none;"> <?=Loc::getMessage('SENDER_TEMPLATE_EDITOR_SAVE_NAME')?> <input type="text" name="TEMPLATE_ACTION_SAVE_NAME"></span>
393 </div>
394 <?
395 endif;
396
397 return ob_get_clean();
398 }
399}
$count
Определения admin_tab.php:4
Определения event.php:5
static getList(array $parameters=array())
Определения datamanager.php:431
static syncFiles(int $entityId, int $entityType, string $template, bool $deleteFiles=true, bool $onDeleteEntity=false)
Определения filetable.php:75
static getPersonalizeList()
Определения posting.php:773
static setPersonalizeList(array $personalizeList=null)
Определения posting.php:765
static fixTemplateStyles($html)
Определения sanitizer.php:107
const PER_PAGE_LIMIT
Определения template.php:39
static getMap()
Определения template.php:138
static incUseCount($id)
Определения template.php:115
static isContentForBlockEditor($content)
Определения template.php:273
static onBeforeAdd(ORM\Event $event)
Определения template.php:183
const LOCAL_DIR_IMG
Определения template.php:38
static onPresetTemplateList($templateType=null, $templateId=null)
Определения template.php:50
static onAfterAdd(ORM\Event $event)
Определения template.php:193
static initEditor(array $params)
Определения template.php:285
static onBeforeDelete(ORM\Event $event)
Определения template.php:232
static onBeforeUpdate(ORM\Event $event)
Определения template.php:211
static getTableName()
Определения template.php:128
static Init($arExt=array(), $bReturn=false)
Определения jscore.php:66
static RegisterExt($name, $arPaths)
Определения jscore.php:28
$content
Определения commerceml.php:144
$templateId
Определения component_props2.php:51
$data['IS_AVAILABLE']
Определения .description.php:13
$template
Определения file_edit.php:49
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$filter
Определения iblock_catalog_list.php:54
endif
Определения csv_new_setup.php:990
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
bitrix_sessid_get($varname='sessid')
Определения tools.php:4695
Определения arrayresult.php:2
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
font style
Определения invoice.php:442
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$url
Определения iframe.php:7
$site
Определения yandex_run.php:614