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