diff --git a/apps/maarch_entreprise/Views/profile.component.html b/apps/maarch_entreprise/Views/profile.component.html index 1f38751cd8621e48082a2c85656bf1a3ff5dc8da..cb5e0bcac553acc93fc3f68e0a7ba70364a0ed69 100755 --- a/apps/maarch_entreprise/Views/profile.component.html +++ b/apps/maarch_entreprise/Views/profile.component.html @@ -432,7 +432,7 @@ <mat-icon class="fa fa-times"></mat-icon> </button> </mat-form-field> - <img src="{{coreUrl}}rest/users/{{user.id}}/signatures/{{signature.id}}" alt="Signature" style="max-width:100%;height:60px;"> + <img src="{{coreUrl}}rest/users/{{user.id}}/signatures/{{signature.id}}/content" alt="Signature" style="max-width:100%;height:60px;"> </mat-card-content> </mat-card> </div> diff --git a/apps/maarch_entreprise/Views/signature-book.component.html b/apps/maarch_entreprise/Views/signature-book.component.html index 5626de9f1b92b7d1e2e18f9db4c5cbc48cf917b4..ac5dc94189e8a9cdb3088567061cf57c6e31d476 100755 --- a/apps/maarch_entreprise/Views/signature-book.component.html +++ b/apps/maarch_entreprise/Views/signature-book.component.html @@ -189,7 +189,7 @@ (mouseenter)="showSignaturesPanel = true" (mouseleave)="showSignaturesPanel = false" class="pjSign" [ngClass]="[signatureBook.attachments[rightSelectedThumbnail].status == 'SIGN' ? 'signed' : '']" [ngStyle]="{'box-shadow': signatureBook.listinstance.requested_signature ? 'inset 0px 0px 5px 0px red' : 'inset 0px 0px 5px 0px #656565;'}"> <span *ngIf="signatureBook.attachments[rightSelectedThumbnail].status != 'SIGN' && signatureBook.signatures[0]" style="cursor: pointer"> <span *ngIf="!loadingSign"> - <img *ngFor="let signature of signatureBook.signatures; let i = index" src="{{coreUrl}}rest/users/{{signature.user_serial_id}}/signatures/{{signature.id}}" (click)="signFile(signatureBook.attachments[rightSelectedThumbnail], signature)" [ngStyle]="{'display': !showSignaturesPanel && i > 0 ? 'none' : ''}" title="{{signature.signature_label}}"> + <img *ngFor="let signature of signatureBook.signatures; let i = index" src="{{coreUrl}}rest/users/{{signature.user_serial_id}}/signatures/{{signature.id}}/content" (click)="signFile(signatureBook.attachments[rightSelectedThumbnail], signature)" [ngStyle]="{'display': !showSignaturesPanel && i > 0 ? 'none' : ''}" title="{{signature.signature_label}}"> </span> <i *ngIf="loadingSign" class="fa fa-spinner fa-pulse fa-2x fa-fw"></i> </span> diff --git a/apps/maarch_entreprise/Views/user-administration.component.html b/apps/maarch_entreprise/Views/user-administration.component.html index 6b19a30d9dcd0d44f4a51038a5de0d6c907b46d8..3e4310b728c1afc04c08aa5cd98cf7d770bf9054 100755 --- a/apps/maarch_entreprise/Views/user-administration.component.html +++ b/apps/maarch_entreprise/Views/user-administration.component.html @@ -326,7 +326,7 @@ <mat-icon class="fa fa-times"></mat-icon> </button> </mat-form-field> - <img src="{{coreUrl}}rest/users/{{user.id}}/signatures/{{signature.id}}" alt="Signature" style="width:auto;height:60px;"> + <img src="{{coreUrl}}rest/users/{{user.id}}/signatures/{{signature.id}}/content" alt="Signature" style="width:auto;height:60px;"> </mat-card-content> </mat-card> </div> diff --git a/apps/maarch_entreprise/class/class_lists_Abstract.php b/apps/maarch_entreprise/class/class_lists_Abstract.php index a2bc5aefc2ed26de18ff11d48de4d3730df9ae38..c151bb1476c5f91d1451a72a013c6af8cdfc3166 100755 --- a/apps/maarch_entreprise/class/class_lists_Abstract.php +++ b/apps/maarch_entreprise/class/class_lists_Abstract.php @@ -3402,7 +3402,7 @@ abstract class lists_Abstract extends Database public function showList($resultArray, $parameters = array(), $listKey = '', $currentBasket = array()) { //Put in different arrays: label, show, sort of columns - if (count($resultArray) > 0 && isset($resultArray[0])) { + if (!empty($resultArray) && is_array($resultArray) && count($resultArray) > 0 && isset($resultArray[0])) { $listColumn = array(); $showColumn = array(); $sortColumn = array(); @@ -3534,7 +3534,11 @@ abstract class lists_Abstract extends Database } $this->formId = $parameters['formId']; $this->haveAction = false; - $this->countResult = count($resultArray); + + $this->countResult = 0; + if (!empty($resultArray) && is_array($resultArray)) { + $this->countResult = count($resultArray); + } if (count($currentBasket) > 0) { $this->currentBasket = $currentBasket; } @@ -3614,7 +3618,8 @@ abstract class lists_Abstract extends Database } //If there some results - if (count($resultArray) > 0 || $this->params['bool_showAddButton']) { + + if ((!empty($resultArray) && is_array($resultArray) && count($resultArray) > 0) || $this->params['bool_showAddButton']) { //Need a form? $this->withForm = false; if ($this->params['bool_checkBox'] === true || $this->params['bool_radioButton'] === true || diff --git a/apps/maarch_entreprise/indexing_searching/loadFiveLastMails.php b/apps/maarch_entreprise/indexing_searching/loadFiveLastMails.php index b941a987362fa5c5f5768634861d84e096b1a30a..445ac1f582df23892ceddf0c7936f100fe24afb2 100755 --- a/apps/maarch_entreprise/indexing_searching/loadFiveLastMails.php +++ b/apps/maarch_entreprise/indexing_searching/loadFiveLastMails.php @@ -87,7 +87,11 @@ if($selectedTemplate <> 'none') $extension_icon = "_big"; //Result Array -for ($i=0;$i<count($tab);$i++) { +$ct = 0; +if (!empty($tab) && is_array($tab)) { + $ct = count($tab); +} +for ($i = 0; $i < $ct; $i++) { for ($j=0;$j<count($tab[$i]);$j++) { diff --git a/apps/maarch_entreprise/smartphone/load_user_signatures.php b/apps/maarch_entreprise/smartphone/load_user_signatures.php index 283e8bb41e10b1152ae3f44c62a4bc7a2b3b6eb0..bf55bda4f3e3711e977ea58da76df9352899248a 100755 --- a/apps/maarch_entreprise/smartphone/load_user_signatures.php +++ b/apps/maarch_entreprise/smartphone/load_user_signatures.php @@ -83,7 +83,7 @@ $subject = $res->subject; foreach ($_SESSION['user']['pathToSignature'] as $sign) { echo '<a href="signature_main_panel.php?id='.$s_id.'&collId='.$_SESSION['collection_id_choice'].'&tableName='.$_SESSION['res_table'].'&res_id_attach='.$att_id.'">'; - echo '<img src="'. $_SESSION['config']['coreurl'].'rest/users/'.$userInfos[0]['id'].'/signatures/'.$sign['id'].'" alt="signature" style="width:20%;margin:10px;float:left;border:1px solid black;cursor:pointer;" />'; + echo '<img src="'. $_SESSION['config']['coreurl'].'rest/users/'.$userInfos[0]['id'].'/signatures/'.$sign['id'].'/content" alt="signature" style="width:20%;margin:10px;float:left;border:1px solid black;cursor:pointer;" />'; echo '</a>'; } ?> diff --git a/apps/maarch_entreprise/smartphone/signature_main_panel.php b/apps/maarch_entreprise/smartphone/signature_main_panel.php index b81ab944876c9f37b1d1defac0eda4ddc366d591..c48dbb111880fb973f0d2325b30d8fcfe9f05519 100755 --- a/apps/maarch_entreprise/smartphone/signature_main_panel.php +++ b/apps/maarch_entreprise/smartphone/signature_main_panel.php @@ -87,7 +87,7 @@ $subject = $res->subject; $_SESSION['user']['pathToSignature'] = \User\models\UserSignatureModel::get(['select' => ['id'], 'where' => ['user_serial_id = ?'], 'data' => [$userInfos[0]['id']]]); if (count($_SESSION['user']['pathToSignature']) > 0) { foreach ($_SESSION['user']['pathToSignature'] as $sign) { - echo '<img src="'.$_SESSION['config']['coreurl'].'rest/users/'.$userInfos[0]['id'].'/signatures/'.$sign['id'].'" alt="signature" style="width:99px;background:#FFF;" onclick="loadImgSign(this);"/>'; + echo '<img src="'.$_SESSION['config']['coreurl'].'rest/users/'.$userInfos[0]['id'].'/signatures/'.$sign['id'].'/content" alt="signature" style="width:99px;background:#FFF;" onclick="loadImgSign(this);"/>'; } } ?> diff --git a/rest/index.php b/rest/index.php index 0d0e3a6fa483655d02730ab1892848785a02b527..83b587306640602fe6341d4238813e8050f7bd40 100755 --- a/rest/index.php +++ b/rest/index.php @@ -205,6 +205,7 @@ $app->put('/reports/groups/{groupId}', \Report\controllers\ReportController::cla //Ressources $app->post('/res', \Resource\controllers\ResController::class . ':create'); $app->post('/resExt', \Resource\controllers\ResController::class . ':createExt'); +$app->get('/res/{resId}/content', \Resource\controllers\ResController::class . ':getFileContent'); $app->put('/res/resource/status', \Resource\controllers\ResController::class . ':updateStatus'); $app->post('/res/list', \Resource\controllers\ResController::class . ':getList'); $app->get('/res/{resId}/lock', \Resource\controllers\ResController::class . ':isLock'); @@ -256,7 +257,7 @@ $app->put('/users/{id}/entities/{entityId}/primaryEntity', \User\controllers\Use $app->get('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':isEntityDeletable'); $app->delete('/users/{id}/entities/{entityId}', \User\controllers\UserController::class . ':deleteEntity'); $app->post('/users/{id}/signatures', \User\controllers\UserController::class . ':addSignature'); -$app->get('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':getImageSignature'); +$app->get('/users/{id}/signatures/{signatureId}/content', \User\controllers\UserController::class . ':getImageContent'); $app->put('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':updateSignature'); $app->delete('/users/{id}/signatures/{signatureId}', \User\controllers\UserController::class . ':deleteSignature'); $app->post('/users/{id}/redirectedBaskets', \User\controllers\UserController::class . ':setRedirectedBaskets'); diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index c4b0fe5525b46f983b6e6b10eb0690f6aed99917..c1b1ef100f9fb4181341efe46b88ee16c87809a3 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -15,6 +15,7 @@ namespace Resource\controllers; use Basket\models\BasketModel; +use Docserver\models\DocserverModel; use Group\controllers\GroupController; use Note\models\NoteModel; use Group\models\ServiceModel; @@ -159,6 +160,33 @@ class ResController return $response->withJson(['success' => 'success']); } + public function getFileContent(Request $request, Response $response, array $aArgs) + { + if (!ResController::hasRightByResId(['resId' => $aArgs['resId'], 'userId' => $GLOBALS['userId']])) { + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } + + $document = ResModel::getById(['select' => ['docserver_id', 'path', 'filename'], 'resId' => $aArgs['resId']]); + if (empty($document)) { + return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']); + } + + $docserver = DocserverModel::getByDocserverId(['docserverId' => $document['docserver_id'], 'select' => ['path_template']]); + if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) { + return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']); + } + + $pathToDocument = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $document['path']) . $document['filename']; + $fileContent = file_get_contents($pathToDocument); + if ($fileContent === false) { + return $response->withStatus(404)->withJson(['errors' => 'Document not found on docserver']); + } + + $response->write($fileContent); + + return $response->withHeader('Content-Type', FILEINFO_MIME_TYPE); + } + public function updateExternalInfos(Request $request, Response $response) { $data = $request->getParams(); @@ -247,9 +275,13 @@ class ResController } if (!empty($basketsClause)) { - $res = ResModel::getOnView(['select' => [1], 'where' => ['res_id = ?', "({$basketsClause})"], 'data' => [$aArgs['resId']]]); - if (!empty($res)) { - return true; + try { + $res = ResModel::getOnView(['select' => [1], 'where' => ['res_id = ?', "({$basketsClause})"], 'data' => [$aArgs['resId']]]); + if (!empty($res)) { + return true; + } + } catch (\Exception $e) { + return false; } } diff --git a/src/app/resource/models/ResModelAbstract.php b/src/app/resource/models/ResModelAbstract.php index b5792827b5326b0b4e212b5f7204f91f634bb7b7..b4c1d1d578f6fe8cf55d31baa3876273d234901c 100644 --- a/src/app/resource/models/ResModelAbstract.php +++ b/src/app/resource/models/ResModelAbstract.php @@ -65,6 +65,10 @@ abstract class ResModelAbstract 'data' => [$aArgs['resId']] ]); + if (empty($aResources[0])) { + return []; + } + return $aResources[0]; } diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 1fb336ed07c4e2d139eca8ada1b34ac1b68c2b86..da61c66987215a2f7769ffa4a31e25fcb2492586 100644 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -452,7 +452,7 @@ class UserController return $response->withJson(['user' => UserModel::getById(['id' => $aArgs['id'], 'select' => ['status']])]); } - public function getImageSignature(Request $request, Response $response, array $aArgs) + public function getImageContent(Request $request, Response $response, array $aArgs) { $error = $this->hasUsersRights(['id' => $aArgs['id'], 'himself' => true]); if (!empty($error['error'])) {