Newer
Older
/**
* 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 VisaController
* @author <dev@maarch.org>
* @ingroup visa
*/
namespace Visa\Controllers;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
require_once 'modules/basket/class/class_modules_tools.php';
require_once 'core/class/class_core_tools.php';
require_once 'core/class/class_security.php';
require_once 'apps/maarch_entreprise/Models/ResModel.php';
require_once 'apps/maarch_entreprise/Models/HistoryModel.php';

Damien
committed
require_once 'apps/maarch_entreprise/Models/ContactsModel.php';
require_once 'apps/maarch_entreprise/Models/UsersModel.php';
require_once 'modules/basket/Models/BasketsModel.php';
require_once 'modules/visa/Models/VisaModel.php';
public function getSignatureBook(RequestInterface $request, ResponseInterface $response, $aArgs)
{
$resId = $aArgs['resId'];
$basketId = $aArgs['basketId'];
$collId = 'letterbox_coll';
$security = new \security();
$allowed = $security->test_right_doc($collId, $resId);
if (!$allowed) {
return $response->withJson(['error' => 'Not Allowed']);
}
$incomingMail = \ResModel::getById([

Laurent Séguin
committed
'resId' => $resId,
'select' => ['res_id', 'subject', 'alt_identifier', 'contact_id', 'address_id', 'user_lastname', 'user_firstname']
]);

Laurent Séguin
committed
if (empty($incomingMail)) {
return $response->withJson(['error' => 'No Document Found']);
}
if (!empty($incomingMail['contact_id'])) {
$incomingMailSender = \ContactsModel::getLabelledContactWithAddress(['contactId' => $incomingMail['contact_id'], 'addressId' => $incomingMail['address_id']]);
} else {
$incomingMailSender = $incomingMail['user_firstname'] . ' ' . $incomingMail['user_lastname'];

Laurent Séguin
committed
}
$basket = new \basket();
$actions = $basket->get_actions_from_current_basket($resId, $collId, 'PAGE_USE', false);
$actionsData = [];
$actionsData[] = ['value' => '', 'label' => _CHOOSE_ACTION];
foreach ($actions as $value) {
$actionsData[] = ['value' => $value['VALUE'], 'label' => $value['LABEL']];
}
$incomingMailAttachments = \ResModel::getAvailableLinkedAttachmentsIn([
'resIdMaster' => $resId,
'in' => ['incoming_mail_attachment'],
'select' => ['res_id', 'title']
]);

Laurent Séguin
committed
$documents = [
[
'title' => $incomingMail['subject'],

Laurent Séguin
committed
'viewerLink' => "index.php?display=true&dir=indexing_searching&page=view_resource_controler&visu&id={$resId}&collid=letterbox_coll",
'thumbnailLink' => "index.php?page=doc_thumb&module=thumbnails&res_id={$resId}&coll_id=letterbox_coll&display=true&advanced=true"
]
];
foreach ($incomingMailAttachments as $value) {
$documents[] = [
'title' => $value['title'],
'viewerLink' => "index.php?display=true&module=visa&page=view_pdf_attachement&res_id_master={$resId}&id={$value['res_id']}",
'thumbnailLink' => "index.php?page=doc_thumb&module=thumbnails&res_id={$value['res_id']}&coll_id=attachments_coll&display=true&advanced=true"
];
}
// $history = \HistoryModel::getByIdForActions([
// 'id' => $resId,
// 'select' => ['event_date', 'info', 'firstname', 'lastname'],
// 'orderBy' => ['event_date DESC']
// ]);
$resList = \BasketsModel::getResListById(
[
'basketId' => $basketId,
'select' => ['res_id', 'alt_identifier', 'subject', 'creation_date', 'process_limit_date', 'priority', 'contact_id', 'address_id', 'user_lastname', 'user_firstname'],
'order_by' => ['order_alphanum(alt_identifier) DESC'],
]
);
$attachmentTypes = $this->getAttachmentsTypesByXML();
$resListIndex = 0;
foreach ($resList as $key => $value) {
if ($value['res_id'] == $resId){
$resListIndex = $key;
}
if (!empty($value['contact_id'])) {
$resList[$key]['sender'] = \ContactsModel::getLabelledContactWithAddress(['contactId' => $value['contact_id'], 'addressId' => $value['address_id']]);
} else {
$resList[$key]['sender'] = $value['user_firstname'] . ' ' . $value['user_lastname'];
}
$attachmentsInResList = \ResModel::getAvailableLinkedAttachmentsNotIn(
[
'resIdMaster' => $value['res_id'],
'notIn' => ['incoming_mail_attachment', 'print_folder', 'converted_pdf', 'signed_response'],
'select' => ['status', 'attachment_type']
]
);
$allSigned = !empty($attachmentsInResList);
foreach ($attachmentsInResList as $value2) {
if ($attachmentTypes[$value2['attachment_type']]['sign'] && ($value2['status'] == 'TRA' || $value2['status'] == 'A_TRA')) {
$allSigned = false;
}
}
$resList[$key]['creation_date'] = date(DATE_ATOM, strtotime($resList[$key]['creation_date']));
$resList[$key]['process_limit_date'] = date(DATE_ATOM, strtotime($resList[$key]['process_limit_date']));
$resList[$key]['allSigned'] = $allSigned;
$resList[$key]['priorityColor'] = $_SESSION['mail_priorities_color'][$value['priority']]; //TODO No Session
$resList[$key]['priorityLabel'] = $_SESSION['mail_priorities'][$value['priority']]; //TODO No Session
unset($resList[$key]['priority'], $resList[$key]['contact_id'], $resList[$key]['address_id'], $resList[$key]['user_lastname'], $resList[$key]['user_firstname']);
}
$actionLabel = (_ID_TO_DISPLAY == 'res_id' ? $incomingMail['res_id'] : $incomingMail['alt_identifier']);
$actionLabel .= " : {$incomingMail['subject']} - {$incomingMailSender}";

Laurent Séguin
committed
$currentAction = [
'id' => $_SESSION['current_basket']['default_action'], //TODO No Session
'actionLabel' => $actionLabel
];
$datas = [];
$datas['actions'] = $actionsData;
$datas['attachments'] = $this->getAttachmentsForSignatureBook(['resId' => $resId]);
$datas['documents'] = $documents;
$datas['currentAction'] = $currentAction;
// $datas['histories'] = $history;
$datas['resList'] = $resList;
$datas['resListIndex'] = $resListIndex;
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
$datas['nbNotes'] = \NotesModel::countByResId(['resId' => $resId]);;
$datas['signature'] = \UsersModel::getSignatureForCurrentUser()['pathToSignatureOnTmp'];
$datas['consigne'] = \UsersModel::getCurrentConsigneById(['resId' => $resId]);
$datas['hasWorkflow'] = \VisaModel::hasVisaWorkflowByResId(['resId' => $resId]);
return $response->withJson($datas);
}
public function unsignFile(RequestInterface $request, ResponseInterface $response, $aArgs)
{
$resId = $aArgs['resId'];
$collId = $aArgs['collId'];
$bReturnSnd = false;
$bReturnFirst = \ResModel::put(['collId' => $collId, 'set' => ['status' => 'A_TRA'], 'where' => ['res_id = ?'], 'data' => [$resId]]);
if ($bReturnFirst) {
$bReturnSnd = \ResModel::put(['collId' => $collId, 'set' => ['status' => 'DEL'], 'where' => ['origin = ?', 'status != ?'], 'data' => [$resId . ',' .$collId, 'DEL']]);
}
if ($bReturnFirst && $bReturnSnd) {
return $response->withJson(['status' => 'OK']);
} else {
return $response->withJson(['status' => 'KO']);
}
}
public function getAttachmentsById(RequestInterface $request, ResponseInterface $response, $aArgs)
{
$resId = $aArgs['resId'];
return $response->withJson($this->getAttachmentsForSignatureBook(['resId' => $resId]));
}
private function getAttachmentsTypesByXML()
{
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 = 'apps/maarch_entreprise/xml/entreprise.xml';
}
$xmlfile = simplexml_load_file($path);
$attachmentTypes = [];
$attachmentTypesXML = $xmlfile->attachment_types;
if (count($attachmentTypesXML) > 0) {
foreach ($attachmentTypesXML->type as $value) {
$label = defined((string) $value->label) ? constant((string) $value->label) : (string) $value->label;
$attachmentTypes[(string) $value->id] = [
'label' => $label,
'icon' => (string)$value['icon'],
'sign' => (empty($value['sign']) || (string)$value['sign'] == 'true') ? true : false
];
}
}
return $attachmentTypes;
}
private function getAttachmentsForSignatureBook(array $aArgs = [])
{
$attachmentTypes = $this->getAttachmentsTypesByXML();
$orderBy = "CASE attachment_type WHEN 'response_project' THEN 1";
$c = 2;
foreach ($attachmentTypes as $key => $value) {
if ($value['sign'] && $key != 'response_project') {
$orderBy .= " WHEN '{$key}' THEN {$c}";
++$c;
}
}
$orderBy .= " ELSE {$c} END, doc_date DESC NULLS LAST, creation_date DESC";
$attachments = \ResModel::getAvailableLinkedAttachmentsNotIn(
[
'resIdMaster' => $aArgs['resId'],
'notIn' => ['incoming_mail_attachment', 'print_folder'],
'select' => [
'res_id', 'res_id_version', 'title', 'identifier', 'attachment_type',
'status', 'typist', 'path', 'filename', 'updated_by', 'creation_date',
'validation_date', 'format', 'relation', 'dest_user', 'dest_contact_id',
'dest_address_id', 'origin', 'doc_date'
],
'orderBy' => $orderBy
]
);
$coreTools = new \core_tools();
$canModify = $coreTools->test_service('modify_attachments', 'attachments', false);
$canDelete = $coreTools->test_service('delete_attachments', 'attachments', false);
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
foreach ($attachments as $key => $value) {
if ($value['attachment_type'] == 'converted_pdf' || ($value['attachment_type'] == 'signed_response' && !empty($value['origin']))) {
continue;
}
$collId = '';
$realId = 0;
if ($value['res_id'] == 0) {
$collId = 'version_attachments_coll';
$realId = $value['res_id_version'];
} elseif ($value['res_id_version'] == 0) {
$collId = 'attachments_coll';
$realId = $value['res_id'];
}
$viewerId = $realId;
$pathToFind = $value['path'] . str_replace(strrchr($value['filename'], '.'), '.pdf', $value['filename']);
$isConverted = false;
foreach ($attachments as $tmpKey => $tmpValue) {
if ($tmpValue['attachment_type'] == 'converted_pdf' && ($tmpValue['path'] . $tmpValue['filename'] == $pathToFind)) {
if ($value['status'] != 'SIGN') {
$viewerId = $tmpValue['res_id'];
}
$isConverted = true;
unset($attachments[$tmpKey]);
}
if ($value['status'] == 'SIGN' && $tmpValue['attachment_type'] == 'signed_response' && !empty($tmpValue['origin'])) {
$signDaddy = explode(',', $tmpValue['origin']);
if (($signDaddy[0] == $value['res_id'] && $signDaddy[1] == "res_attachments")
|| ($signDaddy[0] == $value['res_id_version'] && $signDaddy[1] == "res_version_attachments")
) {
$viewerId = $tmpValue['res_id'];
unset($attachments[$tmpKey]);
}
}
}
if (!empty($value['dest_user'])) {
$attachments[$key]['destUser'] = \UsersModel::getLabelledUserById(['id' => $value['dest_user']]);
} elseif (!empty($value['dest_contact_id']) && !empty($value['dest_address_id'])) {
$attachments[$key]['destUser'] = \ContactsModel::getLabelledContactWithAddress(['contactId' => $value['dest_contact_id'], 'addressId' => $value['dest_address_id']]);
}
if (!empty($value['updated_by'])) {
$attachments[$key]['updated_by'] = \UsersModel::getLabelledUserById(['id' => $value['updated_by']]);
}
if (!empty($value['typist'])) {
$attachments[$key]['typist'] = \UsersModel::getLabelledUserById(['id' => $value['typist']]);
}
$attachments[$key]['canModify'] = false;
$attachments[$key]['canDelete'] = false;
if ($canModify || $value['typist'] == $_SESSION['user']['UserId']) {
$attachments[$key]['canModify'] = true;
}
if ($canDelete || $value['typist'] == $_SESSION['user']['UserId']) {
$attachments[$key]['canDelete'] = true;
}
$attachments[$key]['creation_date'] = date(DATE_ATOM, strtotime($attachments[$key]['creation_date']));
if ($attachments[$key]['validation_date']) {
$attachments[$key]['validation_date'] = date(DATE_ATOM, strtotime($attachments[$key]['validation_date']));
}
if ($attachments[$key]['doc_date']) {
$attachments[$key]['doc_date'] = date(DATE_ATOM, strtotime($attachments[$key]['doc_date']));
}
$attachments[$key]['idToDl'] = $viewerId;
$attachments[$key]['isConverted'] = $isConverted;
$attachments[$key]['attachment_type'] = $attachmentTypes[$value['attachment_type']]['label'];
$attachments[$key]['icon'] = $attachmentTypes[$value['attachment_type']]['icon'];
$attachments[$key]['sign'] = $attachmentTypes[$value['attachment_type']]['sign'];
$attachments[$key]['thumbnailLink'] = "index.php?page=doc_thumb&module=thumbnails&res_id={$realId}&coll_id={$collId}&display=true&advanced=true";
$attachments[$key]['viewerLink'] = "index.php?display=true&module=visa&page=view_pdf_attachement&res_id_master={$aArgs['resId']}&id={$viewerId}";
unset(
$attachments[$key]['path'], $attachments[$key]['filename'], $attachments[$key]['dest_user'],
$attachments[$key]['dest_contact_id'], $attachments[$key]['dest_address_id']
);
}
foreach ($attachments as $key => $value) {
if ($value['attachment_type'] == 'converted_pdf') {
unset($attachments[$key]);
}
}
return array_values($attachments);
}