1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
tileview.php
См. документацию.
1
<?php
8
9
namespace
Bitrix\Sender\Segment
;
10
11
use
Bitrix\Main\Localization\Loc
;
12
use
Bitrix\Sender\Dispatch
;
13
use
Bitrix\Sender\Entity
;
14
use
Bitrix\Sender\GroupConnectorTable
;
15
use
Bitrix\Sender\GroupTable
;
16
use
Bitrix\Sender\Integration\Sender\Connectors\Contact
;
17
use
Bitrix\Sender\Message
;
18
19
Loc::loadMessages(__FILE__);
20
27
class
TileView
28
{
29
public
const
MAX_COUNT
= 4;
30
32
protected
$isInclude
=
true
;
33
35
protected
$message
;
36
43
public
static
function
create
(
$isInclude
=
true
)
44
{
45
return
new
static
(
$isInclude
);
46
}
47
53
public
function
__construct
(
$isInclude
=
true
)
54
{
55
$this->isInclude =
$isInclude
;
56
}
57
65
public
function
setMessage
(
Message
\
Adapter
$message
=
null
)
66
{
67
$this->message =
$message
;
68
return
$this;
69
}
70
76
public
function
getSections()
77
{
78
$list = [
79
'last'
=> [
80
'id'
=>
'last'
,
81
'name'
=> Loc::getMessage(
'SENDER_SEGMENT_TILEVIEW_SECTION_LAST'
),
82
'items'
=> [],
83
],
84
'freq'
=> [
85
'id'
=>
'freq'
,
86
'name'
=> Loc::getMessage(
'SENDER_SEGMENT_TILEVIEW_SECTION_FREQ'
),
87
'items'
=> [],
88
],
89
'system'
=> [
90
'id'
=>
'system'
,
91
'name'
=> Loc::getMessage(
'SENDER_SEGMENT_TILEVIEW_SECTION_SYSTEM'
),
92
'items'
=> [],
93
],
94
'case'
=> [
95
'id'
=>
'case'
,
96
'name'
=> Loc::getMessage(
'SENDER_SEGMENT_TILEVIEW_SECTION_CASE'
),
97
'items'
=> [],
98
],
99
'my'
=> [
100
'id'
=>
'my'
,
101
'name'
=> Loc::getMessage(
'SENDER_SEGMENT_TILEVIEW_SECTION_MY'
),
102
'items'
=> [],
103
],
104
];
105
$tiles = $this->
getTiles
([
'filter'
=> [
'=HIDDEN'
=>
false
]]);
106
107
foreach
($tiles as $tile)
108
{
109
// set last
110
if
($tile[
'data'
][
'last'
])
111
{
113
$last = $tile[
'data'
][
'last'
];
114
$tile[
'data'
][
'last'
] = $last->getTimestamp();
115
116
$list[
'last'
][
'items'
][] = $tile;
117
}
118
119
// set freq
120
if
($tile[
'data'
][
'freq'
])
121
{
122
$list[
'freq'
][
'items'
][] = $tile;
123
}
124
125
// set cases
126
if
($tile[
'data'
][
'case'
])
127
{
128
$list[
'case'
][
'items'
][] = $tile;
129
}
130
131
// set system or my
132
$key
= $tile[
'data'
][
'system'
] ?
'system'
:
'my'
;
133
$list[
$key
][
'items'
][] = $tile;
134
}
135
136
// sort & cut last
137
usort(
138
$list[
'last'
][
'items'
],
139
function
(
$a
, $b) {
140
return
(
$a
[
'data'
][
'last'
] > $b[
'data'
][
'last'
]) ? -1 : 1;
141
}
142
);
143
$list[
'last'
][
'items'
] = array_slice($list[
'last'
][
'items'
], 0, self::MAX_COUNT);
144
145
// sort freq
146
usort(
147
$list[
'freq'
][
'items'
],
148
function
(
$a
, $b) {
149
return
(
$a
[
'data'
][
'freq'
] > $b[
'data'
][
'freq'
]) ? -1 : 1;
150
}
151
);
152
$list[
'freq'
][
'items'
] = array_slice($list[
'freq'
][
'items'
], 0, self::MAX_COUNT);
153
154
// remove empty sections
155
foreach
($list as $sectionId => $section)
156
{
157
if
(
count
($section[
'items'
]) > 0)
158
{
159
continue
;
160
}
161
162
unset($list[$sectionId]);
163
}
164
$list = array_values($list);
165
166
return
$list;
167
}
168
175
public
function
getTile
($segmentId)
176
{
177
$tiles = $this->
getTiles
([
'filter'
=> [
'=ID'
=> $segmentId]]);
178
$tile = current($tiles) ?:
null
;
179
return
$tile;
180
}
181
188
public
function
getTiles
(
array
$parameters = [])
189
{
190
$result
= [];
191
$ids = [];
192
193
$prefix = $this->isInclude ?
''
:
'_EXCLUDE'
;
194
$fieldDateUse =
"DATE_USE$prefix"
;
195
$fieldUseCount =
"USE_COUNT$prefix"
;
196
197
if
(!isset($parameters[
'order'
]))
198
{
199
$parameters[
'order'
] = [
200
'SORT'
=>
'ASC'
,
201
'NAME'
=>
'ASC'
,
202
$fieldDateUse =>
'DESC'
,
203
];
204
}
205
206
$segments =
GroupTable::getList
($parameters);
207
208
foreach
($segments as $segment)
209
{
210
$item = [
211
'id'
=> $segment[
'ID'
],
212
'name'
=> $segment[
'NAME'
],
213
'data'
=> [
214
'last'
=> $segment[$fieldDateUse],
215
'freq'
=> (int)$segment[$fieldUseCount],
216
'case'
=> mb_substr($segment[
'CODE'
], 0, 5) ===
'case_'
,
217
'hidden'
=> $segment[
'HIDDEN'
] ===
'Y'
,
218
'system'
=> $segment[
'IS_SYSTEM'
] ===
'Y'
,
219
'hasStatic'
=>
false
,
220
'count'
=> [],
221
],
222
];
223
224
$item[
'bgcolor'
] =
self::getBackgroundColor
($item[
'data'
]);
225
$result
[] = $item;
226
$ids[] = $item[
'id'
];
227
}
228
229
if
(
count
($ids) > 0)
230
{
231
$connectors =
GroupConnectorTable::getList
([
232
'filter'
=> [
233
'@GROUP_ID'
=> $ids,
234
],
235
]);
236
237
$hasStatic = [];
238
foreach
($connectors as
$connector
)
239
{
240
if
(!is_array(
$connector
[
'ENDPOINT'
]))
241
{
242
$hasStatic[
$connector
[
'GROUP_ID'
]] =
false
;
243
continue
;
244
}
245
$entityConnector =
\Bitrix\Sender\Connector\Manager::getConnector
(
$connector
[
'ENDPOINT'
]);
246
$hasStatic[
$connector
[
'GROUP_ID'
]] = $entityConnector instanceof
Contact
247
&&
$connector
[
'ADDRESS_COUNT'
] > 0
248
;
249
}
250
251
$duration =
null
;
252
$messageTypes = [];
253
if
($this->message)
254
{
255
$duration =
Dispatch\DurationCountBased::create
($this->message);
256
$messageTypes = $this->message->getSupportedRecipientTypes();
257
}
258
259
$counters
=
Entity\Segment::getAddressCounters
($ids);
260
foreach
(
$result
as $index => $item)
261
{
262
if
(!isset(
$counters
[$item[
'id'
]]))
263
{
264
continue
;
265
}
266
267
// set count
268
$item[
'data'
][
'count'
] =
$counters
[$item[
'id'
]];
269
$item[
'data'
][
'hasStatic'
] = $hasStatic[$item[
'id'
]];
270
271
// set duration
272
foreach
($item[
'data'
][
'count'
] as $typeId =>
$count
)
273
{
274
if
(isset($item[
'data'
][
'duration'
]) && $item[
'data'
][
'duration'
])
275
{
276
continue
;
277
}
278
279
if
(!$duration || !$this->message)
280
{
281
continue
;
282
}
283
284
if
(!in_array($typeId, $messageTypes))
285
{
286
continue
;
287
}
288
289
$item[
'data'
][
'duration'
] = $duration->getIntervalDefault(
$count
);
290
}
291
292
$result
[$index] = $item;
293
}
294
}
295
296
return
$result
;
297
}
298
299
protected
static
function
getBackgroundColor
(
array
$data
)
300
{
301
if
(
$data
[
'system'
])
302
{
303
return
null
;
//'#d3ffcd';
304
}
305
elseif
(
$data
[
'hidden'
])
306
{
307
return
'#eef2f4'
;
308
}
309
else
310
{
311
return
null
;
312
}
313
}
314
}
$count
$count
Определения
admin_tab.php:4
Bitrix\Main\GroupTable
Определения
group.php:32
Bitrix\Main\Localization\Loc
Определения
loc.php:12
Bitrix\Main\ORM\Data\DataManager\getList
static getList(array $parameters=array())
Определения
datamanager.php:431
Bitrix\Sender\Connector\Manager\getConnector
static getConnector(array $endpoint)
Определения
manager.php:191
Bitrix\Sender\Dispatch\DurationCountBased\create
static create(Message\Adapter $message)
Определения
durationcountbased.php:36
Bitrix\Sender\Entity\Contact
Определения
contact.php:26
Bitrix\Sender\Entity\Segment\getAddressCounters
static getAddressCounters(array $list)
Определения
segment.php:449
Bitrix\Sender\GroupConnectorTable
Определения
group.php:201
Bitrix\Sender\Message\Adapter
Определения
adapter.php:21
Bitrix\Sender\Segment\TileView
Определения
tileview.php:28
Bitrix\Sender\Segment\TileView\__construct
__construct($isInclude=true)
Определения
tileview.php:53
Bitrix\Sender\Segment\TileView\getBackgroundColor
static getBackgroundColor(array $data)
Определения
tileview.php:299
Bitrix\Sender\Segment\TileView\setMessage
setMessage(Message\Adapter $message=null)
Определения
tileview.php:65
Bitrix\Sender\Segment\TileView\$isInclude
$isInclude
Определения
tileview.php:32
Bitrix\Sender\Segment\TileView\getTiles
getTiles(array $parameters=[])
Определения
tileview.php:188
Bitrix\Sender\Segment\TileView\$message
$message
Определения
tileview.php:35
Bitrix\Sender\Segment\TileView\create
static create($isInclude=true)
Определения
tileview.php:43
Bitrix\Sender\Segment\TileView\getTile
getTile($segmentId)
Определения
tileview.php:175
Bitrix\Sender\Segment\TileView\MAX_COUNT
const MAX_COUNT
Определения
tileview.php:29
$data
$data['IS_AVAILABLE']
Определения
.description.php:13
array
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения
file_new.php:804
$result
$result
Определения
get_property_values.php:14
Bitrix\Sender\Connector\$connector
$connector
Определения
resultview.php:27
Bitrix\Sender\Dispatch
Определения
duration.php:8
Bitrix\Sender\Entity
Определения
ad.php:8
Bitrix\Sender\Message
Определения
adapter.php:9
Bitrix\Sender\Segment
Определения
tileview.php:9
elseif
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения
prolog_main_admin.php:393
$key
if(empty($signedUserToken)) $key
Определения
quickway.php:257
count
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения
waybill.php:936
$a
else $a
Определения
template.php:137
$counters
$counters
Определения
options.php:100
bitrix
modules
sender
lib
segment
tileview.php
Создано системой
1.14.0