diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 54c246a897..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(); } @@ -1984,7 +1997,7 @@ class V1Controller extends Controller return $this->getBadRequestAction($request); } - $datas = substr($datas, 0, ($n)) . $value . substr($datas, ($n + 2)); + $datas = substr($datas, 0, ($n)) . $value . substr($datas, ($n + 1)); } $record->setStatus(strrev($datas)); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php index 569537fed3..f9ce528e41 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php @@ -463,6 +463,8 @@ class PushController extends Controller } try { + $manager = $this->getEntityManager(); + $password = $this->getRandomGenerator()->generateString(128); $user = $this->getUserManipulator()->createUser($email, $password, $email); @@ -476,12 +478,15 @@ class PushController extends Controller $user->setCompany($request->request->get('company')); } if ($request->request->get('job')) { - $user->setCompany($request->request->get('job')); + $user->setJob($request->request->get('job')); } - if ($request->request->get('form_geonameid')) { - $this->getUserManipulator()->setGeonameId($user, $request->request->get('form_geonameid')); + if ($request->request->get('city')) { + $this->getUserManipulator()->setGeonameId($user, $request->request->get('city')); } + $manager->persist($user); + $manager->flush(); + $result['message'] = $this->app->trans('User successfully created'); $result['success'] = true; $result['user'] = $this->formatUser($user); diff --git a/templates/web/admin/editusers.html.twig b/templates/web/admin/editusers.html.twig index 4b07dea1d3..2421976775 100644 --- a/templates/web/admin/editusers.html.twig +++ b/templates/web/admin/editusers.html.twig @@ -512,7 +512,7 @@ {{ 'admin::compte-utilisateur poste' | trans }} - + @@ -528,7 +528,7 @@ {{ 'admin::compte-utilisateur activite' | trans }} - + 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)); }