diff --git a/lib/Alchemy/Phrasea/Controller/Admin/Publications.php b/lib/Alchemy/Phrasea/Controller/Admin/Publications.php index b0d8bec98e..83a2a3072f 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/Publications.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/Publications.php @@ -12,7 +12,8 @@ namespace Alchemy\Phrasea\Controller\Admin; use Alchemy\Phrasea\Application as PhraseaApplication; -use Repositories; +use Entities\Feed; +use Entities\FeedPublisher; use Silex\Application; use Silex\ControllerProviderInterface; use Symfony\Component\HttpFoundation\Request; @@ -47,9 +48,9 @@ class Publications implements ControllerProviderInterface $controllers->post('/create/', function(PhraseaApplication $app, Request $request) { - $publisher = new \Entities\FeedPublisher($app['authentication']->getUser(), true); + $publisher = new FeedPublisher($app['authentication']->getUser(), true); - $feed = new \Entities\Feed($publisher, $request->request->get('title'), $request->request->get('subtitle')); + $feed = new Feed($publisher, $request->request->get('title'), $request->request->get('subtitle')); if ($request->request->get('public') == '1') { $feed->setPublic(true); @@ -178,7 +179,7 @@ class Publications implements ControllerProviderInterface $user = \User_Adapter::getInstance($request->request->get('usr_id'), $app); $feed = $app["EM"]->getRepository("Entities\Feed")->find($id); - $publisher = new \Entities\FeedPublisher($user, false); + $publisher = new FeedPublisher($user, false); $publisher->setFeed($feed); $feed->addPublisher($publisher); diff --git a/lib/Alchemy/Phrasea/Controller/Client/Root.php b/lib/Alchemy/Phrasea/Controller/Client/Root.php index 656c9b9a56..7bfd23ffcc 100644 --- a/lib/Alchemy/Phrasea/Controller/Client/Root.php +++ b/lib/Alchemy/Phrasea/Controller/Client/Root.php @@ -539,7 +539,8 @@ class Root implements ControllerProviderInterface private function getPublicationStartPage(Application $app) { return $app['twig']->render('client/home_inter_pub_basket.html.twig', array( - 'feeds' => \Feed_Collection::load_all($app, $app['authentication']->getUser()), +// 'feeds' => \Feed_Collection::load_all($app, $app['authentication']->getUser()), + 'feeds' => $app['EM']->getRepository('Entities\Feed')->getAllforUser($app['authentication']->getUser()), 'image_size' => (int) $app['authentication']->getUser()->getPrefs('images_size') )); } diff --git a/lib/Alchemy/Phrasea/Controller/Lightbox.php b/lib/Alchemy/Phrasea/Controller/Lightbox.php index 15395ea667..5fcbf35441 100644 --- a/lib/Alchemy/Phrasea/Controller/Lightbox.php +++ b/lib/Alchemy/Phrasea/Controller/Lightbox.php @@ -160,13 +160,15 @@ class Lightbox implements ControllerProviderInterface $controllers->get('/ajax/LOAD_FEED_ITEM/{entry_id}/{item_id}/', function(SilexApplication $app, $entry_id, $item_id) { - $entry = \Feed_Entry_Adapter::load_from_id($app, $entry_id); - $item = new \Feed_Entry_Item($app['phraseanet.appbox'], $entry, $item_id); +// $entry = \Feed_Entry_Adapter::load_from_id($app, $entry_id); + $entry = $app['EM']->getRepository("Entities\FeedEntry")->find($entry_id); +// $item = new \Feed_Entry_Item($app['phraseanet.appbox'], $entry, $item_id); + $item = $entry->getItems()->getItem($item_id); if ($app['browser']->isMobile()) { $output = $app['twig']->render('lightbox/feed_element.html.twig', array( 'feed_element' => $item, - 'module_name' => $item->get_record()->get_title() + 'module_name' => $item->getRecord()->get_title() ) ); @@ -313,7 +315,8 @@ class Lightbox implements ControllerProviderInterface return $app->redirectPath('logout'); } - $feed_entry = \Feed_Entry_Adapter::load_from_id($app, $entry_id); +// $feed_entry = \Feed_Entry_Adapter::load_from_id($app, $entry_id); + $feed_entry = $app['EM']->getEntity("Entities\FeedEntry")->find($entry_id); $template = 'lightbox/feed.html.twig'; @@ -321,12 +324,12 @@ class Lightbox implements ControllerProviderInterface $template = 'lightbox/IE6/feed.html.twig'; } - $content = $feed_entry->get_content(); + $content = $feed_entry->getItems(); $output = $app['twig']->render($template, array( 'feed_entry' => $feed_entry, 'first_item' => array_shift($content), - 'local_title' => $feed_entry->get_title(), + 'local_title' => $feed_entry->getTitle(), 'module' => 'lightbox', 'module_name' => _('admin::monitor: module validation') ) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Feed.php b/lib/Alchemy/Phrasea/Controller/Prod/Feed.php index 0290f8ce91..dc477fb40b 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Feed.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Feed.php @@ -15,6 +15,8 @@ use Alchemy\Phrasea\Feed\Aggregate; use Alchemy\Phrasea\Feed\AggregateLinkGenerator; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Feed\LinkGenerator; +use Entities\FeedEntry; +use Entities\FeedItem; use Silex\Application; use Silex\ControllerProviderInterface; use Symfony\Component\HttpFoundation\Request; @@ -60,7 +62,7 @@ class Feed implements ControllerProviderInterface $author_name = $request->request->get('author_name'); $author_email = $request->request->get('author_email'); - $entry = new \Entities\FeedEntry(); + $entry = new FeedEntry(); $entry->setFeed($feed); $entry->setPublisher($publisher); $entry->setTitle($title); @@ -72,7 +74,7 @@ class Feed implements ControllerProviderInterface $publishing = RecordsRequest::fromRequest($app, $request, true, array(), array('bas_chupub')); foreach ($publishing as $record) { - $item = new \Entities\FeedItem(); + $item = new FeedItem(); $item->setEntry($entry); $item->setRecordId($record->get_record_id()); $item->setSbasId($record->get_sbas_id()); @@ -166,7 +168,7 @@ class Feed implements ControllerProviderInterface continue; } - $item = new \entities\FeedItem($entry, $item_sort_datas[0]); + $item = new FeedItem($entry, $item_sort_datas[0]); $item->setEntry($entry); $entry->addItem($item); $item->setOrd($item_sort_datas[1]); @@ -262,11 +264,9 @@ class Feed implements ControllerProviderInterface $feeds = $app["EM"]->getRepository("Entities\Feed")->findAll(); - $aggregateGenerator = new AggregateLinkGenerator($app['url_generator'], $app['EM'], $app['tokens']); - $aggregate = new Aggregate($app, $feeds); - $link = $aggregateGenerator->generate($aggregate, $app['authentication']->getUser(), AggregateLinkGenerator::FORMAT_RSS, null, $renew); + $link = $app['feed.aggregate-link-generator']->generate($aggregate, $app['authentication']->getUser(), AggregateLinkGenerator::FORMAT_RSS, null, $renew); $output = array( 'texte' => '

' . _('publication::Voici votre fil RSS personnel. Il vous permettra d\'etre tenu au courrant des publications.') @@ -283,9 +283,7 @@ class Feed implements ControllerProviderInterface $feed = $app["EM"]->getRepository("Entities\Feed")->loadWithUser($app, $app['authentication']->getUser(), $id); - $linkGenerator = new LinkGenerator($app['url_generator'], $app['EM'], $app['tokens']); - - $link = $linkGenerator->generate($feed, $app['authentication']->getUser(), LinkGenerator::FORMAT_RSS, null, $renew); + $link = $app['feed.user-link-generator']->generate($feed, $app['authentication']->getUser(), LinkGenerator::FORMAT_RSS, null, $renew); $output = array( 'texte' => '

' . _('publication::Voici votre fil RSS personnel. Il vous permettra d\'etre tenu au courrant des publications.') diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Root.php b/lib/Alchemy/Phrasea/Controller/Prod/Root.php index 3d85e8f16d..dee619260b 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Root.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Root.php @@ -11,7 +11,7 @@ namespace Alchemy\Phrasea\Controller\Prod; -use \Alchemy\Phrasea\Feed\Aggregate; +use Alchemy\Phrasea\Feed\Aggregate; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Exception\SessionNotFound; use Silex\Application as SilexApplication; @@ -75,8 +75,8 @@ class Root implements ControllerProviderInterface // $user_feeds = \Feed_Collection::load_all($app, $app['authentication']->getUser()); // $feeds = array_merge(array($user_feeds->get_aggregate()), $user_feeds->get_feeds()); - $user_feeds = $app["EM"]->getRepository("Entities\Feed")->getAllForUser($app['authentication']->getUser()); - $aggregate = new Aggregate($app, $user_feeds); + $feeds = $app["EM"]->getRepository("Entities\Feed")->getAllForUser($app['authentication']->getUser()); +// $aggregate = new Aggregate($app, $user_feeds); $thjslist = ""; @@ -118,7 +118,7 @@ class Root implements ControllerProviderInterface 'GV_thesaurus' => $app['phraseanet.registry']->get('GV_thesaurus'), 'cgus_agreement' => \databox_cgu::askAgreement($app), 'css' => $css, - 'aggregate' => $aggregate, + 'feeds' => $feeds, 'GV_google_api' => $app['phraseanet.registry']->get('GV_google_api'), 'queries_topics' => $queries_topics, 'search_status' => \databox_status::getSearchStatus($app), diff --git a/lib/Alchemy/Phrasea/Controller/Root/Login.php b/lib/Alchemy/Phrasea/Controller/Root/Login.php index 11e385702e..af346af770 100644 --- a/lib/Alchemy/Phrasea/Controller/Root/Login.php +++ b/lib/Alchemy/Phrasea/Controller/Root/Login.php @@ -725,10 +725,7 @@ class Login implements ControllerProviderInterface $app->addFlash('error', _('login::erreur: No available connection - Please contact sys-admin')); } - $public_feeds = \Feed_Collection::load_public_feeds($app); - - $feeds = $public_feeds->get_feeds(); - array_unshift($feeds, $public_feeds->get_aggregate()); + $feeds = $app['EM']->getRepository('Entities\Feed')->findAllPublic(); $form = $app->form(new PhraseaAuthenticationForm()); $form->setData(array( diff --git a/lib/Alchemy/Phrasea/Controller/Root/RSSFeeds.php b/lib/Alchemy/Phrasea/Controller/Root/RSSFeeds.php index fb00b5304c..b448de9eef 100644 --- a/lib/Alchemy/Phrasea/Controller/Root/RSSFeeds.php +++ b/lib/Alchemy/Phrasea/Controller/Root/RSSFeeds.php @@ -32,15 +32,15 @@ class RSSFeeds implements ControllerProviderInterface $perPage = 5; $entries = $feed->getEntries((($page - 1) * $perPage), $perPage); - if ($format == \Entities\Feed::FORMAT_RSS) { + if ($format == 'rss') { $content = new \Feed_XML_RSS(); } - if ($format == \Entities\Feed::FORMAT_ATOM) { + if ($format == 'atom') { $content = new \Feed_XML_Atom(); } - if ($format == \Entities\Feed::FORMAT_COOLIRIS) { + if ($format == 'cooliris') { $content = new \Feed_XML_Cooliris(); } @@ -77,7 +77,6 @@ class RSSFeeds implements ControllerProviderInterface }; $controllers->get('/feed/{id}/{format}/', function(Application $app, $id, $format) use ($display_feed) { - // $feed = new \Feed_Adapter($app, $id); $feed = $app["EM"]->getRepository("Entities\Feed")->find($id); if (!$feed->isPublic()) { @@ -112,7 +111,6 @@ class RSSFeeds implements ControllerProviderInterface $controllers->get('/userfeed/aggregated/{token}/{format}/', function(Application $app, $token, $format) use ($display_feed) { $token = $app["EM"]->getRepository("Entities\AggregateToken")->findBy(array("id" => $id)); - //$feed = $token->getFeed(); $request = $app['request']; @@ -125,8 +123,6 @@ class RSSFeeds implements ControllerProviderInterface ->assert('format', '(rss|atom)'); $controllers->get('/aggregated/{format}/', function(Application $app, $format) use ($display_feed) { - //$feeds = \Feed_Collection::load_public_feeds($app); - //$feed = $feeds->get_aggregate(); $feeds = $app["EM"]->getRepository("Entities\Feed")->findAllPublic(); $feed = new Aggregate($app, $feeds); @@ -140,8 +136,6 @@ class RSSFeeds implements ControllerProviderInterface ->assert('format', '(rss|atom)'); $controllers->get('/cooliris/', function(Application $app) use ($display_feed) { -// $feeds = \Feed_Collection::load_public_feeds($app); -// $feed = $feeds->get_aggregate(); $feeds = $app["EM"]->getRepository("Entities\Feed")->findAllPublic(); $feed = new Aggregate($app, $feeds); @@ -149,7 +143,7 @@ class RSSFeeds implements ControllerProviderInterface $page = (int) $request->query->get('page'); $page = $page < 1 ? 1 : $page; - return $display_feed($app, $feed, \Feed_Adapter::FORMAT_COOLIRIS, $page); + return $display_feed($app, $feed, 'cooliris', $page); }) ->bind('feed_public_cooliris'); diff --git a/lib/Alchemy/Phrasea/Core/Provider/FeedServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/FeedServiceProvider.php index dc4ceef38f..f16badbc1c 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/FeedServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/FeedServiceProvider.php @@ -23,7 +23,7 @@ class FeedServiceProvider implements ServiceProviderInterface $app['feed.user-link-generator'] = $app->share(function($app) { return new LinkGenerator($app['url_generator'], $app['EM'], $app['tokens']); }); - $app['feed.aggreagate-link-generator'] = $app->share(function($app) { + $app['feed.aggregate-link-generator'] = $app->share(function($app) { return new AggregateLinkGenerator($app['url_generator'], $app['EM'], $app['tokens']); }); } diff --git a/lib/Alchemy/Phrasea/Feed/AggregateLinkGenerator.php b/lib/Alchemy/Phrasea/Feed/AggregateLinkGenerator.php index 6f9477c6f8..9579fc2090 100644 --- a/lib/Alchemy/Phrasea/Feed/AggregateLinkGenerator.php +++ b/lib/Alchemy/Phrasea/Feed/AggregateLinkGenerator.php @@ -28,21 +28,55 @@ class AggregateLinkGenerator { switch ($format) { case self::FORMAT_ATOM: + $params = array('token' => $this->getAggregateToken($user, $renew)->getValue(), + 'format' => 'atom'); + if (null !== $page) { + $params['page'] = $page; + } return new FeedLink( - $this->generator->generate('feed_user_aggregated', array( - 'token' => $this->getAggregateToken($user, $renew)->getValue(), - 'format' => 'atom', - ), UrlGenerator::ABSOLUTE_URL), + $this->generator->generate('feed_user_aggregated', $params, UrlGenerator::ABSOLUTE_URL), sprintf('%s - %s', $aggregate->getTitle(), 'Atom'), 'application/atom+xml' ); break; case self::FORMAT_RSS: + $params = array('token' => $this->getAggregateToken($user, $renew)->getValue(), + 'format' => 'rss'); + if (null !== $page) { + $params['page'] = $page; + } return new FeedLink( - $this->generator->generate('feed_user_aggregated', array( - 'token' => $this->getAggregateToken($user, $renew)->getValue(), - 'format' => 'rss', - ), UrlGenerator::ABSOLUTE_URL), + $this->generator->generate('feed_user_aggregated', $params, UrlGenerator::ABSOLUTE_URL), + sprintf('%s - %s', $aggregate->getTitle(), 'RSS'), + 'application/rss+xml' + ); + break; + default: + throw new InvalidArgumentException(sprintf('Format %s is not recognized.', $format)); + } + } + + public function generatePublic(Aggregate $aggregate, $format, $page = null) + { + switch ($format) { + case self::FORMAT_ATOM: + $params = array('format' => 'atom'); + if (null !== $page) { + $params['page'] = $page; + } + return new FeedLink( + $this->generator->generate('feed_user_aggregated', $params, UrlGenerator::ABSOLUTE_URL), + sprintf('%s - %s', $aggregate->getTitle(), 'Atom'), + 'application/atom+xml' + ); + break; + case self::FORMAT_RSS: + $params = array('format' => 'rss'); + if (null !== $page) { + $params['page'] = $page; + } + return new FeedLink( + $this->generator->generate('feed_user_aggregated', $params, UrlGenerator::ABSOLUTE_URL), sprintf('%s - %s', $aggregate->getTitle(), 'RSS'), 'application/rss+xml' ); diff --git a/lib/Alchemy/Phrasea/Feed/LinkGenerator.php b/lib/Alchemy/Phrasea/Feed/LinkGenerator.php index dbe105e0d6..b63347697d 100644 --- a/lib/Alchemy/Phrasea/Feed/LinkGenerator.php +++ b/lib/Alchemy/Phrasea/Feed/LinkGenerator.php @@ -28,23 +28,59 @@ class LinkGenerator { switch ($format) { case self::FORMAT_ATOM: + $params = array('token' => $this->getFeedToken($feed, $user, $renew)->getValue(), + 'id' => $feed->getId(), + 'format' => 'atom'); + if (null !== $page) { + $params['page'] = $page; + } return new FeedLink( - $this->generator->generate('feed_user', array( - 'token' => $this->getFeedToken($feed, $user, $renew)->getValue(), - 'id' => $feed->getId(), - 'format' => 'atom', - ), UrlGenerator::ABSOLUTE_URL), + $this->generator->generate('feed_user', $params, UrlGenerator::ABSOLUTE_URL), sprintf('%s - %s', $feed->getTitle(), 'Atom'), 'application/atom+xml' ); break; case self::FORMAT_RSS: + $params = array('token' => $this->getFeedToken($feed, $user, $renew)->getValue(), + 'id' => $feed->getId(), + 'format' => 'rss'); + if (null !== $page) { + $params['page'] = $page; + } return new FeedLink( - $this->generator->generate('feed_user', array( - 'token' => $this->getFeedToken($feed, $user, $renew)->getValue(), - 'id' => $feed->getId(), - 'format' => 'rss', - ), UrlGenerator::ABSOLUTE_URL), + $this->generator->generate('feed_user', $params, UrlGenerator::ABSOLUTE_URL), + sprintf('%s - %s', $feed->getTitle(), 'RSS'), + 'application/rss+xml' + ); + break; + default: + throw new InvalidArgumentException(sprintf('Format %s is not recognized.', $format)); + } + } + + public function generatePublic(Feed $feed, $format, $page = null) + { + switch ($format) { + case self::FORMAT_ATOM: + $params = array('id' => $feed->getId(), + 'format' => 'atom'); + if (null !== $page) { + $params['page'] = $page; + } + return new FeedLink( + $this->generator->generate('feed_public', $params, UrlGenerator::ABSOLUTE_URL), + sprintf('%s - %s', $feed->getTitle(), 'Atom'), + 'application/atom+xml' + ); + break; + case self::FORMAT_RSS: + $params = array('id' => $feed->getId(), + 'format' => 'rss'); + if (null !== $page) { + $params['page'] = $page; + } + return new FeedLink( + $this->generator->generate('feed_public', $params, UrlGenerator::ABSOLUTE_URL), sprintf('%s - %s', $feed->getTitle(), 'RSS'), 'application/rss+xml' ); diff --git a/lib/Doctrine/Entities/Feed.php b/lib/Doctrine/Entities/Feed.php index 8d44126200..2ba83f8cbc 100644 --- a/lib/Doctrine/Entities/Feed.php +++ b/lib/Doctrine/Entities/Feed.php @@ -424,4 +424,27 @@ class Feed implements FeedInterface { return $this->tokens; } + + /** + * Add entries + * + * @param \Entities\FeedEntry $entries + * @return Feed + */ + public function addEntrie(\Entities\FeedEntry $entries) + { + $this->entries[] = $entries; + + return $this; + } + + /** + * Remove entries + * + * @param \Entities\FeedEntry $entries + */ + public function removeEntrie(\Entities\FeedEntry $entries) + { + $this->entries->removeElement($entries); + } } \ No newline at end of file diff --git a/lib/Doctrine/Entities/FeedEntry.php b/lib/Doctrine/Entities/FeedEntry.php index ae72ac8ecd..62c1ce0a2c 100644 --- a/lib/Doctrine/Entities/FeedEntry.php +++ b/lib/Doctrine/Entities/FeedEntry.php @@ -66,11 +66,11 @@ class FeedEntry { $this->items = new \Doctrine\Common\Collections\ArrayCollection(); } - + /** * Get id * - * @return integer + * @return integer */ public function getId() { @@ -86,14 +86,14 @@ class FeedEntry public function setTitle($title) { $this->title = $title; - + return $this; } /** * Get title * - * @return string + * @return string */ public function getTitle() { @@ -109,14 +109,14 @@ class FeedEntry public function setSubtitle($subtitle) { $this->subtitle = $subtitle; - + return $this; } /** * Get subtitle * - * @return string + * @return string */ public function getSubtitle() { @@ -132,14 +132,14 @@ class FeedEntry public function setAuthorName($authorName) { $this->author_name = $authorName; - + return $this; } /** * Get author_name * - * @return string + * @return string */ public function getAuthorName() { @@ -155,14 +155,14 @@ class FeedEntry public function setAuthorEmail($authorEmail) { $this->author_email = $authorEmail; - + return $this; } /** * Get author_email * - * @return string + * @return string */ public function getAuthorEmail() { @@ -178,14 +178,14 @@ class FeedEntry public function setCreatedOn($createdOn) { $this->created_on = $createdOn; - + return $this; } /** * Get created * - * @return \DateTime + * @return \DateTime */ public function getCreatedOn() { @@ -201,14 +201,14 @@ class FeedEntry public function setUpdatedOn($updatedOn) { $this->updated_on = $updatedOn; - + return $this; } /** * Get updated * - * @return \DateTime + * @return \DateTime */ public function getUpdatedOn() { @@ -224,7 +224,7 @@ class FeedEntry public function addItem(\Entities\FeedItem $items) { $this->items[] = $items; - + return $this; } @@ -241,7 +241,7 @@ class FeedEntry /** * Get items * - * @return \Doctrine\Common\Collections\Collection + * @return \Doctrine\Common\Collections\Collection */ public function getItems() { @@ -257,14 +257,14 @@ class FeedEntry public function setPublisher(\Entities\FeedPublisher $publisher = null) { $this->publisher = $publisher; - + return $this; } /** * Get publisher * - * @return \Entities\FeedPublisher + * @return \Entities\FeedPublisher */ public function getPublisher() { @@ -280,27 +280,38 @@ class FeedEntry public function setFeed(\Entities\Feed $feed = null) { $this->feed = $feed; - + return $this; } /** * Get feed * - * @return \Entities\Feed + * @return \Entities\Feed */ public function getFeed() { return $this->feed; } - + public function isPublisher(\User_Adapter $user) { if ($this->publisher) { if ($this->publisher->getUsrId() === $user->get_id()) return true; } - + return false; } + + public function getItem($id) + { + foreach ($this->items as $item) { + if ($item->getId() == $id) { + return ($item); + } + } + + return null; + } } \ No newline at end of file diff --git a/lib/Doctrine/Entities/FeedItem.php b/lib/Doctrine/Entities/FeedItem.php index 9c2682775f..1ec74e792d 100644 --- a/lib/Doctrine/Entities/FeedItem.php +++ b/lib/Doctrine/Entities/FeedItem.php @@ -42,7 +42,7 @@ class FeedItem /** * Get id * - * @return integer + * @return integer */ public function getId() { @@ -58,14 +58,14 @@ class FeedItem public function setRecordId($recordId) { $this->record_id = $recordId; - + return $this; } /** * Get record_id * - * @return integer + * @return integer */ public function getRecordId() { @@ -81,14 +81,14 @@ class FeedItem public function setSbasId($sbasId) { $this->sbas_id = $sbasId; - + return $this; } /** * Get sbas_id * - * @return integer + * @return integer */ public function getSbasId() { @@ -104,21 +104,21 @@ class FeedItem public function setEntry(\Entities\FeedEntry $entry = null) { $this->entry = $entry; - + return $this; } /** * Get entry * - * @return \Entities\FeedEntry + * @return \Entities\FeedEntry */ public function getEntry() { return $this->entry; } /** - * @var int + * @var integer */ private $ord; @@ -126,20 +126,20 @@ class FeedItem /** * Set ord * - * @param \int $ord + * @param integer $ord * @return FeedItem */ - public function setOrd(\int $ord) + public function setOrd($ord) { $this->ord = $ord; - + return $this; } /** * Get ord * - * @return \int + * @return integer */ public function getOrd() { @@ -155,14 +155,14 @@ class FeedItem public function setCreatedOn($createdOn) { $this->created_on = $createdOn; - + return $this; } /** * Get created_on * - * @return \DateTime + * @return \DateTime */ public function getCreatedOn() { @@ -178,17 +178,22 @@ class FeedItem public function setUpdatedOn($updatedOn) { $this->updated_on = $updatedOn; - + return $this; } /** * Get updated_on * - * @return \DateTime + * @return \DateTime */ public function getUpdatedOn() { return $this->updated_on; } + + public function setLastInFeedItem() + { + $this->setOrd($this->getEntry()->getItems()->count() + 1); + } } \ No newline at end of file diff --git a/lib/classes/eventsmanager/notify/feed.php b/lib/classes/eventsmanager/notify/feed.php index 7d4eb3ee44..55783d5bb8 100644 --- a/lib/classes/eventsmanager/notify/feed.php +++ b/lib/classes/eventsmanager/notify/feed.php @@ -45,7 +45,7 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract public function fire($event, $params, &$entry) { $params = array( - 'entry_id' => $entry->get_id() + 'entry_id' => $entry->getId() ); $dom_xml = new DOMDocument('1.0', 'UTF-8'); @@ -72,13 +72,18 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract ->include_templates(false) ->email_not_null(true); - if ($entry->get_feed()->get_collection()) { - $Query->on_base_ids(array($entry->get_feed()->get_collection()->get_base_id())); + if ($entry->getFeed()->getCollection($this->app)) { + $Query->on_base_ids(array($entry->getFeed()->getCollection($this->app)->get_base_id())); } $start = 0; $perLoop = 100; + $from = array( + 'email' => $entry->getAuthorEmail(), + 'name' => $entry->getAuthorName() + ); + do { $results = $Query->limit($start, $perLoop)->execute()->get_results(); @@ -93,7 +98,7 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract \random::TYPE_FEED_ENTRY , $user_to_notif->get_id() , null - , $entry->get_id() + , $entry->getId() ); $url = $this->app->url('lightbox', array('LOG' => $token)); @@ -107,8 +112,8 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract if ($readyToSend) { $mail = MailInfoNewPublication::create($this->app, $receiver); $mail->setButtonUrl($url); - $mail->setAuthor($entry->get_author_name()); - $mail->setTitle($entry->get_title()); + $mail->setAuthor($entry->getAuthorName()); + $mail->setTitle($entry->getTitle()); $this->app['notification.deliverer']->deliver($mail); $mailed = true; @@ -116,6 +121,7 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract } $this->broker->notify($user_to_notif->get_id(), __CLASS__, $datas, $mailed); + } $start += $perLoop; } while (count($results) > 0); @@ -134,16 +140,20 @@ class eventsmanager_notify_feed extends eventsmanager_notifyAbstract $sx = simplexml_load_string($datas); try { - $entry = \Feed_Entry_Adapter::load_from_id($this->app, (int) $sx->entry_id); + $entry = $this->app['EM']->getRepository("Entities\FeedEntry")->find((int) $sx->entry_id); } catch (\Exception $e) { return array(); } + if (null === $entry) { + return array(); + } + $ret = array( 'text' => sprintf( _('%1$s has published %2$s') - , $entry->get_author_name() - , '' . $entry->get_title() . '' + , $entry->getAuthorName() + , '' . $entry->getTitle() . '' ) , 'class' => ($unread == 1 ? 'reload_baskets' : '') ); diff --git a/templates/web/lightbox/feed.html.twig b/templates/web/lightbox/feed.html.twig index b5ea76a30d..42afbaa452 100644 --- a/templates/web/lightbox/feed.html.twig +++ b/templates/web/lightbox/feed.html.twig @@ -27,8 +27,8 @@

{% if first_item %}{{first_item.get_ord()}}{% endif %}
-
- {% if first_item %}{{first_item.get_record().get_title|raw}}{% endif %} +
+ {% if first_item %}{{first_item.get_record().getTitle|raw}}{% endif %}
@@ -43,9 +43,9 @@