diff --git a/composer.json b/composer.json index 1ceae779fb41e6b986e434d7c28499b28854160e..bbc4752b4f82f375b78109f8b8b7ed848c976bf2 100644 --- a/composer.json +++ b/composer.json @@ -10,6 +10,7 @@ }, "require": { "slim/slim": "^3", - "respect/validation": "^1.1" + "respect/validation": "^1.1", + "guzzlehttp/guzzle": "~6.0" } } diff --git a/core/Controllers/AdminReportsController.php b/core/Controllers/AdminReportsController.php new file mode 100644 index 0000000000000000000000000000000000000000..b5660c4c224c523ae11f4d80568a69a1ba350ef3 --- /dev/null +++ b/core/Controllers/AdminReportsController.php @@ -0,0 +1,349 @@ +<?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 Status Controller +* @author dev@maarch.org +* @ingroup core +*/ + +namespace Core\Controllers; + +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Respect\Validation\Validator; +use Core\Models\AdminReportsModel; + +class AdminReportsController +{ + public function getList(RequestInterface $request, ResponseInterface $response) + { + $obj = AdminReportsModel::getList(); + + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + } + + public function getAllGroups(RequestInterface $request, ResponseInterface $response) + { + $obj = AdminReportsModel::getAllGroups(); + + $datas = [ + $obj, + ]; + + return $response->withJson($obj); + + } + + public function getUsers (RequestInterface $request, ResponseInterface $response, $aArgs) + { + if (isset($aArgs['id'])) + { + $id = $aArgs['id']; + $obj = AdminReportsModel::getUsers([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _ID . ' ' . _IS_EMPTY]); + } $obj = AdminReportsModel::getUsers(); + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + + + } + + public function getUserByGroupId(RequestInterface $request, ResponseInterface $response, $aArgs) + { + if (isset($aArgs['id'])) { + $id = $aArgs['id']; + $obj = AdminReportsModel::getUserByGroupId([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _ID . ' ' . _IS_EMPTY]); + } + + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + } + + + +public function getReportsTypesByXML(RequestInterface $request, ResponseInterface $response, $aArgs) + { + + if (isset($aArgs['id'])) { + $id = $aArgs['id']; + $obj = AdminReportsModel::getReportsTypesByXML([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _ID . ' ' . _IS_EMPTY]); + } + + + /* $datas = [ + $obj, + ];*/ + + + return $response->withJson($obj); + } + + public function update(RequestInterface $request, ResponseInterface $response, $aArgs) + { + + + + $data = $request->getParams(); + //$data = $aArgs['data']; + /* + * + *{"id":{"id" : "entity_late_mail","checked" : false },{"id" : "process_delay","checked" : false },{"id" : "folder_view_stat","checked" : false }} + A mettre dans le body du reste client, c'est ce qui sera dans getParams + * + * + */ + $id = $aArgs['id']; + $obj = AdminReportsModel::update([ + 'id' => $id, + 'data' => $data + ]); + + return $response->withJson($obj); + + } + + + + + /* public function getById(RequestInterface $request, ResponseInterface $response, $aArgs) + { + if (isset($aArgs['id'])) { + $id = $aArgs['id']; + $obj = StatusModel::getById([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _ID . ' ' . _IS_EMPTY]); + } + + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + } + + public function create(RequestInterface $request, ResponseInterface $response, $aArgs) + { + $errors = []; + + $errors = $this->control($request, 'create'); + + if (!empty($errors)) { + return $response + ->withStatus(500) + ->withJson(['errors' => $errors]); + } + + $aArgs = $request->getQueryParams(); + + $return = StatusModel::create($aArgs); + + if ($return) { + $id = $aArgs['id']; + $obj = StatusModel::getById([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _NOT_CREATE]); + } + + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + } + + public function update(RequestInterface $request, ResponseInterface $response, $aArgs) + { + $errors = []; + + $errors = $this->control($request, 'update'); + + if (!empty($errors)) { + return $response + ->withStatus(500) + ->withJson(['errors' => $errors]); + } + + $aArgs = $request->getQueryParams(); + + $return = StatusModel::update($aArgs); + + if ($return) { + $id = $aArgs['id']; + $obj = StatusModel::getById([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _NOT_UPDATE]); + } + + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + } + + public function delete(RequestInterface $request, ResponseInterface $response, $aArgs) + { + if (isset($aArgs['id'])) { + $id = $aArgs['id']; + $obj = StatusModel::delete([ + 'id' => $id + ]); + } else { + return $response + ->withStatus(500) + ->withJson(['errors' => _NOT_DELETE]); + } + + $datas = [ + $obj, + ]; + + return $response->withJson($datas); + } + + protected function control($request, $mode) + { + $errors = []; + + if ($mode == 'update') { + $obj = StatusModel::getById([ + 'id' => $request->getParam('id') + ]); + if (empty($obj)) { + array_push( + $errors, + _ID . ' ' . $request->getParam('id') . ' ' . _NOT_EXISTS + ); + } + } + + if (!Validator::notEmpty()->validate($request->getParam('id'))) { + array_push($errors, _ID . ' ' . _IS_EMPTY); + } elseif ($mode == 'create') { + $obj = StatusModel::getById([ + 'id' => $request->getParam('id') + ]); + if (!empty($obj)) { + array_push( + $errors, + _ID . ' ' . $obj[0]['id'] . ' ' . _ALREADY_EXISTS + ); + } + } + + if (!Validator::regex('/^[\w.-]*$/')->validate($request->getParam('id'))) { + array_push($errors, _ID . ' ' . _NOT . ' ' . _VALID); + } + + if (!Validator::notEmpty()->validate($request->getParam('label_status'))) { + array_push($errors, _LABEL_STATUS . ' ' . _IS_EMPTY); + } + + if (Validator::notEmpty() + ->validate($request->getParam('is_system')) && + !Validator::contains('Y') + ->validate($request->getParam('is_system')) && + !Validator::contains('N') + ->validate($request->getParam('is_system')) + ) { + array_push($errors, _IS_SYSTEM . ' ' . _NOT . ' ' . _VALID); + } + + if (Validator::notEmpty() + ->validate($request->getParam('is_folder_status')) && + !Validator::contains('Y') + ->validate($request->getParam('is_folder_status')) && + !Validator::contains('N') + ->validate($request->getParam('is_folder_status')) + ) { + array_push($errors, _IS_FOLDER_STATUS . ' ' . _NOT . ' ' . _VALID); + } + + if (Validator::notEmpty() + ->validate($request->getParam('img_filename')) && + (!Validator::regex('/^[\w-.]+$/') + ->validate($request->getParam('img_filename')) || + !Validator::length(null, 255) + ->validate($request->getParam('img_filename'))) + ) { + array_push($errors, _IMG_FILENAME . ' ' . _NOT . ' ' . _VALID); + } + + if (Validator::notEmpty() + ->validate($request->getParam('maarch_module')) && + !Validator::length(null, 255) + ->validate($request->getParam('maarch_module')) + ) { + array_push($errors, _MAARCH_MODULE . ' ' . _NOT . ' ' . _VALID); + } + + if (Validator::notEmpty() + ->validate($request->getParam('can_be_searched')) && + !Validator::contains('Y') + ->validate($request->getParam('can_be_searched')) && + !Validator::contains('N') + ->validate($request->getParam('can_be_searched')) + ) { + array_push($errors, _CAN_BE_SEARCHED . ' ' . _NOT . ' ' . _VALID); + } + + if (Validator::notEmpty() + ->validate($request->getParam('can_be_modified')) && + !Validator::contains('Y') + ->validate($request->getParam('can_be_modified')) && + !Validator::contains('N') + ->validate($request->getParam('can_be_modified')) + ) { + array_push($errors, _CAN_BE_MODIFIED . ' ' . _NOT . ' ' . _VALID); + } + + return $errors; + }*/ +} + diff --git a/core/Models/AdminReportsModel.php b/core/Models/AdminReportsModel.php new file mode 100644 index 0000000000000000000000000000000000000000..206802355767ea08d479fe639467f1abac8cec7c --- /dev/null +++ b/core/Models/AdminReportsModel.php @@ -0,0 +1,21 @@ +<?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 Attachment Model +* @author dev@maarch.org +* @ingroup core +*/ + +namespace Core\Models; + +class AdminReportsModel extends AdminReportsModelAbstract +{ + // Do your stuff in this class +} diff --git a/core/Models/AdminReportsModelAbstract.php b/core/Models/AdminReportsModelAbstract.php new file mode 100644 index 0000000000000000000000000000000000000000..e91be0a17981ab838d0abd8d8c5bcae757192580 --- /dev/null +++ b/core/Models/AdminReportsModelAbstract.php @@ -0,0 +1,229 @@ +<?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 Status Model +* @author dev@maarch.org +* @ingroup core +*/ + +namespace Core\Models; + +require_once 'apps/maarch_entreprise/services/Table.php'; + +class AdminReportsModelAbstract extends \Apps_Table_Service +{ + + + public static function getList() + { + + $aReturn = static::select([ + 'select' => ['*'], + 'table' => ['usergroups'], + ]); + return $aReturn; + } + +public static function getUsers(array $aArgs = []) + { + $val = $this->group; + static::checkRequired($aArgs, ['id']); + static::checkString($aArgs, ['id']); + + $aReturn = static::select([ + 'select' => ['*'], + 'table' => ['usergroup-content'], + 'where' => ['group_id = ?'], + 'data' => [$val] + ]); + + return $aReturn; + + } + + + public static function getAllGroups() + { + $aReturn = static::select([ + 'select' => ['*'], + 'table' => ['usergroups'], + ]); + return $aReturn; + } + + public static function getReportsTypesByXML(array $aArgs = []) + { + + static::checkRequired($aArgs, ['id']); + static::checkString($aArgs, ['id']); + + if (file_exists('custom/' .$_SESSION['custom_override_id']. '/apps/maarch_entreprise/xml/entreprise.xml')) { + $path = 'custom/' .$_SESSION['custom_override_id']. '/apps/maarch_entreprise/xml/entreprise.xml'; + } else { + $path = 'modules/reports/xml/reports.xml'; + } + + $xmlfile = simplexml_load_file($path); + $reportsTypes = []; + $reportsTypes = $xmlfile->REPORT; + $tab = []; + $tab_id = []; + + + if (count($reportsTypes) > 0) { + + foreach ($reportsTypes as $value) { + if ($value->ENABLED == "true") { + $tab[] = [ + 'id' => (string)$value->ID, + 'label' => (string)$value->LABEL, + 'desc' => (string)$value->DESCRIPTION, + 'url' => (string)$value->URL, + 'in_menu_reports' =>(string)$value->IN_MENU_REPORTS, + 'origin' => (string)$value->ORIGIN, + 'module' => (string)$value->MODULE, + 'module_label' => (string)$value->MODULE_LABEL, + 'checked' => false + ]; + $tab_id[] = $value->ID; // Array containing all possible values for report_id + } + + } + + $aReturn = static::select([ + 'select' => ['*'], + 'table' => ['usergroups_reports'], + 'where' => ['report_id in (?)', 'group_id = ?'], + 'data' => [$tab_id, $aArgs['id']] + ]); + + $tab_id_query = []; + foreach($aReturn as $rep ) { // First loop which stores the reports_id from the SQL query + $tab_id_query[] = $rep['report_id']; + } + + /* + Loop testing each values of reports_id from the SQL query, if there is a match up then [checked] = true otherwise false + */ + foreach($tab as $rep => $value) { // Checking match up and affecting boolean + $tab[$rep]['checked'] = in_array($tab[$rep]['id'],$tab_id_query); + } + return $tab; + + } else return ['error' => 'xml issue']; + + + + } + + public static function getUserByGroupId(array $aArgs = []) + { + static::checkRequired($aArgs, ['id']); + static::checkString($aArgs, ['id']); + + $aReturn = static::select([ + 'select' => ['*'], + 'table' => ['usergroup_content'], + 'where' => ['group_id = ?'], + 'data' => [$aArgs['id']] + ]); + + return $aReturn; + } + + public static function create(array $aArgs = []) + { + static::checkRequired($aArgs, ['id']); + static::checkString($aArgs, ['id']); + + $aReturn = static::insertInto($aArgs, 'status'); + + return $aReturn; + } + + + public static function update(array $aArgs = []) + { + static::checkRequired($aArgs, ['id']); + static::checkString($aArgs, ['id']); + + + $reps_by_id = []; + $reps_by_id = $aArgs['data']; + var_dump($reps_by_id); + $tab_delete = []; + $tab_update = []; + $tab_id_args = []; + +foreach($reps_by_id as $rep ) { //First loop which stores the report_id from the SQL query + $tab_id_args[] = $rep['id']; + } + + $aReturn = static::select([ + 'select' =>['*'], + 'table' => ['usergroups_reports'], + 'where' => ['group_id = ?','report_id in (?)'], + 'data' => [$aArgs['id'], $tab_id_args] + ]); + + $tabIdQuery = []; + foreach($aReturn as $rep ) { // First loop which stores the report_id from the SQL query + $tab_id_query[] = $rep['report_id']; + } + /*Loop checking if there is a match up with the values from the SQL query + */ + foreach($reps_by_id as $value) { //Checking if there is a match up with the values from $reps_by_id array and $tab_id_query,adding/deleting a line in the usergroups_reports table in the database + + if(in_array($value['id'],$tab_id_query)) { + if (!$value['checked']) { // If the value is not checked ( = false) and in the array( i.e in the table usergroups_report) then we delete the line in the database + $tab_delete = [ + 'group_id' => $aArgs['id'], + 'report_id' => $value['id'] + ]; + static::delete($tab_delete); + } + + }else{ + if ($value['checked']) { // If the value is checked ( = true) and not in the array( i.e in the table usergroups_report) then we add the line in the database + $tab_update = [ + 'group_id' => $aArgs['id'], + 'report_id' => $value['id'] + ]; + static::insertInto($tab_update, 'usergroups_reports'); + } + } + } + $test_unitaire_true_only = static::select([ + 'select' =>['*'], + 'table' => ['usergroups_reports'], + 'where' => ['group_id = ?','report_id in (?)'], + 'data' => [$aArgs['id'], $tab_id_args] + ]); + return $test_unitaire_true_only; + + +} + + + + public static function delete(array $aArgs = []) + { + /*static::checkRequired($aArgs, ['report_id']); + static::checkString($aArgs, ['group_id']);*/ + + $aReturn = static::deleteFrom([ + 'table' => 'usergroups_reports', + 'where' => ['report_id = ?','group_id = ?'], + 'data' => [$aArgs['report_id'],$aArgs['group_id']] + ]); + + return $aReturn; + } +} diff --git a/core/Test/AdminReportsControllerTest.php b/core/Test/AdminReportsControllerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..cb28576808ce61a138c42f269b60e5031cebac0f --- /dev/null +++ b/core/Test/AdminReportsControllerTest.php @@ -0,0 +1,109 @@ +<?php + +namespace MaarchTest; + +/** +* 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. +* +*/ + +require_once __DIR__.'/define.php'; + +class AdminReportsTest extends \PHPUnit_Framework_TestCase +{ + public function testGetList() + { + $client = new \GuzzleHttp\Client([ + 'base uri' => '127.0.0.1/MaarchCourrier/rest/report/groups', + 'timeout' => 42.0,] + ); + $response = $client->request('GET','127.0.0.1/MaarchCourrier/rest/report/groups',[ + 'auth' => ['superadmin','superadmin'] + ]); + + + $decoded_response = json_decode($response->getBody(), true); + $this->assertNotNull($decoded_response); + } + + + public function testGetReportsTypesByXML(){ + + $client = new \GuzzleHttp\Client([ + 'base uri' => '127.0.0.1/MaarchCourrier/rest/report/groups', + 'timeout' => 42.0,] + ); + $aArgs = [ + 'id'=> 'ELU' + ]; + $response = $client->request('GET','127.0.0.1/MaarchCourrier/rest/report/groups/'.$aArgs['id'],[ + 'auth' => ['superadmin','superadmin'] + ]); + + $decoded_response = json_decode($response->getBody(), true); + $this->assertNotNull($decoded_response); + + } + + /* public function testGetUserByGroupId() + { + $action = new \Core\Controllers\AdminReportsController(); + + $environment = \Slim\Http\Environment::mock( + [ + 'REQUEST_METHOD' => 'GET', + ] + ); + + $aArgs = [ + 'id'=> 'NEW' + ]; + + $request = \Slim\Http\Request::createFromEnvironment($environment); + $response = new \Slim\Http\Response(); + $response = $action->getUserByGroupId($request, $response, $aArgs); + $compare = '[[{"user_id":"NEW","group_id":"Nouveau",' + . '"primary_group":"Y","role":"N"}]]'; + + $this->assertSame((string)$response->getBody(), $compare); + } +*/ + + public function testUpdate() + { + $client = new \GuzzleHttp\Client([ + 'base uri' => '127.0.0.1/MaarchCourrier/rest/report/groups', + 'timeout' => 42.0,] + ); + $aArgs = [ + 'id'=> 'ELU' + ]; + + $response_guzzle_XML = $client->request('GET','127.0.0.1/MaarchCourrier/rest/report/groups/'.$aArgs['id'],[ + 'auth' => ['superadmin','superadmin'] + ]); + $d = []; + $d = json_decode($response_guzzle_XML->getBody(), true); + $checked_val_reverse = !$d[0]['checked']; + + $tab_test_unitaire [] = [ + 'id' => "folder_view_stat", + 'checked' => $checked_val_reverse + ]; + $aArgs['data'] = $tab_test_unitaire; + + $response_guzzle = $client->request('PUT','127.0.0.1/MaarchCourrier/rest/report/groups/'.$aArgs['id'],[ + 'auth' => ['superadmin','superadmin'],'form_params' => $aArgs['data'] + ]); + $response_guzzle_XML_after = $client->request('GET','127.0.0.1/MaarchCourrier/rest/report/groups/'.$aArgs['id'],[ + 'auth' => ['superadmin','superadmin'] + ]); + $guzzle_xml_after = json_decode($response_guzzle_XML_after->getBody(), true); + $checked_val_after_update = $guzzle_xml_after[0]['checked']; + + $this->assertSame($checked_val_reverse, $checked_val_after_update); + } + +} diff --git a/rest/index.php b/rest/index.php index fdbfa80bcd0f921ba680f5aa5fa159dbe9c3df45..8d3c60f16f6ca036573e7a04a5c3eaab714b2cdb 100644 --- a/rest/index.php +++ b/rest/index.php @@ -108,8 +108,25 @@ $app->get('/docserver', \Core\Controllers\DocserverController::class . ':getList $app->get('/docserver/{id}', \Core\Controllers\DocserverController::class . ':getById'); //docserverType -$app->get('/docserverType', \Core\Controllers\DocserverTypeController::class . ':getList'); -$app->get('/docserverType/{id}', \Core\Controllers\DocserverTypeController::class . ':getById'); +$app->get('/docserverType', \core\Controllers\DocserverTypeController::class . ':getList'); +$app->get('/docserverType/{id}', \core\Controllers\DocserverTypeController::class . ':getById'); + + +/** +* +* +* +* +* +* +* +**/ +//admin_reports +$app->get('/report/groups', \Core\Controllers\AdminReportsController::class . ':getList'); +$app->get('/report/groups/{id}', \Core\Controllers\AdminReportsController::class . ':getReportsTypesByXML'); +$app->put('/report/groups/{id}', \Core\Controllers\AdminReportsController::class . ':update'); + + //attachments $app->get('/attachments', \Attachments\Controllers\AttachmentsController::class . ':getList');