diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 5bb3e10614..39361d46da 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -944,7 +944,7 @@ class V1Controller extends Controller } $originalName = $pi['filename'] . '.' . $pi['extension']; - $newPathname = $tempfile; + $uploadedFilename = $newPathname = $tempfile; } } else { @@ -956,8 +956,11 @@ class V1Controller extends Controller if (!$file->isValid()) { return $this->getBadRequestAction($request, 'Data corrupted, please try again'); } + + $uploadedFilename = $file->getPathname(); $originalName = $file->getClientOriginalName(); $newPathname = $file->getPathname() . '.' . $file->getClientOriginalExtension(); + if (false === rename($file->getPathname(), $newPathname)) { return Result::createError($request, 403, 'Error while renaming file')->createResponse(); } @@ -1010,6 +1013,11 @@ class V1Controller extends Controller $nosubdef = $request->get('nosubdefs') === '' || \p4field::isyes($request->get('nosubdefs')); $this->getBorderManager()->process($session, $Package, $callback, $behavior, $nosubdef); + // remove $newPathname on temporary directory + if ($newPathname !== $uploadedFilename) { + @rename($newPathname, $uploadedFilename); + } + $ret = ['entity' => null]; if ($output instanceof \record_adapter) { @@ -1081,6 +1089,11 @@ class V1Controller extends Controller } } + // remove $newPathname on temporary directory + if ($renamedFilename !== $uploadedFilename) { + @rename($renamedFilename, $uploadedFilename); + } + return Result::create($request, $ret)->createResponse(); } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php index a362540935..1e8724c0ee 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php @@ -179,7 +179,6 @@ class QueryController extends Controller }; $userManipulator->setUserSetting($user, 'last_jsonquery', (string)$request->request->get('jsQuery')); - $jsQuery = @json_decode((string)$request->request->get('jsQuery'), true); if(($ft = $findFulltext($jsQuery['query'])) !== null) { $userManipulator->setUserSetting($user, 'start_page_query', $ft); @@ -317,7 +316,7 @@ class QueryController extends Controller ' . '' - . $this->app->trans('%total% reponses', ['%total%' => ''.$result->getTotal().'']) . ''; + . $this->app->trans('%total% reponses', ['%total%' => ''.number_format($result->getTotal(),null, null, ' ').'']) . ''; $json['infos'] = $infoResult; $json['navigationTpl'] = $string; diff --git a/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php index 6304f3eaa6..ee65e0bd1e 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php @@ -212,8 +212,7 @@ class BasketRepository extends EntityRepository case self::RECEIVED: $dql = 'SELECT b FROM Phraseanet:Basket b - JOIN b.elements e - WHERE b.user = :usr_id AND b.pusher_id IS NOT NULL'; + JOIN b.elements e'; $params = [ 'usr_id' => $user->getId() ]; diff --git a/templates/web/prod/WorkZone/Browser/Browser.html.twig b/templates/web/prod/WorkZone/Browser/Browser.html.twig index 7ba9370ec7..91ca5054c5 100644 --- a/templates/web/prod/WorkZone/Browser/Browser.html.twig +++ b/templates/web/prod/WorkZone/Browser/Browser.html.twig @@ -1,7 +1,7 @@ -
+
-
+
@@ -78,9 +78,28 @@
-
+
+ + diff --git a/templates/web/prod/WorkZone/Browser/Results.html.twig b/templates/web/prod/WorkZone/Browser/Results.html.twig index 47ba7802dd..c6f43ee5a8 100644 --- a/templates/web/prod/WorkZone/Browser/Results.html.twig +++ b/templates/web/prod/WorkZone/Browser/Results.html.twig @@ -4,28 +4,9 @@ -
- {% if Total == 0 %} - {{ 'No results' | trans }} - {% elseif Total == 1 %} - {{ '1 result' | trans }} - {% else %} - {% trans with {'%Total%' : Total} %}%Total% results{% endtrans %} - {% endif %} - - {% if Page - 1 > 0 %} - - - - {% endif %} - - Page {{ Page }} / {{ MaxPage }} - - {% if Page + 1 <= MaxPage %} - - - - {% endif %} + {% transchoice Total %} + {0} No results|{1} Result|]1,Inf[ Results + {% endtranschoice %}
@@ -35,18 +16,16 @@ {% for Basket in Baskets %}
× -
+
+
{% set BasketElement = Basket.getElements().first() %} {% if BasketElement %} - {{thumbnail.format(BasketElement.getRecord(app).get_thumbnail(), 80, 80, '', true, false)}} + {{thumbnail.format(BasketElement.getRecord(app).get_thumbnail(), 150, 106, '', true, false)}} {% endif %} -
- {{ Basket.getElements().count() }} -
 

@@ -64,12 +43,15 @@ {% endif %} {{ Basket.getName() }} - +
+ {{ Basket.getElements().count() }} {{ ' records' }} +

+ {% if Basket.getPusher() %}

- {% set user_name = '' ~ Basket.getPusher(app).get_display_name() ~ '' %} + {% set user_name = '' ~ Basket.getPusher(app).getDisplayName() ~ '' %} {% trans with {'%user_name%' : user_name} %}Received from %user_name%{% endtrans %}

{% endif %} @@ -117,19 +99,37 @@
{% if Page - 1 > 0 %} - - + + < {% endif %} Page {{ Page }} / {{ MaxPage }} {% if Page + 1 <= MaxPage %} - - + + > {% endif %}
+ diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php index d78194c4d7..c8f2cdb254 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php @@ -14,6 +14,7 @@ use Alchemy\Phrasea\Model\Entities\LazaretSession; use Alchemy\Phrasea\Model\Entities\Task; use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; +use Alchemy\Phrasea\Status\StatusStructureProviderInterface; use Doctrine\Common\Collections\ArrayCollection; use Guzzle\Common\Exception\GuzzleException; use Ramsey\Uuid\Uuid; @@ -1256,13 +1257,33 @@ class ApiJsonTest extends ApiTestCase $record1 = $this->getRecord1(); $route = '/api/v1/records/' . $record1->getDataboxId() . '/' . $record1->getRecordId() . '/setstatus/'; - $record_status = strrev($record1->getStatus()); + $initialRecordStatus = $record_status = strrev($record1->getStatus()); + + /** @var StatusStructureProviderInterface $statusProvider */ + $statusProvider = $app['status.provider']; + + // initialize status structure for test eg: 4 to 15 bit + foreach (range(4, 15) as $n) { + $properties = [ + 'searchable' => '0', + 'printable' => '0', + 'name' => 'status_test_' . $n, + 'labelon' => '', + 'labeloff' => '', + 'labels_on' => [], + 'labels_off' => [], + ]; + + $statusProvider->updateStatus($record1->getStatusStructure(), $n, $properties); + } + $statusStructure = $record1->getStatusStructure(); $tochange = []; foreach ($statusStructure as $n => $datas) { $tochange[$n] = substr($record_status, ($n - 1), 1) == '0' ? '1' : '0'; } + $this->evaluateMethodNotAllowedRoute($route, ['GET', 'PUT', 'DELETE']); $response = $this->request('POST', $route, $this->getParameters(['status' => $tochange]), ['HTTP_Accept' => $this->getAcceptMimeType()]); @@ -1281,6 +1302,27 @@ class ApiJsonTest extends ApiTestCase $this->assertEquals(substr($record_status, ($n), 1), $tochange[$n]); } + // test record_status in string + $record_status_expected = $record_status; + + $pos = strpos($record_status, '1'); + $bitToChange[$pos] = '1'; + + $response = $this->request('POST', $route, $this->getParameters(['status' => $bitToChange]), ['HTTP_Accept' => $this->getAcceptMimeType()]); + $content = $this->unserialize($response->getContent()); + + // Get fresh record_1 + $testRecord = new \record_adapter($app, $testRecord->getDataboxId(), $testRecord->getRecordId()); + + $this->evaluateResponse200($response); + $this->evaluateMeta200($content); + + $this->evaluateRecordsStatusResponse($testRecord, $content); + + $record_new_status = strrev($testRecord->getStatus()); + $this->assertEquals($record_status_expected, $record_new_status); + + foreach ($tochange as $n => $value) { $tochange[$n] = $value == '0' ? '1' : '0'; } @@ -1301,6 +1343,8 @@ class ApiJsonTest extends ApiTestCase $this->assertEquals(substr($record_status, ($n), 1), $tochange[$n]); } + $this->assertEquals($initialRecordStatus, $record_status); + $record1->setStatus(str_repeat('0', 32)); }