pino-8.x-1.2-no-core/modules/member_export/src/Controller/MemberExportController.php
modules/member_export/src/Controller/MemberExportController.php
<?php namespace Drupal\member_export\Controller; use Drupal\member\Entity\Member; use Drupal\Core\Controller\ControllerBase; use Drupal\taxonomy\Entity\Term; use Yectep\PhpSpreadsheetBundle\Factory; /** * Provides route responses for the Member Export module. */ class MemberExportController extends ControllerBase { /** * Returns a xlsx file of all members. * * @return \Symfony\Component\HttpFoundation\StreamedResponse */ public function exportAllMembers() { $factory = new Factory(); $spreadsheet = $factory->createSpreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // Get fields for Member entity. $entityManager = \Drupal::service('entity_field.manager'); $fields = $entityManager->getFieldDefinitions('member', 'member'); // Remove fields which are not shown in sheet. unset($fields['uuid'], $fields['vid'], $fields['langcode'], $fields['revision_created'], $fields['revision_user'], $fields['revision_log_message'], $fields['user_id'], $fields['created'], $fields['changed'], $fields['revision_translation_affected'], $fields['default_langcode'], $fields['revision_default']); // Set the header row. $b = 1; foreach ($fields as $field) { $sheet->setCellValueByColumnAndRow($b, 1, $field->getLabel()); $b++; } // Make header row bold. $sheet->getStyle("A1:ZZ1")->getFont()->setBold(TRUE); // Get all members. $ids = \Drupal::entityQuery('member')->execute(); $members = Member::loadMultiple($ids); // Loop through all members and set the values accordingly. $a = 2; foreach ($members as $member) { $b = 1; foreach ($fields as $field_name => $field) { $field_type = $field->getType(); if($field_type == 'entity_reference') { $values = $member->get($field_name)->getValue(); $row = []; foreach($values as $value) { $term = Term::load($value['target_id']); $row[] = $term->label(); } $sheet->setCellValueByColumnAndRow($b, $a, implode(", ", $row)); } else { $sheet->setCellValueByColumnAndRow($b, $a, $member->get($field_name)->value); } $b++; } $a++; } // Create response and necessary headers. $response = $factory->createStreamedResponse($spreadsheet, 'Xlsx'); $response->headers->set('Content-Type', 'application/vnd.ms-excel'); $response->headers->set('Content-Disposition', 'attachment;filename="members-' . date('Y-m-d') . '.xlsx"'); $response->headers->set('Cache-Control', 'max-age=0'); return $response; } }