PageSourceSearch

https://www.nrw-kultur.de/_assets/215b7fab5aa8e5f0caa396f002c74157…/Frontend/ProcessData.js?bust=202610011

js nrw-kultur.de collected 2026-10-02 10:13:54 UTC 25,877 bytes, 429 lines download raw bytes

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.