";
- print "";
+ print '';
+ print '';
print "| ".$langs->trans("Date")." | ";
print "".$langs->trans("Piece").' ('.$langs->trans("ObjectsRef").") | ";
print "".$langs->trans("AccountAccounting")." | ";
diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php
index d38e49c390e..68e7ebda6ae 100644
--- a/htdocs/accountancy/journal/expensereportsjournal.php
+++ b/htdocs/accountancy/journal/expensereportsjournal.php
@@ -496,14 +496,16 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
}
if (empty($action) || $action == 'view') {
- llxHeader('', $langs->trans("ExpenseReportsJournal"));
+ $title = $langs->trans("GenerationOfAccountingEntries").' - '.$accountingjournalstatic->getNomUrl(0, 2, 1, '', 1);
- $nom = $langs->trans("ExpenseReportsJournal").' | '.$accountingjournalstatic->getNomUrl(0, 1, 1, '', 1);
+ llxHeader('', dol_string_nohtmltag($title));
+
+ $nom = $title;
$nomlink = '';
$periodlink = '';
$exportlink = '';
$builddate = dol_now();
- $description .= $langs->trans("DescJournalOnlyBindedVisible").'
';
+ $description = $langs->trans("DescJournalOnlyBindedVisible").'
';
$listofchoices = array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger"));
$period = $form->selectDate($date_start ? $date_start : -1, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end ? $date_end : -1, 'date_end', 0, 0, 0, '', 1, 0);
diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php
index 0f721a67db7..248b0e41267 100644
--- a/htdocs/accountancy/journal/purchasesjournal.php
+++ b/htdocs/accountancy/journal/purchasesjournal.php
@@ -756,9 +756,11 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
}
if (empty($action) || $action == 'view') {
- llxHeader('', $langs->trans("PurchasesJournal"));
+ $title = $langs->trans("GenerationOfAccountingEntries").' - '.$accountingjournalstatic->getNomUrl(0, 2, 1, '', 1);
- $nom = $langs->trans("PurchasesJournal").' | '.$accountingjournalstatic->getNomUrl(0, 1, 1, '', 1);
+ llxHeader('', dol_string_nohtmltag($title));
+
+ $nom = $title;
$nomlink = '';
$periodlink = '';
$exportlink = '';
diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php
index 4894e7b660f..624b5a22335 100644
--- a/htdocs/accountancy/journal/sellsjournal.php
+++ b/htdocs/accountancy/journal/sellsjournal.php
@@ -699,9 +699,11 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
if (empty($action) || $action == 'view') {
- llxHeader('', $langs->trans("SellsJournal"));
+ $title = $langs->trans("GenerationOfAccountingEntries").' - '.$accountingjournalstatic->getNomUrl(0, 2, 1, '', 1);
- $nom = $langs->trans("SellsJournal").' | '.$accountingjournalstatic->getNomUrl(0, 1, 1, '', 1);
+ llxHeader('', dol_string_nohtmltag($title));
+
+ $nom = $title;
$nomlink = '';
$periodlink = '';
$exportlink = '';
diff --git a/htdocs/accountancy/journal/variousjournal.php b/htdocs/accountancy/journal/variousjournal.php
index 13ccba0d762..b58953043ff 100644
--- a/htdocs/accountancy/journal/variousjournal.php
+++ b/htdocs/accountancy/journal/variousjournal.php
@@ -165,22 +165,18 @@ if ($reload) {
$form = new Form($db);
if ($object->nature == 2) {
- $title = $langs->trans("SellsJournal");
$some_mandatory_steps_of_setup_were_not_done = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "" || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1';
$account_accounting_not_defined = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "" || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1';
} elseif ($object->nature == 3) {
- $title = $langs->trans("PurchasesJournal");
$some_mandatory_steps_of_setup_were_not_done = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "" || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1';
$account_accounting_not_defined = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "" || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1';
} elseif ($object->nature == 4) {
- $title = $langs->trans("FinanceJournal");
$some_mandatory_steps_of_setup_were_not_done = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "" || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1'
|| $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "" || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1'
|| empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) || $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT == '-1';
$account_accounting_not_defined = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "" || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1'
|| $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "" || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1';
} elseif ($object->nature == 5) {
- $title = $langs->trans("ExpenseReportsJournal");
$some_mandatory_steps_of_setup_were_not_done = empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) || $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT == '-1';
$account_accounting_not_defined = empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) || $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT == '-1';
} else {
@@ -189,8 +185,11 @@ if ($object->nature == 2) {
$account_accounting_not_defined = false;
}
+$title = $langs->trans("GenerationOfAccountingEntries") . ' - ' . $object->getNomUrl(0, 2, 1, '', 1);
-$nom = $title . ' | ' . $object->getNomUrl(0, 1, 1, '', 1);
+llxHeader('', dol_string_nohtmltag($title));
+
+$nom = $title;
$nomlink = '';
$periodlink = '';
$exportlink = '';
@@ -213,8 +212,6 @@ $period .= ' - ' . $langs->trans("JournalizationInLedgerStatus") . ' ' . $form-
$varlink = 'id_journal=' . $id_journal;
-llxHeader('', $title);
-
journalHead($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink);
if ($object->nature == 4) { // Bank journal
diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php
index 35829b5dcbf..c47321dbf7c 100644
--- a/htdocs/adherents/card.php
+++ b/htdocs/adherents/card.php
@@ -1725,10 +1725,12 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
}
// Type
- print '
| '.$langs->trans("Type").' | '.$adht->getNomUrl(1)." |
\n";
+ print '| '.$langs->trans("Type").' | ';
+ print ''.$adht->getNomUrl(1)." |
\n";
// Morphy
- print '| '.$langs->trans("MemberNature").' | '.$object->getmorphylib('', 1).' | ';
+ print '
| '.$langs->trans("MemberNature").' | ';
+ print ''.$object->getmorphylib('', 1).' | ';
print '
';
// Company
diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
index dd9d58eb7d3..130f5580e3a 100644
--- a/htdocs/adherents/class/adherent.class.php
+++ b/htdocs/adherents/class/adherent.class.php
@@ -520,7 +520,7 @@ class Adherent extends CommonObject
* Return translated label by the nature of a adherent (physical or moral)
*
* @param string $morphy Nature of the adherent (physical or moral)
- * @param int $addbadge Add badge (1=Full label, 2=First letter only)
+ * @param int $addbadge Add badge (1=Full label, 2=First letters only)
* @return string Label
*/
public function getmorphylib($morphy = '', $addbadge = 0)
@@ -534,21 +534,27 @@ class Adherent extends CommonObject
if ($addbadge) {
$s = '';
+ $labeltoshowm = $langs->trans("Moral");
+ $labeltoshowp = $langs->trans("Physical");
if ($morphy == 'phy') {
+ $labeltoshow = $labeltoshowp;
if ($addbadge == 2) {
- $labeltoshow = dol_substr($langs->trans("Physical"), 0, 1);
- } else {
- $labeltoshow = $langs->trans("Physical");
+ $labeltoshow = dol_strtoupper(dolGetFirstLetters($labeltoshowp));
+ if ($labeltoshow == dol_strtoupper(dolGetFirstLetters($labeltoshowm))) {
+ $labeltoshow = dol_strtoupper(dolGetFirstLetters($labeltoshowp, 2));
+ }
}
- $s .= ''.$labeltoshow.'';
+ $s .= ''.$labeltoshow.'';
}
if ($morphy == 'mor') {
+ $labeltoshow = $labeltoshowm;
if ($addbadge == 2) {
- $labeltoshow = dol_substr($langs->trans("Moral"), 0, 1);
- } else {
- $labeltoshow = $langs->trans("Moral");
+ $labeltoshow = dol_strtoupper(dolGetFirstLetters($labeltoshowm));
+ if ($labeltoshow == dol_strtoupper(dolGetFirstLetters($labeltoshowp))) {
+ $labeltoshow = dol_strtoupper(dolGetFirstLetters($labeltoshowm, 2));
+ }
}
- $s .= ''.$labeltoshow.'';
+ $s .= ''.$labeltoshow.'';
}
} else {
if ($morphy == 'phy') {
diff --git a/htdocs/adherents/document.php b/htdocs/adherents/document.php
index bce8227ab57..37d6e72a97e 100644
--- a/htdocs/adherents/document.php
+++ b/htdocs/adherents/document.php
@@ -158,13 +158,12 @@ if ($id > 0) {
}
// Type
- print '| '.$langs->trans("Type").' | '.$membert->getNomUrl(1)." |
\n";
+ print '| '.$langs->trans("Type").' | ';
+ print ''.$membert->getNomUrl(1)." |
\n";
// Morphy
- print '| '.$langs->trans("MemberNature").' | '.$object->getmorphylib().' | ';
- /*print '';
- print $form->showphoto('memberphoto',$object);
- print ' | ';*/
+ print '
| '.$langs->trans("MemberNature").' | ';
+ print ''.$object->getmorphylib('', 1).' | ';
print '
';
// Company
diff --git a/htdocs/adherents/note.php b/htdocs/adherents/note.php
index ea5e22fe153..938ab368ae1 100644
--- a/htdocs/adherents/note.php
+++ b/htdocs/adherents/note.php
@@ -133,13 +133,12 @@ if ($id) {
}
// Type
- print '| '.$langs->trans("Type").' | '.$adht->getNomUrl(1)." |
\n";
+ print '| '.$langs->trans("Type").' | ';
+ print ''.$adht->getNomUrl(1)." |
\n";
// Morphy
- print '| '.$langs->trans("MemberNature").' | '.$object->getmorphylib().' | ';
- /*print '';
- print $form->showphoto('memberphoto',$member);
- print ' | ';*/
+ print '
| '.$langs->trans("MemberNature").' | ';
+ print ''.$object->getmorphylib('', 1).' | ';
print '
';
// Company
diff --git a/htdocs/adherents/subscription.php b/htdocs/adherents/subscription.php
index db40a8ad465..cc5b600b2a4 100644
--- a/htdocs/adherents/subscription.php
+++ b/htdocs/adherents/subscription.php
@@ -506,10 +506,12 @@ if ($rowid > 0) {
}
// Type
- print '| '.$langs->trans("Type").' | '.$adht->getNomUrl(1)." |
\n";
+ print '| '.$langs->trans("Type").' | ';
+ print ''.$adht->getNomUrl(1)." |
\n";
// Morphy
- print '| '.$langs->trans("MemberNature").' | '.$object->getmorphylib().' | ';
+ print '
| '.$langs->trans("MemberNature").' | ';
+ print ''.$object->getmorphylib('', 1).' | ';
print '
';
// Company
diff --git a/htdocs/admin/taxes.php b/htdocs/admin/taxes.php
index ccdbedc1f89..d903bc2d32f 100644
--- a/htdocs/admin/taxes.php
+++ b/htdocs/admin/taxes.php
@@ -1,9 +1,9 @@
- * Copyright (C) 2004-2008 Laurent Destailleur
- * Copyright (C) 2005-2009 Regis Houssin
- * Copyright (C) 2011-2013 Juanjo Menent
- * Copyright (C) 2015-2018 Alexandre Spangaro
+/* Copyright (C) 2004 Rodolphe Quiedeville
+ * Copyright (C) 2004-2008 Laurent Destailleur
+ * Copyright (C) 2005-2009 Regis Houssin
+ * Copyright (C) 2011-2013 Juanjo Menent
+ * Copyright (C) 2015-2022 Alexandre Spangaro
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,7 +22,7 @@
/**
* \file htdocs/admin/taxes.php
* \ingroup tax
- * \brief Page de configuration du module tax
+ * \brief Page to setup module tax
*/
// Load Dolibarr environment
@@ -116,6 +116,8 @@ if ($action == 'update') {
dolibarr_set_const($db, "MAIN_INFO_VAT_RETURN", GETPOST("MAIN_INFO_VAT_RETURN", 'alpha'), 'chaine', 0, '', $conf->entity);
+ dolibarr_set_const($db, "MAIN_INFO_TVA_DAY_DEADLINE_SUBMISSION", GETPOST("deadline_day_vat", 'int'), 'chaine', 0, '', $conf->entity);
+
if (!$error) {
$db->commit();
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
@@ -179,6 +181,10 @@ if (empty($mysoc->tva_assuj)) {
}
print '';
+ print ' | ';
+ print '';
+ print ' |
';
+
print '
';
print '
';
diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php
index 271b6eb463c..105e70e18bc 100644
--- a/htdocs/comm/action/card.php
+++ b/htdocs/comm/action/card.php
@@ -430,7 +430,36 @@ if (empty($reshook) && $action == 'add') {
if (!$error) {
$db->begin();
+ $selectedrecurrulefreq = 'no';
+ $selectedrecurrulebymonthday = '';
+ $selectedrecurrulebyday = '';
+ $object->recurrule = GETPOSTISSET('recurrulefreq') ? "FREQ=".GETPOST('recurrulefreq', 'alpha') : "";
+ $object->recurrule .= (GETPOST('recurrulefreq', 'alpha') == 'MONTHLY' && GETPOSTISSET('BYMONTHDAY')) ? "_BYMONTHDAY".GETPOST('BYMONTHDAY', 'alpha') : "";
+ $object->recurrule .= (GETPOST('recurrulefreq', 'alpha') == 'WEEKLY' && GETPOSTISSET('BYDAY')) ? "_BYDAY".GETPOST('BYDAY', 'alpha') : "";
+ $reg1 = array(); $reg2 = array(); $reg3 = array();
+ if ($object->recurrule && preg_match('/FREQ=([A-Z]+)/i', $object->recurrule, $reg1)) {
+ $selectedrecurrulefreq = $reg1[1];
+ }
+ if ($object->recurrule && preg_match('/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i', $object->recurrule, $reg2)) {
+ $selectedrecurrulebymonthday = $reg2[1];
+ }
+ if ($object->recurrule && preg_match('/FREQ=WEEKLY.*BYDAY(\d+)/i', $object->recurrule, $reg3)) {
+ $selectedrecurrulebyday = $reg3[1];
+ }
+
+ // Is event recurrent ?
+ $eventisrecurring = 0;
+ $userepeatevent = (getDolGlobalInt('MAIN_FEATURES_LEVEL') == 2 ? 1 : 0);
+ if ($userepeatevent && !empty($selectedrecurrulefreq) && $selectedrecurrulefreq != 'no') {
+ $eventisrecurring = 1;
+ $object->recurid = dol_print_date(dol_now('gmt'), 'dayhourlog', 'gmt');
+ $object->recurdateend = dol_mktime(0, 0, 0, GETPOST('limitmonth', 'int'), GETPOST('limitday', 'int'), GETPOST('limityear', 'int'));
+ } else {
+ unset($object->recurid);
+ unset($object->recurrule);
+ unset($object->recurdateend);
+ }
// Creation of action/event
$idaction = $object->create($user);
@@ -517,26 +546,7 @@ if (empty($reshook) && $action == 'add') {
$action = 'create'; $donotclearsession = 1;
}
- $selectedrecurrulefreq = 'no';
- $selectedrecurrulebymonthday = '';
- $selectedrecurrulebyday = '';
- $object->recurrule = GETPOSTISSET('recurrulefreq') ? "FREQ=".GETPOST('recurrulefreq', 'alpha') : "";
- $object->recurrule .= GETPOSTISSET('BYMONTHDAY') ? "_BYMONTHDAY".GETPOST('BYMONTHDAY', 'alpha') : "";
- $object->recurrule .= GETPOSTISSET('BYDAY') ? "_BYDAY".GETPOST('BYDAY', 'alpha') : "";
-
- if ($object->recurrule && preg_match('/FREQ=([A-Z]+)/i', $object->recurrule, $reg1)) {
- $selectedrecurrulefreq = $reg1[1];
- }
- if ($object->recurrule && preg_match('/FREQ=MONTHLY.*BYMONTHDAY(\d+)/i', $object->recurrule, $reg2)) {
- $selectedrecurrulebymonthday = $reg2[1];
- }
- if ($object->recurrule && preg_match('/FREQ=WEEKLY.*BYDAY(\d+)/i', $object->recurrule, $reg3)) {
- $selectedrecurrulebyday = $reg3[1];
- }
-
- // If event is recurrent
- $userepeatevent = ($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0);
- if ($userepeatevent && !empty($selectedrecurrulefreq) && $selectedrecurrulefreq != 'no') {
+ if ($eventisrecurring) {
// We set first date of recurrence and offsets
if ($selectedrecurrulefreq == 'WEEKLY' && !empty($selectedrecurrulebyday)) {
$firstdatearray = dol_get_first_day_week(GETPOST("apday", 'int'), GETPOST("apmonth", 'int'), GETPOST("apyear", 'int'));
@@ -944,9 +954,7 @@ if (empty($reshook) && $action == 'update') {
}
}
-/*
- * delete event
- */
+// Delete event
if (empty($reshook) && $action == 'confirm_delete' && GETPOST("confirm") == 'yes') {
$object->fetch($id);
$object->fetch_optionals();
@@ -2205,11 +2213,18 @@ if ($id > 0) {
}
// Private
- if ($object->elementtype == 'ticket') print '
| '.$langs->trans("PrivateEventMessage").' | '.yn(($object->code == 'TICKET_MSG_PRIVATE') ? 1 : 0, 3).' |
';
+ if ($object->elementtype == 'ticket') {
+ print '| '.$langs->trans("PrivateEventMessage").' | '.yn(($object->code == 'TICKET_MSG_PRIVATE') ? 1 : 0, 3).' |
';
+ }
// Full day event
print '| '.$langs->trans("EventOnFullDay").' | '.yn($object->fulldayevent ? 1 : 0, 3).' |
';
+ // Event into a serie
+ if ($object->recurid) {
+ print '| '.$langs->trans("EventIntoASerie").' | '.dol_escape_htmltag($object->recurid).' |
';
+ }
+
$rowspan = 4;
if (empty($conf->global->AGENDA_DISABLE_LOCATION)) {
$rowspan++;
diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php
index 228ff397607..a133e3cc314 100644
--- a/htdocs/comm/action/class/actioncomm.class.php
+++ b/htdocs/comm/action/class/actioncomm.class.php
@@ -269,6 +269,7 @@ class ActionComm extends CommonObject
*/
public $contact_id;
+
/**
* @var Societe|null Company linked to action (optional)
* @deprecated
@@ -376,9 +377,9 @@ class ActionComm extends CommonObject
/**
* Properties to manage the recurring events
*/
- public $recurid;
- public $recurrule;
- public $recurdateend;
+ public $recurid; /* A string YYYYMMDDHHMMSS shared by allevent of same serie */
+ public $recurrule; /* Rule of recurring */
+ public $recurdateend; /* Repeat until this date */
public $calling_duration;
@@ -549,6 +550,9 @@ class ActionComm extends CommonObject
$sql .= "email_tobcc,";
$sql .= "email_subject,";
$sql .= "errors_to,";
+ $sql .= "recurid,";
+ $sql .= "recurrule,";
+ $sql .= "recurdateend,";
$sql .= "num_vote,";
$sql .= "event_paid,";
$sql .= "status";
@@ -587,6 +591,9 @@ class ActionComm extends CommonObject
$sql .= (!empty($this->email_tobcc) ? "'".$this->db->escape($this->email_tobcc)."'" : "null").", ";
$sql .= (!empty($this->email_subject) ? "'".$this->db->escape($this->email_subject)."'" : "null").", ";
$sql .= (!empty($this->errors_to) ? "'".$this->db->escape($this->errors_to)."'" : "null").", ";
+ $sql .= (!empty($this->recurid) ? "'".$this->db->escape($this->recurid)."'" : "null").", ";
+ $sql .= (!empty($this->recurrule) ? "'".$this->db->escape($this->recurrule)."'" : "null").", ";
+ $sql .= (!empty($this->recurdateend) ? "'".$this->db->idate($this->recurdateend)."'" : "null").", ";
$sql .= (!empty($this->num_vote) ? (int) $this->num_vote : "null").", ";
$sql .= (!empty($this->event_paid) ? (int) $this->event_paid : 0).", ";
$sql .= (!empty($this->status) ? (int) $this->status : "0");
@@ -716,6 +723,9 @@ class ActionComm extends CommonObject
$this->fetchResources();
$this->id = 0;
+ $this->recurid = '';
+ $this->recurrule = '';
+ $this->recurdateend = '';
// Create clone
$this->context['createfromclone'] = 'createfromclone';
@@ -1306,8 +1316,17 @@ class ActionComm extends CommonObject
dol_syslog(get_class()."::getActions", LOG_DEBUG);
+ require_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php';
+ $hookmanager = new HookManager($this->db);
+ // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
+ $hookmanager->initHooks(array('agendadao'));
+
$sql = "SELECT a.id";
$sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as a";
+ // Fields from hook
+ $parameters = array('sql' => &$sql, 'socid' => $socid, 'fk_element' => $fk_element, 'elementtype' => $elementtype);
+ $reshook = $hookmanager->executeHooks('getActionsListFrom', $parameters); // Note that $action and $object may have been modified by hook
+ if (!empty($hookmanager->resPrint)) $sql.= $hookmanager->resPrint;
$sql .= " WHERE a.entity IN (".getEntity('agenda').")";
if (!empty($socid)) {
$sql .= " AND a.fk_soc = ".((int) $socid);
@@ -1326,6 +1345,10 @@ class ActionComm extends CommonObject
if (!empty($filter)) {
$sql .= $filter;
}
+ // Fields where hook
+ $parameters = array('sql' => &$sql, 'socid' => $socid, 'fk_element' => $fk_element, 'elementtype' => $elementtype);
+ $reshook = $hookmanager->executeHooks('getActionsListWhere', $parameters); // Note that $action and $object may have been modified by hook
+ if (!empty($hookmanager->resPrint)) $sql.= $hookmanager->resPrint;
if ($sortorder && $sortfield) {
$sql .= $this->db->order($sortfield, $sortorder);
}
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index d9b7147fefa..68e078bd5ef 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -3347,7 +3347,7 @@ class Propal extends CommonObject
public function LibStatut($status, $mode = 1)
{
// phpcs:enable
- global $conf;
+ global $conf, $hookmanager;
// Init/load array of translation of status
if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
@@ -3378,6 +3378,14 @@ class Propal extends CommonObject
$statusType = 'status6';
}
+
+ $parameters = array('status' => $status, 'mode' => $mode);
+ $reshook = $hookmanager->executeHooks('LibStatut', $parameters, $this); // Note that $action and $object may have been modified by hook
+
+ if ($reshook > 0) {
+ return $hookmanager->resPrint;
+ }
+
return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
}
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index d3fbe41312c..99a8e31521c 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -3626,7 +3626,7 @@ class Commande extends CommonOrder
public function LibStatut($status, $billed, $mode, $donotshowbilled = 0)
{
// phpcs:enable
- global $langs, $conf;
+ global $langs, $conf, $hookmanager;
$billedtext = '';
if (empty($donotshowbilled)) {
@@ -3674,6 +3674,19 @@ class Commande extends CommonOrder
$mode = 0;
}
+ $parameters = array(
+ 'status' => $status,
+ 'mode' => $mode,
+ 'billed' => $billed,
+ 'donotshowbilled' => $donotshowbilled
+ );
+
+ $reshook = $hookmanager->executeHooks('LibStatut', $parameters, $this); // Note that $action and $object may have been modified by hook
+
+ if ($reshook > 0) {
+ return $hookmanager->resPrint;
+ }
+
return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode, '', array('tooltip' => $labelTooltip));
}
diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php
index 9809554c37f..5664c2e3f54 100644
--- a/htdocs/compta/facture/prelevement.php
+++ b/htdocs/compta/facture/prelevement.php
@@ -143,6 +143,13 @@ if (empty($reshook)) {
$result = $object->makeStripeSepaRequest($user, GETPOST('did', 'int'), 'direct-debit', 'facture');
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
+ } else {
+ // We refresh object data
+ $ret = $object->fetch($id, $ref);
+ $isdraft = (($object->statut == FactureFournisseur::STATUS_DRAFT) ? 1 : 0);
+ if ($ret > 0) {
+ $object->fetch_thirdparty();
+ }
}
}
diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php
index ae5deba98f1..2bfdf9d1f66 100644
--- a/htdocs/contact/list.php
+++ b/htdocs/contact/list.php
@@ -1010,7 +1010,7 @@ if (!empty($arrayfields['p.tms']['checked'])) {
// Status
if (!empty($arrayfields['p.statut']['checked'])) {
print '';
- print $form->selectarray('search_status', array('-1'=>'', '0'=>$langs->trans('ActivityCeased'), '1'=>$langs->trans('InActivity')), $search_status, 0, 0, 0, '', 0, 0, 0, '', 'minwidth75');
+ print $form->selectarray('search_status', array('-1'=>'', '0'=>$langs->trans('ActivityCeased'), '1'=>$langs->trans('InActivity')), $search_status, 0, 0, 0, '', 0, 0, 0, '', 'minwidth75 onrightofpage');
print ' | ';
}
if (!empty($arrayfields['p.import_key']['checked'])) {
diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php
index 02d4215b963..b83c30d15b6 100644
--- a/htdocs/core/actions_massactions.inc.php
+++ b/htdocs/core/actions_massactions.inc.php
@@ -1323,6 +1323,60 @@ if (!$error && ($action == 'setsupervisor' && $confirm == 'yes') && $permissiont
}
}
+if (!$error && ($action == 'affectuser' && $confirm == 'yes') && $permissiontoadd) {
+ $db->begin();
+
+ $usertoaffect=GETPOST('usertoaffect');
+ $projectrole=GETPOST('projectrole');
+ $tasksrole=GETPOST('tasksrole');
+ if (!empty($usertoaffect)) {
+ foreach ($toselect as $toselectid) {
+ $result = $object->fetch($toselectid);
+ //var_dump($contcats);exit;
+ if ($result > 0) {
+ $res = $object->add_contact($usertoaffect, $projectrole, 'internal');
+ if ($res >= 0) {
+ $taskstatic = new Task($db);
+ $task_array = $taskstatic->getTasksArray(0, 0, $object->id, 0, 0);
+
+ foreach ($task_array as $task) {
+ $tasksToAffect = new Task($db);
+ $result = $tasksToAffect->fetch($task->id);
+ if ($result > 0) {
+ $res = $tasksToAffect->add_contact($usertoaffect, $tasksrole, 'internal');
+ if ($res < 0) {
+ setEventMessages($tasksToAffect->error, $tasksToAffect->errors, 'errors');
+ }
+ }
+ }
+ $nbok++;
+ } else {
+ setEventMessages($object->error, $object->errors, 'errors');
+ }
+ } else {
+ setEventMessages($object->error, $object->errors, 'errors');
+ $error++;
+ break;
+ }
+ }
+ } else {
+ setEventMessage('UserNotFound', 'errors');
+ $error++;
+ }
+
+ if (!$error) {
+ if ($nbok > 1) {
+ setEventMessages($langs->trans("RecordsModified", $nbok), null);
+ } else {
+ setEventMessages($langs->trans("RecordsModified", $nbok), null);
+ }
+ $db->commit();
+ $toselect=array();
+ } else {
+ $db->rollback();
+ }
+}
+
if (!$error && ($massaction == 'enable' || ($action == 'enable' && $confirm == 'yes')) && $permissiontoadd) {
$db->begin();
diff --git a/htdocs/core/ajax/check_notifications.php b/htdocs/core/ajax/check_notifications.php
index f48cb9bffe5..344a2b19229 100644
--- a/htdocs/core/ajax/check_notifications.php
+++ b/htdocs/core/ajax/check_notifications.php
@@ -128,7 +128,7 @@ if (empty($_SESSION['auto_check_events_not_before']) || $time >= $_SESSION['auto
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'actioncomm_reminder as ar ON a.id = ar.fk_actioncomm AND ar.fk_user = '.((int) $user->id);
$sql .= ' WHERE a.code <> "AC_OTH_AUTO"';
$sql .= ' AND (';
- $sql .= " (ar.typeremind = 'browser' AND ar.dateremind < '".$db->idate(dol_now())."' AND ar.status = 0 AND ar.entity = ".$conf->entity;
+ $sql .= " ar.typeremind = 'browser' AND ar.dateremind < '".$db->idate(dol_now())."' AND ar.status = 0 AND ar.entity = ".$conf->entity;
$sql .= ' )';
} else {
$sql .= ' JOIN '.MAIN_DB_PREFIX.'actioncomm_reminder as ar ON a.id = ar.fk_actioncomm AND ar.fk_user = '.((int) $user->id);
diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php
index 2a185b362be..b586c69d464 100644
--- a/htdocs/core/class/commoninvoice.class.php
+++ b/htdocs/core/class/commoninvoice.class.php
@@ -584,7 +584,7 @@ abstract class CommonInvoice extends CommonObject
public function LibStatut($paye, $status, $mode = 0, $alreadypaid = -1, $type = -1)
{
// phpcs:enable
- global $langs;
+ global $langs, $hookmanager;
$langs->load('bills');
if ($type == -1) {
@@ -634,6 +634,22 @@ abstract class CommonInvoice extends CommonObject
}
}
+ $parameters = array(
+ 'status' => $status,
+ 'mode' => $mode,
+ 'paye' => $paye,
+ 'alreadypaid' => $alreadypaid,
+ 'type' => $type
+ );
+
+ $reshook = $hookmanager->executeHooks('LibStatut', $parameters, $this); // Note that $action and $object may have been modified by hook
+
+ if ($reshook > 0) {
+ return $hookmanager->resPrint;
+ }
+
+
+
return dolGetStatus($labelStatus, $labelStatusShort, '', $statusType, $mode);
}
@@ -1572,7 +1588,7 @@ abstract class CommonInvoice extends CommonObject
$this->errors[] = "Remain to pay is null for the invoice " . $this->id . " " . $this->ref . ". Why is the invoice not classified 'Paid' ?";
}
- $sql = "INSERT INTO '.MAIN_DB_PREFIX.'prelevement_demande(";
+ $sql = "INSERT INTO ".MAIN_DB_PREFIX."prelevement_demande(";
$sql .= "fk_facture, ";
$sql .= " amount, date_demande, fk_user_demande, ext_payment_id, ext_payment_site, sourcetype, entity)";
$sql .= " VALUES (".$this->id;
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
index a82aadb7363..13c99dea052 100644
--- a/htdocs/core/class/html.form.class.php
+++ b/htdocs/core/class/html.form.class.php
@@ -8097,7 +8097,7 @@ class Form
if ($addjscombo && $jsbeautify) {
// Enhance with select2
include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
- $out .= ajax_combobox($htmlname, array(), 0, 0, 'resolve', $show_empty < 0 ? (string) $show_empty : '-1');
+ $out .= ajax_combobox($htmlname, array(), 0, 0, 'resolve', ($show_empty < 0 ? (string) $show_empty : '-1'), $morecss);
}
return $out;
diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php
index 0e5e6ff9e7c..214413b8f1b 100644
--- a/htdocs/core/class/html.formticket.class.php
+++ b/htdocs/core/class/html.formticket.class.php
@@ -1270,7 +1270,7 @@ class FormTicket
// Define output language
$outputlangs = $langs;
$newlang = '';
- if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) {
+ if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang) && isset($this->param['langsmodels'])) {
$newlang = $this->param['langsmodels'];
}
if (!empty($newlang)) {
@@ -1281,7 +1281,7 @@ class FormTicket
// Get message template for $this->param["models"] into c_email_templates
$arraydefaultmessage = -1;
- if ($this->param['models'] != 'none') {
+ if (isset($this->param['models']) && $this->param['models'] != 'none') {
$model_id = 0;
if (array_key_exists('models_id', $this->param)) {
$model_id = (int) $this->param["models_id"];
@@ -1323,7 +1323,7 @@ class FormTicket
// Define output language
$outputlangs = $langs;
$newlang = '';
- if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang)) {
+ if (getDolGlobalInt('MAIN_MULTILANGS') && empty($newlang) && isset($this->param['langsmodels'])) {
$newlang = $this->param['langsmodels'];
}
if (!empty($newlang)) {
@@ -1380,7 +1380,12 @@ class FormTicket
print '';
print '';
print '';
- print '';
+ if (!empty($this->trackid)) {
+ print '';
+ } else {
+ print '';
+ $keytoavoidconflict = empty($this->track_id) ? '' : '-'.$this->track_id; // track_id instead of trackid
+ }
foreach ($this->param as $key => $value) {
print '';
}
@@ -1392,7 +1397,7 @@ class FormTicket
$arraydefaultmessage = $formmail->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id);
}
- $result = $formmail->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs);
+ $result = $formmail->fetchAllEMailTemplate(!empty($this->param["models"]) ? $this->param["models"] : "", $user, $outputlangs);
if ($result < 0) {
setEventMessages($this->error, $this->errors, 'errors');
}
@@ -1404,7 +1409,7 @@ class FormTicket
print '';
// External users can't send message email
- if ($user->rights->ticket->write && !$user->socid) {
+ if ($user->hasRight("ticket", "write") && !$user->socid) {
$ticketstat = new Ticket($this->db);
$res = $ticketstat->fetch('', '', $this->track_id);
@@ -1556,7 +1561,7 @@ class FormTicket
// Deal with format differences between message and signature (text / HTML)
if (dol_textishtml($defaultmessage) && !dol_textishtml($this->substit['__USER_SIGNATURE__'])) {
$this->substit['__USER_SIGNATURE__'] = dol_nl2br($this->substit['__USER_SIGNATURE__']);
- } elseif (!dol_textishtml($defaultmessage) && dol_textishtml($this->substit['__USER_SIGNATURE__'])) {
+ } elseif (!dol_textishtml($defaultmessage) && isset($this->substit['__USER_SIGNATURE__']) && dol_textishtml($this->substit['__USER_SIGNATURE__'])) {
$defaultmessage = dol_nl2br($defaultmessage);
}
if (GETPOSTISSET("message") && !GETPOST('modelselected')) {
@@ -1569,7 +1574,7 @@ class FormTicket
}
print ' |