use Galerie\Model\GalerieTable;
use Galerie\Model\GalerieInfoTable;
+use Galerie\Model\GalerieInfoRssTable;
use Galerie\Model\Contact;
use Galerie\Form\GalerieForm;
$sm->get('Zend\Db\Adapter\Adapter')
);
},
+ 'Galerie\Model\GalerieInfoRssTable' => function($sm) {
+ return new GalerieInfoRssTable(
+ $sm->get('Zend\Db\Adapter\Adapter')
+ );
+ },
'Galerie\Form\GalerieForm' => function($sm) {
$result = new GalerieForm;
$result->setTranslator($sm->get('translator'), 'galerie');
),
'verb' => 'get',
),
+ 'rss' => array(
+ 'type' => 'Literal',
+ 'options' => array(
+ 'route' => '/rss',
+ 'defaults' => array(
+ 'action' => 'rss',
+ ),
+ ),
+ 'verb' => 'get',
+ ),
/*
'default' => array(
'type' => 'Segment',
'host' => 'smtp.free.fr',
'port' => 25,
),
+ 'rss' => array(
+ 'title' => 'Galeries',
+ 'description' => 'Liste des galeries disponibles',
+ 'link' => 'http://zf2.biz/galeries',
+ 'setfeedlink' => array(
+ 'link' => 'http://zf2.biz/galeries/rss',
+ 'type' => 'rss'
+ ),
+ 'author' => array(
+ 'name' => 'Sébastien CHAZALLET',
+ 'email' => 'contact@zf2.biz',
+ 'uri' => 'http://zf2.biz',
+ )
+ ),
);
use Zend\Session\Container;
+use Zend\Feed\Writer\FeedFactory;
+
use Galerie\Model\Galerie;
use Galerie\Graph\Test as TestPie;
private $_translator;
private $_log;
+ private $_rss;
private function _getGalerieTable()
return $this->_galerieInfoTable;
}
+ private function _getGalerieInfoRssTable()
+ {
+ if (!$this->_galerieInfoTable) {
+ $sm = $this->getServiceLocator();
+ $this->_galerieInfoTable = $sm->get('Galerie\Model\GalerieInfoRssTable');
+ }
+ return $this->_galerieInfoTable;
+ }
+
private function _getTranslator()
{
if (!$this->_translator) {
return $this->_log;
}
+ private function _getRss()
+ {
+ if (!$this->_rss) {
+ $sm = $this->getServiceLocator();
+ $config = $sm->get('Config');
+ $this->_rss = FeedFactory::factory($config['rss']);
+ }
+ return $this->_rss;
+ }
+
$last = null;
}
return new ViewModel(array('last' => $last));
- }
+ }
+
+ public function rssAction() {
+ // Récupération des informations brutes
+ $modelManager = $this->_getGalerieInfoRssTable();
+ $datas = $modelManager->all();
+
+ // Création du fil RSS
+ $rss = $this->_getRss();
+
+ foreach($datas as $d) {
+ $entry = $rss->createEntry();
+ $entry->setTitle($d->name);
+
+ $entry->setLink($this->url()->fromRoute('galerie/view', array('id' => $d->id)));
+ $entry->addAuthor(array(
+ 'name' => $d->username,
+ ));
+ $date = new \DateTime();
+ $entry->setDateModified(
+ $date->setTimestamp(intval($d->updated))
+ );
+ $entry->setDateCreated(
+ $date->setTimestamp(intval($d->created))
+ );
+ $entry->setDescription($d->description);
+ $entry->setContent("{$d->nb} photos.");
+ $rss->addEntry($entry);
+ }
+
+ //echo '<pre>'; print_r($rss->export('rss')); die('</pre>');
+
+ // Création de la réponse
+ $response = $this->getResponse();
+ $response->setStatusCode(200);
+
+ // Modification des entêtes
+ $headers = $this->getResponse()->getHeaders();
+ $headers->addHeaderLine('Content-Type', 'application/rss+xml; charset=utf-8');
+
+ $response->setContent($rss->export('rss'));
+
+ return $response;
+ }
public function csvAction() {
// Récupération des informations brutes
--- /dev/null
+<?php
+
+namespace Galerie\Model;
+
+use Custom\Model\Entity;
+
+class GalerieInfoRss extends Entity
+{
+ public $id;
+ public $name;
+ public $description;
+ public $username;
+ public $nb;
+ public $created;
+ public $updated;
+
+
+ protected $columns = array(
+ 'id',
+ 'name',
+ 'description',
+ 'username',
+ 'nb',
+ 'created',
+ 'updated',
+ );
+
+ protected $updatable_columns = array(
+ );
+
+ protected $primary_columns = array(
+ );
+
+ public function csvFormat()
+ {
+ return $this->id
+ . ';' . $this->name
+ . ';' . $this->description
+ . ';' . $this->username
+ . ';' . $this->nb
+ . ';' . $this->created
+ . ';' . $this->updated;
+ }
+
+}
+
--- /dev/null
+<?php
+namespace Galerie\Model;
+
+use Zend\Db\Adapter\Adapter;
+use Zend\Db\ResultSet\ResultSet;
+use Zend\Db\TableGateway\TableGatewayInterface;
+use Zend\Db\Sql\Sql;
+use Zend\Db\Sql\Where;
+use Zend\Db\Sql\Select;
+
+use Custom\Model\Entity;
+
+class GalerieInfoRssTable implements TableGatewayInterface
+{
+
+ protected $adapter;
+ protected $resultSetPrototype;
+ protected $sql;
+
+ public function __construct(Adapter $adapter) {
+ // Gestion de l'adaptateur
+ if (!$adapter instanceof Adapter) {
+ throw new Exception\RuntimeException('GalerieInfoTable does not have an valid Adapter parameter');
+ }
+ $this->adapter = $adapter;
+
+ // Utilisation du patron de conception Prototype
+ // pour la création des objets ResultSet
+ $this->resultSetPrototype = new ResultSet();
+ $this->resultSetPrototype->setArrayObjectPrototype(
+ new GalerieInfoRss()
+ );
+
+ // Initialisation de l'outil de création de requête
+ $this->sql = new Sql($this->adapter, $this->getTable());
+ }
+
+
+ public function getTable()
+ {
+ return 'gallery'; // Table centrale de la requête
+ }
+
+
+ public function select($where = null, $order = null, $limit = null, $offset = null)
+ {
+ $select = $this->sql->select()
+ ->columns(array('id', 'name', 'description', 'created', 'updated'))
+ ->join('user', 'gallery.id_user = user.id', array(
+ 'username' => new \Zend\Db\Sql\Expression("user.firstname || ' ' || user.lastname")
+ ))
+ ->join('photo', 'gallery.id = photo.id_gallery', array(
+ 'nb' => new \Zend\Db\Sql\Expression('count(photo.id)')
+ ), Select::JOIN_LEFT)
+ ->group(array(
+ 'user.lastname',
+ 'user.firstname',
+ 'gallery.name'
+ ))
+ ->order(array(
+ 'user.lastname',
+ 'user.firstname',
+ 'gallery.name'
+ ));
+ if ($where) {
+ $select->where($where);
+ }
+ if ($order) {
+ $select->order($order);
+ }
+ if ($limit) {
+ $select->limit($limit);
+ }
+ if ($offset) {
+ $select->offset($offset);
+ }
+
+ // prepare and execute
+ $statement = $this->sql->prepareStatementForSqlObject($select);
+ $result = $statement->execute();
+
+ // build result set
+ $resultSet = clone $this->resultSetPrototype;
+ $resultSet->initialize($result);
+
+ return $resultSet;
+ }
+
+ public function insert($set) {
+ throw new \Exception('insert is not allowed');
+ }
+
+ public function update($set, $where = null) {
+ throw new \Exception('update is not allowed');
+ }
+
+ public function delete($where) {
+ throw new \Exception('delete is not allowed');
+ }
+
+ public function all()
+ {
+ return $this->select();
+ }
+
+ public function one($id)
+ {
+ if ($id === null) {
+ $row = null;
+ } else {
+ $row = $this->select(array('gallery.id' => (int) $id))->current();
+ }
+ if (!$row) {
+ throw new \Exception("cannot get row {id: {$id}} in table 'galerie'");
+ }
+ return $row;
+ }
+
+ public function any($id)
+ {
+ if ($id === null) {
+ $row = null;
+ } else {
+ $row = $this->select(array('gallery.id' => (int) $id))->current();
+ }
+ return $row;
+ }
+
+ public function all_by_user($id_user)
+ {
+ return $this->select(array('gallery.id_user' => (int) $id_user));
+ }
+
+
+
+
+ public function count_all()
+ {
+ $select = $this->sql->select()->columns(array(
+ 'nb' => new \Zend\Db\Sql\Expression('count(gallery.id)')
+ ));
+
+ // prepare and execute
+ $statement = $this->sql->prepareStatementForSqlObject($select);
+ $result = $statement->execute()->current();
+
+ return $result['nb'];
+ }
+
+ public function getPartial($start, $length, $tri, $senstri, $filtre)
+ {
+ $where = new Where;
+ $where->like('gallery.name', "%{$filtre}%");
+ $where->or;
+ $where->like('gallery.description', "%{$filtre}%");
+
+ return $this->select($where, "{$tri} {$senstri}", $length, $start);
+ }
+
+
+ public function csvHeader()
+ {
+ return "Id;Nom;Description;Propriétaire;Nombre;Creation;MAJ";
+ }
+
+
+}