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;
 
  }
 
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc