<?php
namespace App\Service;
use App\Entity\ContactsBase\ContactsBase;
use App\Repository\ContactsBase\ContactsBaseRepository;
use App\Repository\ContactsBaseList\ContactsBaseListRepository;
use Symfony\Component\HttpFoundation\RequestStack;
class ContactsBaseService
{
private ValidationService $validation;
private ContactsBaseRepository $repository;
private RequestStack $request;
public ContactsBaseListRepository $list;
public function __construct(ValidationService $validationService, ContactsBaseListRepository $contactsBaseListRepository, ContactsBaseRepository $contactsBaseRepository, RequestStack $requestStack)
{
$this->validation = $validationService;
$this->request = $requestStack;
$this->repository = $contactsBaseRepository;
$this->list = $contactsBaseListRepository;
}
public function getImportedContactsByFile($file): array
{
// funkcja przetwarza plik csv zawierający kontakty i wywołuje funkcję dzielącą kontakty na kolumny
$importedEmailsArray = [];
// $typ = explode('.', strtolower($file['name']));
// weryfikacji poprawności typu pliku
// if ('csv' == htmlspecialchars($typ[count($typ) - 1])) {
// odczyt pliku
// $file = fopen($file['tmp_name'], 'r');
$file = fopen($file, 'r');
while (!feof($file)) {
$row = fgets($file);
$row = strip_tags($row);
if ('' != $row) {
$wypisz = explode(';', $row);
$contactArray = [];
// sanityzacja przesłanej wartości
foreach ($wypisz as $item) {
$contactArray[] = mb_convert_encoding($this->validation->sanitizeString($item), "UTF-8");
}
$importedEmailsArray[] = $contactArray;
}
}
// $this->analyzingImportedContacts($importedEmailsArray);
// }
return $importedEmailsArray;
}
public function getImportedContactsByPasteFromExcel($contacts): array
{
// funkcja przetwarza dane wklejone z excela i wysłane za pomocą textarea zawierające
// kontakty i wywołuje funkcję dzielącą kontakty na kolumny
$importedEmailsArray = [];
// obsługa wysyłki textarea
$sendData = trim($contacts);
$sendData = explode("\n", $sendData);
$sendData = array_filter($sendData, 'trim');
foreach ($sendData as $line) {
$email = explode(' ', $line);
$contactArray = [];
// sanityzacja przesłanej wartości
foreach ($email as $item) {
$contactArray[] = $this->validation->sanitizeString($item);
}
if (count($contactArray) > 0) {
$importedEmailsArray[] = $contactArray;
}
}
// $this->analyzingImportedContacts($importedEmailsArray);
return $importedEmailsArray;
}
public function analyzingImportedContacts($importedEmailsArray): array
{
// funkcja przetwarza tablicę kontaktów rozdzielonych na kolumny i określa liczbę kolumn
// oraz maksymalną liczbę wierszy do wyświetlenia podczas przypisywania nazw kolumn
// określam ilość kolumn
$parameters['columns'] = $columnNumber = max(array_map('count', $importedEmailsArray));
// ustalam liczbę wyświetlanych pozycji
$maxResults = 3;
if (count($importedEmailsArray) < 3) {
$maxResults = count($importedEmailsArray);
}
$parameters['rows'] = $maxResults;
return $parameters;
}
public function takeContactFieldsNames(): array
{
$fields['email'] = 'Adres e-mail';
$fields['phone'] = 'Numer telefonu';
$fields['name'] = 'Imię';
$fields['lastName'] = 'Nazwisko';
$fields['company'] = 'Nazwa firmy';
$fields['country'] = 'Kraj';
return $fields;
}
public function saveContacts($sendingData, $group, $list)
{
$contacts = json_decode($sendingData['contacts']);
// $contacts = json_decode($sendingData);
// rozpoczynamy zapis do bazy
foreach ($contacts as $item) {
$contact = new ContactsBase();
$contact->setUserGroup($group);
$contact->setList($list);
$contact->setDateAdd(new \DateTime());
// $contact->setStatus(1);
for ($i = 0; $i < $sendingData['columns']; ++$i) {
$name = $sendingData['column-'.$i + 1];
if (0 != $name && '' != $name) {
$value = $this->validation->sanitizeString($item[$i]);
$contact->{'set'.ucwords($name)}($value);
}
}
$this->repository->add($contact, true);
}
}
}