1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| for ($i = 0; $i < $nb_docs; $i++) { // Boucle sur l'ensemble des fichiers
$filepath = $ar_docs[$i];
$path_parts = pathinfo($filepath);
set_time_limit(30);
$document = new DOMDocument;
if (@$document->loadHTMLFile($filepath) === FALSE) { // Chargement du contenu du fichier
$logger->addDebug('Cannot load this HTML file');
} else {
$xpath = new DOMXPath($document);
// Pour chaque balise <style> contenues dans le document, récupération des selecteurs
// afin de mettre à jour les balises correspondantes
$entries = $xpath->query('//html/head/style');
foreach ($entries as $entry) :
$matches = NULL;
if (preg_match_all('/(?<selector>.*){(?<content>.*)}/', $entry->nodeValue, $matches, PREG_SET_ORDER)) :
foreach ($matches as $matche) :
// Transformation d'un selecteur CSS en expression XPath en utilisant
// la bibliothèque Zend
$domQuery = new Zend_Dom_Query_Css2Xpath();
$xpathQuery = $domQuery->transform($matche[1]);
foreach ($xpath->query($xpathQuery) as $result) :
$attributes = array();
if ($result->hasAttribute('style')) :
$attributes[] = rtrim($result->getAttribute('style'), ';');
endif;
$attributes[] = $matche[2];
$result->setAttribute('style', implode(';', $attributes));
endforeach;
endforeach;
endif;
endforeach;
// Titre du courrier
$title = $path_parts['filename'];
// Enregistrement du courrier dans la base de données
foreach ($users as $user) {
$letterEntity = new Entities\Letters;
$letterEntity->setUser($user);
$letterEntity->setTitle($title);
$letterEntity->setMsg($document->saveHTML($xpath->query('//html/body')->item(0)));
$letterEntity->setType('contact');
if (!empty($contactEntity))
$letterEntity->setContact($contactEntity);
$entityManager->persist($letterEntity);
$entityManager->flush();
}
// Courrier enregistré en base de données : on supprime le fichier
@unlink($filepath);
}
} |
Partager