Merge pull request #1289 from nlegoff/more-fix-39

[3.9] More tests fix
This commit is contained in:
Nicolas Le Goff
2015-03-12 13:28:23 +01:00
12 changed files with 35 additions and 801 deletions

View File

@@ -27,7 +27,6 @@ use Alchemy\Phrasea\Controller\Admin\SearchEngine;
use Alchemy\Phrasea\Controller\Admin\Subdefs; use Alchemy\Phrasea\Controller\Admin\Subdefs;
use Alchemy\Phrasea\Controller\Admin\TaskManager; use Alchemy\Phrasea\Controller\Admin\TaskManager;
use Alchemy\Phrasea\Controller\Admin\Users; use Alchemy\Phrasea\Controller\Admin\Users;
use Alchemy\Phrasea\Controller\Client\Baskets as ClientBasket;
use Alchemy\Phrasea\Controller\Client\Root as ClientRoot; use Alchemy\Phrasea\Controller\Client\Root as ClientRoot;
use Alchemy\Phrasea\Controller\Minifier; use Alchemy\Phrasea\Controller\Minifier;
use Alchemy\Phrasea\Controller\Prod\BasketController; use Alchemy\Phrasea\Controller\Prod\BasketController;
@@ -635,7 +634,6 @@ class Application extends SilexApplication
$this->mount('/admin/subdefs', new Subdefs()); $this->mount('/admin/subdefs', new Subdefs());
$this->mount('/client/', new ClientRoot()); $this->mount('/client/', new ClientRoot());
$this->mount('/client/baskets', new ClientBasket());
$this->mount('/prod/query/', new Query()); $this->mount('/prod/query/', new Query());
$this->mount('/prod/order/', new Order()); $this->mount('/prod/order/', new Order());

View File

@@ -108,6 +108,7 @@ class RegenerateSqliteDb extends Command
$this->insertWebhookEventDelivery($em, $DI); $this->insertWebhookEventDelivery($em, $DI);
$em->flush(); $em->flush();
$this->container['elasticsearch.indexer']->flushQueue();
$fixtures['basket']['basket_1'] = $DI['basket_1']->getId(); $fixtures['basket']['basket_1'] = $DI['basket_1']->getId();
$fixtures['basket']['basket_2'] = $DI['basket_2']->getId(); $fixtures['basket']['basket_2'] = $DI['basket_2']->getId();

View File

@@ -688,8 +688,13 @@ class V1 implements ControllerProviderInterface
$ret['results'] = ['records' => [], 'stories' => []]; $ret['results'] = ['records' => [], 'stories' => []];
foreach ($search_result->getResults() as $record) { foreach ($search_result->getResults() as $es_record) {
$record = new \record_adapter($app, $record->getDataboxId(), $record->getBaseId()); try {
$record = new \record_adapter($app, $es_record->getDataboxId(), $es_record->getRecordId());
} catch (\Exception $e) {
}
if ($record->is_grouping()) { if ($record->is_grouping()) {
$ret['results']['stories'][] = $this->list_story($app, $request, $record); $ret['results']['stories'][] = $this->list_story($app, $request, $record);
@@ -714,7 +719,13 @@ class V1 implements ControllerProviderInterface
{ {
list($ret, $search_result) = $this->prepare_search_request($app, $request); list($ret, $search_result) = $this->prepare_search_request($app, $request);
foreach ($search_result->getResults() as $record) { foreach ($search_result->getResults() as $es_record) {
try {
$record = new \record_adapter($app, $es_record->getDataboxId(), $es_record->getRecordId());
} catch (\Exception $e) {
}
$ret['results'][] = $this->list_record($app, $record); $ret['results'][] = $this->list_record($app, $record);
} }

View File

@@ -1,222 +0,0 @@
<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2015 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Controller\Client;
use Alchemy\Phrasea\Model\Entities\Basket;
use Alchemy\Phrasea\Model\Entities\BasketElement;
use Doctrine\Common\Collections\ArrayCollection;
use Silex\Application;
use Silex\ControllerProviderInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class Baskets implements ControllerProviderInterface
{
public function connect(Application $app)
{
$app['controller.client.baskets'] = $this;
$controllers = $app['controllers_factory'];
$app['firewall']->addMandatoryAuthentication($controllers);
$controllers->match('/', 'controller.client.baskets:getBaskets')
->method('POST|GET')
->bind('get_client_baskets');
$controllers->post('/new/', 'controller.client.baskets:createBasket')
->bind('client_new_basket');
$controllers->post('/delete/', 'controller.client.baskets:deleteBasket')
->bind('client_delete_basket');
$controllers->post('/check/', 'controller.client.baskets:checkBaskets')
->bind('client_basket_check');
$controllers->post('/add-element/', 'controller.client.baskets:addElementToBasket')
->bind('client_basket_add_element');
$controllers->post('/delete-element/', 'controller.client.baskets:deleteBasketElement')
->bind('client_basket_delete_element');
return $controllers;
}
/**
* Deletes a basket element
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function deleteBasketElement(Application $app, Request $request)
{
try {
$repository = $app['repo.basket-elements'];
$basketElement = $repository->findUserElement($request->request->get('p0'), $app['authentication']->getUser());
$app['orm.em']->remove($basketElement);
$app['orm.em']->flush();
} catch (\Exception $e) {
}
return $app->redirectPath('get_client_baskets', [
'courChuId' => $request->request->get('courChuId', '')
]);
}
/**
* Deletes a basket
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function deleteBasket(Application $app, Request $request)
{
try {
$basket = $app['converter.basket']->convert($request->request->get('courChuId'));
$app['acl.basket']->isOwner($basket, $app['authentication']->getUser());
$app['orm.em']->remove($basket);
$app['orm.em']->flush();
unset($basket);
} catch (\Exception $e) {
}
return $app->redirectPath('get_client_baskets');
}
/**
* Creates a new basket
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function createBasket(Application $app, Request $request)
{
$basket = null;
try {
$basket = new Basket();
$basket->setName($request->request->get('p0'));
$basket->setUser($app['authentication']->getUser());
$app['orm.em']->persist($basket);
$app['orm.em']->flush();
} catch (\Exception $e) {
}
return $app->redirectPath('get_client_baskets', [
'courChuId' => null !== $basket ? $basket->getId() : ''
]);
}
/**
* Adds an element to a basket
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function addElementToBasket(Application $app, Request $request)
{
$basket = $app['converter.basket']->convert($request->request->get('courChuId'));
$app['acl.basket']->isOwner($basket, $app['authentication']->getUser());
try {
$record = new \record_adapter($app, $request->request->get('sbas'), $request->request->get('p0'));
$basketElement = new BasketElement();
$basketElement->setRecord($record);
$basketElement->setBasket($basket);
$basket->addElement($basketElement);
$app['orm.em']->persist($basket);
$app['orm.em']->flush();
} catch (\Exception $e) {
}
return $app->redirectPath('get_client_baskets', [
'courChuId' => $basket ? $basket->getId() : ''
]);
}
/**
* Fetchs current user baskets
*
* @param Application $app
* @param Request $request
* @return Response
*/
public function getBaskets(Application $app, Request $request)
{
$selectedBasketId = trim($request->get('courChuId', ''));
$baskets = new ArrayCollection($app['repo.baskets']->findActiveByUser($app['authentication']->getUser()));
$selectedBasket = null;
if ('' === $selectedBasketId && $baskets->count() > 0) {
$selectedBasketId = $baskets->first()->getId();
}
if ('' !== $selectedBasketId) {
$selectedBasket = $app['converter.basket']->convert($selectedBasketId);
$app['acl.basket']->isOwner($selectedBasket, $app['authentication']->getUser());
}
$basketCollections = $baskets->partition(function ($key, $basket) {
return null !== $basket->getPusher();
});
return $app['twig']->render('client/baskets.html.twig', [
'total_baskets' => $baskets->count(),
'user_baskets' => $basketCollections[1],
'recept_user_basket' => $basketCollections[0],
'selected_basket' => $selectedBasket,
'selected_basket_elements' => $selectedBasket ? $selectedBasket->getElements() : new ArrayCollection()
]);
}
/**
* Checks Update basket client
*
* @param Application $app
* @param Request $request
* @return JsonResponse
*/
public function checkBaskets(Application $app, Request $request)
{
$noview = 0;
$repository = $app['repo.baskets'];
/* @var $repository Alchemy\Phrasea\Model\Repositories\BasketRepository */
$baskets = $repository->findActiveByUser($app['authentication']->getUser());
foreach ($baskets as $basket) {
if (!$basket->getIsRead()) {
$noview++;
}
}
return $app->json([
'success' => true,
'message' => '',
'no_view' => $noview
]);
}
}

View File

@@ -42,189 +42,9 @@ class Root implements ControllerProviderInterface
$controllers->get('/', 'controller.client:getClient') $controllers->get('/', 'controller.client:getClient')
->bind('get_client'); ->bind('get_client');
$controllers->get('/language/', 'controller.client:getClientLanguage')
->bind('get_client_language');
$controllers->get('/publications/', 'controller.client:getClientPublications')
->bind('client_publications_start_page');
$controllers->get('/help/', 'controller.client:getClientHelp')
->bind('client_help_start_page');
$controllers->post('/query/', 'controller.client:query')
->bind('client_query');
return $controllers; return $controllers;
} }
/**
* Queries database to fetch documents
*
* @param Application $app
* @param Request $request
* @return Response
*/
public function query(Application $app, Request $request)
{
$query = $this->buildQueryFromRequest($request);
$displayMode = explode('X', $request->request->get('mod', '3X6'));
if (count($displayMode) === 1) {
$modRow = (int) ($displayMode[0]);
$modCol = 1;
} else {
$modRow = (int) ($displayMode[0]);
$modCol = (int) ($displayMode[1]);
}
$perPage = $modCol * $modRow;
$options = SearchEngineOptions::fromRequest($app, $request);
$currentPage = (int) $request->request->get('pag', 0);
if ($currentPage < 1) {
$app['phraseanet.SE']->resetCache();
$currentPage = 1;
}
$result = $app['phraseanet.SE']->query($query, ($currentPage - 1) * $perPage, $perPage, $options);
$app['manipulator.user']->logQuery($app['authentication']->getUser(), $result->getQuery());
if ($app['settings']->getUserSetting($app['authentication']->getUser(), 'start_page') === 'LAST_QUERY') {
$app['manipulator.user']->setUserSetting($app['authentication']->getUser(), 'start_page_query', $query);
}
foreach ($options->getDataboxes() as $databox) {
$colls = array_map(function (\collection $collection) {
return $collection->get_coll_id();
}, array_filter($options->getCollections(), function (\collection $collection) use ($databox) {
return $collection->get_databox()->get_sbas_id() == $databox->get_sbas_id();
}));
$app['phraseanet.SE.logger']->log($databox, $result->getQuery(), $result->getTotal(), $colls);
}
$searchData = $result->getResults();
if (count($searchData) === 0 ) {
return new Response($app['twig']->render("client/help.html.twig"));
}
$resultData = [];
foreach ($searchData as $record) {
try {
$record->get_subdef('document');
$lightInfo = $app['twig']->render('common/technical_datas.html.twig', ['record' => $record]);
} catch (\Exception $e) {
$lightInfo = '';
}
$caption = $app['twig']->render('common/caption.html.twig', ['view' => 'answer', 'record' => $record]);
$docType = $record->get_type();
$isVideo = ($docType == 'video');
$isAudio = ($docType == 'audio');
$isImage = ($docType == 'image');
$isDocument = ($docType == 'document');
if (!$isVideo && !$isAudio) {
$isImage = true;
}
$canDownload = $app['acl']->get($app['authentication']->getUser())->has_right_on_base($record->get_base_id(), 'candwnldpreview') ||
$app['acl']->get($app['authentication']->getUser())->has_right_on_base($record->get_base_id(), 'candwnldhd') ||
$app['acl']->get($app['authentication']->getUser())->has_right_on_base($record->get_base_id(), 'cancmd');
try {
$previewExists = $record->get_preview()->is_physically_present();
} catch (\Exception $e) {
$previewExists = false;
}
$resultData[] = [
'record' => $record,
'mini_logo' => \collection::getLogo($record->get_base_id(), $app),
'preview_exists' => $previewExists,
'light_info' => $lightInfo,
'caption' => $caption,
'is_video' => $isVideo,
'is_audio' => $isAudio,
'is_image' => $isImage,
'is_document' => $isDocument,
'can_download' => $canDownload,
'can_add_to_basket' => $app['acl']->get($app['authentication']->getUser())->has_right_on_base($record->get_base_id(), 'canputinalbum')
];
}
return new Response($app['twig']->render("client/answers.html.twig", [
'mod_col' => $modCol,
'mod_row' => $modRow,
'result_data' => $resultData,
'per_page' => $perPage,
'search_engine' => $app['phraseanet.SE'],
'search_engine_option' => $options->serialize(),
'history' => \queries::history($app, $app['authentication']->getUser()->getId()),
'result' => $result,
'proposals' => $currentPage === 1 ? $result->getProposals() : null,
'help' => count($resultData) === 0 ? $this->getHelpStartPage($app) : '',
]));
}
/**
* Gets help start page
*
* @param Application $app
* @param Request $request
* @return Response
*/
public function getClientHelp(Application $app, Request $request)
{
return new Response($this->getHelpStartPage($app));
}
/**
* Gets client publication start page
*
* @param Application $app
* @param Request $request
* @return Response
*/
public function getClientPublications(Application $app, Request $request)
{
return new Response($this->getPublicationStartPage($app));
}
/**
* Gets client language
*
* @param Application $app
* @param Request $request
* @return JsonResponse
*/
public function getClientLanguage(Application $app, Request $request)
{
$out = [];
$out['createWinInvite'] = $app->trans('paniers:: Quel nom souhaitez vous donner a votre panier ?');
$out['chuNameEmpty'] = $app->trans('paniers:: Quel nom souhaitez vous donner a votre panier ?');
$out['noDLok'] = $app->trans('export:: aucun document n\'est disponible au telechargement');
$out['confirmRedirectAuth'] = $app->trans('invite:: Redirection vers la zone d\'authentification, cliquez sur OK pour continuer ou annulez');
$out['serverName'] = $app['conf']->get('servername');
$out['serverError'] = $app->trans('phraseanet::erreur: Une erreur est survenue, si ce probleme persiste, contactez le support technique');
$out['serverTimeout'] = $app->trans('phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible');
$out['serverDisconnected'] = $app->trans('phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier');
$out['confirmDelBasket'] = $app->trans('paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ?');
$out['annuler'] = $app->trans('boutton::annuler');
$out['fermer'] = $app->trans('boutton::fermer');
$out['renewRss'] = $app->trans('boutton::renouveller');
$out['print'] = $app->trans('Print');
$out['no_basket'] = $app->trans('Please create a basket before adding an element');
return $app->json($out);
}
/** /**
* Gets client main page * Gets client main page
* *
@@ -234,260 +54,6 @@ class Root implements ControllerProviderInterface
*/ */
public function getClient(Application $app, Request $request) public function getClient(Application $app, Request $request)
{ {
$app['session']->getFlashBag()->add('step_by_step', ''); return $app->redirect($app->path('prod', array('client')));
try {
\Session_Logger::updateClientInfos($app, 2);
} catch (SessionNotFound $e) {
return $app->redirectPath('logout');
}
$renderTopics = '';
if ($app['conf']->get(['registry', 'classic', 'render-topics']) == 'popups') {
$renderTopics = \queries::dropdown_topics($app['translator'], $app['locale']);
} elseif ($app['conf']->get(['registry', 'classic', 'render-topics']) == 'tree') {
$renderTopics = \queries::tree_topics($app['locale']);
}
return new Response($app['twig']->render('client/index.html.twig', [
'last_action' => !$app['authentication']->getUser()->isGuest() && false !== $request->cookies->has('last_act') ? $request->cookies->has('last_act') : null,
'phrasea_home' => $this->getDefaultClientStartPage($app),
'render_topics' => $renderTopics,
'grid_properties' => $this->getGridProperty(),
'search_order' => SearchEngineOptions::SORT_MODE_DESC,
'storage_access' => $this->getDocumentStorageAccess($app),
'tabs_setup' => $this->getTabSetup($app),
'module' => 'client',
'menubar' => $app['twig']->render('common/menubar.html.twig', ['module' => 'client']),
'css_file' => $this->getCssFile($app),
'basket_status' => $app['settings']->getUserSetting($app['authentication']->getUser(), 'client_basket_status', '1'),
'mod_pres' => $app['settings']->getUserSetting($app['authentication']->getUser(), 'client_view', '' ),
'start_page' => $app['settings']->getUserSetting($app['authentication']->getUser(), 'start_page'),
'start_page_query' => $app['settings']->getUserSetting($app['authentication']->getUser(), 'start_page_query', '')
]));
}
/**
* Gets display grid property
*
* @return array
*/
private function getGridProperty()
{
return [
['w' => '3', 'h' => '2', 'name' => '3*2', 'selected' => '0'],
['w' => '5', 'h' => '4', 'name' => '5*4', 'selected' => '0'],
['w' => '4', 'h' => '10', 'name' => '4*10', 'selected' => '0'],
['w' => '6', 'h' => '3', 'name' => '6*3', 'selected' => '1'],
['w' => '8', 'h' => '4', 'name' => '8*4', 'selected' => '0'],
['w' => '1', 'h' => '10', 'name' => 'list*10', 'selected' => '0'],
['w' => '1', 'h' => '100', 'name' => 'list*100', 'selected' => '0']
];
}
/**
* Gets databoxes and collections the current user can access
*
* @param Application $app
* @return array
*/
private function getDocumentStorageAccess(Application $app)
{
$allDataboxes = $allCollections = [];
foreach ($app['acl']->get($app['authentication']->getUser())->get_granted_sbas() as $databox) {
if (count($app['phraseanet.appbox']->get_databoxes()) > 0) {
$allDataboxes[$databox->get_sbas_id()] = ['databox' => $databox, 'collections' => []];
}
if (count($databox->get_collections()) > 0) {
foreach ($app['acl']->get($app['authentication']->getUser())->get_granted_base([], [$databox->get_sbas_id()]) as $coll) {
$allDataboxes[$databox->get_sbas_id()]['collections'][$coll->get_base_id()] = $coll;
$allCollections[$coll->get_base_id()] = $coll;
}
}
}
return ['databoxes' => $allDataboxes, 'collections' => $allCollections];
}
/**
* Gets Client Tab Setup
*
* @param Application $app
* @return array
*/
private function getTabSetup(Application $app)
{
$tong = [
$app['conf']->get(['registry', 'classic', 'search-tab']) => 1,
$app['conf']->get(['registry', 'classic', 'adv-search-tab']) => 2,
$app['conf']->get(['registry', 'classic', 'topics-tab']) => 3
];
unset($tong[0]);
if (count($tong) == 0) {
$tong = [1 => 1];
}
ksort($tong);
return $tong;
}
/**
* Returns the CSS file used by end user
*
* @param Application $app
* @return string
*/
private function getCssFile(Application $app)
{
$cssPath = __DIR__ . '/../../../../../www/skins/client/';
$css = [];
$cssFile = $app['settings']->getUserSetting($app['authentication']->getUser(), 'client_css');
$finder = new Finder();
$iterator = $finder
->directories()
->depth(0)
->filter(function (\SplFileInfo $fileinfo) {
return ctype_xdigit($fileinfo->getBasename());
})
->in($cssPath);
foreach ($iterator as $dir) {
$baseName = $dir->getBaseName();
$css[$baseName] = $baseName;
}
if ((!$cssFile || !isset($css[$cssFile])) && isset($css['000000'])) {
$cssFile = '000000';
}
return sprintf('skins/client/%s/clientcolor.css', $cssFile);
}
/**
* Forges query from request parameters
*
* @param Request $request
* @return string
*/
private function buildQueryFromRequest(Request $request)
{
$query = '';
if ('' !== $clientQuery = trim($request->request->get('qry', ''))) {
$query .= $clientQuery;
}
$opAdv = $request->request->get('opAdv', []);
$queryAdv = $request->request->get('qryAdv', []);
if (count($opAdv) > 0 && count($opAdv) == count($queryAdv)) {
foreach ($opAdv as $opId => $op) {
if (isset($queryAdv[$opId]) && ($advancedQuery = trim($queryAdv[$opId]) !== '')) {
if ($query === $clientQuery) {
$query = '(' . $clientQuery . ')';
}
$query .= ' ' . $op . ' (' . $advancedQuery . ')';
}
}
}
if (empty($query)) {
$query = 'all';
}
return $query;
}
/**
* Gets default start home page for client
*
* @param Application $app
* @return string
*/
private function getDefaultClientStartPage(Application $app)
{
$startPage = strtoupper($app['settings']->getUserSetting($app['authentication']->getUser(), 'start_page'));
if ($startPage === 'PUBLI') {
return $this->getPublicationStartPage($app);
}
if (in_array($startPage, ['QUERY', 'LAST_QUERY'])) {
return $this->getQueryStartPage($app);
}
return $this->getHelpStartPage($app);
}
/**
* Gets query start home page for client
*
* @param Application $app
* @return string
*/
private function getQueryStartPage(Application $app)
{
$collections = $queryParameters = [];
$searchSet = json_decode($app['settings']->getUserSetting($app['authentication']->getUser(), 'search'));
if ($searchSet && isset($searchSet->bases)) {
foreach ($searchSet->bases as $bases) {
$collections = array_merge($collections, $bases);
}
} else {
$collections = array_keys($app['acl']->get($app['authentication']->getUser())->get_granted_base());
}
$queryParameters["mod"] = $app['settings']->getUserSetting($app['authentication']->getUser(), 'client_view', '3X6');
$queryParameters["bas"] = $collections;
$queryParameters["qry"] = $app['settings']->getUserSetting($app['authentication']->getUser(), 'start_page_query', 'all');
$queryParameters["pag"] = 0;
$queryParameters["search_type"] = SearchEngineOptions::RECORD_RECORD;
$queryParameters["qryAdv"] = '';
$queryParameters["opAdv"] = [];
$queryParameters["status"] = [];
$queryParameters["recordtype"] = SearchEngineOptions::TYPE_ALL;
$queryParameters["sort"] = '';
$queryParameters["infield"] = [];
$queryParameters["ord"] = SearchEngineOptions::SORT_MODE_DESC;
$subRequest = Request::create('/client/query/', 'POST', $queryParameters);
return $this->query($app, $subRequest)->getContent();
}
/**
* Gets publications start home page for client
*
* @param Application $app
* @return string
*/
private function getPublicationStartPage(Application $app)
{
return $app['twig']->render('client/home_inter_pub_basket.html.twig', [
'feeds' => Aggregate::createFromUser($app, $app['authentication']->getUser()),
'image_size' => (int) $app['settings']->getUserSetting($app['authentication']->getUser(), 'images_size')
]);
}
/**
* Get help start home page for client
*
* @param Application $app
* @return string
*/
private function getHelpStartPage(Application $app)
{
return $app['twig']->render('client/help.html.twig');
} }
} }

View File

@@ -221,26 +221,9 @@ class Query implements ControllerProviderInterface
return $app->json([ return $app->json([
'current' => $app['twig']->render('prod/preview/result_train.html.twig', [ 'current' => $app['twig']->render('prod/preview/result_train.html.twig', [
'records' => $record->get_train($pos, $query, $app['phraseanet.SE'], $options), 'records' => $record->get_train(),
'selected' => $pos 'selected' => $pos
]) ])
]); ]);
} }
/**
* Get a preview reg train
*
* @param Application $app
* @param Request $request
* @return Response
*/
public function queryRegTrain(Application $app, Request $request)
{
$record = new \record_preview($app, 'REG', $request->request->get('pos'), $request->request->get('cont'));
return new Response($app['twig']->render('prod/preview/reg_train.html.twig', [
'container_records' => $record->get_container()->get_children(),
'record' => $record
]));
}
} }

View File

@@ -80,22 +80,20 @@ class record_preview extends record_adapter
protected $original_item; protected $original_item;
/** protected $pos;
* protected$search_engine;
* @param Application $app protected $query;
* @param string $env protected $options;
* @param integer $pos
* @param mixed $contId
* @param SearchEngineInterface $search_engine
* @param string $query
*
* @return record_preview
*/
public function __construct(Application $app, $env, $pos, $contId, SearchEngineInterface $search_engine = null, $query = '', SearchEngineOptions $options = null) public function __construct(Application $app, $env, $pos, $contId, SearchEngineInterface $search_engine = null, $query = '', SearchEngineOptions $options = null)
{ {
$number = null; $number = null;
$this->env = $env; $this->env = $env;
$this->app = $app; $this->app = $app;
$this->pos = $pos;
$this->searchEngine = $search_engine;
$this->query = $query;
$this->options = $options;
switch ($env) { switch ($env) {
case "RESULT": case "RESULT":
@@ -204,7 +202,7 @@ class record_preview extends record_adapter
return $this; return $this;
} }
public function get_train($pos = 0, $query = '', SearchEngineInterface $search_engine = null, SearchEngineOptions $options) public function get_train()
{ {
if ($this->train) { if ($this->train) {
return $this->train; return $this->train;
@@ -213,8 +211,8 @@ class record_preview extends record_adapter
switch ($this->env) { switch ($this->env) {
case 'RESULT': case 'RESULT':
$perPage = 56; $perPage = 56;
$index = ($pos - 3) < 0 ? 0 : ($pos - 3); $index = ($this->pos - 3) < 0 ? 0 : ($this->pos - 3);
$results = $search_engine->query($query, $index, $perPage, $options); $results = $this->searchEngine->query($this->query, $index, $perPage, $this->option);
$this->train = $results->getResults()->toArray(); $this->train = $results->getResults()->toArray();
break; break;

View File

@@ -10,6 +10,7 @@ use Alchemy\Phrasea\Authentication\Context;
use Alchemy\Phrasea\Model\Entities\LazaretSession; use Alchemy\Phrasea\Model\Entities\LazaretSession;
use Alchemy\Phrasea\Model\Entities\Task; use Alchemy\Phrasea\Model\Entities\Task;
use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\Model\Entities\User;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Guzzle\Common\Exception\GuzzleException; use Guzzle\Common\Exception\GuzzleException;
use Rhumsaa\Uuid\Uuid; use Rhumsaa\Uuid\Uuid;
@@ -729,7 +730,7 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
self::$DI['record_story_1']; self::$DI['record_story_1'];
self::$DI['client']->request('POST', '/api/v1/search/', $this->getParameters(['search_type' => 1]), [], ['HTTP_Accept' => $this->getAcceptMimeType()]); self::$DI['client']->request('POST', '/api/v1/search/', $this->getParameters(['search_type' => SearchEngineOptions::RECORD_GROUPING]), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent()); $content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
$this->evaluateResponse200(self::$DI['client']->getResponse()); $this->evaluateResponse200(self::$DI['client']->getResponse());
@@ -1484,8 +1485,8 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
$route = '/api/v1/records/add/'; $route = '/api/v1/records/add/';
$file = [ $file = [
new \Symfony\Component\HttpFoundation\File\UploadedFile(self::$DI['app']['root.path'].'/tests/files/' , 'recta_logo.gif'), new \Symfony\Component\HttpFoundation\File\UploadedFile(self::$DI['app']['root.path'].'/tests/files/recta_logo.gif' , 'recta_logo.gif'),
new \Symfony\Component\HttpFoundation\File\UploadedFile(self::$DI['app']['root.path'].'/tests/files/', 'rectb_logo.gif'), new \Symfony\Component\HttpFoundation\File\UploadedFile(self::$DI['app']['root.path'].'/tests/files/rectb_logo.gif', 'rectb_logo.gif'),
]; ];
self::$DI['client']->request('POST', $route, $this->getParameters($this->getAddRecordParameters()), ['file' => $file], ['HTTP_Accept' => $this->getAcceptMimeType()]); self::$DI['client']->request('POST', $route, $this->getParameters($this->getAddRecordParameters()), ['file' => $file], ['HTTP_Accept' => $this->getAcceptMimeType()]);

View File

@@ -1,88 +0,0 @@
<?php
namespace Alchemy\Tests\Phrasea\Controller\Client;
class BasketsTest extends \PhraseanetAuthenticatedWebTestCase
{
protected $client;
/**
* @covers Alchemy\Phrasea\Controller\Client\Baskets::connect
* @covers Alchemy\Phrasea\Controller\Client\Baskets::call
* @covers Alchemy\Phrasea\Controller\Client\Baskets::getBaskets
*/
public function testGetClientBaskets()
{
self::$DI['client']->request("GET", "/client/baskets/");
$this->assertTrue(self::$DI['client']->getResponse()->isOk());
}
/**
* @covers Alchemy\Phrasea\Controller\Client\Baskets::getBaskets
*/
public function testPostClientBaskets()
{
self::$DI['client']->request("POST", "/client/baskets/");
$this->assertTrue(self::$DI['client']->getResponse()->isOk());
}
/**
* @covers Alchemy\Phrasea\Controller\Client\Baskets::createBasket
*/
public function testCreateBasket()
{
$nbBasketsBefore = self::$DI['app']['orm.em']->createQuery('SELECT COUNT(b.id) FROM Phraseanet:Basket b')->getSingleScalarResult();
self::$DI['client']->request("POST", "/client/baskets/new/", ['p0' => 'hello']);
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
$nbBasketsAfter = self::$DI['app']['orm.em']->createQuery('SELECT COUNT(b.id) FROM Phraseanet:Basket b')->getSingleScalarResult();
$this->assertGreaterThan($nbBasketsBefore,$nbBasketsAfter);
}
/**
* @covers Alchemy\Phrasea\Controller\Client\Baskets::addElementToBasket
*/
public function testAddElementToBasket()
{
$basket = self::$DI['app']['orm.em']->find('Phraseanet:Basket', 1);
self::$DI['client']->request("POST", "/client/baskets/add-element/", [
'courChuId' => $basket->getId(),
'sbas' => self::$DI['record_1']->get_sbas_id(),
'p0' => self::$DI['record_1']->get_record_id()
]);
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
$basket = self::$DI['app']['orm.em']->getRepository('Phraseanet:Basket')->find($basket->getId());
$this->assertGreaterThan(0, $basket->getElements()->count());
}
/**
* @covers Alchemy\Phrasea\Controller\Client\Baskets::deleteBasket
*/
public function testDeleteBasket()
{
self::$DI['client']->request("POST", "/client/baskets/delete/", [
'courChuId' => 1
]);
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
try {
$basket = self::$DI['app']['orm.em']->getRepository('Phraseanet:Basket')->find(1);
$this->fail('Basket is not deleted');
} catch (\Exception $e) {
}
}
/**
* @covers Alchemy\Phrasea\Controller\Client\Baskets::deleteBasketElement
*/
public function testDeleteBasketElement()
{
$basket = self::$DI['app']['orm.em']->find('Phraseanet:Basket', 1);
$basketElement = self::$DI['app']['orm.em']->find('Phraseanet:BasketElement', 1);
self::$DI['client']->request("POST", "/client/baskets/delete-element/", [
'p0' => $basketElement->getId()
]);
$this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
$this->assertEquals(0, $basket->getElements()->count());
}
}

View File

@@ -10,6 +10,6 @@ class RootTest extends \PhraseanetAuthenticatedWebTestCase
{ {
$this->authenticate(self::$DI['app']); $this->authenticate(self::$DI['app']);
self::$DI['client']->request("GET", "/client/"); self::$DI['client']->request("GET", "/client/");
$this->assertTrue(self::$DI['client']->getResponse()->isOk()); $this->assertTrue(self::$DI['client']->getResponse()->isRedirect());
} }
} }

View File

@@ -54,18 +54,4 @@ class QueryTest extends \PhraseanetAuthenticatedWebTestCase
$this->assertArrayHasKey('current', $datas); $this->assertArrayHasKey('current', $datas);
unset($response, $datas); unset($response, $datas);
} }
/**
* @covers Alchemy\Phrasea\Controller\Prod\Query::queryRegTrain
*/
public function testQueryRegTrain()
{
self::$DI['client']->request('POST', '/prod/query/reg-train/', [
'pos' => 1,
'cont' => self::$DI['record_story_1']->get_serialize_key()
]);
$response = self::$DI['client']->getResponse();
$this->assertTrue($response->isOk());
unset($response);
}
} }

View File

@@ -96,7 +96,7 @@ class UploadTest extends \PhraseanetAuthenticatedWebTestCase
$this->assertTrue($record->get_thumbnail()->is_physically_present()); $this->assertTrue($record->get_thumbnail()->is_physically_present());
$fields = $record->get_caption()->get_fields(['FileName']); $fields = $record->get_caption()->get_fields(['FileName']);
$field = array_pop($fields); $field = array_pop($fields);
$this->assertEquals($field->get_serialized_values(), 'KIKOO.JPG'); $this->assertEquals($field->get_serialized_values(), 'KIKOO');
} }
} }