1class ProcessData { 2 /** 3 * collectInputValues 4 * 5 * Functionality to collect all input values 6 */ 7 collectInputValues(selectorWrapper = null, setProcessDataReading = false) { 8 // Define variables 9 let allFormData = {}; 10 let allSelectFormDataText = {}; 11 12 // If no selector wrapper selected, use default for all sections 13 if (!selectorWrapper) { 14 selectorWrapper = document.querySelectorAll('.application-container'); 15 } 16 17 // Go through all selector wrappers 18 selectorWrapper.forEach((singleSelectorWrapper) => { 19 // Get all field values 20 singleSelectorWrapper.querySelectorAll('input, select, textarea').forEach((fieldElement) => { 21 let isNoTemplate = !fieldElement.closest('.is-template'); 22 let isShown = fieldElement.closest('.form-item')?.style.display !== 'none' ?? false; 23 let specialCheck = fieldElement.closest('.form-item')?.dataset.specialresult ?? ''; 24 let isCorrectForSpecial = ['', 'true'].includes(specialCheck); 25 let hasName = fieldElement.name !== ''; 26 let hasId = fieldElement.id !== ''; 27 let isNewField = typeof fieldElement.dataset.newfield !== 'undefined' && fieldElement.dataset.newfield === '1'; 28 let isCostContainer = fieldElement.closest('.funding-section-container')?.classList.contains('funding-cost-container') ?? false; 29 let isFinancingContainer = fieldElement.closest('.funding-section-container')?.classList.contains('funding-financing-container') ?? false; 30 let isFundingDifferenceRow = fieldElement.closest('.form-row')?.classList.contains('funding-difference-table-row-wrapper') ?? false; 31 let isDeletedRow = fieldElement.closest('.form-row')?.dataset.markedasdelete === '1' ?? false; 32 33 if (isNoTemplate && isShown && isCorrectForSpecial && hasName && (hasId || isNewField)) { 34 // Define variables 35 let formRow = fieldElement.closest('.form-row'); 36 let fieldName = fieldElement.name; 37 let fieldId = fieldElement.id; 38 let fieldValue = fieldElement.value; 39 if (fieldElement.type === 'select-one') { 40 fieldValue = fieldElement.value; 41 } else if (fieldElement.type === 'checkbox') { 42 if (fieldElement.checked === false) { 43 fieldValue = '0'; 44 } 45 } 46 47 // Check for special handling 48 if ((fieldId.startsWith('funding-cost-') || fieldId.startsWith('funds-funding-cost-') || fieldId.startsWith('pou-funding-cost-')) 49 || (isNewField && isCostContainer)) { 50 // If this field from funding cost 51 if (fieldValue !== '0,00' && fieldValue !== '') { 52 // Get object name for given call 53 let fieldNameIndexOfBracket = fieldName.indexOf('[') 54 let objectName = fieldName.substring(0, fieldNameIndexOfBracket); 55 56 // Check and initialize array 57 if (!allFormData[objectName]) { 58 allFormData[objectName] = []; 59 } 60 61 // Get id of cost funding 62 let costFundingId = formRow.dataset.costfundingid; 63 if (typeof costFundingId === 'undefined') { 64 costFundingId = fieldElement.closest('.funding-cost-group').querySelector('h3').dataset.costfundingid; 65 } 66 67 // Build a cost entry 68 let tempProcessCostEntry = {}; 69 tempProcessCostEntry['costType'] = costFundingId; 70 tempProcessCostEntry['costValue'] = fieldValue; 71 tempProcessCostEntry['costDeleted'] = isDeletedRow ? '1' : '0'; 72 73 if (isNewField) { 74 let costName = formRow.querySelector('input[name="' + objectName + '[costName]"]')?.value; 75 if (typeof costName === 'undefined') { 76 costName = formRow.querySelector('.is-name input').value; 77 } 78 79 tempProcessCostEntry['costUid'] = ''; 80 tempProcessCostEntry['costNameFieldId'] = ''; 81 tempProcessCostEntry['costName'] = costName.trim(); 82 } else { 83 let costName = formRow.querySelector('.is-label div')?.innerText.trim(); 84 if (fieldElement.closest('.form-row').querySelector('.is-name')) { 85 costName = formRow.querySelector('.is-name input').value; 86 } 87 88 tempProcessCostEntry['costUid'] = formRow.querySelector('input[name="object[uid]"]')?.value ?? ''; 89 tempProcessCostEntry['costNameFieldId'] = fieldElement.dataset.f
89ieldid; 90 tempProcessCostEntry['costName'] = costName; 91 } 92 93 // Set process data reading information, if necessary 94 if (setProcessDataReading) { 95 // Set temporary flag to read this input field 96 fieldElement.dataset.processdatareading = '1'; 97 } 98 99 // Push new entry to form data array 100 allFormData[objectName].push(tempProcessCostEntry); 101 } 102 } else if ((fieldId.startsWith('funding-financing-') || fieldId.startsWith('funds-funding-financing-') 103 || fieldId.startsWith('funds-financing-') || fieldId.startsWith('pou-funding-financing-') 104 || fieldId.startsWith('pou-financing-')) 105 || (isNewField && isFinancingContainer && !isFundingDifferenceRow)) { 106 // If this field from funding financing 107 108 // Get object name for given call 109 let fieldNameIndexOfBracket = fieldName.indexOf('[') 110 let objectName = fieldName.substring(0, fieldNameIndexOfBracket); 111 112 // Check and initialize array 113 if (!allFormData[objectName]) { 114 allFormData[objectName] = []; 115 } 116 117 // Get type of income 118 let incomeType = formRow.dataset.incometype; 119 if (typeof incomeType === 'undefined') { 120 incomeType = fieldElement.closest('.funding-financing-container').dataset.incometype; 121 } 122 123 // Check if an income type is available 124 if (typeof incomeType !== 'undefined' && !fieldElement.disabled) { 125 // Build process income entry 126 let tempProcessIncomeEntry = {}; 127 tempProcessIncomeEntry['incomeType'] = incomeType; 128 tempProcessIncomeEntry['incomeValue'] = fieldValue; 129 tempProcessIncomeEntry['incomeDeleted'] = isDeletedRow ? '1' : '0'; 130 131 if (['funding-financing-grants-to-legal-entities', 'funding-financing-services-provided-private'].includes(tempProcessIncomeEntry['incomeType'])) { 132 // Check income status 133 let incomeStatus = formRow.querySelector('.funding-new-description-grant-state')?.value; 134 if (typeof incomeStatus === 'undefined') { 135 incomeStatus = ''; 136 } 137 138 // Check grantor name 139 let grantorName = formRow.querySelector('.funding-new-description-input-grantor')?.value; 140 if (formRow.querySelector('.is-name')) { 141 grantorName = formRow.querySelector('.is-name input').value; 142 } 143 if (typeof grantorName !== 'undefined') { 144 grantorName = grantorName.trim(); 145 } else { 146 grantorName = ''; 147 } 148 149 // Check income name field id 150 let incomeNameFieldId = fieldElement.dataset.fieldid; 151 if (typeof incomeNameFieldId === 'undefined') { 152 incomeNameFieldId = ''; 153 } 154 155 tempProcessIncomeEntry['incomeUid'] = formRow.querySelector('input[name="object[uid]"]')?.value ?? ''; 156 tempProcessIncomeEntry['incomeNameFieldId'] = incomeNameFieldId; 157 tempProcessIncomeEntry['incomeName'] = ''; 158 tempProcessIncomeEntry['grantorName'] = grantorName; 159 tempProcessIncomeEntry['incomeStatus'] = incomeStatus; 160 } else { 161 // Check income uid 162 let incomeUid = formRow.querySelector('input[name="object[uid]"]')?.value ?? ''; 163 if (typeof incomeUid === 'undefined') { 164 incomeUid = ''; 165 } 166 167 // Check income name field id 168 let incomeNameFieldId = fieldElement.dataset.f
168ieldid; 169 if (typeof incomeNameFieldId === 'undefined') { 170 incomeNameFieldId = ''; 171 } 172 173 // Check income name 174 let incomeName = formRow.querySelector('.funding-new-description-input-description')?.value; 175 if (typeof incomeName === 'undefined') { 176 incomeName = formRow.querySelector('.is-label div')?.innerText?.trim(); 177 if ((typeof incomeName === 'undefined' || incomeName === '') 178 && formRow.querySelector('.is-name')) { 179 incomeName = formRow.querySelector('.is-name input').value; 180 } 181 } 182 183 tempProcessIncomeEntry['incomeUid'] = incomeUid; 184 tempProcessIncomeEntry['incomeNameFieldId'] = incomeNameFieldId; 185 tempProcessIncomeEntry['incomeName'] = incomeName; 186 tempProcessIncomeEntry['grantorName'] = ''; 187 tempProcessIncomeEntry['incomeStatus'] = ''; 188 } 189 190 // Set process data reading information, if necessary 191 if (setProcessDataReading) { 192 // Set temporary flag to read this input field 193 fieldElement.dataset.processdatareading = '1'; 194 } 195 196 // Push new entry to form data array 197 allFormData[objectName].push(tempProcessIncomeEntry); 198 } 199 } else if (fieldId.startsWith('con-statement')) { 200 // If this field from consultation statement 201 202 // Check if specific section in form data is available 203 if (!allFormData['consultationStatement']) { 204 allFormData['consultationStatement'] = []; 205 } 206 207 // Define group number 208 let groupNumber = 0; 209 if (allFormData['consultationStatement'][allFormData['consultationStatement'].length - 1]) { 210 groupNumber = allFormData['consultationStatement'][allFormData['consultationStatement'].length - 1]['groupNumber'] + 1; 211 } 212 213 // Go through each checked topic 214 fieldElement.closest('.statement').querySelectorAll('.statement-topic.checked').forEach((statementTopic) => { 215 // Build a consultation statement entry 216 let tempConsultationStatementEntry = {}; 217 tempConsultationStatementEntry['section'] = statementTopic.dataset.section; 218 tempConsultationStatementEntry['statement'] = statementTopic.closest('.statement').querySelector('.con-statement').value; 219 tempConsultationStatementEntry['groupNumber'] = groupNumber; 220 221 // Push new entry to form data array 222 allFormData['consultationStatement'].push(tempConsultationStatementEntry); 223 }); 224 } else if (fieldId === 'difference-funding-reason') { 225 // If this field from funding reason 226 227 // Define request type variables 228 let requestType = fieldElement.dataset.requesttype; 229 let variableRequestType = requestType.charAt(0).toUpperCase() + requestType.slice(1); 230 231 // Check if specific section in form data is available 232 if (!allFormData['difference' + variableRequestType + 'Reason']) { 233 allFormData['difference' + variableRequestType + 'Reason'] = []; 234 } 235 236 // Get funding field type 237 let fundingFieldType = formRow.dataset.fundingfieldtype; 238 if (fundingFieldType && fieldValue.trim() !== '') { 239 // Build an entry 240 let tempReasonEntry = {}; 241 tempReasonEntry['fundingFieldType'] = fundingFieldType; 242 tempReasonEntry['reason'] = fieldValue.trim(); 243 244 // Push new entry to form data array 245 allFormData['difference' + variableRequestType + 'Reason'].push(tempReasonEntry); 246 } 247 } else if (fieldId.startsWith('project-event-')) { 248 // If no project event is available 249 if (!allFormData['projectEvent']) { 250 // Init data key 251 allFormData['projectEvent'] = []; 252 253 // Go through each event data item 254 document.querySelectorAll('.project-event-data-list .event-data-item').forEach((eventDataItem) => { 255 // Get all possible field objects 256 let eventDateStartFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[eventDateStart]"]'); 257 let eventDateEndFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[eventDateEnd]"]'); 258 let eventDateTimeFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[eventDateTime]"]'); 259 let eventLocationFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[location]"]'); 260 let eventStreetFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[street]"]'); 261 let eventStreetNumberFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[streetNumber]"]'); 262 let eventPostalCodeFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[postalCode]"]'); 263 let eventCityFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[city]"]'); 264 let eventWebsiteFieldElement = eventDataItem.querySelector('input[name="processProjectEvent[website]"]'); 265 let eventUidElement = eventDataItem.querySelector('input[name="single-uid"]'); 266 267 // Build a new event entry 268 let tempProjectEvent = {}; 269 tempProjectEvent['eventUid'] = eventUidElement.value; 270 tempProjectEvent['eventType'] = eventDataItem.dataset.roweventtype; 271 if (eventDateStartFieldElement) { 272 tempProjectEvent['eventDateStart'] = eventDateStartFieldElement.value; 273 } 274 if (eventDateEndFieldElement) { 275 tempProjectEvent['eventDateEnd'] = eventDateEndFieldElement.value; 276 } 277 if (eventDateTimeFieldElement) { 278 tempProjectEvent['eventDateTime'] = eventDateTimeFieldElement.value; 279 } 280 if (eventLocationFieldElement) { 281 tempProjectEvent['location'] = eventLocationFieldElement.value; 282 } 283 if (eventStreetFieldElement) { 284 tempProjectEvent['street'] = eventStreetFieldElement.value; 285 } 286 if (eventStreetNumberFieldElement) { 287 tempProjectEvent['streetNumber'] = eventStreetNumberFieldElement.value; 288 } 289 if (eventPostalCodeFieldElement) { 290 tempProjectEvent['postalCode'] = eventPostalCodeFieldElement.value; 291 } 292 if (eventCityFieldElement) { 293 tempProjectEvent['city'] = eventCityFieldElement.value; 294 } 295 if (eventWebsiteFieldElement) { 296 tempProjectEvent['website'] = eventWebsiteFieldElement.value; 297 } 298 299 // Push new entry to form data array 300 allFormData['projectEvent'].push(tempProjectEvent); 301 }); 302 } 303 } else if (fieldId !== '') { 304 // Normal handling 305 306 // Check for multi fields 307 let saveFieldId = fieldId; 308 let multiFieldId = -1; 309 if (fieldId.indexOf('_') !== -1) { 310 saveFieldId = fieldId.substring(0, fieldId.indexOf('_')); 311 multiFieldId = fieldId.substring(fieldId.indexOf('_') + 1); 312 } 313 314 // If multi field 315 if (multiFieldId > -1) { 316 if (!allFormData[saveFieldId]) { 317 allFormData[saveFieldId] = []; 318 } 319 320 // Check for possible uid of data 321 let singleUidElement = fieldElement.closest('.form-group').querySelector('input[name="single-uid"]'); 322 let singleUid = singleUidElement?.value; 323 if (!singleUidElement) { 324 singleUid = formRow.querySelector('input[name="single-uid"]').value; 325 } 326 327 if (typeof singleUid === 'undefined') { 328 singleUid = 0; 329 } 330 331 // Add value to field id 332 allFormData[saveFieldId][multiFieldId] = singleUid + '||' + fieldValue; 333 334 if (fieldElement.type === 'select-one') { 335 if (!allSelectFormDataText[saveFieldId]) { 336 allSelectFormDataText[saveFieldId] = []; 337 } 338 allSelectFormDataText[saveFieldId][multiFieldId] = singleUid + '||' + fieldElement.options[fieldElement.selectedIndex].text; 339 } 340 } else { 341 // Check if field type is radio 342 if (fieldElement.type === 'radio') { 343 if (fieldElement.checked) { 344 allFormData[fieldElement.dataset.f
344ieldkey] = fieldElement.value; 345 } 346 // anyway 347 } else { 348 allFormData[saveFieldId] = fieldValue; 349 350 // Check if field is single select 351 if (fieldElement.type === 'select-one') { 352 allSelectFormDataText[saveFieldId] = fieldElement.options[fieldElement.selectedIndex].text; 353 } 354 } 355 } 356 } 357 } 358 }); 359 }); 360 361 return { 362 allFormData: allFormData, 363 allSelectFormDataText: allSelectFormDataText 364 }; 365 } 366 367 /** 368 * collectUploadFiles 369 * 370 * Functionality to collect all upload files 371 */ 372 collectUploadFiles(selectorWrapper = null) { 373 // Define variables 374 let allUploadFormData = {}; 375 allUploadFormData['files'] = []; 376 allUploadFormData['sections'] = []; 377 378 // If no selector selected, use default for all sections 379 if (!selectorWrapper) { 380 selectorWrapper = document.querySelectorAll('.application-container'); 381 } 382 383 // Go through all selector wrappers 384 selectorWrapper.forEach((singleSelectorWrapper) => { 385 // Get all upload files 386 singleSelectorWrapper.querySelectorAll('.file-upload-item').forEach((fieldElement) => { 387 // Define variables 388 let isNoTemplate = !fieldElement.closest('.is-template'); 389 let isNoOverviewAttachmentsSection = !fieldElement.closest('.Accordion-item') && !fieldElement.closest('.section-attachments'); 390 391 // Check is all okay 392 if (isNoTemplate && isNoOverviewAttachmentsSection) { 393 // Define temporary file upload item 394 let tempFileUploadItem = {}; 395 tempFileUploadItem['fileUid'] = fieldElement.querySelector('input[name="object-uid"]').value; 396 tempFileUploadItem['fileCreator'] = 'system'; 397 tempFileUploadItem['fileForm'] = fieldElement.closest('.application-container').dataset.formid; 398 tempFileUploadItem['fileFormSection'] = fieldElement.querySelector('input[name="form-section"]').value; 399 tempFileUploadItem['fileTitle'] = fieldElement.querySelector('.file-name').innerText.trim(); 400 tempFileUploadItem['fileName'] = fieldElement.querySelector('.file-name').dataset.filename; 401 tempFileUploadItem['fileContent'] = fieldElement.querySelector('textarea[name="file-content"]').innerText; 402 tempFileUploadItem['fileMimeType'] = fieldElement.querySelector('input[name="file-mime-type"]').value; 403 tempFileUploadItem['fileLink'] = fieldElement.querySelector('.fas-download-link').href; 404 tempFileUploadItem['fileSize'] = fieldElement.dataset.filesize; 405 406 // Push upload item into upload array 407 allUploadFormData['files'].push(tempFileUploadItem); 408 } 409 }); 410 411 // Get all upload form sections 412 singleSelectorWrapper.querySelectorAll('input[name="upload-form-sections"]').forEach((fieldElement) => { 413 // Split value 414 let sectionValue = fieldElement.value.split('|'); 415 416 // Define temporary form sections item 417 let tempFormSectionItem = {}; 418 tempFormSectionItem['form'] = sectionValue[0]; 419 tempFormSectionItem['formSection'] = sectionValue[1]; 420 421 allUploadFormData['sections'].push(tempFormSectionItem); 422 }); 423 }); 424 425 return allUploadFormData; 426 } 427} 428 429export default new ProcessData();
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.