From f185558de74f846cfa68d05399f828f8453ce533 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Fri, 2 Aug 2019 13:48:48 +0400 Subject: [PATCH 01/15] PHRAS-2688 #comment Port 41 of Prod workzone: Change type of numbering #time 1h --- lib/Alchemy/Phrasea/Controller/Prod/QueryController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php index a362540935..12685f1119 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php @@ -317,7 +317,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; From 366c48673397dc537de4a6d209df5a17354fd0c0 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Wed, 7 Aug 2019 16:43:53 +0400 Subject: [PATCH 02/15] PHRAS-2282 #comment add new design #time 24h --- .../prod/WorkZone/Browser/Browser.html.twig | 6 ++-- .../prod/WorkZone/Browser/Results.html.twig | 32 ++++++------------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/templates/web/prod/WorkZone/Browser/Browser.html.twig b/templates/web/prod/WorkZone/Browser/Browser.html.twig index 7ba9370ec7..ce831a2b42 100644 --- a/templates/web/prod/WorkZone/Browser/Browser.html.twig +++ b/templates/web/prod/WorkZone/Browser/Browser.html.twig @@ -1,7 +1,7 @@ -
+
-
+
@@ -78,7 +78,7 @@
-
+
diff --git a/templates/web/prod/WorkZone/Browser/Results.html.twig b/templates/web/prod/WorkZone/Browser/Results.html.twig index 47ba7802dd..71e43ef98c 100644 --- a/templates/web/prod/WorkZone/Browser/Results.html.twig +++ b/templates/web/prod/WorkZone/Browser/Results.html.twig @@ -7,24 +7,9 @@ {% if Total == 0 %} {{ 'No results' | trans }} {% elseif Total == 1 %} - {{ '1 result' | trans }} + {{ 'Result' | trans }} {% else %} - {% trans with {'%Total%' : Total} %}%Total% results{% endtrans %} - {% endif %} - - - {% if Page - 1 > 0 %} - - - - {% endif %} - - Page {{ Page }} / {{ MaxPage }} - - {% if Page + 1 <= MaxPage %} - - - + {{ 'Results' | trans }} {% endif %} @@ -35,18 +20,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,9 +47,12 @@ {% endif %} {{ Basket.getName() }} - +
+ {{ Basket.getElements().count() }} {{ ' records' }} +

+ {% if Basket.getPusher() %}

{% set user_name = '' ~ Basket.getPusher(app).get_display_name() ~ '' %} From e7ec57346a46ce366f02a632038f6a696c1e5b2f Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Thu, 8 Aug 2019 13:56:44 +0400 Subject: [PATCH 03/15] PRHAS-2282 #comment fix JY comments --- templates/web/prod/WorkZone/Browser/Results.html.twig | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/templates/web/prod/WorkZone/Browser/Results.html.twig b/templates/web/prod/WorkZone/Browser/Results.html.twig index 71e43ef98c..908de424c2 100644 --- a/templates/web/prod/WorkZone/Browser/Results.html.twig +++ b/templates/web/prod/WorkZone/Browser/Results.html.twig @@ -4,13 +4,9 @@
- {% if Total == 0 %} - {{ 'No results' | trans }} - {% elseif Total == 1 %} - {{ 'Result' | trans }} - {% else %} - {{ 'Results' | trans }} - {% endif %} + {% transchoice Total %} + {0} No results|{1} Result|]1,Inf[ Results + {% endtranschoice %}
From 772b1026320c652c2cf99d3fbb65632a9379c90b Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Mon, 12 Aug 2019 16:40:58 +0400 Subject: [PATCH 04/15] PHRAS-2282 #time 4h --- templates/web/prod/WorkZone/Browser/Browser.html.twig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/templates/web/prod/WorkZone/Browser/Browser.html.twig b/templates/web/prod/WorkZone/Browser/Browser.html.twig index ce831a2b42..5ca65cf7e4 100644 --- a/templates/web/prod/WorkZone/Browser/Browser.html.twig +++ b/templates/web/prod/WorkZone/Browser/Browser.html.twig @@ -84,3 +84,8 @@

+ From 947b97ee0ba84677aaff2a781a0143e50ee45f81 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 13 Aug 2019 11:06:57 +0400 Subject: [PATCH 05/15] PHRAS-2706 --- lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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() ]; From 074e1cf9ea66b0963e466347f5c65140fbc27cfd Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 13 Aug 2019 11:35:06 +0400 Subject: [PATCH 06/15] PHRAS-2282 commit to run circle ci test --- templates/web/prod/WorkZone/Browser/Browser.html.twig | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/web/prod/WorkZone/Browser/Browser.html.twig b/templates/web/prod/WorkZone/Browser/Browser.html.twig index 5ca65cf7e4..1545366eac 100644 --- a/templates/web/prod/WorkZone/Browser/Browser.html.twig +++ b/templates/web/prod/WorkZone/Browser/Browser.html.twig @@ -88,4 +88,5 @@ .dialog-Medium { height: 523px!important; } + From 8987e2dba5cf066c8b69dba4dd51e0d16c6fef54 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 13 Aug 2019 11:39:57 +0400 Subject: [PATCH 07/15] PHRAS-2688 commit to run ccircle ci test --- lib/Alchemy/Phrasea/Controller/Prod/QueryController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php index 12685f1119..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); From 0d84aa040afb2c77a83604799e01d84b77cb99e2 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Wed, 14 Aug 2019 16:18:15 +0400 Subject: [PATCH 08/15] PHRAS-2282 #comment fix next page or previous page display for results #time 3h --- .../prod/WorkZone/Browser/Browser.html.twig | 9 ++++++- .../prod/WorkZone/Browser/Results.html.twig | 24 +++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/templates/web/prod/WorkZone/Browser/Browser.html.twig b/templates/web/prod/WorkZone/Browser/Browser.html.twig index 1545366eac..fad351dc25 100644 --- a/templates/web/prod/WorkZone/Browser/Browser.html.twig +++ b/templates/web/prod/WorkZone/Browser/Browser.html.twig @@ -88,5 +88,12 @@ .dialog-Medium { height: 523px!important; } - +.paginator a { + background: none!important; + border: 0; + border-radius: 0; + padding: 0 9px; + font-weight: bold; +} + diff --git a/templates/web/prod/WorkZone/Browser/Results.html.twig b/templates/web/prod/WorkZone/Browser/Results.html.twig index 908de424c2..041a246a41 100644 --- a/templates/web/prod/WorkZone/Browser/Results.html.twig +++ b/templates/web/prod/WorkZone/Browser/Results.html.twig @@ -99,19 +99,35 @@
{% if Page - 1 > 0 %} - - + + < {% endif %} Page {{ Page }} / {{ MaxPage }} {% if Page + 1 <= MaxPage %} - - + + > {% endif %}
+ From 816225036f0c96eb90de58d8d11fe500ec90d33e Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Wed, 14 Aug 2019 16:26:16 +0400 Subject: [PATCH 09/15] PHRAS-2282 add loader on results display --- templates/web/prod/WorkZone/Browser/Browser.html.twig | 6 ++++++ templates/web/prod/WorkZone/Browser/Results.html.twig | 2 ++ 2 files changed, 8 insertions(+) diff --git a/templates/web/prod/WorkZone/Browser/Browser.html.twig b/templates/web/prod/WorkZone/Browser/Browser.html.twig index fad351dc25..91ca5054c5 100644 --- a/templates/web/prod/WorkZone/Browser/Browser.html.twig +++ b/templates/web/prod/WorkZone/Browser/Browser.html.twig @@ -95,5 +95,11 @@ padding: 0 9px; font-weight: bold; } +.result_loader { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); +} diff --git a/templates/web/prod/WorkZone/Browser/Results.html.twig b/templates/web/prod/WorkZone/Browser/Results.html.twig index 041a246a41..1985bcaec4 100644 --- a/templates/web/prod/WorkZone/Browser/Results.html.twig +++ b/templates/web/prod/WorkZone/Browser/Results.html.twig @@ -119,6 +119,7 @@ //load the next result page jQuery(document).ready(function(){ jQuery('.next_res').click(function(){ + jQuery('.results').append(''); jQuery('.results').load($(this).attr('href')); return false; }); @@ -126,6 +127,7 @@ //load the prev result page jQuery(document).ready(function(){ jQuery('.prev_res').click(function(){ + jQuery('.results').append(''); jQuery('.results').load($(this).attr('href')); return false; }); From 80dcf98e1f34abbabce54b470845319deaf7051e Mon Sep 17 00:00:00 2001 From: aynsix Date: Mon, 19 Aug 2019 15:24:04 +0400 Subject: [PATCH 10/15] fix basket browser windows nok --- templates/web/prod/WorkZone/Browser/Results.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/web/prod/WorkZone/Browser/Results.html.twig b/templates/web/prod/WorkZone/Browser/Results.html.twig index 47ba7802dd..71c0cc038a 100644 --- a/templates/web/prod/WorkZone/Browser/Results.html.twig +++ b/templates/web/prod/WorkZone/Browser/Results.html.twig @@ -69,7 +69,7 @@ {% 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 %} From 645ae0e7779839d71a3e4993d8bbcabd3c7541c3 Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 28 Aug 2019 16:41:34 +0400 Subject: [PATCH 11/15] fix api: remove temporary file when upload --- .../Phrasea/Controller/Api/V1Controller.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 54c246a897..d8c085fb62 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(); } From 16d14462686b053a253cd8efdd971221648cde14 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 5 Sep 2019 18:15:07 +0400 Subject: [PATCH 12/15] fix unit test setstatus --- .../Phrasea/Controller/Api/ApiJsonTest.php | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php index d78194c4d7..10737230f8 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php @@ -1301,6 +1301,27 @@ class ApiJsonTest extends ApiTestCase $this->assertEquals(substr($record_status, ($n), 1), $tochange[$n]); } + // test record_status in string + $record_status_expected = $record_status; + unset($tochange); + + $pos = strpos($record_status, '1'); + $tochange[$pos] = '1'; + + $response = $this->request('POST', $route, $this->getParameters(['status' => $tochange]), ['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); + $record1->setStatus(str_repeat('0', 32)); } From 4d4e5368b1c1c107397d5936ce36c1d113068e54 Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 6 Sep 2019 11:14:20 +0400 Subject: [PATCH 13/15] fix --- tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php index 10737230f8..a9f974abc9 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php @@ -1305,6 +1305,7 @@ class ApiJsonTest extends ApiTestCase $record_status_expected = $record_status; unset($tochange); + $tochange = []; $pos = strpos($record_status, '1'); $tochange[$pos] = '1'; From 432eb7c2554d3c2d3391c56986fe496485e25d84 Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 6 Sep 2019 12:26:11 +0400 Subject: [PATCH 14/15] fix unit test setstatus --- .../Phrasea/Controller/Api/ApiJsonTest.php | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php index a9f974abc9..bad05dccc7 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php @@ -1281,6 +1281,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,28 +1322,6 @@ class ApiJsonTest extends ApiTestCase $this->assertEquals(substr($record_status, ($n), 1), $tochange[$n]); } - // test record_status in string - $record_status_expected = $record_status; - unset($tochange); - - $tochange = []; - $pos = strpos($record_status, '1'); - $tochange[$pos] = '1'; - - $response = $this->request('POST', $route, $this->getParameters(['status' => $tochange]), ['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); - $record1->setStatus(str_repeat('0', 32)); } From 418b86c0ba3dc67f856f16bcff3af860a8f7903e Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 6 Sep 2019 16:20:17 +0400 Subject: [PATCH 15/15] initialize status structure for test --- .../Phrasea/Controller/Api/ApiJsonTest.php | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php index bad05dccc7..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()]); @@ -1322,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)); }