use PHPePub\Core\EPub;
use PHPePub\Core\Structure\OPF\DublinCore;
use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Serializer\Serializer;
+use Symfony\Component\Serializer\Encoder\XmlEncoder;
+use Symfony\Component\Serializer\Encoder\JsonEncoder;
+use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
class EntriesExport
{
case 'csv':
return $this->produceCSV();
+
+ case 'json':
+ return $this->produceJSON();
+
+ case 'xml':
+ return $this->produceXML();
}
throw new \InvalidArgumentException(sprintf('The format "%s" is not yet supported.', $format));
)->send();
}
+ private function produceJSON()
+ {
+ return Response::create(
+ $this->prepareSerializingContent('json'),
+ 200,
+ array(
+ 'Content-type' => 'application/json',
+ 'Content-Disposition' => 'attachment; filename="'.$this->title.'.json"',
+ 'Content-Transfer-Encoding' => 'UTF-8',
+ )
+ )->send();
+ }
+
+ private function produceXML()
+ {
+ return Response::create(
+ $this->prepareSerializingContent('xml'),
+ 200,
+ array(
+ 'Content-type' => 'application/xml',
+ 'Content-Disposition' => 'attachment; filename="'.$this->title.'.xml"',
+ 'Content-Transfer-Encoding' => 'UTF-8',
+ )
+ )->send();
+ }
+
+ /**
+ * Return a Serializer object for producing processes that need it (JSON & XML).
+ *
+ * @return Serializer
+ */
+ private function prepareSerializingContent($format)
+ {
+ $encoders = array(new XmlEncoder(), new JsonEncoder());
+ $normalizers = array(new ObjectNormalizer());
+ $normalizers[0]->setIgnoredAttributes(array('user', 'createdAt', 'updatedAt'));
+ $serializer = new Serializer($normalizers, $encoders);
+
+ return $serializer->serialize($this->entries, $format);
+ }
+
/**
* Return a kind of footer / information for the epub.
*