PageSourceSearch

https://mark-barton.ru/pl/cms/layout/js?id=45204&hash=3c3ea127a278496443e11ed4d4398d23&bundle=1

js mark-barton.ru collected 2026-09-28 08:58:10 UTC 4,550 bytes, 165 lines download raw bytes

1$(function () {
2  const settings = {
3    processId: "2088646278",
4    secret: "10495543",
5  };
6
7  const fieldMappings = {
8    email: "formParams[email]",
9    param: "formParams[userCustomFields][10495544]",
10    processRunTime: "formParams[userCustomFields][--]",
11    subprocessName: "formParams[userCustomFields][10495542]",
12    secret: "formParams[userCustomFields][10495543]",
13    'globalConfirmCheckbox':'on',
14  };
15
16  if (isAuthorizedUser(window.userInfo)) {
17    $(document).ajaxSuccess(handleAjaxSuccess);
18    $(document).on(
19      "click",
20      "div.new-comment button.btn.btn-primary.btn-send",
21      function (e) {
22        handleMessageSend(e, settings, fieldMappings);
23      }
24    );
25    $(document).on(
26      "click",
27      ".user-add-entity-block .btn.btn-success",
28      function (e) {
29        handleUserAddComment(e, settings, fieldMappings);
30      }
31    );
32  }
33});
34
35function isAuthorizedUser(userInfo) {
36  return userInfo.isAdmin || userInfo.isManager || userInfo.isTeacher;
37}
38
39function handleAjaxSuccess(event, xhr, settings) {
40  const commentButtonSelector =
41    "div.new-comment button.btn.btn-primary.btn-send:not(.fixMail)";
42  if ($(commentButtonSelector).length !== 0) {
43    $(commentButtonSelector).addClass("fixMail");
44
45    if ($('[name="GetCourseComment[settings]"]').length !== 0) {
46      setUserEmail();
47    }
48  }
49}
50
51function setUserEmail() {
52  window.userEmail2 = "";
53
54  const emailFromUserPanel = getEmailFromUserPanel();
55  if (emailFromUserPanel) {
56    window.userEmail2 = emailFromUserPanel;
57    return new Promise((resolve) => resolve(emailFromUserPanel));
58  }
59
60  window.userid2 = getUserId();
61  return fetchUserEmail(window.userid2)
62    .then((email) => (window.userEmail2 = email))
63    .catch(() => fetchUserEmailFallback(window.userid2));
64}
65
66function getEmailFromUserPanel() {
67  return $('.gc-user-block .user-email span').html();
68}
69
70function getUserId() {
71  const settings = JSON.parse(
72    $('[name="GetCourseComment[settings]"]').html()
73  );
74  return (
75    settings.values.object_attributes.object_id || settings.values.own_user_id
76  );
77}
78
79function fetchUserEmail(userId) {
80  return new Promise((resolve, reject) => {
81    $.ajax({
82      url: `/pl/user/user/model?id=${userId}`,
83      dataType: "json",
84      success: function (json) {
85        resolve(json.model.email);
86      },
87      error: function (jqXHR, textStatus, errorThrown) {
88        reject(errorThrown);
89      },
90    });
91  });
92}
93
94function fetchUserEmailFallback(userId) {
95  return $.get(`/user/control/user/update/id/${userId}`).then((data) => {
96    const $dataHtml = $(data);
97    window.userEmail2 = $dataHtml
98      .find("div.set-email-html input.email-val")
99      .val();
100  });
101}
102
103function handleMessageSend(e, settings, fieldMappings) {
104  const text = $(e.target)
105    .closest("div.textarea-block")
106    .find("textarea.new-comment-textarea")
107    .val();
108  const now = new Date();
109
110  const data = {
111    [fieldMappings.email]: window.userEmail2,
112    [fieldMappings.param]: text,
113    [fieldMappings.processRunTime]: now,
114    [fieldMappings.subprocessName]: "Уведомление о входящем",
115    [fieldMappings.secret]: settings.secret,
116  };
117
118  runProcess(data, settings.processId);
119}
120
121function handleUserAddComment(e, settings, fieldMappings) {
122  if (!window.userEmail2) setUserEmail().then(() => {
123    runProcessAfterComment(e, settings, fieldMappings);
124    return;
125  })
126  runProcessAfterComment(e, settings, fieldMappings);
127}
128
129function runProcessAfterComment(e, settings, fieldMappings) {
130  const text = $(e.target)
131    .closest(".user-add-entity-block")
132    .find(".normal")
133    .val();
134  const now = new Date();
135
136  const data = {
137    [fieldMappings.param]: text,
138    [fieldMappings.email]: window.userEmail2,
139    [fieldMappings.processRunTime]: now,
140    [fieldMappings.subprocessName]: "Уведомление о входящем",
141    [fieldMappings.secret]: settings.secret,
142  };
143
144  runProcess(data, settings.processId);
145}
146
147function runProcess(data, processId) {
148  const url = `/pl/lite/block-public/process?id=${processId}`;
149  const formData = Object.keys(data)
150    .map(
151      (key) => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`
152    )
153    .join("&");
154
155  fetch(url, {
156    method: "POST",
157    credentials: "omit",
158    headers: {
159      "Content-Type": "application/x-www-form-urlencoded",
160    },
161    body: formData,
162  })
163    .catch(console.error);
164}
165

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.