(sub)
| 2167 | } |
| 2168 | |
| 2169 | function normalizeSubmissionForCsv(sub) { |
| 2170 | const created = sub.createdAt || sub.created_at || sub.timestamp || sub.time || ''; |
| 2171 | const raw = sub.raw || sub; |
| 2172 | const folder = sub.folder || (raw && raw.folder) || ''; |
| 2173 | const submittedBy = sub.submittedBy || (raw && raw.submittedBy) || ''; |
| 2174 | const ip = sub.ip || (raw && raw.ip) || ''; |
| 2175 | |
| 2176 | const form = raw.form || sub.form || raw || {}; |
| 2177 | const name = form.name || sub.name || ''; |
| 2178 | const email = form.email || sub.email || ''; |
| 2179 | const reference = form.reference || form.ref || sub.reference || sub.ref || ''; |
| 2180 | const notes = form.notes || form.message || sub.notes || sub.message || ''; |
| 2181 | const submissionRef = sub.submissionRef || raw.submissionRef || ''; |
| 2182 | const downloads = Array.isArray(sub.downloads) |
| 2183 | ? sub.downloads |
| 2184 | : (Array.isArray(raw.downloads) ? raw.downloads : []); |
| 2185 | const downloadsSummary = downloads.map(dl => { |
| 2186 | const file = dl.file || dl.path || ''; |
| 2187 | const when = dl.createdAt || dl.created_at || dl.timestamp || dl.time || ''; |
| 2188 | if (file && when) return file + ' @ ' + when; |
| 2189 | return file || String(when || ''); |
| 2190 | }).filter(Boolean).join('; '); |
| 2191 | |
| 2192 | return { |
| 2193 | created, |
| 2194 | folder, |
| 2195 | submittedBy, |
| 2196 | ip, |
| 2197 | submissionRef, |
| 2198 | name, |
| 2199 | email, |
| 2200 | reference, |
| 2201 | notes, |
| 2202 | downloadsSummary |
| 2203 | }; |
| 2204 | } |
| 2205 | |
| 2206 | function csvEscape(val) { |
| 2207 | if (val == null) return ''; |
no outgoing calls
no test coverage detected