Rebased, fixed minor bugs

This commit is contained in:
Andrey
2013-06-13 18:01:11 +02:00
parent 84300f3c92
commit 289c0294b2
22 changed files with 72 additions and 584 deletions

View File

@@ -11,6 +11,7 @@
namespace Alchemy\Phrasea\Controller\Client;
use Alchemy\Phrasea\Feed\Aggregate;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Alchemy\Phrasea\Exception\SessionNotFound;
use Entities\UserQuery;
@@ -538,8 +539,10 @@ class Root implements ControllerProviderInterface
*/
private function getPublicationStartPage(Application $app)
{
$aggregate = Aggregate::createFromUser($app['EM'], $app['authentication']->getUser());
return $app['twig']->render('client/home_inter_pub_basket.html.twig', array(
'feeds' => $app['EM']->getRepository('Entities\Feed')->getAllforUser($app['authentication']->getUser()),
'feeds' => $aggregate,
'image_size' => (int) $app['authentication']->getUser()->getPrefs('images_size')
));
}

View File

@@ -187,7 +187,7 @@ class Feed implements ControllerProviderInterface
$controllers->post('/entry/{id}/delete/', function(Application $app, Request $request, $id) {
$datas = array('error' => true, 'message' => '');
$entry = $app['EM']->getRepository('Entities\FeedEntry')->find($id);
if (null === $entry) {

View File

@@ -80,24 +80,7 @@ class Aggregate implements FeedInterface
public function getEntries($offset_start = 0, $how_many = null)
{
$count = 0;
$added = 0;
$collection = array();
foreach ($this->feeds as $feed) {
foreach ($feed->getEntries() as $entry) {
if ($count >= $offset_start) {
$collection[] = $entry;
$added++;
}
$count++;
if (null !== $how_many && $added == $how_many) {
return $collection;
}
}
}
return $collection;
return $this->em->getRepository('Entities\FeedEntry')->findByFeeds($this->feeds, $offset_start, $how_many);
}
public function getSubtitle()
@@ -112,9 +95,7 @@ class Aggregate implements FeedInterface
public function getIconUrl()
{
$url = '/skins/icons/rss32.gif';
return $url;
return false;
}
public function getCreatedOn()

View File

@@ -1,108 +0,0 @@
<?php
namespace Alchemy\Phrasea\Feed;
use Alchemy\Phrasea\Exception\InvalidArgumentException;
use Alchemy\Phrasea\Feed\Aggregate;
use Entities\AggregateToken;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Routing\Generator\UrlGenerator;
class AggregateLinkGenerator
{
const FORMAT_ATOM = 'atom';
const FORMAT_RSS = 'rss';
private $em;
private $generator;
private $random;
public function __construct(UrlGenerator $generator, EntityManager $em, \random $random)
{
$this->generator = $generator;
$this->em = $em;
$this->random = $random;
}
public function generate(Aggregate $aggregate, \User_Adapter $user, $format, $page = null, $renew = false)
{
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', $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', $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'
);
break;
default:
throw new InvalidArgumentException(sprintf('Format %s is not recognized.', $format));
}
}
private function getAggregateToken(\User_Adapter $user, $renew = false)
{
$token = $this->em
->getRepository('Entities\AggregateToken')
->findByUser($user);
if (null === $token || true === $renew) {
if (null === $token) {
$token = new AggregateToken();
$token->setUsrId($user->get_id());
}
$token->setValue($this->random->generatePassword(12, \random::LETTERS_AND_NUMBERS));
$this->em->persist($token);
$this->em->flush();
}
return $token;
}
}

View File

@@ -1,68 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2013 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Feed;
class FeedLink implements FeedLinkInterface
{
/**
* @var string
*/
protected $mimetype;
/**
* @var string
*/
protected $title;
/**
* @var string
*/
protected $uri;
/**
* @param string $uri
* @param string $title
* @param string $mimetype
*
* @return FeedLink
*/
public function __construct($uri, $title, $mimetype)
{
$this->mimetype = $mimetype;
$this->uri = $uri;
$this->title = $title;
}
/**
* {@inheritdoc}
*/
public function getMimetype()
{
return $this->mimetype;
}
/**
* {@inheritdoc}
*/
public function getTitle()
{
return $this->title;
}
/**
* {@inheritdoc}
*/
public function getURI()
{
return $this->uri;
}
}

View File

@@ -1,116 +0,0 @@
<?php
namespace Alchemy\Phrasea\Feed;
use Alchemy\Phrasea\Exception\InvalidArgumentException;
use Doctrine\ORM\EntityManager;
use Entities\Feed;
use Entities\FeedToken;
use Symfony\Component\Routing\Generator\UrlGenerator;
class LinkGenerator
{
const FORMAT_ATOM = 'atom';
const FORMAT_RSS = 'rss';
private $em;
private $generator;
private $random;
public function __construct(UrlGenerator $generator, EntityManager $em, \random $random)
{
$this->generator = $generator;
$this->em = $em;
$this->random = $random;
}
public function generate(Feed $feed, \User_Adapter $user, $format, $page = null, $renew = false)
{
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', $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', $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'
);
break;
default:
throw new InvalidArgumentException(sprintf('Format %s is not recognized.', $format));
}
}
private function getFeedToken(Feed $feed, \User_Adapter $user, $renew = false)
{
$token = $this->em
->getRepository('Entities\FeedToken')
->findByFeedAndUser($feed, $user);
if (null === $token || true === $renew) {
if (null === $token) {
$token = new FeedToken();
$token->setFeed($feed);
$token->setUsrId($user->get_id());
$feed->addToken($token);
$this->em->persist($feed);
}
$token->setValue($this->random->generatePassword(12, \random::LETTERS_AND_NUMBERS));
$this->em->persist($token);
$this->em->flush();
}
return $token;
}
}

View File

@@ -1,30 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2013 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Feed;
interface FeedLinkInterface
{
/**
* @return string
*/
public function getMimetype();
/**
* @return string
*/
public function getTitle();
/**
* @return string
*/
public function getURI();
}

View File

@@ -32,7 +32,7 @@ class SessionRepository extends EntityRepository
}
$dql .= ' OR f.public = true
ORDER BY f.created_on DESC';
ORDER BY f.updated_on DESC';
$query = $this->_em->createQuery($dql);
$feeds = $query->getResult();
@@ -44,7 +44,7 @@ class SessionRepository extends EntityRepository
{
$dql = 'SELECT f FROM Entities\Feed f
WHERE f.public = true
ORDER BY f.created_on DESC';
ORDER BY f.updated_on DESC';
$query = $this->_em->createQuery($dql);
$feeds = $query->getResult();

View File

@@ -38,7 +38,7 @@ class UserSettingRepository extends EntityRepository
public function findByFeeds($feeds, $offset_start = null, $how_many = null)
{
$dql = 'SELECT f FROM Entities\FeedEntry f
WHERE f.feed IN (:feeds)';
WHERE f.feed IN (:feeds) order by f.updated_on DESC';
$query = $this->_em->createQuery($dql);
$query->setParameter('feeds', $feeds);

View File

@@ -185,19 +185,19 @@ class record_preview extends record_adapter
foreach ($entry->getItems() as $element) {
$i ++;
if ($first) {
$sbas_id = $element->getRecord()->get_sbas_id();
$record_id = $element->getRecord()->get_record_id();
$this->original_item = $element;
$sbas_id = $element->getRecord($this->app)->get_sbas_id();
$record_id = $element->getRecord($this->app)->get_record_id();
$this->name = $entry->getTitle();
$this->original_item = $element;
$number = $element->getOrd();
}
$first = false;
if ($element->getOrd() == $pos) {
$sbas_id = $element->getRecord()->get_sbas_id();
$record_id = $element->getRecord()->get_record_id();
$this->original_item = $element;
$sbas_id = $element->getRecord($this->app)->get_sbas_id();
$record_id = $element->getRecord($this->app)->get_record_id();
$this->name = $entry->getTitle();
$this->original_item = $element;
$number = $element->getOrd();
}
}

View File

@@ -29,7 +29,7 @@
{% for item in feed_entry.getItems() %}
<li class="image_box" id="item_{{item.getId()}}">
<a href="{{ path('lightbox_ajax_load_feeditem', { 'entry_id' : feed_entry.getId(), 'item_id' : item.getId()}) }}">
{{thumbnail.format(item.getRecord().get_thumbnail(), 80, 80, '', true, false)}}
{{thumbnail.format(item.getRecord(app).get_thumbnail(), 80, 80, '', true, false)}}
</a>
<input type="hidden" class="display_id" name="display_id" value="{{item.getOrd()}}" />
</li>

View File

@@ -15,7 +15,7 @@
<div data-role="page">
<div data-role="header">
<a href="{{ path('lightbox_feed_entry', { 'entry_id' : feed_element.getEntry().getId() }) }}" data-rel="back" data-icon="arrow-l">Back</a>
<h1>{{feed_element.getOrd()}} - {{record.getTitle()}}</h1>
<h1>{{feed_element.getOrd()}} - {{record.get_title()}}</h1>
<a rel="external" href="{{ path('lightbox') }}" data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
</div>
<div data-role="content">

View File

@@ -39,7 +39,7 @@
</div>
<div style="width:100%;position:relative;float:left;" id="PUBLICONT{{ entry.getId() }}">
{% for item in entry.getItems() %}
{% set record = item.getRecord() %}
{% set record = item.getRecord(app) %}
{% set thumbnail = record.get_thumbnail() %}
{% set docType = record.get_type() %}
{% set duration = "" %}

View File

@@ -10,7 +10,7 @@
<form name="download_form" class="download_form" style="display:none;">
<input type="hidden" name="basrec" value="{{element.getRecord(app).get_serialize_key()}}"/>
</form>
<div tooltipsrc="{{ path('prod_tooltip_preview', { 'sbas_id' : element.getRecord().get_sbas_id(), 'record_id' : element.getRecord().get_record_id() }) }}" class="previewTips"></div>
<div tooltipsrc="{{ path('prod_tooltip_preview', { 'sbas_id' : element.getRecord(app).get_sbas_id(), 'record_id' : element.getRecord(app).get_record_id() }) }}" class="previewTips"></div>
</div>
</a>
</div>

View File

@@ -10,7 +10,7 @@
<form name="download_form" class="download_form" style="display:none;">
<input type="hidden" name="basrec" value="{{element.getRecord(app).get_serialize_key()}}"/>
</form>
<div tooltipsrc="{{ path('prod_tooltip_preview', { 'sbas_id' : element.getRecord().get_sbas_id(), 'record_id' : element.getRecord().get_record_id() }) }}" class="previewTips"></div>
<div tooltipsrc="{{ path('prod_tooltip_preview', { 'sbas_id' : element.getRecord(app).get_sbas_id(), 'record_id' : element.getRecord(app).get_record_id() }) }}" class="previewTips"></div>
</div>
</a>
</div>

View File

@@ -18,7 +18,7 @@
<div class="PNB10 record_list" style="overflow:auto;">
{% for content in entry.getItems() %}
<div class="sortable" style="position:relative;float:left;">
{{ _self.format_diapo(content.getRecord()) }}
{{ _self.format_diapo(content.getRecord(app)) }}
<form>
<input type="hidden" name="item_id" value="{{content.getId()}}" />
</form>

View File

@@ -7,7 +7,11 @@
<td>
<h1 class="title">
{% if feed.isAggregated() %}
<img style="height:16px;" src="{{ entry.getFeed().getIconUrl() }}" />
<img style="height:16px;" src="{% if entry.getFeed().getIconUrl() == false %}
/skins/icons/rss32.gif
{% else %}
/custom/feed_{{ entry.getFeed().getId() }}.jpg
{% endif %}"/>
{% endif %}
{{ entry.getTitle() }}
{% set author = entry.getAuthorName() %}
@@ -47,14 +51,18 @@
{% trans %}
dans {{feed_name}}
{% endtrans %}
<img style="height:16px;" src="{{ entry.getFeed().getIconUrl() }}" />
<img style="height:16px;" src="{% if entry.getFeed().getIconUrl() == false %}
/skins/icons/rss32.gif
{% else %}
/custom/feed_{{ entry.getFeed().getId() }}.jpg
{% endif %}"/>
</a>
{% endif %}
</div>
<p>{{ entry.getSubtitle()|nl2br|raw }}</p>
<div class="contents selectable">
{% for item in entry.getItems() %}
{% set record = item.getRecord() %}
{% set record = item.getRecord(app) %}
{% set prefix = 'PUBLI_' ~ item.getId() %}
{{record_format.block(record, false, null, prefix, entry.getId())}}
{% endfor %}

View File

@@ -6,7 +6,11 @@
<tr>
<td style="width:600px;">
<h1>
<img src="{{feed.getIconUrl()}}" style="height:32px;"/>
<img src="{% if feed.getIconUrl() == false %}
/skins/icons/rss32.gif
{% else %}
/custom/feed_{{ feed.getId() }}.jpg
{% endif %}" style="height:32px;"/>
{% if feed.isAggregated %}
{% trans 'Toutes les publications' %}
<a class="feed_reload ajax_answers no_scroll" href="{{ path('prod_feeds') }}" >
@@ -36,7 +40,11 @@
{% for aval_feed in feeds %}
<li>
<a class="ajax_answers" href="{{ path('prod_feeds_feed', { 'id' : aval_feed.getId() }) }}">
<img src="{{aval_feed.getIconUrl()}}" style="height:16px;"/> {{ aval_feed.getTitle() }}
<img src="{% if aval_feed.getIconUrl() == false %}
/skins/icons/rss32.gif
{% else %}
/custom/feed_{{ aval_feed.getId() }}.jpg
{% endif %}" style="height:16px;"/> {{ aval_feed.getTitle() }}
</a>
</li>
{% endfor %}

View File

@@ -1,8 +1,8 @@
<div id="PREVIEWCURRENTCONT" class="PNB10">
<ul>
{% for child in record.get_container().get_content() %}
{% for child in record.get_container() %}
{% set thumbnail = child.get_record().get_thumbnail() %}
{% set thumbnail = child.getRecord(app).get_thumbnail() %}
{% if thumbnail.is_paysage() %}
{% set style = 'width:65px;top:' %}
{% set top = ((66 - (65 / (thumbnail.get_width() / thumbnail.get_height()))) / 2)|round %}
@@ -14,16 +14,16 @@
{% set tooltip = '' %}
{% if app['phraseanet.registry'].get('GV_rollover_reg_preview') %}
{% set tooltip = 'tooltipsrc="' ~ path('prod_tooltip_preview', { 'sbas_id' : child.get_record().get_sbas_id(), 'record_id' : child.get_record().get_record_id() }) ~ '"' %}
{% set tooltip = 'tooltipsrc="' ~ path('prod_tooltip_preview', { 'sbas_id' : child.getRecord(app).get_sbas_id(), 'record_id' : child.get_record().get_record_id() }) ~ '"' %}
{% endif %}
{% set class = '' %}
{% if record.get_number() == child.get_ord() %}
{% if record.get_number() == child.getOrd() %}
{% set class = ' selected' %}
{% endif %}
<li class="{{class}} prevTrainCurrent">
<img {{tooltip|raw}} jsargs="FEED|{{child.get_ord()}}|{{record.get_container().get_id()}}"
<img {{tooltip|raw}} jsargs="FEED|{{child.get_ord()}}|{{record.get_container().getId()}}"
class="openPreview prevRegToolTip" return(false);" src="{{thumbnail.get_url()}}"
style="{{style}}margin:7px;position:relative;"/></li>
{% endfor %}

View File

@@ -9,19 +9,19 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
{
public function testDatafilesRouteAuthenticated()
{
$crawler = self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/preview/');
$crawler = self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/preview/');
$response = self::$DI['client']->getResponse();
$this->assertEquals(200, $response->getStatusCode());
$content_disposition = explode(';', $response->headers->get('content-disposition'));
$this->assertEquals('inline', $content_disposition[0]);
$this->assertEquals(self::$DI['record_1']->get_preview()->get_mime(), $response->headers->get('content-type'));
$this->assertEquals(self::$DI['record_1']->get_preview()->get_size(), $response->headers->get('content-length'));
$this->assertEquals(self::$DI['record_24']->get_preview()->get_mime(), $response->headers->get('content-type'));
$this->assertEquals(self::$DI['record_24']->get_preview()->get_size(), $response->headers->get('content-length'));
}
public function testDatafilesNonExistentSubdef()
{
self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/asubdefthatdoesnotexists/');
self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/asubdefthatdoesnotexists/');
$this->assertNotFoundResponse(self::$DI['client']->getResponse());
}
@@ -56,7 +56,7 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
public function testDatafilesRouteNotAuthenticated()
{
self::$DI['app']['authentication']->closeAccount();
self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/preview/');
self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/preview/');
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
}
@@ -64,7 +64,7 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
public function testDatafilesRouteNotAuthenticatedUnknownSubdef()
{
self::$DI['app']['authentication']->closeAccount();
self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/notfoundreview/');
self::$DI['client']->request('GET', '/datafiles/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/notfoundreview/');
$this->assertForbiddenResponse(self::$DI['client']->getResponse());
}
@@ -105,7 +105,7 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
{
$this->assertTrue(self::$DI['app']['authentication']->isAuthenticated());
$token = "unexisting_token";
$url = '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . "/" . self::$DI['record_1']->get_record_id() . '/caption/?token='.$token;
$url = '/permalink/v1/' . self::$DI['record_24']->get_sbas_id() . "/" . self::$DI['record_24']->get_record_id() . '/caption/?token='.$token;
$crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse();
@@ -158,8 +158,8 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
protected function get_a_caption(array $headers = array())
{
$token = self::$DI['record_1']->get_thumbnail()->get_permalink()->get_token();
$url = '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . "/" . self::$DI['record_1']->get_record_id() . '/caption/?token='.$token;
$token = self::$DI['record_24']->get_thumbnail()->get_permalink()->get_token();
$url = '/permalink/v1/' . self::$DI['record_24']->get_sbas_id() . "/" . self::$DI['record_24']->get_record_id() . '/caption/?token='.$token;
$crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse();
@@ -168,15 +168,15 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
$this->assertEquals($value, $response->headers->get($name));
}
$caption = self::$DI['record_1']->get_caption()->serialize(\caption_record::SERIALIZE_JSON);
$caption = self::$DI['record_24']->get_caption()->serialize(\caption_record::SERIALIZE_JSON);
$this->assertEquals($caption, $response->getContent());
$this->assertEquals(200, $response->getStatusCode());
}
protected function get_a_permalinkBCcompatibility(array $headers = array())
{
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/whateverIwannt/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/' . $token . '/preview/';
$token = self::$DI['record_24']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/whateverIwannt/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/' . $token . '/preview/';
$crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse();
@@ -191,8 +191,8 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
protected function get_a_permaviewBCcompatibility(array $headers = array())
{
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/whateverIwannt/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/' . $token . '/preview/';
$token = self::$DI['record_24']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/whateverIwannt/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/' . $token . '/preview/';
$url = $url . 'view/';
$crawler = self::$DI['client']->request('GET', $url);
@@ -207,8 +207,8 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
protected function get_a_permalink(array $headers = array())
{
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/preview/whateverIwannt.jpg?token=' . $token . '';
$token = self::$DI['record_24']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/preview/whateverIwannt.jpg?token=' . $token . '';
$crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse();
@@ -217,14 +217,18 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
$this->assertEquals($value, $response->headers->get($name));
}
<<<<<<< HEAD
$this->assertEquals(rtrim(self::$DI['app']['phraseanet.configuration']['main']['servername'], '/') . "/permalink/v1/1/". self::$DI['record_1']->get_record_id()."/caption/?token=".$token, $response->headers->get("Link"));
=======
$this->assertEquals($response->headers->get("Link"), "/permalink/v1/1/". self::$DI['record_24']->get_record_id()."/caption/?token=".$token);
>>>>>>> Rebased, fixed minor bugs
$this->assertEquals(200, $response->getStatusCode());
}
protected function get_a_permaview(array $headers = array())
{
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/preview/?token=' . $token . '';
$token = self::$DI['record_24']->get_preview()->get_permalink()->get_token();
$url = '/permalink/v1/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/preview/?token=' . $token . '';
$crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse();

View File

@@ -13,12 +13,12 @@ class FeedServiceProviderTest extends ServiceProviderTestCase
array(
'Alchemy\Phrasea\Core\Provider\FeedServiceProvider',
'feed.user-link-generator',
'Alchemy\Phrasea\Feed\LinkGenerator'
'Alchemy\Phrasea\Feed\Link\FeedLinkGenerator'
),
array(
'Alchemy\Phrasea\Core\Provider\FeedServiceProvider',
'feed.aggregate-link-generator',
'Alchemy\Phrasea\Feed\AggregateLinkGenerator'
'Alchemy\Phrasea\Feed\Link\AggregateLinkGenerator'
),
);
}

View File

@@ -1,194 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\Feed;
use Alchemy\Phrasea\Feed\LinkGenerator;
use Symfony\Component\Routing\Generator\UrlGenerator;
class LinkGeneratorTest extends \PhraseanetPHPUnitAbstract
{
/**
* @dataProvider provideGenerationData
*/
public function testGenerate($expected, $format, $feed, $user, $page, $renew, $alreadyCreated)
{
self::$DI['app']['EM']->persist($feed);
self::$DI['app']['EM']->flush();
$generator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGenerator')
->disableOriginalConstructor()
->getMock();
if ($alreadyCreated) {
$token = $this->insertOneFeedToken($feed, $user);
$tokenValue = $token->getValue();
}
$capture = null;
$generator->expects($this->once())
->method('generate')
->with('feed_user', $this->isType('array'), UrlGenerator::ABSOLUTE_URL)
->will($this->returnCallback(function ($name, $data, $option) use (&$capture, $expected) {
$capture = $data;
return $expected;
}));
$random = self::$DI['app']['tokens'];
$linkGenerator = new LinkGenerator($generator, self::$DI['app']['EM'], $random);
$link = $linkGenerator->generate($feed, $user, $format, $page, $renew);
$this->assertSame($expected, $link->getUri());
if ($format == "atom") {
$this->assertSame("application/atom+xml", $link->getMimetype());
$this->assertSame("Title - Atom", $link->getTitle());
}
elseif ($format == "rss") {
$this->assertSame("application/rss+xml", $link->getMimetype());
$this->assertSame("Title - RSS", $link->getTitle());
}
if ($alreadyCreated) {
if ($renew) {
$this->assertEquals($feed->getId(), $capture['id']);
$this->assertEquals($format, $capture['format']);
$this->assertNotEquals($tokenValue, $capture['token']);
if (null !== $page) {
$this->assertEquals($page, $capture['page']);
}
$this->assertCount(0, self::$DI['app']['EM']
->getRepository("Entities\FeedToken")
->findBy(array('value' => $tokenValue)));
$this->assertCount(1, self::$DI['app']['EM']
->getRepository("Entities\FeedToken")
->findBy(array('value' => $capture['token'])));
} else {
$expectedParams = array(
'token' => $tokenValue,
'id' => $feed->getId(),
'format' => $format,
);
if ($page !== null) {
$expectedParams['page'] = $page;
}
$this->assertEquals($expectedParams, $capture);
$this->assertCount(1, self::$DI['app']['EM']
->getRepository("Entities\FeedToken")
->findBy(array('value' => $tokenValue)));
}
} else {
if (null !== $page) {
$this->assertEquals($page, $capture['page']);
}
$this->assertEquals($feed->getId(), $capture['id']);
$this->assertEquals($format, $capture['format']);
$this->assertEquals(12, strlen($capture['token']));
$this->assertCount(1, self::$DI['app']['EM']
->getRepository("Entities\FeedToken")
->findBy(array('value' => $capture['token'])));
}
$token = self::$DI['app']['EM']
->getRepository('Entities\FeedToken')
->findByFeedAndUser($feed, $user);
self::$DI['app']['EM']->remove($token);
self::$DI['app']['EM']->flush();
}
/**
* @dataProvider provideGenerationDataPublic
*/
public function testGeneratePublic($expected, $format, $feed, $page)
{
self::$DI['app']['EM']->persist($feed);
self::$DI['app']['EM']->flush();
$generator = $this->getMockBuilder('Symfony\Component\Routing\Generator\UrlGenerator')
->disableOriginalConstructor()
->getMock();
$capture = null;
$generator->expects($this->once())
->method('generate')
->with('feed_public', $this->isType('array'), UrlGenerator::ABSOLUTE_URL)
->will($this->returnCallback(function ($name, $data, $option) use (&$capture, $expected) {
$capture = $data;
return $expected;
}));
$random = self::$DI['app']['tokens'];
$linkGenerator = new LinkGenerator($generator, self::$DI['app']['EM'], $random);
$link = $linkGenerator->generatePublic($feed, $format, $page);
$this->assertSame($expected, $link->getUri());
if ($format == "atom") {
$this->assertSame("application/atom+xml", $link->getMimetype());
$this->assertSame("Title - Atom", $link->getTitle());
}
elseif ($format == "rss") {
$this->assertSame("application/rss+xml", $link->getMimetype());
$this->assertSame("Title - RSS", $link->getTitle());
}
if (null !== $page) {
$this->assertEquals($page, $capture['page']);
}
$this->assertEquals($feed->getId(), $capture['id']);
$this->assertEquals($format, $capture['format']);
}
public function provideGenerationData()
{
$user = $this->getMockBuilder('User_Adapter')
->disableOriginalConstructor()
->getMock();
$user->expects($this->any())
->method('get_id')
->will($this->returnValue(42));
$feed = new \Entities\Feed();
$feed->setTitle('Title');
return array(
array('doliprane', 'atom', $feed, $user, null, false, false),
array('doliprane', 'atom', $feed, $user, null, false, true),
array('doliprane', 'atom', $feed, $user, null, true, false),
array('doliprane', 'atom', $feed, $user, null, true, true),
array('doliprane', 'atom', $feed, $user, 1, false, false),
array('doliprane', 'atom', $feed, $user, 1, false, true),
array('doliprane', 'atom', $feed, $user, 1, true, false),
array('doliprane', 'atom', $feed, $user, 1, true, true),
array('doliprane', 'rss', $feed, $user, null, false, false),
array('doliprane', 'rss', $feed, $user, null, false, true),
array('doliprane', 'rss', $feed, $user, null, true, false),
array('doliprane', 'rss', $feed, $user, null, true, true),
array('doliprane', 'rss', $feed, $user, 1, false, false),
array('doliprane', 'rss', $feed, $user, 1, false, true),
array('doliprane', 'rss', $feed, $user, 1, true, false),
array('doliprane', 'rss', $feed, $user, 1, true, true),
);
}
public function provideGenerationDataPublic()
{
$feed = new \Entities\Feed();
$feed->setTitle('Title');
return array(
array('doliprane', 'atom', $feed, null),
array('doliprane', 'atom', $feed, 1),
array('doliprane', 'rss', $feed, null),
array('doliprane', 'rss', $feed, 1)
);
}
}