HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/ehbo.today/app/KommaApp/Kms/MemberTransfer/MemberCsvExportService.php
<?php

namespace App\KommaApp\Kms\MemberTransfer;

use App\KommaApp\Kms\Transfer\AbstractCsvExportService;
use App\KommaApp\Kms\Transfer\ColumnMap;
use App\KommaApp\Shop\Discounts\DiscountServiceInterface;
use App\KommaApp\Users\Genders;
use App\KommaApp\Users\Models\Role;
use App\KommaApp\Users\Models\User;

/**
 * Class MemberCsvExportService
 *
 * Is directed by a ImportExportService and can export Product related data to a multidimensional csv array.
 * The first level keys in the array represent rows by arrays. The keys from those arrays represent columns and their values,
 * The column values.
 *
 * @package App\KommaApp\Shop\Products\Product
 */
class MemberCsvExportService extends AbstractCsvExportService
{
    use MemberColumnMapsTrait;

    /** @var DiscountServiceInterface $discountService */

    public function __construct()
    {
    }

    protected function getHeaderNames(): array
    {
        $headerNames = collect($this->getColumnMaps())->flatten()->map(function(ColumnMap $columnMap) {
            if(strtolower($columnMap->getHeaderName()) == 'vvoeg') return null;
            return ['columnNumber' => $columnMap->getColumnNumber(), 'headerName' => $columnMap->getHeaderName()];
        })->filter(function($data) {
            return $data !== null;
        })->sortBy('columnNumber')->map(function(array $numberHeaderArray) {
            return $numberHeaderArray['headerName'];
        })->toArray();

        return $headerNames;
    }


    /**
     * Returns an array of arrays that represent products.
     * Each row represents an item in the form of an array. In the case of products an example could be:
     * [
     *  ['1', 'my awesome product', 'product description']
     *  ['1', 'my awesome second product', 'product description 2']
     * ]
     *
     * @return array
     */
    function export():array
    {
        $members = User::get();

        $memberCSV = $members->map(function(User $member) {
            //Product fields

            $memberDataCollection = collect();
            $memberDataMaps = $this->getColumnMaps()['userData'];

            foreach ($memberDataMaps as $memberDataMap) {
                /** @var ColumnMap $memberDataMap */
                if(strtolower($memberDataMap->getHeaderName()) == 'vvoeg') continue;

                $attributeName = $memberDataMap->getModelAttributeName();
                $value = trim($member->$attributeName);

                if($attributeName == 'first_name') {
                    //dd('blaat:' , $memberDataMap);
                    $value = htmlspecialchars($value);
                }

                if($attributeName == 'gender') {
                    if ($value == Genders::Male) $value = 'Dhr.';
                    if ($value == Genders::Female) $value = 'Mevr.';
                } else if($attributeName == 'roles') {
                    $rolesArray = $member->roles()->get()->map(function (Role $role) {
                        return __('auth.roles.'.$role->value);
                    })->toArray();

                    $value = implode('/', $rolesArray);
                } elseif($attributeName == 'birthdate' || $attributeName == 'certificate_acquirement_date' || $attributeName == 'certificate_valid_trough_date') {
                    if($value == '0000-00-00 00:00:00') $value = '';
                }

                $memberDataCollection[] = $value;
            }

            return $memberDataCollection;
        })->toArray();

        return $memberCSV;
    }
}