diff --git a/class/actions_dolimeet.class.php b/class/actions_dolimeet.class.php
index 87bddf4..078cf16 100644
--- a/class/actions_dolimeet.class.php
+++ b/class/actions_dolimeet.class.php
@@ -152,6 +152,17 @@ public function addHtmlHeader(array $parameters): int
$this->resprints = $out;
}
+ if (preg_match('/thirdpartycontact/', $parameters['context'])) {
+ $resourcesRequired = [
+ 'js' => '/custom/dolimeet/js/dolimeet.min.js'
+ ];
+
+ $out .= '';
+ $out .= '';
+
+ $this->resprints = $out;
+ }
+
return 0; // or return 1 to replace standard code
}
@@ -166,9 +177,14 @@ public function formObjectOptions(array $parameters, $object, $action): int
{
global $conf, $extrafields, $form, $langs;
- require_once __DIR__ . '/../../saturne/lib/object.lib.php';
+ if (!isset($conf->cache['objectsMetadata']) || empty($conf->cache['objectsMetadata'])) {
+ require_once __DIR__ . '/../../saturne/lib/object.lib.php';
+ $objectsMetadata = saturne_get_objects_metadata();
+ $conf->cache['objectsMetadata'] = $objectsMetadata;
+ } else {
+ $objectsMetadata = $conf->cache['objectsMetadata'];
+ }
- $objectsMetadata = saturne_get_objects_metadata();
foreach($objectsMetadata as $objectMetadata) {
if ($objectMetadata['link_name'] != $object->element) {
continue;
@@ -230,11 +246,16 @@ public function formObjectOptions(array $parameters, $object, $action): int
*/
public function printFieldListOption(array $parameters): int
{
- global $extrafields, $langs, $object;
+ global $conf, $extrafields, $langs, $object;
- require_once __DIR__ . '/../../saturne/lib/object.lib.php';
+ if (!isset($conf->cache['objectsMetadata']) || empty($conf->cache['objectsMetadata'])) {
+ require_once __DIR__ . '/../../saturne/lib/object.lib.php';
+ $objectsMetadata = saturne_get_objects_metadata();
+ $conf->cache['objectsMetadata'] = $objectsMetadata;
+ } else {
+ $objectsMetadata = $conf->cache['objectsMetadata'];
+ }
- $objectsMetadata = saturne_get_objects_metadata();
foreach($objectsMetadata as $objectMetadata) {
if ($objectMetadata['link_name'] != $object->element) {
continue;
@@ -652,6 +673,36 @@ function fillTable(data) {
}
}
+
+ if (strpos($parameters['context'], 'thirdpartycontact')) {
+
+ require_once __DIR__ . '/../../saturne/class/saturnesignature.class.php';
+
+ $signatory = new SaturneSignature($db);
+
+ $sql = "SELECT t.rowid";
+ $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as t";
+ $sql .= " WHERE t.fk_soc = ".GETPOSTINT('socid');
+ $result = $db->query($sql);
+ $num = $db->num_rows($result);
+
+ $contactIds = [];
+ $i = 0;
+ while ($i < $num) {
+ $obj = $db->fetch_object($result);
+ $filter = ['customsql' => 'status > 0 AND object_type="trainingsession" AND element_type="socpeople" AND element_id='.$obj->rowid];
+ $signatories = $signatory->fetchAll('', '', 0, 0, $filter);
+ $contactIds[$obj->rowid] = count($signatories);
+ $i++;
+ }
+
+ ?>
+
+ cache['signatoriesInDictionary'] ?? [];
+ $isSignatoryColumn = false;
+
+ foreach ($signatoriesInDictionary as $signatoryInDictionary) {
+ if ($signatoryInDictionary->ref === $key) {
+ $isSignatoryColumn = true;
+ break;
+ }
+ }
+
+ if (!$isSignatoryColumn && $key !== 'society_attendants') {
+ return 0;
+ }
+
+ if ($isSignatoryColumn) {
+ $signatories = $conf->cache['signatories'] ?? [];
+ $users = $conf->cache['user'] ?? [];
+ $contacts = $conf->cache['contact'] ?? [];
- $signatoriesInDictionary = $conf->cache['signatoriesInDictionary'];
- if (is_array($signatoriesInDictionary) && !empty($signatoriesInDictionary)) {
- $users = $conf->cache['user'];
- $contacts = $conf->cache['contact'];
- $signatories = $conf->cache['signatories'];
foreach ($signatoriesInDictionary as $signatoryInDictionary) {
- if ($parameters['key'] == $signatoryInDictionary->ref) {
- if (is_array($signatories) && !empty($signatories)) {
- $out[$parameters['key']] = '';
- foreach ($signatories as $signatory) {
- if ($signatory->role != $signatoryInDictionary->ref) {
- continue;
- }
- switch ($signatory->attendance) {
- case 1:
- break;
- $cssButton = '#0d8aff';
- $userIcon = 'fa-user-clock';
- break;
- case 2:
- $cssButton = '#e05353';
- $userIcon = 'fa-user-slash';
- break;
- default:
- $cssButton = '#47e58e';
- $userIcon = 'fa-user';
- break;
- }
- if (is_array($users[$signatory->role]) && !empty($users[$signatory->role]) && $users[$signatory->role][$signatory->id] instanceof User) {
- $out[$parameters['key']] .= $users[$signatory->role][$signatory->id]->getNomUrl(1, '', 0, 0, 24, 1);
- }
- if (is_array($contacts[$signatory->role]) && !empty($contacts[$signatory->role]) && $contacts[$signatory->role][$signatory->id] instanceof Contact) {
- $out[$parameters['key']] .= $contacts[$signatory->role][$signatory->id]->getNomUrl(1);
- }
- if ((is_array($users[$signatory->role]) && !empty($users[$signatory->role])) || (is_array($contacts[$signatory->role]) && !empty($contacts[$signatory->role]))) {
- $out[$parameters['key']] .= ' ' . $signatory->getLibStatut(3);
- $out[$parameters['key']] .= '
';
- }
- }
+ if ($signatoryInDictionary->ref !== $key) {
+ continue;
+ }
+
+ foreach ($signatories as $signatory) {
+ if ($signatory->role != $signatoryInDictionary->ref) {
+ continue;
}
+
+ $role = $signatory->role;
+ $user = $users[$role][$signatory->id] ?? null;
+ $contact = $contacts[$role][$signatory->id] ?? null;
+
+ if (!$user instanceof User && !$contact instanceof Contact) {
+ continue;
+ }
+
+ if ($user instanceof User) {
+ $out[$key] .= $user->getNomUrl(1, '', 0, 0, 24, 1);
+ }
+ if ($contact instanceof Contact) {
+ $out[$key] .= $contact->getNomUrl(1);
+ }
+
+ switch ((int) $signatory->attendance) {
+ case 1:
+ $cssButton = '#0d8aff';
+ $userIcon = 'fa-user-clock';
+ break;
+ case 2:
+ $cssButton = '#e05353';
+ $userIcon = 'fa-user-slash';
+ break;
+ default:
+ $cssButton = '#47e58e';
+ $userIcon = 'fa-user';
+ }
+
+ $out[$key] .= ' ' . $signatory->getLibStatut(3);
+ $out[$key] .= '
';
}
+
+ break;
}
}
- if ($parameters['key'] == 'society_attendants') {
- $thirdparties = $conf->cache['thirdparty'];
- if (is_array($thirdparties) && !empty($thirdparties)) {
- $alreadyAddedThirdParties = [];
- foreach ($thirdparties as $thirdparty) {
- if (!empty($thirdparty->id) && !in_array($thirdparty->id, $alreadyAddedThirdParties)) {
- $out[$parameters['key']] .= $thirdparty->getNomUrl(1) . '
';
- }
- $alreadyAddedThirdParties[] = $thirdparty->id;
+ if ($key === 'society_attendants') {
+ $thirdParties = $conf->cache['thirdparty'] ?? [];
+ $alreadyAdded = [];
+
+ foreach ($thirdParties as $thirdParty) {
+ if (empty($thirdParty->id) || isset($alreadyAdded[$thirdParty->id])) {
+ continue;
}
+
+ $out[$key] .= $thirdParty->getNomUrl(1) . '
';
+ $alreadyAdded[$thirdParty->id] = true;
}
}
diff --git a/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php b/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php
index dfcecc1..53caf17 100644
--- a/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php
+++ b/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php
@@ -187,12 +187,6 @@ public function write_file($objectDocument, Translate $outputLangs, string $srcT
$object = $moreParam['object'];
- $uploadDir = getMultidirOutput($object, $this->module);
- if (!$uploadDir) {
- $this->error = $langs->transnoentities('ErrorCanNotCreateDir');
- return -1;
- }
-
$attendantFullname = dol_strtoupper($moreParam['attendant']->lastname) . ' ' . dol_ucfirst($moreParam['attendant']->firstname);
if (!empty($moreParam['attendant'])) {
$moreParam['documentName'] = $attendantFullname . '_';
@@ -201,7 +195,7 @@ public function write_file($objectDocument, Translate $outputLangs, string $srcT
}
$moreParam['hideTemplateName'] = 1;
- $file = $this->buildDocumentFilename($objectDocument, $outputLangs, $object, $uploadDir, $moreParam);
+ $file = $this->buildDocumentFilename($objectDocument, $outputLangs, $object, $moreParam);
if ($file < 0) {
$this->error = $langs->transnoentities('ErrorFileNameCanNotBeBuilt');
return -1;
diff --git a/js/dolimeet.min.js b/js/dolimeet.min.js
index f81f9e6..2d42518 100644
--- a/js/dolimeet.min.js
+++ b/js/dolimeet.min.js
@@ -1,7 +1,7 @@
-window.dolimeet||(window.dolimeet={},window.dolimeet.scriptsLoaded=!1),window.dolimeet.scriptsLoaded||(window.dolimeet.init=function(){window.dolimeet.load_list_script()},window.dolimeet.load_list_script=function(){if(!window.dolimeet.scriptsLoaded){let e=void 0,t=void 0;for(e in window.dolimeet)for(t in window.dolimeet[e].init&&window.dolimeet[e].init(),window.dolimeet[e])window.dolimeet[e]&&window.dolimeet[e][t]&&window.dolimeet[e][t].init&&window.dolimeet[e][t].init();window.dolimeet.scriptsLoaded=!0}},window.dolimeet.refresh=function(){let e=void 0,t=void 0;for(e in window.dolimeet)for(t in window.dolimeet[e].refresh&&window.dolimeet[e].refresh(),window.dolimeet[e])window.dolimeet[e]&&window.dolimeet[e][t]&&window.dolimeet[e][t].refresh&&window.dolimeet[e][t].refresh()},$(document).ready(window.dolimeet.init)),window.dolimeet.publicContact={},window.dolimeet.publicContact.init=function(){window.dolimeet.publicContact.event()},window.dolimeet.publicContact.event=function(){$(document).on("click","#addContact",window.dolimeet.publicContact.addContactRow),$(document).on("click",".remove-btn",window.dolimeet.publicContact.removeContactRow),$(document).on("input",".firstname, .lastname, .email",window.dolimeet.publicContact.updateButtonState)},window.dolimeet.publicContact.addContactRow=function(){$("#contactsList").append(`
+window.dolimeet||(window.dolimeet={},window.dolimeet.scriptsLoaded=!1),window.dolimeet.scriptsLoaded||(window.dolimeet.init=function(){window.dolimeet.load_list_script()},window.dolimeet.load_list_script=function(){if(!window.dolimeet.scriptsLoaded){let e=void 0,t=void 0;for(e in window.dolimeet)for(t in window.dolimeet[e].init&&window.dolimeet[e].init(),window.dolimeet[e])window.dolimeet[e]&&window.dolimeet[e][t]&&window.dolimeet[e][t].init&&window.dolimeet[e][t].init();window.dolimeet.scriptsLoaded=!0}},window.dolimeet.refresh=function(){let e=void 0,t=void 0;for(e in window.dolimeet)for(t in window.dolimeet[e].refresh&&window.dolimeet[e].refresh(),window.dolimeet[e])window.dolimeet[e]&&window.dolimeet[e][t]&&window.dolimeet[e][t].refresh&&window.dolimeet[e][t].refresh()},$(document).ready(window.dolimeet.init)),window.dolimeet.contactList={},window.dolimeet.contactList.init=function(){window.dolimeet.contactList.event()},window.dolimeet.contactList.event=function(){},window.dolimeet.contactList.insertData=function(t,e){$table=$(".div-table-responsive"),$listTitle=$table.find("tr.liste_titre").last(),$tableLines=$table.find("tr.oddeven"),$table.find("tr.liste_titre").first().find("td").eq(1).after('