Craft\AmForms_ExportsService::_exportSubmission PHP Method

_exportSubmission() private method

Export submission.
private _exportSubmission ( craft\AmForms_ExportModel $export, mixed $submission, boolean $returnData = false )
$export craft\AmForms_ExportModel
$submission mixed
$returnData boolean
    private function _exportSubmission(AmForms_ExportModel $export, $submission, $returnData = false)
    {
        // Row data
        $data = array();
        $columnCounter = 0;
        // Multiple rows data
        $hasMoreRows = false;
        $moreRowsData = array();
        if ($returnData) {
            $fields = array();
            $fieldLayout = $submission->getFieldLayout();
            foreach ($fieldLayout->getFields() as $fieldLayoutField) {
                $field = $fieldLayoutField->getField();
                $fields[$field->handle] = $field;
            }
        } else {
            $fields = $this->_exportFields[$export->id];
        }
        foreach ($fields as $fieldHandle => $field) {
            switch ($field->type) {
                case 'Assets':
                    $fieldExportData = array();
                    foreach ($submission->{$fieldHandle}->find() as $fieldData) {
                        $fieldExportData[] = $fieldData->getUrl();
                    }
                    $data[] = implode(', ', $fieldExportData);
                    break;
                case 'Entries':
                    $fieldExportData = array();
                    foreach ($submission->{$fieldHandle}->find() as $fieldData) {
                        $fieldExportData[] = $fieldData->getContent()->title;
                    }
                    $data[] = implode(', ', $fieldExportData);
                    break;
                case 'Checkboxes':
                case 'MultiSelect':
                    if (isset($submission->{$fieldHandle}) && count($submission->{$fieldHandle})) {
                        $fieldExportData = array();
                        foreach ($submission->{$fieldHandle} as $fieldData) {
                            $fieldExportData[] = $fieldData->value;
                        }
                        $data[] = implode(', ', $fieldExportData);
                    } else {
                        $data[] = '';
                    }
                    break;
                case 'Lightswitch':
                    $data[] = $submission->{$fieldHandle} ? Craft::t('Yes') : Craft::t('No');
                    break;
                case 'Matrix':
                    $blockCounter = 0;
                    $matrixBlocks = $submission->{$fieldHandle}->find();
                    if (!$matrixBlocks) {
                        // No matrix data, so we have to add empty cells!
                        for ($i = 1; $i <= $this->_exportSpaceCounter[$export->id][$fieldHandle]; $i++) {
                            $data[] = '';
                        }
                    } else {
                        foreach ($matrixBlocks as $matrixBlock) {
                            $matrixBlockType = $matrixBlock->getType();
                            $blockData = $this->_exportSubmission($export, $matrixBlock, true);
                            // Column counter
                            $startFrom = $this->_exportColumns[$export->id][$fieldHandle . ':' . $matrixBlockType->handle];
                            // Multiple blocks?
                            if (count($matrixBlocks) > 1 && $blockCounter > 0 && !$this->_ignoreMatrixMultipleRows) {
                                $hasMoreRows = true;
                                $moreRowsData[$startFrom][] = $blockData;
                            } else {
                                if (!$this->_ignoreMatrixMultipleRows) {
                                    // Empty cells till we've reached the block type
                                    for ($i = 0; $i < $startFrom - $columnCounter; $i++) {
                                        $data[] = '';
                                    }
                                }
                                // We just have one block or we are adding the first block
                                $spaceCounter = 0;
                                foreach ($blockData as $blockValue) {
                                    $data[] = $blockValue;
                                    $spaceCounter++;
                                }
                                if (!$this->_ignoreMatrixMultipleRows) {
                                    // Empty cells till we've reached the next field, if necessary
                                    if ($startFrom == $columnCounter) {
                                        for ($i = 0; $i < $this->_exportSpaceCounter[$export->id][$fieldHandle] - $spaceCounter; $i++) {
                                            $data[] = '';
                                        }
                                    }
                                }
                            }
                            $blockCounter++;
                        }
                    }
                    break;
                case 'Table':
                    if (isset($submission->{$fieldHandle}) && count($submission->{$fieldHandle})) {
                        $fieldExportData = array();
                        foreach ($submission->{$fieldHandle} as $fieldData) {
                            foreach ($fieldData as $columnKey => $columnValue) {
                                if (substr($columnKey, 0, 3) == 'col' && $columnValue) {
                                    $fieldExportData[] = $columnValue;
                                }
                            }
                        }
                        $data[] = implode(', ', $fieldExportData);
                    } else {
                        $data[] = '';
                    }
                    break;
                default:
                    $data[] = str_replace(array("\n", "\r", "\r\n", "\n\r"), ' ', $submission->{$fieldHandle});
                    break;
            }
            $columnCounter++;
        }
        // Either return the data or add to CSV
        if ($returnData) {
            return $data;
        }
        fputcsv($this->_exportFiles[$export->startRightAway ? 'manual' : $export->id], $data, $this->_delimiter);
        // Add more rows?
        if ($hasMoreRows) {
            foreach ($moreRowsData as $columnCounter => $rows) {
                foreach ($rows as $row) {
                    // This row's data
                    $data = array();
                    // Empty cells till we've reached the data
                    for ($i = 0; $i < $columnCounter; $i++) {
                        $data[] = '';
                    }
                    // Add row data
                    foreach ($row as $rowData) {
                        $data[] = $rowData;
                    }
                    // Add row to CSV
                    fputcsv($this->_exportFiles[$export->startRightAway ? 'manual' : $export->id], $data, $this->_delimiter);
                }
            }
        }
    }