Skip to content
Snippets Groups Projects
Verified Commit 17434d6b authored by Damien's avatar Damien
Browse files

FEAT #14568 TIME 2:00 WIP search all documents

parent 142e7c1d
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
"Email\\" : "src/app/email/", "Email\\" : "src/app/email/",
"Group\\" : "src/app/group/", "Group\\" : "src/app/group/",
"History\\" : "src/app/history/", "History\\" : "src/app/history/",
"Search\\" : "src/app/search/",
"User\\" : "src/app/user/", "User\\" : "src/app/user/",
"Workflow\\" : "src/app/workflow/" "Workflow\\" : "src/app/workflow/"
} }
......
...@@ -121,6 +121,9 @@ $app->get('/users/{id}/history', \History\controllers\HistoryController::class . ...@@ -121,6 +121,9 @@ $app->get('/users/{id}/history', \History\controllers\HistoryController::class .
$app->post('/password', \User\controllers\UserController::class . ':forgotPassword'); $app->post('/password', \User\controllers\UserController::class . ':forgotPassword');
$app->put('/password', \User\controllers\UserController::class . ':updateForgottenPassword'); $app->put('/password', \User\controllers\UserController::class . ':updateForgottenPassword');
//Search
$app->get('/search/documents', \Search\controllers\SearchController::class . ':getDocuments');
//Signatures //Signatures
$app->get('/users/{id}/signatures', \User\controllers\SignatureController::class . ':get'); $app->get('/users/{id}/signatures', \User\controllers\SignatureController::class . ':get');
$app->post('/users/{id}/signatures', \User\controllers\SignatureController::class . ':create'); $app->post('/users/{id}/signatures', \User\controllers\SignatureController::class . ':create');
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
-- -- -- --
-- *************************************************************************-- -- *************************************************************************--
CREATE EXTENSION IF NOT EXISTS unaccent;
ALTER TABLE main_documents DROP COLUMN IF EXISTS status; ALTER TABLE main_documents DROP COLUMN IF EXISTS status;
ALTER TABLE main_documents ADD COLUMN status varchar(10); ALTER TABLE main_documents ADD COLUMN status varchar(10);
......
<?php
/**
* Copyright Maarch since 2008 under licence GPLv3.
* See LICENCE.txt file at the root folder for more details.
* This file is part of Maarch software.
*
*/
/**
* @brief Search Controller
* @author dev@maarch.org
*/
namespace Search\controllers;
use Group\controllers\PrivilegeController;
use Document\models\DocumentModel;
use Slim\Http\Request;
use Slim\Http\Response;
use Workflow\models\WorkflowModel;
class SearchController
{
public function getDocuments(Request $request, Response $response)
{
$queryParams = $request->getQueryParams();
$queryParams['offset'] = empty($queryParams['offset']) ? 0 : (int)$queryParams['offset'];
$queryParams['limit'] = empty($queryParams['limit']) ? 0 : (int)$queryParams['limit'];
$where = [];
$data = [];
if (!PrivilegeController::hasPrivilege(['userId' => $GLOBALS['id'], 'privilege' => 'manage_documents'])) {
$where[] = 'typist = ?';
$data[] = $GLOBALS['id'];
}
$whereWorkflow = [];
$dataWorkflow = [];
if (!empty($queryParams['statuses'])) {
$whereWorkflow[] = 'status in (?)';
$dataWorkflow[] = $queryParams['statuses'];
}
if (!empty($queryParams['users'])) {
$whereWorkflow[] = 'user_id in (?)';
$dataWorkflow[] = $queryParams['statuses'];
}
if (!empty($whereWorkflow)) {
$workflows = WorkflowModel::get([
'select' => ['main_document_id'],
'where' => $whereWorkflow,
'data' => $dataWorkflow,
'groupBy' => ['main_document_id']
]);
$documentIds = array_column($workflows, 'main_document_id');
if (empty($documentIds)) {
$documentIds = [0];
}
$where[] = 'id in (?)';
$data[] = $documentIds;
}
if (!empty($queryParams['search'])) {
$where[] = '(reference ilike ? OR unaccent(title) ilike unaccent(?::text))';
$data[] = "%{$queryParams['search']}%";
$data[] = "%{$queryParams['search']}%";
}
$documents = DocumentModel::get([
'select' => ['id', 'title', 'reference', 'count(1) OVER()'],
'where' => $where,
'data' => $data,
'limit' => $queryParams['limit'],
'offset' => $queryParams['offset'],
'orderBy' => ['creation_date desc']
]);
$count = empty($documents[0]['count']) ? 0 : $documents[0]['count'];
foreach ($documents as $key => $document) {
unset($documents[$key]['count']);
}
return $response->withJson(['documents' => $documents, 'count' => $count]);
}
}
...@@ -12,6 +12,7 @@ return array( ...@@ -12,6 +12,7 @@ return array(
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
'SrcCore\\' => array($baseDir . '/src/core'), 'SrcCore\\' => array($baseDir . '/src/core'),
'Slim\\' => array($vendorDir . '/slim/slim/Slim'), 'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
'Search\\' => array($baseDir . '/src/app/search'),
'Respect\\Validation\\' => array($vendorDir . '/respect/validation/library'), 'Respect\\Validation\\' => array($vendorDir . '/respect/validation/library'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
......
...@@ -29,6 +29,7 @@ class ComposerStaticInit637514d10f1ed5d4c55a005a428a3656 ...@@ -29,6 +29,7 @@ class ComposerStaticInit637514d10f1ed5d4c55a005a428a3656
'Symfony\\Polyfill\\Mbstring\\' => 26, 'Symfony\\Polyfill\\Mbstring\\' => 26,
'SrcCore\\' => 8, 'SrcCore\\' => 8,
'Slim\\' => 5, 'Slim\\' => 5,
'Search\\' => 7,
), ),
'R' => 'R' =>
array ( array (
...@@ -102,6 +103,10 @@ class ComposerStaticInit637514d10f1ed5d4c55a005a428a3656 ...@@ -102,6 +103,10 @@ class ComposerStaticInit637514d10f1ed5d4c55a005a428a3656
array ( array (
0 => __DIR__ . '/..' . '/slim/slim/Slim', 0 => __DIR__ . '/..' . '/slim/slim/Slim',
), ),
'Search\\' =>
array (
0 => __DIR__ . '/../..' . '/src/app/search',
),
'Respect\\Validation\\' => 'Respect\\Validation\\' =>
array ( array (
0 => __DIR__ . '/..' . '/respect/validation/library', 0 => __DIR__ . '/..' . '/respect/validation/library',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment