src/Service/ContactsBaseService.php line 124

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\ContactsBase\ContactsBase;
  4. use App\Repository\ContactsBase\ContactsBaseRepository;
  5. use App\Repository\ContactsBaseList\ContactsBaseListRepository;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. class ContactsBaseService
  8. {
  9.     private ValidationService $validation;
  10.     private ContactsBaseRepository $repository;
  11.     private RequestStack $request;
  12.     public ContactsBaseListRepository $list;
  13.     public function __construct(ValidationService $validationServiceContactsBaseListRepository $contactsBaseListRepositoryContactsBaseRepository $contactsBaseRepositoryRequestStack $requestStack)
  14.     {
  15.         $this->validation $validationService;
  16.         $this->request $requestStack;
  17.         $this->repository $contactsBaseRepository;
  18.         $this->list $contactsBaseListRepository;
  19.     }
  20.     public function getImportedContactsByFile($file): array
  21.     {
  22.         // funkcja przetwarza plik csv zawierający kontakty i wywołuje funkcję dzielącą kontakty na kolumny
  23.         $importedEmailsArray = [];
  24.         // $typ = explode('.', strtolower($file['name']));
  25.         // weryfikacji poprawności typu pliku
  26.         // if ('csv' == htmlspecialchars($typ[count($typ) - 1])) {
  27.         // odczyt pliku
  28.         // $file = fopen($file['tmp_name'], 'r');
  29.         $file fopen($file'r');
  30.         while (!feof($file)) {
  31.             $row fgets($file);
  32.             $row strip_tags($row);
  33.             if ('' != $row) {
  34.                 $wypisz explode(';'$row);
  35.                 $contactArray = [];
  36.                 // sanityzacja przesłanej wartości
  37.                 foreach ($wypisz as $item) {
  38.                     $contactArray[] = mb_convert_encoding($this->validation->sanitizeString($item), "UTF-8");
  39.                 }
  40.                 $importedEmailsArray[] = $contactArray;
  41.             }
  42.         }
  43.         // $this->analyzingImportedContacts($importedEmailsArray);
  44.         // }
  45.         return $importedEmailsArray;
  46.     }
  47.     public function getImportedContactsByPasteFromExcel($contacts): array
  48.     {
  49.         // funkcja przetwarza dane wklejone z excela i wysłane za pomocą textarea zawierające
  50.         // kontakty i wywołuje funkcję dzielącą kontakty na kolumny
  51.         $importedEmailsArray = [];
  52.         // obsługa wysyłki textarea
  53.         $sendData trim($contacts);
  54.         $sendData explode("\n"$sendData);
  55.         $sendData array_filter($sendData'trim');
  56.         foreach ($sendData as $line) {
  57.             $email explode('    '$line);
  58.             $contactArray = [];
  59.             // sanityzacja przesłanej wartości
  60.             foreach ($email as $item) {
  61.                 $contactArray[] = $this->validation->sanitizeString($item);
  62.             }
  63.             if (count($contactArray) > 0) {
  64.                 $importedEmailsArray[] = $contactArray;
  65.             }
  66.         }
  67.         // $this->analyzingImportedContacts($importedEmailsArray);
  68.         return $importedEmailsArray;
  69.     }
  70.     public function analyzingImportedContacts($importedEmailsArray): array
  71.     {
  72.         // funkcja przetwarza tablicę kontaktów rozdzielonych na kolumny i określa liczbę kolumn
  73.         // oraz maksymalną liczbę wierszy do wyświetlenia podczas przypisywania nazw kolumn
  74.         // określam ilość kolumn
  75.         $parameters['columns'] = $columnNumber max(array_map('count'$importedEmailsArray));
  76.         // ustalam liczbę wyświetlanych pozycji
  77.         $maxResults 3;
  78.         if (count($importedEmailsArray) < 3) {
  79.             $maxResults count($importedEmailsArray);
  80.         }
  81.         $parameters['rows'] = $maxResults;
  82.         return $parameters;
  83.     }
  84.     public function takeContactFieldsNames(): array
  85.     {
  86.         $fields['email'] = 'Adres e-mail';
  87.         $fields['phone'] = 'Numer telefonu';
  88.         $fields['name'] = 'Imię';
  89.         $fields['lastName'] = 'Nazwisko';
  90.         $fields['company'] = 'Nazwa firmy';
  91.         $fields['country'] = 'Kraj';
  92.         return $fields;
  93.     }
  94.     public function saveContacts($sendingData$group$list)
  95.     {
  96.         $contacts json_decode($sendingData['contacts']);
  97.         // $contacts = json_decode($sendingData);
  98.         // rozpoczynamy zapis do bazy
  99.         foreach ($contacts as $item) {
  100.             $contact = new ContactsBase();
  101.             $contact->setUserGroup($group);
  102.             $contact->setList($list);
  103.             $contact->setDateAdd(new \DateTime());
  104.             // $contact->setStatus(1);
  105.             for ($i 0$i $sendingData['columns']; ++$i) {
  106.                 $name $sendingData['column-'.$i 1];
  107.                 if (!= $name && '' != $name) {
  108.                     $value $this->validation->sanitizeString($item[$i]);
  109.                     $contact->{'set'.ucwords($name)}($value);
  110.                 }
  111.             }
  112.             $this->repository->add($contacttrue);
  113.         }
  114.     }
  115. }