diff --git a/rest/index.php b/rest/index.php index 688e4acf2ebc8d077d86e3f863253cd322884d91..5bf5fb2891a8752ff6704a3e6b3e9fc030f94d52 100755 --- a/rest/index.php +++ b/rest/index.php @@ -62,6 +62,7 @@ $app->get('/passwordRules', \SrcCore\controllers\PasswordController::class . ':g //Users $app->get('/users', \User\controllers\UserController::class . ':get'); +$app->get('/users/{id}', \User\controllers\UserController::class . ':getById'); $app->put('/users/{id}', \User\controllers\UserController::class . ':update'); $app->put('/users/{id}/password', \User\controllers\UserController::class . ':updatePassword'); $app->get('/users/{id}/signatures', \User\controllers\UserController::class . ':getSignatures'); diff --git a/sql/structure.sql b/sql/structure.sql index a84947e49c548203733c8cc71478087527d4b53d..4a773fef79763c4206ae3d8fac4ef962cc0382ec 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -76,6 +76,7 @@ CREATE TABLE users "password" character varying(255) NOT NULL, firstname character varying(128) NOT NULL, lastname character varying(128) NOT NULL, + picture text, enabled boolean DEFAULT TRUE, mode character varying(50) NOT NULL, cookie_key character varying(255) DEFAULT NULL::character varying, diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php index 6682fed5d32096dbba7b405a0dd3437a4679206a..eff0c06dff9c9ce5837c463b8b86a626572e2111 100755 --- a/src/app/document/controllers/DocumentController.php +++ b/src/app/document/controllers/DocumentController.php @@ -42,9 +42,10 @@ class DocumentController $data['limit'] = empty($data['limit']) ? 0 : (int)$data['limit']; $user = UserModel::getByEmail(['email' => $GLOBALS['email'], 'select' => ['id']]); + $status = StatusModel::getByReference(['select' => ['id'], 'reference' => 'NEW']); - $where = ['processing_user = ?']; - $dataGet = [$user['id']]; + $where = ['processing_user = ?', 'status = ?']; + $dataGet = [$user['id'], $status['id']]; if (!empty($data['mode'])) { $where[] = 'mode = ?'; $dataGet[] = $data['mode']; diff --git a/src/app/status/models/StatusModel.php b/src/app/status/models/StatusModel.php index 260b866d5470a3e359a43e30524e647f58830a4d..418c14708a4d9dc4f7a569e925ea91e8d38fad8b 100755 --- a/src/app/status/models/StatusModel.php +++ b/src/app/status/models/StatusModel.php @@ -53,4 +53,24 @@ class StatusModel return $status[0]; } + + public static function getByReference(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['reference']); + ValidatorModel::stringType($aArgs, ['reference']); + ValidatorModel::arrayType($aArgs, ['select']); + + $status = DatabaseModel::select([ + 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'table' => ['status'], + 'where' => ['reference = ?'], + 'data' => [$aArgs['reference']] + ]); + + if (empty($status[0])) { + return []; + } + + return $status[0]; + } } diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 005048bf912d58cc82298e6ef9258dfa58bf01c3..7ef7e47c1f1de0a8178cd21b07c455b89d62525a 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -37,6 +37,18 @@ class UserController return $response->withJson(['users' => $users]); } + public function getById(Request $request, Response $response, array $args) + { + $user = UserModel::getByEmail(['email' => $GLOBALS['email'], 'select' => ['id']]); + if ($user['id'] != $args['id']) { + return $response->withStatus(403)->withJson(['errors' => 'User out of perimeter']); + } + + $user = UserModel::getById(['select' => ['firstname', 'lastname', 'picture'], 'id' => $args['id']]); + + return $response->withJson(['user' => $user]); + } + public function update(Request $request, Response $response, array $args) { $user = UserModel::getByEmail(['email' => $GLOBALS['email'], 'select' => ['id']]); @@ -51,6 +63,17 @@ class UserController return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } + if (!empty($data['picture'])) { + $picture = base64_decode($data['picture']); + $finfo = new \finfo(FILEINFO_MIME_TYPE); + $mimeType = $finfo->buffer($picture); + $type = explode('/', $mimeType); + + if ($type[0] != 'image') { + return $response->withStatus(400)->withJson(['errors' => 'Picture is not an image']); + } + } + $data['id'] = $args['id']; UserModel::update($data); diff --git a/src/app/user/models/UserModel.php b/src/app/user/models/UserModel.php index bd9e046158cd9c5ca6539f61f535c305396d5c0e..ec2d4f817b750560ac7b28b4f7566fd4e69f03da 100755 --- a/src/app/user/models/UserModel.php +++ b/src/app/user/models/UserModel.php @@ -79,13 +79,14 @@ class UserModel { ValidatorModel::notEmpty($aArgs, ['id', 'firstname', 'lastname']); ValidatorModel::intVal($aArgs, ['id']); - ValidatorModel::stringType($aArgs, ['firstname', 'lastname']); + ValidatorModel::stringType($aArgs, ['firstname', 'lastname', 'picture']); DatabaseModel::update([ 'table' => 'users', 'set' => [ 'firstname' => $aArgs['firstname'], 'lastname' => $aArgs['lastname'], + 'picture' => empty($aArgs['picture']) ? null : $aArgs['picture'] ], 'where' => ['id = ?'], 'data' => [$aArgs['id']]