Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/vote/analytics/src/ |
Upload File : |
import { Runtime } from 'main.core'; import { sendData, type AnalyticsOptions } from 'ui.analytics'; import { AnalyticsCategories, AnalyticsEvents } from './const'; const getAnalyticsOptions = async (dialogId: string, messageId: number): Promise<Partial<AnalyticsOptions> | null> => { try { const { Analytics: ImAnalytics } = await Runtime.loadExtension('im.v2.lib.analytics'); const analyticsInstance = ImAnalytics.getInstance(); const options = analyticsInstance.vote.getAnalyticsOptions(dialogId); options.p3 = `pollId_${messageId}`; return options; } catch (ex) { console.error(ex); return null; } }; const publishVote = (anonymousVote: boolean, messageId: number): void => { const { searchParams } = new URL(document.location.href); const options = { tool: searchParams.get('st[tool]'), event: AnalyticsEvents.publishPoll, type: anonymousVote ? 'anonymous' : 'public', category: searchParams.get('st[category]'), p1: searchParams.get('st[p1]'), p2: searchParams.get('st[p2]'), p3: `pollId_${messageId}`, p5: searchParams.get('st[p5]'), }; if (searchParams.has('st[p4]')) { options.p4 = searchParams.get('st[p4]'); } sendData(options); }; const sendDataByImOptions = async ( dialogId: string, messageId: number, event: string, type: ?string, ): Promise<void> => { const analyticsOptions = await getAnalyticsOptions(dialogId, messageId); if (!analyticsOptions) { return; } analyticsOptions.event = event; if (event === AnalyticsEvents.finishPoll) { sendData({ ...analyticsOptions, type }); return; } const { p4, p5, ...rest } = analyticsOptions; if (type) { rest.type = type; } sendData(rest); }; const downloadResult = (messageId: number): void => { const options = { tool: 'im', event: AnalyticsEvents.downloadResult, category: AnalyticsCategories.polls, p3: `pollId_${messageId}`, }; sendData(options); }; const setupVote = (optionValue: boolean | number, event: string, messageId: string): void => { let type = ''; switch (event) { case AnalyticsEvents.isMultipleChoice: type = optionValue ? 'Y' : 'N'; break; case AnalyticsEvents.setCancelVote: type = optionValue ? 'Y' : 'N'; break; case AnalyticsEvents.setTimeLimit: type = optionValue ? 'limited' : ''; break; case AnalyticsEvents.setOptions: type = optionValue > 2 ? 'multiple' : 'two'; break; default: break; } const options = { tool: 'im', category: AnalyticsCategories.pollSettings, event, type, p3: `pollId_${messageId}`, }; sendData(options); }; export const VoteAnalytics = { publishVote, downloadResult, setupVote, vote: (dialogId: string, messageId: number): void => { sendDataByImOptions(dialogId, messageId, AnalyticsEvents.vote); }, revokeVote: (dialogId: string, messageId: number): void => { sendDataByImOptions(dialogId, messageId, AnalyticsEvents.cancelVote); }, completeVote: (dialogId: string, messageId: number): void => { sendDataByImOptions(dialogId, messageId, AnalyticsEvents.finishPoll, 'user'); }, copyLink: (dialogId: string, messageId: number, type: string): void => { sendDataByImOptions(dialogId, messageId, AnalyticsEvents.copyPollLink, type); }, }; export { AnalyticsEvents };