diff --git a/VERSIONS_HOTLINE/81451 b/VERSIONS_HOTLINE/81451 new file mode 100644 index 0000000000000000000000000000000000000000..8c0780704bcd347c4550840aff8d00d879edd7a3 --- /dev/null +++ b/VERSIONS_HOTLINE/81451 @@ -0,0 +1 @@ + - ticket #81451 : Flux RSS: affichage responsive + mise en cache des flux \ No newline at end of file diff --git a/application/modules/opac/controllers/RssController.php b/application/modules/opac/controllers/RssController.php index cd8a0763ada37fd30a7fb691c7c99edb831e52bd..123c5ebb2400037cde2afb71e6a41191e48104ee 100644 --- a/application/modules/opac/controllers/RssController.php +++ b/application/modules/opac/controllers/RssController.php @@ -128,87 +128,17 @@ class RssController extends Zend_Controller_Action } - //--------------------------------------------------------------------------- - // Affichage d'1 flux en AJAX - //--------------------------------------------------------------------------- - function afficherrssAction() - { - $rssId = (int)$this->_request->getParam('id_rss', 0); - $rssClass = new Class_Rss(); - - $ret = $rssClass->getRssById($rssId); - $rss=$ret[0]; - - $html[]='<div class="rss_popup">'; - $html[]='<div class="header">'; - $html[]=$rss["TITRE"]; - $html[]='<img src="'.URL_ADMIN_IMG.'fermer.gif" style="cursor:pointer" onclick="closeRSSDiv(\''.$rssId.'\')"/>'; - $html[]='</div>'; - - $html[]='<div class="content">'; - - if(!$rss) - { - $html[] = $this->view->_("L'adresse du flux RSS n'est plus valide."); - } - else - { - $httpClient = Class_HttpClientFactory::getInstance()->newHttpClient(); - try - { - Zend_Feed::setHttpClient($httpClient); - $link = $rss["URL"]; - $rssFeed = ZendAfi_Feed::import($link); - - $i = 0; - $locale = Zend_Registry::get('locale'); - foreach ($rssFeed as $item) - { - $i++; - $titleRss = $item->title(); - $urlRss = $item->link(); - $descriptionRss = $item->description(); - - if ($item->pubDate()) - { - $date = $item->pubDate(); - if ($locale == 'en_US') $dateFormat = 'MM-dd-yyyy'; - else $dateFormat = 'dd-MM-yyyy'; - try - { - $zendDate = new Zend_Date($date, Zend_Date::RFC_2822); - $dateRss = $zendDate->toString($dateFormat); - } - catch (Exception $e) - { - $dateRss = ''; - } - } - else $dateRss = ''; - $html[]='<table width="100%" class="popup" cellspacing="0" align="center">'; - $html[]='<tr>'; - $html[]='<td class="popup_titre" width="70%"><a href="'.$urlRss.'" target="_blank" class="popup" onclick="' . $onclick . '">'.$titleRss.'</a></td>'; - $html[]='<td class="popup_titre" width="1%"></td>'; - $html[]='<td class="popup_titre" width="30%"><a href="#" onclick="return(false);">'.$dateRss.'</a></td>'; - $html[]='</tr>'; - $html[]='<tr>'; - $html[]='<td class="popup_ligne" colspan="3">'. $descriptionRss .'</td>'; - $html[]='</tr>'; - $html[]='</table>'; - } - - } - catch(Exception $e) - { - $html[] = $this->view->_("Il y a un problème avec l'adresse du flux RSS"); - } + function afficherrssAction() { + $renderer = $this->_helper->getHelper('viewRenderer'); + $renderer->setLayoutScript('empty.phtml'); - } - $html[]='</div>'; - - $this->_helper->rssResponse(implode("", $html)); + if (!$this->view->rss = Class_Rss::find((int)$this->_getParam('id_rss', 0))) { + $renderer->setNoRender(); + return; + } } + //--------------------------------------------------------------------------- // Flux RSS de la page des modérations //--------------------------------------------------------------------------- diff --git a/application/modules/opac/views/scripts/rss/afficherrss.phtml b/application/modules/opac/views/scripts/rss/afficherrss.phtml new file mode 100644 index 0000000000000000000000000000000000000000..dbf2172b561efbde5caa3cf9f14fcbd23218d903 --- /dev/null +++ b/application/modules/opac/views/scripts/rss/afficherrss.phtml @@ -0,0 +1,23 @@ +<div> + <a href="#" onclick="closeRSSDiv('<?php echo $this->rss->getId() ?>')"> + <img src="<?php echo URL_ADMIN_IMG ?>fermer.gif"/> + <?php echo $this->_('Masquer le contenu du fil RSS') ?> + </a> + + <div class="content"> + <?php foreach($this->rss->getFeedItems() as $item) {?> + <div> + <h2> + <?php echo $this->tagAnchor($item->link(), + $item->title(), + ['class' => 'popup', + 'target' => '_blank']) ?> + </h2> + <span><?php echo $item->pubDate() ?></span> + <p> + <?php echo $item->description() ?> + </p> + </div> + <?php } ?> + </div> +</div> diff --git a/tests/application/modules/opac/controllers/RssControllerTest.php b/tests/application/modules/opac/controllers/RssControllerTest.php index 38c57b3552147a6fa83de20eab84c899c7a23c06..8890fc05a70ff1f21ad94ca6ae8aa1bec799a9b2 100644 --- a/tests/application/modules/opac/controllers/RssControllerTest.php +++ b/tests/application/modules/opac/controllers/RssControllerTest.php @@ -22,45 +22,88 @@ require_once 'AbstractControllerTestCase.php'; class MockZendHttpClient extends Zend_Http_Client { public function request($method = null) { - return new Zend_Http_Response(200, array(), RssFixtures::lemondeRSS()); + return new Zend_Http_Response(200, [], RssFixtures::lemondeRSS()); } } +abstract class RssControllerTestCase extends AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + + public function setUp() { + parent::setUp(); + + $this->fixture('Class_Rss', + ['id' => 15, + 'id_cat' => 11, + 'id_notice' => 86546, + 'titre' => 'Le monde', + 'description' => 'A la Une', + 'url' => 'http://rss.lemonde.fr/c/205/f/3050/index.rss', + 'date_maj' => '2010-04-01 10:47:58']); + + Class_HttpClientFactory::setInstance($this->mock() + ->whenCalled('newHttpClient') + ->answers(new MockZendHttpClient())); + } +} + + + + +class RssControllerAfficherRssTest extends RssControllerTestCase { + public function setUp() { + parent::setUp(); + $this->dispatch('rss/afficherrss/id_rss/15'); + } + + + /** @test */ + public function rssPopupShouldContainsLinkToHideContent() { + $this->assertXPathContentContains('//div/a[@onclick="closeRSSDiv(\'15\')"]', + 'Masquer le contenu'); + } + + /** @test */ + public function rssPopupShouldContainsBlogDelinquance() { + $this->assertXPathContentContains('//h2/a', + utf8_encode('Blog - Délinquance des mineurs : le septième rapport en sept ans')); + } +} -class RssControllerViewRawRssTest extends AbstractControllerTestCase { + + + +class RssControllerAfficherRssErrorsTest extends RssControllerTestCase { + /** @test */ + public function withInexistingRssShouldAnswerEmptyResponse() { + $this->dispatch('rss/afficherrss/id_rss/666'); + $this->assertEquals('', $this->_response->getBody()); + + } +} + + + + +class RssControllerViewRawRssTest extends RssControllerTestCase { public function setUp() { parent::setUp(); - Class_Rss::getLoader() - ->newInstanceWithId(15) - ->setIdCat(11) - ->setIdNotice(86546) - ->setTitre('Le monde') - ->setDescription('A la Une') - ->setUrl('http://rss.lemonde.fr/c/205/f/3050/index.rss') - ->setDateMaj('2010-04-01 10:47:58'); - - $preferences = array( - 'boite' => '', - 'titre' => 'Fils Rss', - 'type_aff' => '1', - 'id_categorie' => '', - 'id_items' => '15', - 'nb_aff' => '2' ); + $preferences = ['boite' => '', + 'titre' => 'Fils Rss', + 'type_aff' => '1', + 'id_categorie' => '', + 'id_items' => '15', + 'nb_aff' => '2' ]; Class_Profil::getLoader() ->newInstanceWithId(25) - ->setCfgAccueil(array( - 'modules' => array( - '1' => array( - 'division' => '1', - 'type_module' => 'RSS', - 'preferences' => $preferences)))); - + ->setCfgAccueil(['modules' => ['1' => [ 'division' => '1', + 'type_module' => 'RSS', + 'preferences' => $preferences]]]); - Class_HttpClientFactory::setInstance($this->mock()->whenCalled('newHttpClient')->answers(new MockZendHttpClient())); $this->dispatch('rss/view-raw-rss/id_rss/15/id_profil/25/id_module/1'); }