28 private const ONE_MONTH = 3600 * 24 * 30;
29 private const ENDLESS_LIFETIME = 0;
35 if (!Loader::includeModule(
'ui'))
40 foreach ($this->getConfig() as
$config)
43 if (!$tour || !$tour->isAvailable())
49 $promoList->add($promo);
55 private function getConfig():
array
59 if (!Loader::includeModule(
'ui'))
65 "ID" =>
'im:group-chat-create:20062023:all',
67 "DEVICE_TYPE" => DeviceType::WEB->value,
68 "LIFETIME" => self::ENDLESS_LIFETIME,
69 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
73 "ID" =>
'im:conference-create:24082023:all',
75 "DEVICE_TYPE" => DeviceType::WEB->value,
76 "LIFETIME" => self::ENDLESS_LIFETIME,
77 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
81 "ID" =>
'im:channel-create:04032024:all',
83 "DEVICE_TYPE" => DeviceType::WEB->value,
84 "LIFETIME" => self::ENDLESS_LIFETIME,
85 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
89 "ID" =>
'im:collab-create:12092024:all',
91 "DEVICE_TYPE" => DeviceType::WEB->value,
92 "LIFETIME" => self::ONE_MONTH * 2,
96 "ID" =>
'im:add-users-to-copilot-chat:09042024:all',
98 "DEVICE_TYPE" => DeviceType::WEB->value,
99 "LIFETIME" => self::ENDLESS_LIFETIME,
100 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
104 "ID" =>
'im:change-role-copilot-chat:09042024:all',
106 "DEVICE_TYPE" => DeviceType::WEB->value,
107 "LIFETIME" => self::ENDLESS_LIFETIME,
108 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
112 "ID" =>
'im:collab-helpdesk-sidebar:30102024:all',
114 "DEVICE_TYPE" => DeviceType::WEB->value,
115 "LIFETIME" => self::ENDLESS_LIFETIME,
119 "ID" =>
'call:copilot-call-button:29102024:all',
121 "DEVICE_TYPE" => DeviceType::WEB->value,
125 "ID" =>
'call:copilot-notify-warning:21112024:all',
127 "DEVICE_TYPE" => DeviceType::WEB->value,
131 "ID" =>
'call:copilot-notify-promo:21112024:all',
133 "DEVICE_TYPE" => DeviceType::WEB->value,
137 "ID" =>
'call:callcontrol-notify-promo:07052025:all',
139 "DEVICE_TYPE" => DeviceType::ALL->value,
143 "ID" =>
'im:download-several-files:22112024:all',
145 "DEVICE_TYPE" => DeviceType::WEB->value,
146 "LIFETIME" => self::ENDLESS_LIFETIME,
150 "ID" =>
'call:copilot-notify-result:24112024:all',
152 "DEVICE_TYPE" => DeviceType::WEB->value,
156 "ID" =>
'im:copilot-in-default-tab:11032025:all',
158 "DEVICE_TYPE" => DeviceType::ALL->value,
159 "LIFETIME" => self::ENDLESS_LIFETIME,
160 "END_DATE" => (
new DateTime(
'30.04.2026',
'd.m.Y'))->getTimestamp(),
163 if (Locator::getMessenger()->getApplication()->isAirDesignEnabled())
166 "ID" =>
'im:air-chat-empty-state:29042025:all',
168 "DEVICE_TYPE" => DeviceType::WEB->value,
169 "LIFETIME" => self::ENDLESS_LIFETIME,
173 if (Features::get()->intranetInviteAvailable)
176 "ID" =>
'im:recent-create-chat-invite-users:22052025:all',
178 "DEVICE_TYPE" => DeviceType::WEB->value,
179 "LIFETIME" => self::ENDLESS_LIFETIME,
183 if (Features::isCopilotSelectModelAvailable())
186 "ID" =>
'im:chat-header-change-copilot-engine-and-role:20052025:all',
188 "DEVICE_TYPE" => DeviceType::ALL->value,
189 "LIFETIME" => self::ENDLESS_LIFETIME,
190 "END_DATE" => (
new DateTime(
'30.04.2027',
'd.m.Y'))->getTimestamp(),
194 "ID" =>
'im:chat-sidebar-change-copilot-engine-and-role:20052025:all',
196 "DEVICE_TYPE" => DeviceType::ALL->value,
197 "LIFETIME" => self::ENDLESS_LIFETIME,
198 "END_DATE" => (
new DateTime(
'30.04.2027',
'd.m.Y'))->getTimestamp(),
204 "ID" =>
'im:add-users-to-copilot-chat:09042024:all',
206 "DEVICE_TYPE" => DeviceType::ALL->value,
207 "LIFETIME" => self::ENDLESS_LIFETIME,
208 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
212 "ID" =>
'im:change-role-copilot-chat:09042024:all',
214 "DEVICE_TYPE" => DeviceType::ALL->value,
215 "LIFETIME" => self::ENDLESS_LIFETIME,
216 "END_DATE" => (
new DateTime(
'01.11.2025',
'd.m.Y'))->getTimestamp()
231 if (!Loader::includeModule(
'ui'))
236 $deviceType = (string)
$config[
'DEVICE_TYPE'];
237 if (!
$type->isDeviceTypeAvailable($deviceType))
242 $tour =
new Tour(
$config[
"ID"]);
245 "USER_TYPE" =>
"setUserType",
246 "USER_TIMESPAN" =>
"setUserTimeSpan",
247 "LIFETIME" =>
"setLifetime",
248 "START_DATE" =>
"setStartDate",
249 "END_DATE" =>
"setEndDate",
252 foreach (
$params as $param => $setter)
256 $tour->$setter(
$config[$param]);
265 foreach ($this->getConfig() as
$config)
269 return $this->getTour(
$config);
278 return PromotionType::UI;
283 return in_array($promotionId, $this->
getActive()->toIdList(),
true);
289 $promoId = $promotion->
getId();
292 if (!$tour || !$tour->isAvailable())
294 $result->addError(
new Error(
'Promotion is not available'));
302 if (Loader::includeModule(
'pull'))
306 'command' =>
'promotionRead',
307 'params' => [
'id' => $promoId],