pino-8.x-1.2-no-core/modules/member_export/src/Controller/MemberExportController.php
modules/member_export/src/Controller/MemberExportController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | <?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 ; } } |