Source of file TemplateRepository.php
Size: 5,147 Bytes - Last Modified: 2023-11-16T22:56:03+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/mail-bundle/src/Repository/TemplateRepository.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 | <?phpnamespace TIC\MailBundle\Repository; #use Doctrine\ORM\EntityRepository as BaseRepository;use TIC\DormBundle\Base\TICRepository as BaseRepository; use TIC\MailBundle\Entity\Template as Entity; /** * Repository pour requêtes sur les entités des modèles de notification. * * @TODO voir si usage des traits RepositoryFilterable + optims PHP */class TemplateRepository extends BaseRepository {/** * @var Listing default order */public $sortBy = ['ref' => 'ASC']; /** * Liste des différentes valeurs existantes pour le champs 'target'. * (permet l'alimentation des suggestions pour formulaire avec type_ahead) * * @return array Liste des différentes valeurs correspondantes */public function getTargets(): array { return $this->getFieldValues('target'); } /** * Liste des modèles de notification restants à définir. * (permet l'alimentation du sélecteur de références sur édition/création) * * @param array $templates Liste de toutes les références de modèles possibles * @param string $current Référence à considérer disponible (exclue de la recherche) * @return array Liste des références possibles non existantes (+ courante éventuelle) */public function listAvailableRefs(array $templates, string $current = null): array { if ($current === null) $current = ''; $available = \array_combine($templates, $templates); $existing = $this->createQueryBuilder('m') ->select('m.ref') ->where('m.ref != :ref') ->setParameter('ref', $current) ->getQuery()->getResult('column'); ; foreach ($existing as $ref) unset($available[$ref]); return $available; } /** * Analyse un fichier au format Mail/Mbox pour importer les données. * (extraction dans un tableau associatif servant à initialiser chaque entité) * * @param object $fileinfo Instance SplFileInfo du fichier à importer * @return string Message de l'exception en cas d'échec, ou Null si succès */public function importMail(object $fileinfo): ?string { $file = $fileinfo->openFile('r'); $messages = array(); while (! $file->eof()) { $data = array(); // lecture des entêtes du message $header = null; while (! $file->eof()) { $line = \rtrim($file->fgets(), "\r\n"); if (($line === '') && ($header !== null)) break; if (\preg_match('/^([^:]+):\s+(.*)$/', $line, $m)) { $header = $m[1]; $data[$header] = $m[2]; } elseif (\preg_match('/^\s+([^\s].+)$/', $line, $m) && ($header !== null)) { $data[$header].= $m[1]; } } // lecture des body (text/plain, text/html, text/sms) $boundary = (isset($data['Content-Type']) && \preg_match('/boundary=\"([^\"]+)\"/', $data['Content-Type'], $m)) ? $m[1] : null; if ($boundary !== null) { $body = $header = null; while (! $file->eof()) { $line = $file->fgets(); if (\preg_match('/^--' . $boundary . '(--)?/', $line, $m)) { if (isset($m[1])) break; $header = true; $body = null; } elseif ($header === true) { if (\preg_match('/^[\r\n]*$/', $line, $m)) { $header = false; } elseif (\preg_match('/^Content-Type:\s+text\/(plain|html|sms)/', $line, $m)) { $body = 'body_' . $m[1]; $data[$body] = ''; } } elseif ($body !== null) $data[$body].= $line; } } else { $body = (isset($data['Content-Type']) && \preg_match('/\s+text\/(plain|html|sms)/', $data['Content-Type'], $m)) ? $m[1] : 'body_default'; $data[$body] = ''; while (! $file->eof()) { $line = $file->fgets(); if (\preg_match('/^[\r\n]*$/', $line, $m)) break; $data[$body].= $line; } } if (isset($data['body_text']) && \preg_match('/^[\r\n]*$/', $data['body_text'])) $data['body_text'] = null; if (isset($data['body_html']) && \preg_match('/^[\r\n]*$/', $data['body_html'])) $data['body_html'] = null; if (isset($data['body_sms' ]) && \preg_match('/^[\r\n]*$/', $data['body_sms' ])) $data['body_sms' ] = null; // enregistrement des données du message $ref = isset($data['X-TIC-Reference']) ? $data['X-TIC-Reference'] : null; if ($ref !== null) { if (! \array_key_exists($ref, $messages)) $messages[$ref] = array(); $locale = isset($data['Content-Language']) ? $data['Content-Language'] : '_DEFAULT_'; $messages[$ref][$locale] = $data; } } return $this->import($messages); } /** * Chargement des données d'un tableau associatif dans les entités correspondantes. * * @param array $messages Liste des données à importer pour chaque modèle (ref en clé) * @return string Message de l'exception en cas d'échec, ou Null si succès */public function import(array $messages): ?string { if (empty($messages)) return null; try { $em = $this->getEntityManager(); foreach ($messages as $ref => $data) { $item = $this->find($ref); if (null === $item) { $item = new Entity($ref); $em->persist($item); } $item->import($data); } $em->flush(); } catch (\Exception $e) { return $e->getMessage(); } return null; } } |