From f8963d2e04cac248b1e6c0c63d8c4aa367a33dd9 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 11 Mar 2015 16:28:06 +0100 Subject: [PATCH 1/6] Fix upload file tests --- tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php index e59515e41e..596d8e78f8 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php @@ -1484,8 +1484,8 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase $route = '/api/v1/records/add/'; $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/', 'rectb_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', 'rectb_logo.gif'), ]; self::$DI['client']->request('POST', $route, $this->getParameters($this->getAddRecordParameters()), ['file' => $file], ['HTTP_Accept' => $this->getAcceptMimeType()]); From 61e9c6f215011f7b7016655f8d0c748cfb444473 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 11 Mar 2015 17:00:14 +0100 Subject: [PATCH 2/6] Index record en search engine --- lib/Alchemy/Phrasea/Command/Developer/RegenerateSqliteDb.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Alchemy/Phrasea/Command/Developer/RegenerateSqliteDb.php b/lib/Alchemy/Phrasea/Command/Developer/RegenerateSqliteDb.php index 33c60bb0ef..fa9f4e5037 100644 --- a/lib/Alchemy/Phrasea/Command/Developer/RegenerateSqliteDb.php +++ b/lib/Alchemy/Phrasea/Command/Developer/RegenerateSqliteDb.php @@ -108,6 +108,7 @@ class RegenerateSqliteDb extends Command $this->insertWebhookEventDelivery($em, $DI); $em->flush(); + $this->container['elasticsearch.indexer']->flushQueue(); $fixtures['basket']['basket_1'] = $DI['basket_1']->getId(); $fixtures['basket']['basket_2'] = $DI['basket_2']->getId(); From d5a56165a29ffee7c1a089c3fedf4b10abd6f62e Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 11 Mar 2015 17:47:12 +0100 Subject: [PATCH 3/6] Fix search route tests --- lib/Alchemy/Phrasea/Controller/Api/V1.php | 17 ++++++++++++++--- .../Phrasea/Controller/Api/ApiTestCase.php | 3 ++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1.php b/lib/Alchemy/Phrasea/Controller/Api/V1.php index 3cf7ba57bd..63d1e0e112 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1.php @@ -688,8 +688,13 @@ class V1 implements ControllerProviderInterface $ret['results'] = ['records' => [], 'stories' => []]; - foreach ($search_result->getResults() as $record) { - $record = new \record_adapter($app, $record->getDataboxId(), $record->getBaseId()); + foreach ($search_result->getResults() as $es_record) { + try { + $record = new \record_adapter($app, $es_record->getDataboxId(), $es_record->getRecordId()); + } catch (\Exception $e) { + + } + if ($record->is_grouping()) { $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); - 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); } diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php index 596d8e78f8..d5f24d10a2 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiTestCase.php @@ -10,6 +10,7 @@ use Alchemy\Phrasea\Authentication\Context; use Alchemy\Phrasea\Model\Entities\LazaretSession; use Alchemy\Phrasea\Model\Entities\Task; use Alchemy\Phrasea\Model\Entities\User; +use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; use Doctrine\Common\Collections\ArrayCollection; use Guzzle\Common\Exception\GuzzleException; use Rhumsaa\Uuid\Uuid; @@ -729,7 +730,7 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase 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()); $this->evaluateResponse200(self::$DI['client']->getResponse()); From 3115729da420d131f18c4445a4a306522344f6f6 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 11 Mar 2015 18:16:03 +0100 Subject: [PATCH 4/6] Deprecate client --- lib/Alchemy/Phrasea/Application.php | 2 - .../Phrasea/Controller/Client/Baskets.php | 222 --------- .../Phrasea/Controller/Client/Root.php | 436 +----------------- .../Phrasea/Controller/Client/BasketsTest.php | 88 ---- .../Phrasea/Controller/Client/RootTest.php | 2 +- 5 files changed, 2 insertions(+), 748 deletions(-) delete mode 100644 lib/Alchemy/Phrasea/Controller/Client/Baskets.php delete mode 100644 tests/Alchemy/Tests/Phrasea/Controller/Client/BasketsTest.php diff --git a/lib/Alchemy/Phrasea/Application.php b/lib/Alchemy/Phrasea/Application.php index 7b6255037d..b208509542 100644 --- a/lib/Alchemy/Phrasea/Application.php +++ b/lib/Alchemy/Phrasea/Application.php @@ -27,7 +27,6 @@ use Alchemy\Phrasea\Controller\Admin\SearchEngine; use Alchemy\Phrasea\Controller\Admin\Subdefs; use Alchemy\Phrasea\Controller\Admin\TaskManager; 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\Minifier; use Alchemy\Phrasea\Controller\Prod\BasketController; @@ -635,7 +634,6 @@ class Application extends SilexApplication $this->mount('/admin/subdefs', new Subdefs()); $this->mount('/client/', new ClientRoot()); - $this->mount('/client/baskets', new ClientBasket()); $this->mount('/prod/query/', new Query()); $this->mount('/prod/order/', new Order()); diff --git a/lib/Alchemy/Phrasea/Controller/Client/Baskets.php b/lib/Alchemy/Phrasea/Controller/Client/Baskets.php deleted file mode 100644 index b8a4732072..0000000000 --- a/lib/Alchemy/Phrasea/Controller/Client/Baskets.php +++ /dev/null @@ -1,222 +0,0 @@ -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 - ]); - } -} diff --git a/lib/Alchemy/Phrasea/Controller/Client/Root.php b/lib/Alchemy/Phrasea/Controller/Client/Root.php index be2c4fd72b..67fb145c03 100644 --- a/lib/Alchemy/Phrasea/Controller/Client/Root.php +++ b/lib/Alchemy/Phrasea/Controller/Client/Root.php @@ -42,189 +42,9 @@ class Root implements ControllerProviderInterface $controllers->get('/', 'controller.client:getClient') ->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; } - /** - * 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 * @@ -234,260 +54,6 @@ class Root implements ControllerProviderInterface */ public function getClient(Application $app, Request $request) { - $app['session']->getFlashBag()->add('step_by_step', ''); - - 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'); + return $app->redirect($app->path('prod', array('client'))); } } diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Client/BasketsTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Client/BasketsTest.php deleted file mode 100644 index a05413e400..0000000000 --- a/tests/Alchemy/Tests/Phrasea/Controller/Client/BasketsTest.php +++ /dev/null @@ -1,88 +0,0 @@ -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()); - } -} diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php index f43b2c19b1..bf589e0eb8 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Client/RootTest.php @@ -10,6 +10,6 @@ class RootTest extends \PhraseanetAuthenticatedWebTestCase { $this->authenticate(self::$DI['app']); self::$DI['client']->request("GET", "/client/"); - $this->assertTrue(self::$DI['client']->getResponse()->isOk()); + $this->assertTrue(self::$DI['client']->getResponse()->isRedirect()); } } From b536c7ae59681fbd2932887a4a7274fb4584c5e9 Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 11 Mar 2015 21:30:56 +0100 Subject: [PATCH 5/6] Remove unused function --- lib/Alchemy/Phrasea/Controller/Prod/Query.php | 17 ----------------- .../Tests/Phrasea/Controller/Prod/QueryTest.php | 14 -------------- 2 files changed, 31 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Query.php b/lib/Alchemy/Phrasea/Controller/Prod/Query.php index 3daa44827f..08c167465d 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Query.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Query.php @@ -226,21 +226,4 @@ class Query implements ControllerProviderInterface ]) ]); } - - /** - * 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 - ])); - } } diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Prod/QueryTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Prod/QueryTest.php index 2964a08780..592774038d 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Prod/QueryTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Prod/QueryTest.php @@ -54,18 +54,4 @@ class QueryTest extends \PhraseanetAuthenticatedWebTestCase $this->assertArrayHasKey('current', $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); - } } From 24036bf4eda568260fbb1a7f6cad5bca4a9eae5d Mon Sep 17 00:00:00 2001 From: Nicolas Le Goff Date: Wed, 11 Mar 2015 21:49:34 +0100 Subject: [PATCH 6/6] Fix some tests --- lib/Alchemy/Phrasea/Controller/Prod/Query.php | 2 +- lib/classes/record/preview.php | 26 +++++++++---------- .../Phrasea/Controller/Prod/UploadTest.php | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/Query.php b/lib/Alchemy/Phrasea/Controller/Prod/Query.php index 08c167465d..6aa4af94cd 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/Query.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/Query.php @@ -221,7 +221,7 @@ class Query implements ControllerProviderInterface return $app->json([ '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 ]) ]); diff --git a/lib/classes/record/preview.php b/lib/classes/record/preview.php index e552b68a23..8c835b9417 100644 --- a/lib/classes/record/preview.php +++ b/lib/classes/record/preview.php @@ -80,22 +80,20 @@ class record_preview extends record_adapter protected $original_item; - /** - * - * @param Application $app - * @param string $env - * @param integer $pos - * @param mixed $contId - * @param SearchEngineInterface $search_engine - * @param string $query - * - * @return record_preview - */ + protected $pos; + protected$search_engine; + protected $query; + protected $options; + public function __construct(Application $app, $env, $pos, $contId, SearchEngineInterface $search_engine = null, $query = '', SearchEngineOptions $options = null) { $number = null; $this->env = $env; $this->app = $app; + $this->pos = $pos; + $this->searchEngine = $search_engine; + $this->query = $query; + $this->options = $options; switch ($env) { case "RESULT": @@ -204,7 +202,7 @@ class record_preview extends record_adapter return $this; } - public function get_train($pos = 0, $query = '', SearchEngineInterface $search_engine = null, SearchEngineOptions $options) + public function get_train() { if ($this->train) { return $this->train; @@ -213,8 +211,8 @@ class record_preview extends record_adapter switch ($this->env) { case 'RESULT': $perPage = 56; - $index = ($pos - 3) < 0 ? 0 : ($pos - 3); - $results = $search_engine->query($query, $index, $perPage, $options); + $index = ($this->pos - 3) < 0 ? 0 : ($this->pos - 3); + $results = $this->searchEngine->query($this->query, $index, $perPage, $this->option); $this->train = $results->getResults()->toArray(); break; diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Prod/UploadTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Prod/UploadTest.php index 1bc43b545d..542530577c 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Prod/UploadTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Prod/UploadTest.php @@ -96,7 +96,7 @@ class UploadTest extends \PhraseanetAuthenticatedWebTestCase $this->assertTrue($record->get_thumbnail()->is_physically_present()); $fields = $record->get_caption()->get_fields(['FileName']); $field = array_pop($fields); - $this->assertEquals($field->get_serialized_values(), 'KIKOO.JPG'); + $this->assertEquals($field->get_serialized_values(), 'KIKOO'); } }