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.