diff --git a/apps/maarch_entreprise/standard_connect.php b/apps/maarch_entreprise/standard_connect.php index 8606dc75de6fdc38cd38d5cc7bc8c397b25edf47..4798edefec6ac52ce39ebaa04a34531daef0b3f4 100755 --- a/apps/maarch_entreprise/standard_connect.php +++ b/apps/maarch_entreprise/standard_connect.php @@ -1,7 +1,18 @@ <?php +function getHeaders() +{ + + foreach ($_SERVER as $h => $v ) + { + if( preg_match( '/HTTP_(.+)/', $h, $hp ) ) + $headers[$hp[1]] = $v ; + } + return $headers; +} if ($restMode) { $userLogin = []; + $http_header = getHeaders(); //HTTP AUTH if ( (isset($_SERVER["PHP_AUTH_USER"]) @@ -14,6 +25,20 @@ if ($restMode) { list($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]) = explode(":", base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6))); } + else if (isset($http_header['LOGIN']) && isset($http_header['PASSWORD'])){ + $force_login = $http_header['LOGIN']; + $force_psw = $http_header['PASSWORD']; + } + else{ + header("WWW-Authenticate: Basic realm=\"Maarch WebServer Engine\""); + if (preg_match("/Microsoft/", $_SERVER["SERVER_SOFTWARE"])) { + header("Status: 401 Unauthorized"); + exit(); + } else { + header("HTTP/1.0 401 Unauthorized"); + exit(); + } + } if ( (isset($_SERVER["PHP_AUTH_USER"]) && isset($_SERVER["PHP_AUTH_PW"]) @@ -24,6 +49,11 @@ if ($restMode) { $password = $_SERVER["PHP_AUTH_PW"]; } + else if (isset($force_login) && isset($force_psw)){ + $_SESSION['user']['UserId'] = $force_login; + $password = $force_psw; + } + $userLogin['user'] = $_SESSION['user']['UserId']; $userLogin['password'] = $password; diff --git a/core/Controllers/ResController.php b/core/Controllers/ResController.php index c99b243c3dacdace14cbab2a3035be828c07501c..506f4c6f448a9d85bab39fb6b4b2c82812f6f372 100755 --- a/core/Controllers/ResController.php +++ b/core/Controllers/ResController.php @@ -226,4 +226,81 @@ class ResController } return $return; } + + + + + public function getListDocs(RequestInterface $request, ResponseInterface $response, $aArgs) + { + $clause = $aArgs['clause']; + $clause_elem = explode("&",$clause); + + $tab_where = array(); + foreach ($clause_elem as $elem) { + $tmp = explode("=",$elem); + $column = $tmp[0]; + $values = explode(",",$tmp[1]); + $tmp_values = array(); + foreach ($values as $v) { + if (!empty($v)){ + if ($column == "date_begin"){ + $v_date = explode("-",$v); + array_push($tmp_values, "creation_date >= '".$v_date[2]."-".$v_date[1]."-".$v_date[0]."'"); + } + else if ($column == "date_end"){ + $v_date = explode("-",$v); + array_push($tmp_values, "creation_date <= '".$v_date[2]."-".$v_date[1]."-".$v_date[0]."'"); + } + else + array_push($tmp_values, $column."='".trim($v)."'"); + } + } + if (count($tmp_values) > 0) array_push($tab_where, "(".implode(" OR ", $tmp_values).")"); + } + + $clause = implode(" AND ", $tab_where); + if (empty($clause)) $clause = ' 1=1 '; + + $colSelect = $aArgs['select']; + $select_elem = explode(",",$colSelect); + $tab_tables = array(); + + foreach ($select_elem as $col) { + $c_elem=explode(".",$col); + if (!in_array($c_elem[0], $tab_tables)){ + //ajout de la table + array_push($tab_tables,$c_elem[0]); + + //ajout de la jointure + if ($c_elem[0] == "mlb_coll_ext") + $clause .= " AND res_letterbox.res_id = mlb_coll_ext.res_id "; + elseif ($c_elem[0] == "doctypes") + $clause .= " AND res_letterbox.type_id = doctypes.type_id "; + elseif ($c_elem[0] == "entities") + $clause .= " AND res_letterbox.destination=entities.entity_id "; + } + } + + $result = array(); + $resList = ResModel::getDocsByClause( + [ + 'select' => [$colSelect], + 'table' => implode(",",$tab_tables), + 'clause' => $clause + ] + ); + + foreach ($resList as $doc) { + $result_infos = array(); + foreach ($doc as $key => $value) { + if (empty($value)) $result_infos[$key] = ''; + elseif ($key=='creation_date' || ($key=='closing_date' && !empty($value)) || ($key=='process_limit_date' && !empty($value)) || ($key=='admission_date' && !empty($value))) { + $result_infos[$key] = str_replace("-","/",\functions::format_date_db($value, false, '', false)); + } + else $result_infos[$key] = $value; + } + array_push($result,$result_infos); + } + return $response->withJson(['docs' => $result, 'nb_docs' => count($resList)]); + } } diff --git a/core/Models/ResModelAbstract.php b/core/Models/ResModelAbstract.php index 1739348cf2a7660dead7d9e56aa9bb08b0d847a6..a95c1578f8bd70e6cfbc28d0c67b49913cb66d7b 100755 --- a/core/Models/ResModelAbstract.php +++ b/core/Models/ResModelAbstract.php @@ -157,6 +157,26 @@ class ResModelAbstract return ['lock' => $lock, 'lockBy' => $lockBy]; } + public static function getDocsByClause(array $aArgs = []) + { + ValidatorModel::notEmpty($aArgs, ['clause']); + + if (!empty($aArgs['table'])) { + $table = $aArgs['table']; + } else { + $table = 'res_view_letterbox'; + } + + $aReturn = DatabaseModel::select([ + 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], + 'table' => [$table], + 'where' => [$aArgs['clause']], + 'order_by' => ['res_letterbox.res_id'] + ]); + + return $aReturn; + } + // In Progress // public static function getProcessLimitDate(array $aArgs) // { diff --git a/rest/index.php b/rest/index.php index e4c61c308fd0d9bc34a142aff14a927e4b7d878c..ee43aa222fbe16d3ed9484411d29cf4e668d8cf8 100755 --- a/rest/index.php +++ b/rest/index.php @@ -241,5 +241,8 @@ $app->post('/contacts', \Core\Controllers\ContactController::class . ':create'); //Templates $app->post('/templates/{id}/duplicate', \Templates\Controllers\TemplateController::class . ':duplicate'); +//liste documents +$app->get('/res/listDocs/{clause}/{select}', \Core\Controllers\ResController::class . ':getListDocs'); + $app->run();