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; namespace Alchemy\Phrasea\Controller\Client;
use Alchemy\Phrasea\Feed\Aggregate;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Alchemy\Phrasea\Exception\SessionNotFound; use Alchemy\Phrasea\Exception\SessionNotFound;
use Entities\UserQuery; use Entities\UserQuery;
@@ -538,8 +539,10 @@ class Root implements ControllerProviderInterface
*/ */
private function getPublicationStartPage(Application $app) 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( 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') '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) { $controllers->post('/entry/{id}/delete/', function(Application $app, Request $request, $id) {
$datas = array('error' => true, 'message' => ''); $datas = array('error' => true, 'message' => '');
$entry = $app['EM']->getRepository('Entities\FeedEntry')->find($id); $entry = $app['EM']->getRepository('Entities\FeedEntry')->find($id);
if (null === $entry) { if (null === $entry) {

View File

@@ -80,24 +80,7 @@ class Aggregate implements FeedInterface
public function getEntries($offset_start = 0, $how_many = null) public function getEntries($offset_start = 0, $how_many = null)
{ {
$count = 0; return $this->em->getRepository('Entities\FeedEntry')->findByFeeds($this->feeds, $offset_start, $how_many);
$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;
} }
public function getSubtitle() public function getSubtitle()
@@ -112,9 +95,7 @@ class Aggregate implements FeedInterface
public function getIconUrl() public function getIconUrl()
{ {
$url = '/skins/icons/rss32.gif'; return false;
return $url;
} }
public function getCreatedOn() 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 $dql .= ' OR f.public = true
ORDER BY f.created_on DESC'; ORDER BY f.updated_on DESC';
$query = $this->_em->createQuery($dql); $query = $this->_em->createQuery($dql);
$feeds = $query->getResult(); $feeds = $query->getResult();
@@ -44,7 +44,7 @@ class SessionRepository extends EntityRepository
{ {
$dql = 'SELECT f FROM Entities\Feed f $dql = 'SELECT f FROM Entities\Feed f
WHERE f.public = true WHERE f.public = true
ORDER BY f.created_on DESC'; ORDER BY f.updated_on DESC';
$query = $this->_em->createQuery($dql); $query = $this->_em->createQuery($dql);
$feeds = $query->getResult(); $feeds = $query->getResult();

View File

@@ -38,7 +38,7 @@ class UserSettingRepository extends EntityRepository
public function findByFeeds($feeds, $offset_start = null, $how_many = null) public function findByFeeds($feeds, $offset_start = null, $how_many = null)
{ {
$dql = 'SELECT f FROM Entities\FeedEntry f $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 = $this->_em->createQuery($dql);
$query->setParameter('feeds', $feeds); $query->setParameter('feeds', $feeds);

View File

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

View File

@@ -29,7 +29,7 @@
{% for item in feed_entry.getItems() %} {% for item in feed_entry.getItems() %}
<li class="image_box" id="item_{{item.getId()}}"> <li class="image_box" id="item_{{item.getId()}}">
<a href="{{ path('lightbox_ajax_load_feeditem', { 'entry_id' : feed_entry.getId(), 'item_id' : 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> </a>
<input type="hidden" class="display_id" name="display_id" value="{{item.getOrd()}}" /> <input type="hidden" class="display_id" name="display_id" value="{{item.getOrd()}}" />
</li> </li>

View File

@@ -15,7 +15,7 @@
<div data-role="page"> <div data-role="page">
<div data-role="header"> <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> <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> <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>
<div data-role="content"> <div data-role="content">

View File

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

View File

@@ -10,7 +10,7 @@
<form name="download_form" class="download_form" style="display:none;"> <form name="download_form" class="download_form" style="display:none;">
<input type="hidden" name="basrec" value="{{element.getRecord(app).get_serialize_key()}}"/> <input type="hidden" name="basrec" value="{{element.getRecord(app).get_serialize_key()}}"/>
</form> </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> </div>
</a> </a>
</div> </div>

View File

@@ -10,7 +10,7 @@
<form name="download_form" class="download_form" style="display:none;"> <form name="download_form" class="download_form" style="display:none;">
<input type="hidden" name="basrec" value="{{element.getRecord(app).get_serialize_key()}}"/> <input type="hidden" name="basrec" value="{{element.getRecord(app).get_serialize_key()}}"/>
</form> </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> </div>
</a> </a>
</div> </div>

View File

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

View File

@@ -7,7 +7,11 @@
<td> <td>
<h1 class="title"> <h1 class="title">
{% if feed.isAggregated() %} {% 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 %} {% endif %}
{{ entry.getTitle() }} {{ entry.getTitle() }}
{% set author = entry.getAuthorName() %} {% set author = entry.getAuthorName() %}
@@ -47,14 +51,18 @@
{% trans %} {% trans %}
dans {{feed_name}} dans {{feed_name}}
{% endtrans %} {% 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> </a>
{% endif %} {% endif %}
</div> </div>
<p>{{ entry.getSubtitle()|nl2br|raw }}</p> <p>{{ entry.getSubtitle()|nl2br|raw }}</p>
<div class="contents selectable"> <div class="contents selectable">
{% for item in entry.getItems() %} {% for item in entry.getItems() %}
{% set record = item.getRecord() %} {% set record = item.getRecord(app) %}
{% set prefix = 'PUBLI_' ~ item.getId() %} {% set prefix = 'PUBLI_' ~ item.getId() %}
{{record_format.block(record, false, null, prefix, entry.getId())}} {{record_format.block(record, false, null, prefix, entry.getId())}}
{% endfor %} {% endfor %}

View File

@@ -6,7 +6,11 @@
<tr> <tr>
<td style="width:600px;"> <td style="width:600px;">
<h1> <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 %} {% if feed.isAggregated %}
{% trans 'Toutes les publications' %} {% trans 'Toutes les publications' %}
<a class="feed_reload ajax_answers no_scroll" href="{{ path('prod_feeds') }}" > <a class="feed_reload ajax_answers no_scroll" href="{{ path('prod_feeds') }}" >
@@ -36,7 +40,11 @@
{% for aval_feed in feeds %} {% for aval_feed in feeds %}
<li> <li>
<a class="ajax_answers" href="{{ path('prod_feeds_feed', { 'id' : aval_feed.getId() }) }}"> <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> </a>
</li> </li>
{% endfor %} {% endfor %}

View File

@@ -1,8 +1,8 @@
<div id="PREVIEWCURRENTCONT" class="PNB10"> <div id="PREVIEWCURRENTCONT" class="PNB10">
<ul> <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() %} {% if thumbnail.is_paysage() %}
{% set style = 'width:65px;top:' %} {% set style = 'width:65px;top:' %}
{% set top = ((66 - (65 / (thumbnail.get_width() / thumbnail.get_height()))) / 2)|round %} {% set top = ((66 - (65 / (thumbnail.get_width() / thumbnail.get_height()))) / 2)|round %}
@@ -14,16 +14,16 @@
{% set tooltip = '' %} {% set tooltip = '' %}
{% if app['phraseanet.registry'].get('GV_rollover_reg_preview') %} {% 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 %} {% endif %}
{% set class = '' %} {% set class = '' %}
{% if record.get_number() == child.get_ord() %} {% if record.get_number() == child.getOrd() %}
{% set class = ' selected' %} {% set class = ' selected' %}
{% endif %} {% endif %}
<li class="{{class}} prevTrainCurrent"> <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()}}" class="openPreview prevRegToolTip" return(false);" src="{{thumbnail.get_url()}}"
style="{{style}}margin:7px;position:relative;"/></li> style="{{style}}margin:7px;position:relative;"/></li>
{% endfor %} {% endfor %}

View File

@@ -9,19 +9,19 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
{ {
public function testDatafilesRouteAuthenticated() 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(); $response = self::$DI['client']->getResponse();
$this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(200, $response->getStatusCode());
$content_disposition = explode(';', $response->headers->get('content-disposition')); $content_disposition = explode(';', $response->headers->get('content-disposition'));
$this->assertEquals('inline', $content_disposition[0]); $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_24']->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_size(), $response->headers->get('content-length'));
} }
public function testDatafilesNonExistentSubdef() 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()); $this->assertNotFoundResponse(self::$DI['client']->getResponse());
} }
@@ -56,7 +56,7 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
public function testDatafilesRouteNotAuthenticated() public function testDatafilesRouteNotAuthenticated()
{ {
self::$DI['app']['authentication']->closeAccount(); 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()); $this->assertForbiddenResponse(self::$DI['client']->getResponse());
} }
@@ -64,7 +64,7 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
public function testDatafilesRouteNotAuthenticatedUnknownSubdef() public function testDatafilesRouteNotAuthenticatedUnknownSubdef()
{ {
self::$DI['app']['authentication']->closeAccount(); 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()); $this->assertForbiddenResponse(self::$DI['client']->getResponse());
} }
@@ -105,7 +105,7 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
{ {
$this->assertTrue(self::$DI['app']['authentication']->isAuthenticated()); $this->assertTrue(self::$DI['app']['authentication']->isAuthenticated());
$token = "unexisting_token"; $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); $crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse(); $response = self::$DI['client']->getResponse();
@@ -158,8 +158,8 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
protected function get_a_caption(array $headers = array()) protected function get_a_caption(array $headers = array())
{ {
$token = self::$DI['record_1']->get_thumbnail()->get_permalink()->get_token(); $token = self::$DI['record_24']->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; $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); $crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse(); $response = self::$DI['client']->getResponse();
@@ -168,15 +168,15 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
$this->assertEquals($value, $response->headers->get($name)); $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($caption, $response->getContent());
$this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(200, $response->getStatusCode());
} }
protected function get_a_permalinkBCcompatibility(array $headers = array()) protected function get_a_permalinkBCcompatibility(array $headers = array())
{ {
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token(); $token = self::$DI['record_24']->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/'; $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); $crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse(); $response = self::$DI['client']->getResponse();
@@ -191,8 +191,8 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
protected function get_a_permaviewBCcompatibility(array $headers = array()) protected function get_a_permaviewBCcompatibility(array $headers = array())
{ {
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token(); $token = self::$DI['record_24']->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/'; $url = '/permalink/v1/whateverIwannt/' . self::$DI['record_24']->get_sbas_id() . '/' . self::$DI['record_24']->get_record_id() . '/' . $token . '/preview/';
$url = $url . 'view/'; $url = $url . 'view/';
$crawler = self::$DI['client']->request('GET', $url); $crawler = self::$DI['client']->request('GET', $url);
@@ -207,8 +207,8 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
protected function get_a_permalink(array $headers = array()) protected function get_a_permalink(array $headers = array())
{ {
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token(); $token = self::$DI['record_24']->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 . ''; $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); $crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse(); $response = self::$DI['client']->getResponse();
@@ -217,14 +217,18 @@ class ApplicationOverviewTest extends \PhraseanetWebTestCaseAuthenticatedAbstrac
$this->assertEquals($value, $response->headers->get($name)); $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(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()); $this->assertEquals(200, $response->getStatusCode());
} }
protected function get_a_permaview(array $headers = array()) protected function get_a_permaview(array $headers = array())
{ {
$token = self::$DI['record_1']->get_preview()->get_permalink()->get_token(); $token = self::$DI['record_24']->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 . ''; $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); $crawler = self::$DI['client']->request('GET', $url);
$response = self::$DI['client']->getResponse(); $response = self::$DI['client']->getResponse();

View File

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