Merge branch 'develop' into develop-2

This commit is contained in:
Frédéric FRANCE
2023-09-08 09:13:17 +02:00
committed by GitHub
155 changed files with 1005 additions and 1155 deletions

View File

@@ -21,6 +21,7 @@ Following changes may create regressions for some external modules, but were nec
* The method get_substitutionarray_shipment_lines() has been removed. Use the generic get_substitutionarray_lines() instead.
* Recheck setup of your module workflow to see if you need to enable the new setting to have shipment set to billed automatically
when an invoice from a shipment is validated (and if your process is to make invoice on shipment and not on order).
* It was possible to use a variable $soc or $right inside a php code condition of some extrafields properties, this is no more true (this vars are no more defined globaly).
***** ChangeLog for 18.0.1 compared to 18.0.0 *****

View File

@@ -246,11 +246,11 @@ th,td {
margin-left: 10px;
}
.back1 {
background-color: #888800;
background-color: #884466;
color: #FFF;
}
.back1 {
background-color: #880088;
.back2 {
background-color: #664488;
color: #FFF;
}
</style>';

View File

@@ -102,7 +102,7 @@ class Availabilities extends CommonObject
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
*/
public $fields=array(
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'help'=>"Help text", 'showoncombobox'=>'2', 'validate'=>'1',),
'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3, 'validate'=>'1',),
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0, 'cssview'=>'wordbreak', 'validate'=>'1',),

View File

@@ -300,6 +300,11 @@ class ActionComm extends CommonObject
*/
public $elementtype;
/**
* @var int id of availability
*/
public $fk_bookcal_availability;
/**
* @var string Ical name
*/
@@ -539,6 +544,7 @@ class ActionComm extends CommonObject
$sql .= "transparency,";
$sql .= "fk_element,";
$sql .= "elementtype,";
$sql .= "fk_bookcal_availability,";
$sql .= "entity,";
$sql .= "extraparams,";
// Fields emails
@@ -581,6 +587,7 @@ class ActionComm extends CommonObject
$sql .= "'".$this->db->escape($this->transparency)."', ";
$sql .= (!empty($this->fk_element) ? ((int) $this->fk_element) : "null").", ";
$sql .= (!empty($this->elementtype) ? "'".$this->db->escape($this->elementtype)."'" : "null").", ";
$sql .= (!empty($this->fk_bookcal_availability) ? "'".$this->db->escape($this->fk_bookcal_availability)."'" : "null").", ";
$sql .= ((int) $conf->entity).",";
$sql .= (!empty($this->extraparams) ? "'".$this->db->escape($this->extraparams)."'" : "null").", ";
// Fields emails

View File

@@ -557,6 +557,34 @@ if ($user->rights->agenda->myactions->create || $user->hasRight('agenda', 'allac
$s = ''; $link = '';
$showextcals = $listofextcals;
$bookcalcalendars = array();
// Load Bookcal Calendars
if (isModEnabled("bookcal")) {
$sql = "SELECT ba.rowid, bc.label, bc.ref, bc.rowid as id_cal";
$sql .= " FROM ".MAIN_DB_PREFIX."bookcal_availabilities as ba";
$sql .= " JOIN ".MAIN_DB_PREFIX."bookcal_calendar as bc";
$sql .= " ON bc.rowid = ba.fk_bookcal_calendar";
$sql .= " WHERE bc.status = 1";
$sql .= " AND ba.status = 1";
if (!empty($filtert) && $filtert != -1) {
$sql .= " AND bc.visibility = ".(int) $filtert ;
}
$resql = $db->query($sql);
if ($resql) {
$num = $db->num_rows($resql);
$i = 0;
while ($i < $num) {
$objp = $db->fetch_object($resql);
$label = !empty($objp->label) ? $objp->label : $objp->ref;
$bookcalcalendars["calendars"][] = array("id" => $objp->id_cal, "label" => $label);
$bookcalcalendars["availabilitieslink"][$objp->rowid] = $objp->id_cal;
$i++;
}
} else {
dol_print_error($db);
}
}
if (!empty($conf->use_javascript_ajax)) { // If javascript on
$s .= "\n".'<!-- Div to calendars selectors -->'."\n";
@@ -564,6 +592,11 @@ if (!empty($conf->use_javascript_ajax)) { // If javascript on
$s .= 'jQuery(document).ready(function () {'."\n";
$s .= 'jQuery(".check_birthday").click(function() { console.log("Toggle birthdays"); jQuery(".family_birthday").toggle(); });'."\n";
$s .= 'jQuery(".check_holiday").click(function() { console.log("Toggle holidays"); jQuery(".family_holiday").toggle(); });'."\n";
if (isModEnabled("bookcal")) {
foreach ($bookcalcalendars["calendars"] as $key => $value) {
$s .= 'jQuery(".check_bookcal_calendar_'.$value['id'].'").click(function() { console.log("Toggle Bookcal Calendar '.$value['id'].'"); jQuery(".family_bookcal_calendar_'.$value['id'].'").toggle(); });'."\n";
}
}
if ($mode == "show_week" || $mode == "show_month" || empty($mode)) {
// Code to enable drag and drop
$s .= 'jQuery( "div.sortable" ).sortable({connectWith: ".sortable", placeholder: "ui-state-highlight", items: "div.movable", receive: function( event, ui ) {'."\n";
@@ -631,6 +664,14 @@ if (!empty($conf->use_javascript_ajax)) { // If javascript on
// Birthdays
$s .= '<div class="nowrap inline-block minheight30"><input type="checkbox" id="check_birthday" name="check_birthday" class="check_birthday"><label for="check_birthday"> <span class="check_birthday_text">'.$langs->trans("AgendaShowBirthdayEvents").'</span></label> &nbsp; </div>';
// Bookcal Calendar
if (isModEnabled("bookcal")) {
foreach ($bookcalcalendars["calendars"] as $key => $value) {
$label = $value['label'];
$s .= '<div class="nowrap inline-block minheight30"><input '.(GETPOST('check_bookcal_calendar_'.$value['id']) ? "checked" : "").' type="checkbox" id="check_bookcal_calendar_'.$value['id'].'" name="check_bookcal_calendar_'.$value['id'].'" class="check_bookcal_calendar_'.$value['id'].'"><label for="check_bookcal_calendar_'.$value['id'].'"> <span class="check_bookcal_calendar_'.$value['id'].'_text">'.$langs->trans("AgendaShowBookcalCalendar", $label).'</span></label> &nbsp; </div>';
}
}
// Calendars from hooks
$parameters = array();
$reshook = $hookmanager->executeHooks('addCalendarChoice', $parameters, $object, $action);
@@ -673,7 +714,7 @@ $sql .= ' a.datep2,';
$sql .= ' a.percent,';
$sql .= ' a.fk_user_author,a.fk_user_action,';
$sql .= ' a.transparency, a.priority, a.fulldayevent, a.location,';
$sql .= ' a.fk_soc, a.fk_contact, a.fk_project,';
$sql .= ' a.fk_soc, a.fk_contact, a.fk_project, a.fk_bookcal_availability,';
$sql .= ' a.fk_element, a.elementtype,';
$sql .= ' ca.code as type_code, ca.libelle as type_label, ca.color as type_color, ca.type as type_type, ca.picto as type_picto';
$sql .= ' FROM '.MAIN_DB_PREFIX.'c_actioncomm as ca, '.MAIN_DB_PREFIX."actioncomm as a";
@@ -862,6 +903,10 @@ if ($resql) {
$event->socid = $obj->fk_soc;
$event->contact_id = $obj->fk_contact;
$event->fk_bookcal_availability = $obj->fk_bookcal_availability;
if (!empty($event->fk_bookcal_availability)) {
$event->type = "bookcal_calendar";
}
// Defined date_start_in_calendar and date_end_in_calendar property
// They are date start and end of action but modified to not be outside calendar view.
@@ -1505,7 +1550,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month
}
//var_dump($todayarray['mday']."==".$tmpday." && ".$todayarray['mon']."==".$month." && ".$todayarray['year']."==".$year.' -> '.$style);
echo ' <td class="'.$style.' nowrap tdtop" width="14%">';
show_day_events($db, $tmpday, $month, $year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam);
show_day_events($db, $tmpday, $month, $year, $month, $style, $eventarray, $maxprint, $maxnbofchar, $newparam, 0, 60, 0, $bookcalcalendars);
echo "</td>\n";
} else {
/* Show days after the current month (next month) */
@@ -1578,7 +1623,7 @@ if (empty($mode) || $mode == 'show_month') { // View by month
}
echo ' <td class="'.$style.'" width="14%" valign="top">';
show_day_events($db, $tmpday, $tmpmonth, $tmpyear, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300);
show_day_events($db, $tmpday, $tmpmonth, $tmpyear, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0, $bookcalcalendars);
echo " </td>\n";
}
echo " </tr>\n";
@@ -1668,13 +1713,13 @@ if (empty($mode) || $mode == 'show_month') { // View by month
echo '</div></div>';
show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 1);
show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 1, $bookcalcalendars);
print '</div>';
} else {
print '<div class="div-table-responsive-no-min borderbottom">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0);
show_day_events($db, $day, $month, $year, $month, $style, $eventarray, 0, $maxnbofchar, $newparam, 1, 300, 0, $bookcalcalendars);
print '</div>';
}
@@ -1703,9 +1748,10 @@ $db->close();
* @param int $showinfo Add extended information (used by day and week view)
* @param int $minheight Minimum height for each event. 60px by default.
* @param string $nonew 0=Add "new entry button", 1=No "new entry button", -1=Only "new entry button"
* @param string $bookcalcalendarsarray Used for Bookcal module array of calendar of bookcal
* @return void
*/
function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventarray, $maxprint = 0, $maxnbofchar = 16, $newparam = '', $showinfo = 0, $minheight = 60, $nonew = 0)
function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventarray, $maxprint = 0, $maxnbofchar = 16, $newparam = '', $showinfo = 0, $minheight = 60, $nonew = 0, $bookcalcalendarsarray = array())
{
global $user, $conf, $langs;
global $action, $mode, $filter, $filtert, $status, $actioncode, $usergroup; // Filters used into search form
@@ -1817,6 +1863,11 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
$colorindex = 2;
$cssclass = 'family_birthday ';
$color = sprintf("%02x%02x%02x", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
} elseif ($event->type == 'bookcal_calendar') {
$numbirthday++;
$colorindex = 3;
$cssclass = 'family_bookcal_calendar_'.(!empty($bookcalcalendarsarray[$fk_bookcal_availability]) ? $bookcalcalendarsarray[$fk_bookcal_availability][$event->fk_bookcal_availability] : "");
$color = sprintf("%02x%02x%02x", $theme_datacolor[$colorindex][0], $theme_datacolor[$colorindex][1], $theme_datacolor[$colorindex][2]);
} else {
$numother++;
$color = ($event->icalcolor ? $event->icalcolor : -1);
@@ -1904,6 +1955,9 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
if ($event->type == 'holiday' && !GETPOST('check_holiday')) {
$morecss = 'hidden';
}
if ($event->type == 'bookcal_calendar' && !GETPOST('check_bookcal_calendar_'.$bookcalcalendarsarray["availabilitieslink"][$event->fk_bookcal_availability])) {
$morecss = 'hidden';
}
if ($morecss != 'hidden') {
$itoshow++;
}
@@ -1911,8 +1965,11 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
$ireallyshown++;
}
//var_dump($event->type.' - '.$morecss.' - '.$cssclass.' - '.$i.' - '.$ireallyshown.' - '.$itoshow);
print '<div id="event_'.$ymd.'_'.$i.'" class="event family_'.$event->type.' '.$cssclass.($morecss ? ' '.$morecss : '').'"';
if (isModEnabled("bookcal") && $event->type == 'bookcal_calendar') {
print '<div id="event_'.$ymd.'_'.$i.'" class="event family_'.$event->type.'_'.$bookcalcalendarsarray["availabilitieslink"][$event->fk_bookcal_availability].' '.$cssclass.($morecss ? ' '.$morecss : '').'"';
} else {
print '<div id="event_'.$ymd.'_'.$i.'" class="event family_'.$event->type.' '.$cssclass.($morecss ? ' '.$morecss : '').'"';
}
//print ' style="height: 100px;';
//print ' position: absolute; top: 40px; width: 50%;';
//print '"';

View File

@@ -87,6 +87,10 @@ class BonPrelevement extends CommonObject
*/
public $file;
/*
* @var string filename
*/
public $filename;
const STATUS_DRAFT = 0;
const STATUS_TRANSFERED = 1;
@@ -891,9 +895,11 @@ class BonPrelevement extends CommonObject
$factures_errors = array();
if (!$error) {
dol_syslog(__METHOD__." Read invoices for did=".((int) $did), LOG_DEBUG);
$sql = "SELECT f.rowid, pd.rowid as pfdrowid, f.fk_soc";
$sql .= ", pfd.code_banque, pfd.code_guichet, pfd.number, pfd.cle_rib";
$sql .= ", pfd.amount";
$sql .= ", pd.code_banque, pd.code_guichet, pd.number, pd.cle_rib";
$sql .= ", pd.amount";
$sql .= ", s.nom as name";
$sql .= ", f.ref, sr.bic, sr.iban_prefix, sr.frstrecur";
if ($type != 'bank-transfer') {
@@ -915,7 +921,6 @@ class BonPrelevement extends CommonObject
if ($did > 0) {
$sql .= " AND pd.rowid = ".((int) $did);
}
dol_syslog(__METHOD__." Read invoices,", LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
@@ -937,7 +942,9 @@ class BonPrelevement extends CommonObject
dol_syslog(__METHOD__." Read invoices, ".$i." invoices to withdraw", LOG_DEBUG);
} else {
$error++;
dol_syslog(__METHOD__." Read invoices error ".$this->db->error(), LOG_ERR);
$this->error = $this->db->lasterror();
dol_syslog(__METHOD__." Read invoices error ".$this->db->lasterror(), LOG_ERR);
return -1;
}
}
@@ -961,7 +968,7 @@ class BonPrelevement extends CommonObject
if ($resfetch >= 0) { // Field 0 of $fac is rowid of invoice
*/
// Check if $fac[8] s.nom is null
// Check if $fac[8] s.nom is null
if ($fac[8] != null) {
//$bac = new CompanyBankAccount($this->db);
//$bac->fetch(0, $soc->id);

View File

@@ -128,6 +128,7 @@ if (empty($reshook)) {
if (!$error) {
// getDolGlobalString('PRELEVEMENT_CODE_BANQUE') and getDolGlobalString('PRELEVEMENT_CODE_GUICHET') should be empty (we don't use them anymore)
$result = $bprev->create(getDolGlobalString('PRELEVEMENT_CODE_BANQUE'), getDolGlobalString('PRELEVEMENT_CODE_GUICHET'), $mode, $format, $executiondate, 0, $type);
if ($result < 0) {
setEventMessages($bprev->error, $bprev->errors, 'errors');
} elseif ($result == 0) {

View File

@@ -191,7 +191,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes' && !empty($permissionto
}
} elseif ($action == 'confirm_updateline' && GETPOST('save', 'alpha') && GETPOST('link', 'alpha') && !empty($permissiontoadd)) {
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
$langs->load('link');
$link = new Link($db);
$f = $link->fetch(GETPOST('linkid', 'int'));
if ($f) {

View File

@@ -80,11 +80,11 @@ if ($action == 'verifyavailability') {
}
if (!$error) {
$datetocheckbooking_end = dol_time_plus_duree($datetocheckbooking, 1, 'd');
$sql = "SELECT b.start, b.rowid";
$sql .= " FROM ".MAIN_DB_PREFIX."bookcal_booking as b";
$sql = "SELECT b.datep, b.id";
$sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as b";
$sql .= " WHERE fk_bookcal_availability = ".((int) $idavailability);
$sql .= " AND b.start >= '".$db->idate($datetocheckbooking)."'";
$sql .= " AND b.start < '".$db->idate($datetocheckbooking_end)."'";
$sql .= " AND b.datep >= '".$db->idate($datetocheckbooking)."'";
$sql .= " AND b.datep < '".$db->idate($datetocheckbooking_end)."'";
$resql = $db->query($sql);
if ($resql) {
@@ -94,7 +94,7 @@ if ($action == 'verifyavailability') {
$response["content"] = array();
while ($i < $num) {
$obj = $db->fetch_object($resql);
$dateobject = $obj->start;
$dateobject = $obj->datep;
$dateobject = explode(" ", $dateobject)[1];
$dateobject = explode(":", $dateobject);

View File

@@ -103,7 +103,7 @@ class box_scheduled_jobs extends ModeleBoxes
while ($i < $num) {
$objp = $this->db->fetch_object($result);
if (dol_eval($objp->test, 1, 1, '')) {
if (dol_eval($objp->test, 1, 1, '2')) {
$nextrun = $this->db->jdate($objp->datenextrun);
if (empty($nextrun)) {
$nextrun = $this->db->jdate($objp->datestart);

View File

@@ -150,6 +150,8 @@ abstract class CommonDocGenerator
*/
public $result;
public $posxlabel;
public $posxup;
public $posxref;
public $posxpicture; // For picture
public $posxdesc; // For description

View File

@@ -6165,7 +6165,7 @@ abstract class CommonObject
if (empty($conf->disable_compute)) {
global $objectoffield; // We set a global variable to $objectoffield so
$objectoffield = $this; // we can use it inside computed formula
$this->array_options['options_' . $key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, '');
$this->array_options['options_' . $key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, '2');
}
}
}
@@ -6294,8 +6294,8 @@ abstract class CommonObject
if (!empty($attrfieldcomputed)) {
if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) {
$value = dol_eval($attrfieldcomputed, 1, 0, '');
dol_syslog($langs->trans("Extrafieldcomputed")." sur ".$attributeLabel."(".$value.")", LOG_DEBUG);
$value = dol_eval($attrfieldcomputed, 1, 0, '2');
dol_syslog($langs->trans("Extrafieldcomputed")." on ".$attributeLabel."(".$value.")", LOG_DEBUG);
$new_array_options[$key] = $value;
} else {
$new_array_options[$key] = null;
@@ -6675,7 +6675,7 @@ abstract class CommonObject
if (!empty($attrfieldcomputed)) {
if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) {
$value = dol_eval($attrfieldcomputed, 1, 0, '');
$value = dol_eval($attrfieldcomputed, 1, 0, '2');
dol_syslog($langs->trans("Extrafieldcomputed")." sur ".$attributeLabel."(".$value.")", LOG_DEBUG);
$this->array_options["options_".$key] = $value;
} else {
@@ -7597,7 +7597,7 @@ abstract class CommonObject
if ($computed) {
// Make the eval of compute string
//var_dump($computed);
$value = dol_eval($computed, 1, 0, '');
$value = dol_eval($computed, 1, 0, '2');
}
if (empty($morecss)) {

View File

@@ -188,15 +188,13 @@ class FormContract
* @param int $showempty Show empty line
* @param int $showRef Show customer and supplier reference on each contract (when found)
* @param int $noouput 1=Return the output instead of display
* @return int Nbr of project if OK, <0 if KO
* @return string|void html string
*/
public function formSelectContract($page, $socid = -1, $selected = '', $htmlname = 'contrattid', $maxlength = 16, $showempty = 1, $showRef = 0, $noouput = 0)
{
global $langs;
$ret = '';
$ret .= '<form method="post" action="'.$page.'">';
$ret = '<form method="post" action="'.$page.'">';
$ret .= '<input type="hidden" name="action" value="setcontract">';
$ret .= '<input type="hidden" name="token" value="'.newToken().'">';
$ret .= $this->select_contract($socid, $selected, $htmlname, $maxlength, $showempty, $showRef, 1);
@@ -208,7 +206,5 @@ class FormContract
}
print $ret;
return $result;
}
}

View File

@@ -52,6 +52,11 @@ class RssParser
private $_rssarray = array();
private $current_namespace;
public $items = array();
public $current_item = array();
public $channel = array();
public $textinput = array();
public $image = array();
private $initem;
private $intextinput;

View File

@@ -869,7 +869,7 @@ function show_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatel
// Ref
print '<td class="nowraponall">';
print $projecttmp->getNomUrl(1);
print $projecttmp->getNomUrl(1, '', 0, '', '-', 0, 1, '', 'project:'.$_SERVER["PHP_SELF"].'?socid=__SOCID__');
print '</td>';
// Label

View File

@@ -1885,7 +1885,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite = 0, $donotupdatesess
$linkObject->objectid = GETPOST('objectid', 'int');
$linkObject->label = GETPOST('label', 'alpha');
$res = $linkObject->create($user);
$langs->load('link');
if ($res > 0) {
setEventMessages($langs->trans("LinkComplete"), null, 'mesgs');
} else {

View File

@@ -274,6 +274,9 @@ function getEntity($element, $shared = 1, $currentobject = null)
// fix different element names (France to English)
switch ($element) {
case 'projet':
$element = 'project';
break;
case 'contrat':
$element = 'contract';
break; // "/contrat/class/contrat.class.php"
@@ -7561,6 +7564,7 @@ function dol_html_entity_decode($a, $b, $c = 'UTF-8', $keepsomeentities = 0)
* @param string $encoding Encoding page code
* @param bool $double_encode When double_encode is turned off, PHP will not encode existing html entities
* @return string $ret Encoded string
* @see dol_htmlentitiesbr()
*/
function dol_htmlentities($string, $flags = ENT_QUOTES|ENT_SUBSTITUTE, $encoding = 'UTF-8', $double_encode = false)
{
@@ -9141,6 +9145,33 @@ function dol_getIdFromCode($db, $key, $tablename, $fieldkey = 'code', $fieldid =
}
}
/**
* Check if a variable with name $var start with $text.
* Can be used to forge dol_eval() conditions.
*
* @param $var string Variable
* @param $regextext string Text that must be a valid regex string
* @param $matchrule int 1=Test if start with, 0=Test if equal
* @return boolean|string True or False, text if bad use.
*/
function isStringVarMatching($var, $regextext, $matchrule = 1)
{
if ($matchrule == 1) {
if ($var == 'mainmenu') {
global $mainmenu;
return (preg_match('/^'.$regextext.'/', $mainmenu));
} elseif ($var == 'leftmenu') {
global $leftmenu;
return (preg_match('/^'.$regextext.'/', $leftmenu));
} else {
return 'This variable is not accessible with dol_eval';
}
} else {
return 'This value for matchrule is not implemented';
}
}
/**
* Verify if condition in string is ok or not
*
@@ -9149,15 +9180,15 @@ function dol_getIdFromCode($db, $key, $tablename, $fieldkey = 'code', $fieldid =
*/
function verifCond($strToEvaluate)
{
global $user, $conf, $langs;
global $conf; // Read of const is done with getDolGlobalString() but we need $conf->currency for example
global $user, $langs;
global $leftmenu;
global $rights; // To export to dol_eval function
//print $strToEvaluate."<br>\n";
$rights = true;
if (isset($strToEvaluate) && $strToEvaluate !== '') {
//var_dump($strToEvaluate);
$rep = dol_eval($strToEvaluate, 1, 1, '1'); // The dol_eval must contains all the global $xxx for all variables $xxx found into the string condition
$rep = dol_eval($strToEvaluate, 1, 1, '1'); // The dol_eval() must contains all the "global $xxx;" for all variables $xxx found into the string condition
$rights = $rep && (!is_string($rep) || strpos($rep, 'Bad string syntax to evaluate') === false);
//var_dump($rights);
}
@@ -9171,29 +9202,36 @@ function verifCond($strToEvaluate)
* @param string $s String to evaluate
* @param int $returnvalue 0=No return (used to execute eval($a=something)). 1=Value of eval is returned (used to eval($something)).
* @param int $hideerrors 1=Hide errors
* @param string $onlysimplestring '0' (used for computed property of extrafields)=Accept all chars, '1' (most common use)=Accept only simple string with char 'a-z0-9\s^$_+-.*>&|=!?():"\',/@';', '2' (rarely used)=Accept also '[]'
* @param string $onlysimplestring '0' (deprecated, used for computed property of extrafields)=Accept all chars,
* '1' (most common use)=Accept only simple string with char 'a-z0-9\s^$_+-.*>&|=!?():"\',/@';',
* '2' (rarely used)=Accept also '[]'
* @return mixed Nothing or return result of eval
* @see verifCond()
*/
function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1')
{
// Only global variables can be changed by eval function and returned to caller
global $db, $langs, $user, $conf, $website, $websitepage;
// Only this global variables can be read by eval function and returned to caller
global $conf; // Read of const is done with getDolGlobalString() but we need $conf->currency for example
global $db, $langs, $user, $website, $websitepage;
global $action, $mainmenu, $leftmenu;
global $mysoc;
global $objectoffield;
global $objectoffield; // To allow the use of $objectoffield in computed fields
// Old variables used
global $rights;
global $object;
global $obj; // To get $obj used into list when dol_eval is used for computed fields and $obj is not yet $object
global $soc; // For backward compatibility
global $obj; // To get $obj used into list when dol_eval() is used for computed fields and $obj is not yet $object
//global $rights;
//global $soc; // For backward compatibility
if (!in_array($onlysimplestring, array('0', '1', '2'))) {
return "Bad call of dol_eval. Parameter onlysimplestring must be '0' (deprecated), '1' or '2'";
}
try {
// Test on dangerous char (used for RCE), we allow only characters to make PHP variable testing
if ($onlysimplestring == '1') {
// We must accept: '1 && getDolGlobalInt("doesnotexist1") && $conf->global->MAIN_FEATURES_LEVEL'
// We must accept: '$conf->barcode->enabled || preg_match(\'/^AAA/\',$leftmenu)'
// We must accept: '$user->rights->cabinetmed->read && !$object->canvas=="patient@cabinetmed"'
// We must accept: '1 && getDolGlobalInt("doesnotexist1") && getDolGlobalString("MAIN_FEATURES_LEVEL")'
// We must accept: '$user->hasRight("cabinetmed", "read") && !$object->canvas=="patient@cabinetmed"'
if (preg_match('/[^a-z0-9\s'.preg_quote('^$_+-.*>&|=!?():"\',/@', '/').']/i', $s)) {
if ($returnvalue) {
return 'Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s;
@@ -9201,10 +9239,21 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1'
dol_syslog('Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s);
return '';
}
// TODO
// We can exclude all parenthesis ( that are not '($db' and 'getDolGlobalInt(' and 'getDolGlobalString(' and 'preg_match(' and 'isModEnabled('
// ...
}
$scheck = preg_replace('/->[a-zA-Z0-9_]+\(/', '->__METHOD__', $s);
$scheck = preg_replace('/\s[a-zA-Z0-9_]+\(/', ' __FUNCTION__', $scheck);
$scheck = preg_replace('/(\^|\')\(/', '__REGEXSTART__', $scheck); // To allow preg_match('/^(aaa|bbb)/'... or isStringVarMatching('leftmenu', '(aaa|bbb)')
//print 'scheck='.$scheck." : ".strpos($scheck, '(')."\n";
if (strpos($scheck, '(') !== false) {
if ($returnvalue) {
return 'Bad string syntax to evaluate (found call of a function or method without using direct name): '.$s;
} else {
dol_syslog('Bad string syntax to evaluate (found call of a function or method without using direct name): '.$s);
return '';
}
}
// TODO
// We can exclude $ char that are not: $db, $langs, $leftmenu, $topmenu, $user, $langs, $objectoffield, $object...,
} elseif ($onlysimplestring == '2') {
// We must accept: (($reloadedobj = new Task($db)) && ($reloadedobj->fetchNoCompute($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetchNoCompute($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : "Parent project not found"
if (preg_match('/[^a-z0-9\s'.preg_quote('^$_+-.*>&|=!?():"\',/@[]', '/').']/i', $s)) {
@@ -9214,10 +9263,17 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1'
dol_syslog('Bad string syntax to evaluate (found chars that are not chars for simplestring): '.$s);
return '';
}
// TODO
// We can exclude all parenthesis ( that are not '($db' and 'getDolGlobalInt(' and 'getDolGlobalString(' and 'preg_match(' and 'isModEnabled('
// ...
}
if (strpos($scheck, '(') !== false) {
if ($returnvalue) {
return 'Bad string syntax to evaluate (found call of a function or method without using direct name): '.$s;
} else {
dol_syslog('Bad string syntax to evaluate (found call of a function or method without using direct name): '.$s);
return '';
}
}
// TODO
// We can exclude $ char that are not: $db, $leftmenu, $topmenu, $user, $langs, $object...,
}
if (is_array($s) || $s === 'Array') {
return 'Bad string syntax to evaluate (value is Array) '.var_export($s, true);
@@ -9251,8 +9307,11 @@ function dol_eval($s, $returnvalue = 0, $hideerrors = 1, $onlysimplestring = '1'
$forbiddenphpstrings = array('$$');
$forbiddenphpstrings = array_merge($forbiddenphpstrings, array('_ENV', '_SESSION', '_COOKIE', '_GET', '_POST', '_REQUEST'));
$forbiddenphpfunctions = array("exec", "passthru", "shell_exec", "system", "proc_open", "popen", "eval", "dol_eval", "executeCLI", "verifCond", "base64_decode");
$forbiddenphpfunctions = array("exec", "passthru", "shell_exec", "system", "proc_open", "popen", "eval");
$forbiddenphpfunctions = array_merge($forbiddenphpfunctions, array("dol_eval", "executeCLI", "verifCond")); // native dolibarr functions
$forbiddenphpfunctions = array_merge($forbiddenphpfunctions, array("base64_decode", "rawurldecode", "urldecode")); // decode string functions
$forbiddenphpfunctions = array_merge($forbiddenphpfunctions, array("fopen", "file_put_contents", "fputs", "fputscsv", "fwrite", "fpassthru", "require", "include", "mkdir", "rmdir", "symlink", "touch", "unlink", "umask"));
$forbiddenphpfunctions = array_merge($forbiddenphpfunctions, array("get_defined_functions", "get_defined_vars", "get_defined_constants", "get_declared_classes"));
$forbiddenphpfunctions = array_merge($forbiddenphpfunctions, array("function", "call_user_func"));
$forbiddenphpregex = 'global\s+\$|\b('.implode('|', $forbiddenphpfunctions).')\b';

View File

@@ -448,7 +448,34 @@ function dolGetListOfObjectClasses($destdir)
return -1;
}
/**
* function for check if comment begin an end exist in modMyModule class
* @param string $file filename or path
* @param int $number 0 = For Menus,1 = For permissions, 2 = For Dictionaries
* @return int 1 if OK , -1 if KO
*/
function checkExistComment($file, $number)
{
if (!file_exists($file)) {
return -1;
}
$content = file_get_contents($file);
if ($number === 0) {
if (strpos($content, '/* BEGIN MODULEBUILDER LEFTMENU MYOBJECT */') !== false && strpos($content, '/* END MODULEBUILDER LEFTMENU MYOBJECT */') !== false) {
return 1;
}
} elseif ($number === 1) {
if (strpos($content, '/* BEGIN MODULEBUILDER PERMISSIONS */') !== false && strpos($content, '/* END MODULEBUILDER PERMISSIONS */') !== false) {
return 1;
}
} elseif ($number == 2) {
if (strpos($content, '/* BEGIN MODULEBUILDER DICTIONARIES */') !== false && strpos($content, '/* END MODULEBUILDER DICTIONARIES */') !== false) {
return 1;
}
}
return -1;
}
/**
* Delete all permissions
*
@@ -1290,3 +1317,31 @@ function writeApiUrlsInDoc($file_api, $file_doc)
}
return -1;
}
/**
* count directories or files in modulebuilder folder
* @param string $path path of directory
* @param int $type type of file 1= file,2=directory
* @return int|bool
*/
function countItemsInDirectory($path, $type = 1)
{
if (!is_dir($path)) {
return false;
}
$allFilesAndDirs = scandir($path);
$count = 0;
foreach ($allFilesAndDirs as $item) {
if ($item != '.' && $item != '..') {
if ($type == 1 && is_file($path . DIRECTORY_SEPARATOR . $item) && strpos($item, '.back') === false) {
$count++;
} elseif ($type == 2 && is_dir($path . DIRECTORY_SEPARATOR . $item)) {
$count++;
}
}
}
return $count;
}

View File

@@ -371,7 +371,7 @@ function restrictedArea(User $user, $features, $object = 0, $tableandshare = '',
//dol_syslog("functions.lib:restrictedArea $feature, $objectid, $dbtablename, $feature2, $dbt_socfield, $dbt_select, $isdraft");
/*print "user_id=".$user->id.", features=".$features.", feature2=".$feature2.", objectid=".$objectid;
print ", dbtablename=".$tableandshare.", dbt_socfield=".$dbt_keyfield.", dbt_select=".$dbt_select;
print ", perm: user->right->".$features.($feature2 ? "->".$feature2 : "")."=".($user->hasRight($features, $feature2, 'lire'))."<br>";
print ", perm: user->hasRight(".$features.($feature2 ? ",".$feature2 : "").", lire) = ".($feature2 ? $user->hasRight($features, $feature2, 'lire') : $user->hasRight($features, 'lire'))."<br>";
*/
$parentfortableentity = '';
@@ -389,6 +389,10 @@ function restrictedArea(User $user, $features, $object = 0, $tableandshare = '',
if ($features == 'facturerec') {
$features = 'facture';
}
if ($features == 'supplier_invoicerec') {
$features = 'fournisseur';
$feature2 = 'facture';
}
if ($features == 'mo') {
$features = 'mrp';
}
@@ -430,19 +434,21 @@ function restrictedArea(User $user, $features, $object = 0, $tableandshare = '',
// Get more permissions checks from hooks
$parameters = array('features'=>$features, 'originalfeatures'=>$originalfeatures, 'objectid'=>$objectid, 'dbt_select'=>$dbt_select, 'idtype'=>$dbt_select, 'isdraft'=>$isdraft);
$reshook = $hookmanager->executeHooks('restrictedArea', $parameters);
if (!empty($hookmanager)) {
$reshook = $hookmanager->executeHooks('restrictedArea', $parameters);
if (isset($hookmanager->resArray['result'])) {
if ($hookmanager->resArray['result'] == 0) {
if ($mode) {
return 0;
} else {
accessforbidden(); // Module returns 0, so access forbidden
if (isset($hookmanager->resArray['result'])) {
if ($hookmanager->resArray['result'] == 0) {
if ($mode) {
return 0;
} else {
accessforbidden(); // Module returns 0, so access forbidden
}
}
}
}
if ($reshook > 0) { // No other test done.
return 1;
if ($reshook > 0) { // No other test done.
return 1;
}
}
// Features/modules to check

View File

@@ -76,6 +76,9 @@ function dolStripPhpCode($str, $replacewith = '')
function dolKeepOnlyPhpCode($str)
{
$str = str_replace('<?=', '<?php', $str);
$str = str_replace('<?php', '__LTINTPHP__', $str);
$str = str_replace('<?', '<?php', $str); // replace the short_open_tag. It is recommended to set this is Off in php.ini
$str = str_replace('__LTINTPHP__', '<?php', $str);
$newstr = '';
@@ -163,12 +166,14 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c
if (preg_last_error() == PREG_JIT_STACKLIMIT_ERROR) $content = 'preg_replace error (when removing php tags) PREG_JIT_STACKLIMIT_ERROR';
}*/
$content = dolStripPhpCode($content, $replacewith);
//var_dump($content);
// Protect the link styles.css.php to any replacement that we make after.
$content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content);
$content = str_replace('src="javascript.js.php', 'src="!~!~!~javascript.js.php', $content);
$content = str_replace('href="http', 'href="!~!~!~http', $content);
$content = str_replace('xlink:href="', 'xlink:href="!~!~!~', $content);
$content = str_replace('href="//', 'href="!~!~!~//', $content);
$content = str_replace('src="//', 'src="!~!~!~//', $content);
$content = str_replace('src="viewimage.php', 'src="!~!~!~/viewimage.php', $content);
$content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content);
$content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content);
@@ -301,11 +306,15 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '')
}
} elseif (defined('USEDOLIBARRSERVER')) { // REPLACEMENT OF LINKS When page called from Dolibarr server
$content = str_replace('<link rel="stylesheet" href="/styles.css', '<link rel="stylesheet" href="styles.css', $content);
$content = str_replace(' async src="/javascript.js', ' async src="javascript.js', $content);
// Protect the link styles.css.php to any replacement that we make after.
$content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content);
$content = str_replace('src="javascript.css.php', 'src="!~!~!~javascript.css.php', $content);
$content = str_replace('href="http', 'href="!~!~!~http', $content);
$content = str_replace('xlink:href="', 'xlink:href="!~!~!~', $content);
$content = str_replace('href="//', 'href="!~!~!~//', $content);
$content = str_replace('src="//', 'src="!~!~!~//', $content);
$content = str_replace(array('src="viewimage.php', 'src="/viewimage.php'), 'src="!~!~!~/viewimage.php', $content);
$content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content);
$content = str_replace(array('href="document.php', 'href="/document.php'), 'href="!~!~!~/document.php', $content);
@@ -354,8 +363,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '')
if (empty($includehtmlcontentopened)) {
$content = str_replace('!~!~!~', '', $content);
}
} else // REPLACEMENT OF LINKS When page called from virtual host web server
{
} else { // REPLACEMENT OF LINKS When page called from virtual host web server
$symlinktomediaexists = 1;
if ($website->virtualhost) {
$content = preg_replace('/^(<link[^>]*rel="canonical" href=")\//m', '\1'.$website->virtualhost.'/', $content, -1, $nbrep);

View File

@@ -248,7 +248,7 @@ function dolSavePageContent($filetpl, Website $object, WebsitePage $objectpage,
// Add js
$tplcontent .= '<link rel="stylesheet" href="/styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />'."\n";
$tplcontent .= '<!-- Include link to JS file -->'."\n";
$tplcontent .= '<script nonce="'.getNonce().'" async src="/javascript.js.php"></script>'."\n";
$tplcontent .= '<script nonce="'.getNonce().'" async src="/javascript.js.php?website=<?php echo $websitekey; ?>"></script>'."\n";
// Add headers
$tplcontent .= '<!-- Include HTML header from common file -->'."\n";
$tplcontent .= '<?php if (file_exists(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")) include DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html"; ?>'."\n";

View File

@@ -102,7 +102,7 @@ class mod_contract_magre extends ModelNumRefContracts
*/
public function getExample()
{
global $conf, $langs, $mysoc;
global $langs, $mysoc;
$old_code_client = $mysoc->code_client;
$mysoc->code_client = 'CCCCCCCCCC';

View File

@@ -78,6 +78,16 @@ class mod_contract_olive extends ModelNumRefContracts
return $langs->trans("LeopardNumRefModelDesc");
}
/**
* Return numbering example
*
* @return string Example
*/
public function getExample()
{
return '';
}
/**
* Return an example of result returned by getNextValue
*
@@ -87,7 +97,6 @@ class mod_contract_olive extends ModelNumRefContracts
*/
public function getNextValue($objsoc, $contract)
{
global $langs;
return '';
}
@@ -112,9 +121,9 @@ class mod_contract_olive extends ModelNumRefContracts
$result = 0;
$code = strtoupper(trim($code));
if (empty($code) && $this->code_null && empty($conf->global->MAIN_CONTARCT_CODE_ALWAYS_REQUIRED)) {
if (empty($code) && $this->code_null && empty($conf->global->MAIN_CONTRACT_CODE_ALWAYS_REQUIRED)) {
$result = 0;
} elseif (empty($code) && (!$this->code_null || !empty($conf->global->MAIN_CONTARCT_CODE_ALWAYS_REQUIRED))) {
} elseif (empty($code) && (!$this->code_null || !empty($conf->global->MAIN_CONTRACT_CODE_ALWAYS_REQUIRED))) {
$result = -2;
}

View File

@@ -163,7 +163,6 @@ class modApi extends DolibarrModules
'langs'=>'modulebuilder',
'position'=>100,
'perms'=>'1',
//'enabled'=>'isModEnabled("api") && preg_match(\'/^(devtools)/\',$leftmenu)',
'enabled'=>'isModEnabled("api")',
'target'=>'_apiexplorer',
'user'=>0);

View File

@@ -297,7 +297,7 @@ class modBookCal extends DolibarrModules
$r = 0;
// Add here entries to declare new menus
/* BEGIN MODULEBUILDER TOPMENU */
$this->menu[$r++] = array(
/*$this->menu[$r++] = array(
'fk_menu'=>'', // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'type'=>'top', // This is a Top menu entry
'titre'=>'ModuleBookCalName',
@@ -311,18 +311,33 @@ class modBookCal extends DolibarrModules
'perms'=>'$user->rights->bookcal->availabilities->read', // Use 'perms'=>'$user->rights->bookcal->availabilities->read' if you want your menu with a permission rules
'target'=>'',
'user'=>2, // 0=Menu for internal users, 1=external users, 2=both
);
);*/
/* END MODULEBUILDER TOPMENU */
/* BEGIN MODULEBUILDER LEFTMENU CALENDAR */
$this->menu[$r++] = array(
'fk_menu'=>'fk_mainmenu=agenda',
'type'=>'left',
'titre'=> 'MenuBookcalIndex',
'prefix' => img_picto('', $this->picto, 'class="paddingright pictofixedwidth em92"'),
'mainmenu'=>'agenda',
'leftmenu'=> 'bookcal',
'url'=> '/bookcal/bookcalindex.php',
'langs'=> 'bookcal',
'position'=> 1100+$r,
'enabled'=> '1',
'perms'=> '$user->rights->bookcal->calendar->read',
'user'=> 0
);
$this->menu[$r++]=array(
// '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'fk_menu'=>'fk_mainmenu=bookcal',
'fk_menu'=>'fk_mainmenu=agenda,fk_leftmenu=bookcal',
// This is a Left menu entry
'type'=>'left',
'titre'=>'List Calendar',
'mainmenu'=>'bookcal',
'leftmenu'=>'bookcal_calendar',
'titre'=>'Calendar',
'mainmenu'=>'agenda',
'leftmenu'=>'bookcal_calendar_list',
'url'=>'/bookcal/calendar_list.php',
// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'langs'=>'bookcal',
@@ -337,12 +352,12 @@ class modBookCal extends DolibarrModules
);
$this->menu[$r++]=array(
// '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'fk_menu'=>'fk_mainmenu=bookcal,fk_leftmenu=bookcal_calendar',
'fk_menu'=>'fk_mainmenu=agenda,fk_leftmenu=bookcal_calendar_list',
// This is a Left menu entry
'type'=>'left',
'titre'=>'New Calendar',
'mainmenu'=>'bookcal',
'leftmenu'=>'bookcal_calendar',
'titre'=>'NewCalendar',
'mainmenu'=>'agenda',
'leftmenu'=>'bookcal_new',
'url'=>'/bookcal/calendar_card.php?action=create',
// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
'langs'=>'bookcal',
@@ -405,11 +420,11 @@ class modBookCal extends DolibarrModules
$this->menu[$r++]=array(
// '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'fk_menu'=>'fk_mainmenu=bookcal',
'fk_menu'=>'fk_mainmenu=agenda,fk_leftmenu=bookcal',
// This is a Left menu entry
'type'=>'left',
'titre'=>'List Availabilities',
'mainmenu'=>'bookcal',
'titre'=>'Availabilities',
'mainmenu'=>'agenda',
'leftmenu'=>'bookcal_availabilities',
'url'=>'/bookcal/availabilities_list.php',
// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
@@ -425,11 +440,11 @@ class modBookCal extends DolibarrModules
);
$this->menu[$r++]=array(
// '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
'fk_menu'=>'fk_mainmenu=bookcal,fk_leftmenu=bookcal_availabilities',
'fk_menu'=>'fk_mainmenu=agenda,fk_leftmenu=bookcal_availabilities',
// This is a Left menu entry
'type'=>'left',
'titre'=>'New Availabilities',
'mainmenu'=>'bookcal',
'titre'=>'NewAvailabilities',
'mainmenu'=>'agenda',
'leftmenu'=>'bookcal_availabilities',
'url'=>'/bookcal/availabilities_card.php?action=create',
// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.

View File

@@ -35,7 +35,7 @@ if (!empty($extrafieldsobjectkey) && !empty($extrafields->attributes[$extrafield
// If field is a computed field, we make computation to get value
if ($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]) {
$objectoffield = $object; //For compatibily with the computed formula
$value = dol_eval($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1, 1, '0');
$value = dol_eval($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1, 1, '2');
if (is_numeric(price2num($value)) && $extrafields->attributes[$extrafieldsobjectkey]['totalizable'][$key]) {
$obj->$tmpkey = price2num($value);
}

View File

@@ -31,7 +31,6 @@
// $sendto
// $withmaindocfilemail
if ($massaction == 'predeletedraft') {
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDraftDeletion"), $langs->trans("ConfirmMassDeletionQuestion", count($toselect)), "delete", null, '', 0, 200, 500, 1);
}
@@ -94,7 +93,7 @@ if ($massaction == 'preaffecttag' && isModEnabled('category')) {
}
}
if ($massaction == 'preupdateprice' && isModEnabled('category')) {
if ($massaction == 'preupdateprice') {
$formquestion = array();
$valuefield = '<div style="display: flex; align-items: center; justify-content: flex-end; padding-right: 150px">';

View File

@@ -3225,6 +3225,7 @@ class EmailCollector extends CommonObject
} else {
$langs->load("admin");
$output = $langs->trans('NoNewEmailToProcess');
$output .= ' (defaultlang='.$langs->defaultlang.')';
}
// Disconnect

View File

@@ -366,7 +366,7 @@ $num = $db->num_rows($resql);
if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) {
$obj = $db->fetch_object($resql);
$id = $obj->rowid;
header("Location: ".dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.$id);
header("Location: ".dol_buildpath('/fichinter/card.php', 1).'?id='.$id);
exit;
}

View File

@@ -126,7 +126,8 @@ $now = dol_now();
$error = 0;
$result = restrictedArea($user, 'facture', $object->id, $objecttype);
$result = restrictedArea($user, 'supplier_invoicerec', $object->id, $objecttype);
/*

View File

@@ -66,7 +66,6 @@ $objecttype = 'facture_fourn_rec';
if ($action == "create" || $action == "add") {
$objecttype = '';
}
$result = restrictedArea($user, 'facture', $id, $objecttype);
$search_ref = GETPOST('search_ref');
$search_societe = GETPOST('search_societe');
@@ -169,7 +168,7 @@ if ($socid > 0) {
}
$objecttype = 'facture_fourn_rec';
$result = restrictedArea($user, 'facture', $object->id, $objecttype);
$result = restrictedArea($user, 'supplier_invoicerec', $object->id, $objecttype);
/*

View File

@@ -455,7 +455,7 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) {
// We calculate $totallate. Must be defined before start of next loop because it is show in first fetch on next loop
foreach ($valid_dashboardlines as $board) {
if ($board->nbtodolate > 0) {
if (is_numeric($board->nbtodo) && is_numeric($board->nbtodolate) && $board->nbtodolate > 0) {
$totaltodo += $board->nbtodo;
$totallate += $board->nbtodolate;
}

View File

@@ -4100,6 +4100,7 @@ function migrate_delete_old_files($db, $langs, $conf)
// List of files to delete
$filetodeletearray = array(
'/core/ajax/ajaxcompanies.php',
'/core/triggers/interface_demo.class.php',
'/core/menus/barre_left/default.php',
'/core/menus/barre_top/default.php',

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=ربط ملف جديد/ وثيقة
LinkedFiles=الملفات والمستندات المرتبطة
NoLinkFound=لا يوجد روابط مسجلة
LinkComplete=تم ربط الملف بنجاح
ErrorFileNotLinked=لا يمكن ربط الملف
LinkRemoved= الرابط%sتم إزالتة
ErrorFailedToDeleteLink= فشل في إزالة الرابط '<b> %s </b>'
ErrorFailedToUpdateLink= فشل تحديث الرابط '<b> %s </b>'
URLToLink=عنوان URL للربط
OverwriteIfExists=إستبدال محتوى الملف إذا كان موجوداً

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Свързване на нов файл / документ
LinkedFiles=Свързани файлове и документи
NoLinkFound=Няма регистрирани връзки
LinkComplete=Файлът е успешно свързан
ErrorFileNotLinked=Файлът не може да бъде свързан
LinkRemoved=Връзката %s е премахната
ErrorFailedToDeleteLink= Премахването на връзката '<b>%s</b>' не е успешно
ErrorFailedToUpdateLink= Актуализацията на връзката '<b>%s</b>' не е успешна
URLToLink=URL адрес
OverwriteIfExists=Презаписване на файл, ако съществува

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Enllaça un nou arxiu/document
LinkedFiles=Arxius i documents enllaçats
NoLinkFound=No hi ha enllaços registrats
LinkComplete=L'arxiu s'ha enllaçat correctament
ErrorFileNotLinked=L'arxiu no s'ha enllaçat
LinkRemoved=L'enllaç %s s'ha eliminat
ErrorFailedToDeleteLink= Error en eliminar l'enllaç '<b>%s</b>'
ErrorFailedToUpdateLink= Error en actualitzar l'enllaç '<b>%s</b>'
URLToLink=URL a enllaçar
OverwriteIfExists=Sobreescriu el fitxer si existeix

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Připojit nový soubor/dokument
LinkedFiles=Připojené soubory a dokumenty
NoLinkFound=Žádné odkazy
LinkComplete=Soubor byl úspěšně připojen
ErrorFileNotLinked=Soubor nemohl být připojen
LinkRemoved=Odkaz %s byl odstraněn
ErrorFailedToDeleteLink= Nepodařilo se odstranit odkaz '<b>%s</b>'
ErrorFailedToUpdateLink= Nepodařilo se aktualizovat odkaz '<b>%s</b>'
URLToLink=Připojit URL
OverwriteIfExists=Pokud existuje, přepište soubor

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Cysylltwch ffeil/dogfen newydd
LinkedFiles=Ffeiliau a dogfennau cysylltiedig
NoLinkFound=Dim dolenni cofrestredig
LinkComplete=Mae'r ffeil wedi'i chysylltu'n llwyddiannus
ErrorFileNotLinked=Nid oedd modd cysylltu'r ffeil
LinkRemoved=Mae'r cyswllt %s wedi'i ddileu
ErrorFailedToDeleteLink= Wedi methu tynnu dolen ' <b> %s </b> '
ErrorFailedToUpdateLink= Wedi methu diweddaru'r ddolen ' <b> %s </b> '
URLToLink=URL i'r ddolen
OverwriteIfExists=Trosysgrifo ffeil os yw'n bodoli

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link en ny fil / et dokument
LinkedFiles=Sammenkædede filer og dokumenter
NoLinkFound=Ingen registrerede links
LinkComplete=Filen er blevet linket korrekt
ErrorFileNotLinked=Filen kunne ikke forbindes
LinkRemoved=Linket %s er blevet fjernet
ErrorFailedToDeleteLink= Kunne ikke fjerne linket '<b> %s </b>'
ErrorFailedToUpdateLink= Kunne ikke opdatere linket '<b> %s </b>'
URLToLink=URL til link
OverwriteIfExists=Overskriv fil, hvis den findes

View File

@@ -1,5 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Verknüpfe eine neue Datei /Dokument
LinkComplete=Die Datei wurde erfolgreich verlinkt
ErrorFileNotLinked=Die Datei konnte nicht verlinkt werden
URLToLink=URL zum Verlinken

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Neue Verknüpfung erstellen
LinkedFiles=Verknüpfte Dateien
NoLinkFound=Keine verknüpften Links
LinkComplete=Die Datei wurde erfolgreich verlinkt.
ErrorFileNotLinked=Die Datei konnte nicht verlinkt werden.
LinkRemoved=Der Link %s wurde entfernt
ErrorFailedToDeleteLink= Fehler beim entfernen des Links '<b>%s</b>'
ErrorFailedToUpdateLink= Fehler beim aktualisieren des Link '<b>%s</b>'
URLToLink=zu verlinkende URL
OverwriteIfExists=Datei überschreiben, falls vorhanden

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Συνδέστε ένα νέο αρχείο / έγγραφο
LinkedFiles=Συνδεδεμένα αρχεία και έγγραφα
NoLinkFound=Δεν υπάρχουν εγγεγραμμένοι σύνδεσμοι
LinkComplete=Το αρχείο έχει συνδεθεί με επιτυχία
ErrorFileNotLinked=Το αρχείο δεν μπορεί να συνδεθεί
LinkRemoved=Ο σύνδεσμος %s έχει αφαιρεθεί
ErrorFailedToDeleteLink= Απέτυχε η αφαίρεση του συνδέσμου '<b>%s</b>'
ErrorFailedToUpdateLink= Απέτυχε η ενημέρωση του σύνδεσμο '<b>%s</b>'
URLToLink=Διεύθυνση URL για σύνδεση
OverwriteIfExists=Επανεγγραφή αρχείου εάν υπάρχει

View File

@@ -180,4 +180,5 @@ BrowserPush=Browser Popup Notification
Reminders=Reminders
ActiveByDefault=Enabled by default
Until=until
DataFromWasMerged=Data from %s was merged
DataFromWasMerged=Data from %s was merged
AgendaShowBookcalCalendar=Booking calendar: %s

View File

@@ -1,5 +1,5 @@
# Dolibarr language file - Source file is en_US - companies
newSocieteAdded=Your contact has been recorded. We will go back to you soon...
newSocieteAdded=Your contact details have been recorded. We will get back to you soon...
ContactUsDesc=This form allows you to send us a message for a first contact.
ErrorCompanyNameAlreadyExists=Company name %s already exists. Choose another one.
ErrorSetACountryFirst=Set the country first

View File

@@ -45,7 +45,7 @@ ExtraFieldsEcmFiles=Extrafields Ecm Files
ExtraFieldsEcmDirectories=Extrafields Ecm Directories
ECMSetup=ECM Setup
GenerateImgWebp=Duplicate all images with another version with .webp format
ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included)...
ConfirmGenerateImgWebp=If you confirm, you will generate an image in .webp format for all images currently into this folder (subfolders are not included, webp images will not be generated if size is greater than original)...
ConfirmImgWebpCreation=Confirm all images duplication
GenerateChosenImgWebp=Duplicate chosen image with another version with .webp format
ConfirmGenerateChosenImgWebp=If you confirm, you will generate an image in .webp format for the image %s

View File

@@ -363,6 +363,7 @@ WarningModuleNeedRefrech = Module <b>%s</b> has been disabled. Don't forget to e
WarningPermissionAlreadyExist=Existing permissions for this object
WarningGoOnAccountancySetupToAddAccounts=If this list is empty, go into menu %s - %s - %s to load or create accounts for your chart of account.
WarningCorrectedInvoiceNotFound=Corrected invoice not found
WarningCommentNotFound=Please check placement of start and end comments for <b>%s</b> section in file <b>%s</b> before submitting your action
SwissQrOnlyVIR = SwissQR invoice can only be added on invoices set to be paid with credit transfer payments.
SwissQrCreditorAddressInvalid = Creditor address is invalid (are ZIP and city set? (%s)

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1239,3 +1239,13 @@ DateOfPrinting=Date of printing
ClickFullScreenEscapeToLeave=Click here to switch in Full screen mode. Press ESCAPE to leave Full screen mode.
UserNotYetValid=Not yet valid
UserExpired=Expired
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite if file exists

View File

@@ -1,10 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Enlazar a un nuevo archivo/documento
LinkedFiles=Archivos y documentos enlazados
NoLinkFound=No hay enlaces registrados
LinkComplete=El archivo se ha enlazado correctamente
ErrorFileNotLinked=El archivo no pudo ser enlazado
LinkRemoved=El enlace %s ha sido eliminado
ErrorFailedToDeleteLink=Error al eliminar el enlace '<b>%s</b>'
ErrorFailedToUpdateLink=Error al actualizar enlace '<b>%s</b>'
URLToLink=URL del enlace

View File

@@ -1,10 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Enlace un nuevo archivo / documento
LinkedFiles=Links archivos y documentos
NoLinkFound=No hay enlaces registrados
LinkComplete=El archivo ha sido vinculado exitosamente
ErrorFileNotLinked=El archivo no pudo ser vinculado
LinkRemoved=El enlace %s ha sido eliminado
ErrorFailedToDeleteLink=Error al eliminar el enlace '<b>%s</b>'
ErrorFailedToUpdateLink=Error al actualizar el enlace '<b>%s</b>'
URLToLink=URL para enlazar

View File

@@ -1,9 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Vincular un nuevo archivo / documento
NoLinkFound=No hay enlaces registrados
LinkComplete=El archivo se ha vinculado correctamente
ErrorFileNotLinked=El archivo no se pudo vincular
LinkRemoved=El enlace %s ha sido eliminado
ErrorFailedToDeleteLink=Error al eliminar el enlace '<b> %s </b>'
ErrorFailedToUpdateLink=Error al actualizar el enlace '<b> %s </b>'
URLToLink=URL para vincular

View File

@@ -1,8 +0,0 @@
# Dolibarr language file - Source file is en_US - link
NoLinkFound=No hay enlaces registrados
LinkComplete=El archivo se ha vinculado con éxito.
ErrorFileNotLinked=No se pudo vincular el archivo
LinkRemoved=El enlace %s ha sido eliminado
ErrorFailedToDeleteLink=Error al eliminar el enlace ' <b> %s </b> '
ErrorFailedToUpdateLink=Error al actualizar el enlace '<b> %s </b>'
URLToLink=URL para vincular

View File

@@ -1,7 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkComplete=El archivo se ha vinculado con éxito.
ErrorFileNotLinked=No se pudo vincular el archivo
LinkRemoved=El enlace %s ha sido eliminado
ErrorFailedToDeleteLink=Error al eliminar el enlace ' <b> %s </b> '
ErrorFailedToUpdateLink=Error al actualizar el enlace ' <b> %s </b> '
URLToLink=URL para vincular

View File

@@ -1,8 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkedFiles=Archivos enlazados y documentos
NoLinkFound=No hay enlaces registrados
LinkComplete=El archivo se ha vinculado correctamente
ErrorFileNotLinked=No se pudo vincular el archivo.
LinkRemoved=Se ha eliminado el enlace %s
ErrorFailedToDeleteLink=No se pudo eliminar el vínculo '<b>%s</b>'
URLToLink=URL para vincular

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Vincular un nuevo archivo/documento
LinkedFiles=Archivos y documentos vinculados
NoLinkFound=Sin enlaces registrados
LinkComplete=El archivo ha sido vinculado correctamente
ErrorFileNotLinked=El archivo no ha podido ser vinculado
LinkRemoved=El vínculo %s ha sido eliminado
ErrorFailedToDeleteLink= Error al eliminar el vínculo '<b>%s</b>'
ErrorFailedToUpdateLink= Error al actualizar el vínculo '<b>%s</b>'
URLToLink=URL a enlazar
OverwriteIfExists=Sobrescribir archivo si existe

View File

@@ -1,10 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Vincular un nuevo archivo / documento
LinkedFiles=Archivos enlazados y documentos
NoLinkFound=No hay enlaces registrados
LinkComplete=El archivo se ha vinculado correctamente
ErrorFileNotLinked=No se pudo vincular el archivo.
LinkRemoved=Se ha eliminado el enlace %s
ErrorFailedToDeleteLink=No se pudo eliminar el vínculo '<b> %s </b>'
ErrorFailedToUpdateLink=Error al actualizar el vínculo '<b> %s </b>'
URLToLink=URL para vincular

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Fitxategi/dokumentu berria estekatu
LinkedFiles=Estekatutako fitxategi eta dokumentuak
NoLinkFound=Ez dago gordetako estekarik
LinkComplete=Fitxategia ondo estekatu da
ErrorFileNotLinked=Ezin izan da fitxategia estekatu
LinkRemoved=%s esteka ezabatua izan da
ErrorFailedToDeleteLink= Ezin izan da '<b>%s</b>' esteka ezabatu
ErrorFailedToUpdateLink= Ezin izan da '<b>%s</b>' esteka berritu
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=پیوند یک فایل/سند
LinkedFiles=اسناد و فایل‌های مرتبط
NoLinkFound=پیوند ثبت‌شده‌ای وجود ندارد
LinkComplete=فایل با موفقیت پیوند شد
ErrorFileNotLinked=امکان پیوند فایل وجود ندارد
LinkRemoved=پیوند %s برداشته شد
ErrorFailedToDeleteLink= امکان حذف پیوند '<b>%s</b>' نبود
ErrorFailedToUpdateLink= امکان روزآمدسازی پیوند '<b>%s</b>' نبود
URLToLink=نشانی برای پیوند کردن
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Luo uusi linkki tiedostoon/dokumenttiin
LinkedFiles=Linkitetyt tiedostot ja dokumentit
NoLinkFound=Rekisteröityjä linkkejä ei ole
LinkComplete=Tiedosto on linkitetty onnistuneesti
ErrorFileNotLinked=Tiedostoa ei voitu linkittää
LinkRemoved=%s linkki on poistettu
ErrorFailedToDeleteLink= Linkin '<b>%s</b>' poisto ei onnistunut
ErrorFailedToUpdateLink= Linkin '<b>%s</b>' päivitys ei onnistunut
URLToLink=URL linkiksi
OverwriteIfExists=Korvaa tiedosto jos olemassa

View File

@@ -1,6 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Relier un nouveau fichier / document
NoLinkFound=Pas de liens enregistrés
LinkComplete=Le fichier a été lié avec succès
ErrorFailedToDeleteLink=Impossible d'enlever le lien '<b>%s</b>'
ErrorFailedToUpdateLink=Impossible de mettre à jour le lien '<b>%s</b>'

View File

@@ -363,6 +363,7 @@ WarningModuleNeedRefrech = Le module <b>%s</b> a été désactivé. N'oubliez pa
WarningPermissionAlreadyExist=Autorisations existantes pour cet objet
WarningGoOnAccountancySetupToAddAccounts=Si cette liste est vide, allez dans le menu %s - %s - %s pour charger ou créer des comptes pour votre plan comptable.
WarningCorrectedInvoiceNotFound=Facture corrigée introuvable
WarningCommentNotFound=Verifier l'emplacement des commentaires debut et fin pour la section <b>%s</b> dans le fichier <b>%s</b> avant de soumettre votre action
SwissQrOnlyVIR = La facture SwissQR ne peut être ajoutée que sur les factures définies pour être payées avec des paiements par virement.
SwissQrCreditorAddressInvalid = L'adresse du créancier n'est pas valide (le code postal et la ville sont-ils définis ? (%s)

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Lier un nouveau fichier/document
LinkedFiles=Fichiers et documents liés
NoLinkFound=Aucun lien associé
LinkComplete=Le fichier a été correctement lié
ErrorFileNotLinked=Le fichier n'a pas pu être lié
LinkRemoved=Le lien %s a été supprimé
ErrorFailedToDeleteLink= Impossible de supprimer le lien '<b>%s</b>'
ErrorFailedToUpdateLink= Impossible de modifier le lien '<b>%s</b>'
URLToLink=URL à lier
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Ligar un novo ficheiro/documento
LinkedFiles=Ficheiros e documentos ligados
NoLinkFound=Sen ligazóns registrados
LinkComplete=O ficheiro foi ligado correctamente
ErrorFileNotLinked=O ficheiro non puido ser ligado
LinkRemoved=A ligazón %s foi eliminada
ErrorFailedToDeleteLink= Erro ao eliminar a ligazón '<b>%s</b>'
ErrorFailedToUpdateLink= Erro ao actualizar a ligazón '<b>%s</b>'
URLToLink=URL a ligar
OverwriteIfExists=Sobrescribir ficheiro se existe

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Poveži novu datoteku/dokument
LinkedFiles=Povezane datoteke i dokumenti
NoLinkFound=Nema registriranih veza
LinkComplete=Datoteka je uspješno povezana
ErrorFileNotLinked=Datoteku je nemoguće povezati
LinkRemoved=Veza %s je obrisana
ErrorFailedToDeleteLink= Neuspješno brisanje veze '<b>%s</b>'
ErrorFailedToUpdateLink= Neuspješna promjena veze '<b>%s</b>'
URLToLink=URL prema vezi
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Új fájl/dokumentum hivatkozása
LinkedFiles=Hivatkozott fájlok és dokumentumok
NoLinkFound=Nincs mentett hivatkozás
LinkComplete=A fájlra történt hivatkozás sikerült
ErrorFileNotLinked=A fájlra nem lehet hivatkozni
LinkRemoved=A %s hivatkozás törölve
ErrorFailedToDeleteLink= A '<b>%s</b>' hivakozás törlése sikertelen
ErrorFailedToUpdateLink= A '<b>%s</b>' hivakozás frissítése sikertelen
URLToLink=A hivatkozás címe
OverwriteIfExists=Fájl felülírása, ha létezik

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Tautan untuk berkas/dokumen baru
LinkedFiles=Tautan berkas dan dokumen
NoLinkFound=Link tidak terdaftar
LinkComplete=Berkas telah berhasil ditautkan
ErrorFileNotLinked=Berkas tidak dapat ditautkan
LinkRemoved=Tautan %s telah dihapus
ErrorFailedToDeleteLink= gagal untuk menghapus tautan '<b>%s</b>'
ErrorFailedToUpdateLink= Gagal untuk memperbaharui tautan '<b>%s</b>'
URLToLink=URL untuk ditautkan
OverwriteIfExists=Timpa file jika ada

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Collega un nuovo file/documento
LinkedFiles=File e documenti collegati
NoLinkFound=Nessun collegamento registrato
LinkComplete=Il file è stato correttamente collegato
ErrorFileNotLinked=Il file non può essere collegato
LinkRemoved=Il collegamento %s è stato rimosso
ErrorFailedToDeleteLink= Impossibile rimuovere il collegamento '<b>%s</b>'
ErrorFailedToUpdateLink= Impossibile caricare il collegamento '<b>%s</b>'
URLToLink=Indirizzo del link
OverwriteIfExists=Sovrascrivi file se esiste

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=新規ファイル/ドキュメントをリンクする
LinkedFiles=ファイルとドキュメントをリンクした
NoLinkFound=リンクは登録されていない
LinkComplete=ファイルを正常にリンクした
ErrorFileNotLinked=ファイルをリンクできなかった
LinkRemoved=リンク %s が削除された
ErrorFailedToDeleteLink= リンク '<b>%s</b>' を削除できなかった
ErrorFailedToUpdateLink= リンク '<b>%s</b>' を更新できなかった
URLToLink=リンクの URL
OverwriteIfExists=存在する場合はファイルを上書きする

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Жаңа файлды/құжатты байланыстырыңыз
LinkedFiles=Байланысты файлдар мен құжаттар
NoLinkFound=Тіркелген сілтемелер жоқ
LinkComplete=Файл сәтті байланыстырылды
ErrorFileNotLinked=Файлды байланыстыру мүмкін болмады
LinkRemoved=%s сілтемесі жойылды
ErrorFailedToDeleteLink= '<b> %s </b>' сілтемесі жойылмады
ErrorFailedToUpdateLink= '<b> %s </b>' сілтемесі жаңартылмады
URLToLink=Сілтеме үшін URL
OverwriteIfExists=Егер бар болса, файлды қайта жазыңыз

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=ເຊື່ອມໂຍງໄຟລ//ເອກະສານໃ່
LinkedFiles=ໄຟລ Linked ແລະເອກະສານທີ່ເຊື່ອມໂຍງ
NoLinkFound=ບໍ່ມີລິ້ງເຊື່ອມຕໍ່ທີ່ລົງທະບຽນ
LinkComplete=ໄຟລ has ໄດ້ຖືກເຊື່ອມຕໍ່ ສຳ ເລັດແລ້ວ
ErrorFileNotLinked=ບໍ່ສາມາດເຊື່ອມໂຍງໄຟລໄດ້
LinkRemoved=ລິ້ງ %s ໄດ້ຖືກລຶບອອກແລ້ວ
ErrorFailedToDeleteLink= ລຶບລິ້ງ '<b> %s </b> ບໍ່ ສຳ ເລັດ'
ErrorFailedToUpdateLink= ອັບເດດລິ້ງ '<b> %s </b> ບໍ່ ສຳ ເລັດ'
URLToLink=URL ເພື່ອເຊື່ອມຕໍ່
OverwriteIfExists=ຂຽນທັບໄຟລ if ຖ້າມີ

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Susieti naują filą / dokumentą
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Nesėkmingas sąsajos '<b>%s</b>' atnaujinimas
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Salinkot jaunu failu/dokumentu
LinkedFiles=Salinkotie faili un dokumenti
NoLinkFound=Nav reģistrētas saites
LinkComplete=Fails veiksmīgi salinkots
ErrorFileNotLinked=Failu nevar salinkot
LinkRemoved=Saite %s tika dzēsta
ErrorFailedToDeleteLink= Kļūda dzēšot saiti '<b>%s</b>'
ErrorFailedToUpdateLink= Kļūda atjaunojot saiti '<b>%s</b>'
URLToLink=Saites uz URL
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Koble en ny fil/dokument
LinkedFiles=Koblede filer og dokumenter
NoLinkFound=Ingen registrerte koblinger
LinkComplete=Filkoblingen ble opprettet
ErrorFileNotLinked=Filen kunne ikke kobles
LinkRemoved=Koblingen til %s ble fjernet
ErrorFailedToDeleteLink= Klarte ikke å fjerne kobling'<b>%s</b>'
ErrorFailedToUpdateLink= Klarte ikke å oppdatere koblingen til '<b>%s</b>'
URLToLink=URL til link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link a new file/document
LinkedFiles=Linked files and documents
NoLinkFound=No registered links
LinkComplete=The file has been linked successfully
ErrorFileNotLinked=The file could not be linked
LinkRemoved=The link %s has been removed
ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
URLToLink=URL to link
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Koppel een nieuw bestand/document
LinkedFiles=Gekoppelde bestanden en documenten
NoLinkFound=Geen geregistreerde koppelingen
LinkComplete=Het bestand is succesvol gekoppeld
ErrorFileNotLinked=Het bestand kon niet gekoppeld worden
LinkRemoved=De koppeling %s is verwijderd
ErrorFailedToDeleteLink= Kon de verbinding '<b>%s</b>' niet verwijderen
ErrorFailedToUpdateLink= Kon verbinding '<b>%s</b>' niet bijwerken
URLToLink=URL naar link
OverwriteIfExists=Overschrijf bestand indien aanwezig

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Podepnij nowy plik/dokument
LinkedFiles=Podpięte pliki i dokumenty
NoLinkFound=Brak zarejestrowanych linków
LinkComplete=Plik został podlinkowany poprawnie
ErrorFileNotLinked=Plik nie mógł zostać podlinkowany
LinkRemoved=Link %s został usunięty
ErrorFailedToDeleteLink= Niemożna usunąc linku '<b>%s</b>'
ErrorFailedToUpdateLink= Niemożna uaktualnić linku '<b>%s</b>'
URLToLink=Adres URL linka
OverwriteIfExists=Zastąp plik, jeśli istnieje

View File

@@ -1,10 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Vincular um novo arquivo/documento
LinkedFiles=Arquivos vinculados e documentos
NoLinkFound=Não há links registrados
LinkComplete=O arquivo foi associada com sucesso
ErrorFileNotLinked=O arquivo não pôde ser vinculado
LinkRemoved=A ligação %s foi removida
ErrorFailedToDeleteLink=Falha ao remover link '<b>%s</b>'
ErrorFailedToUpdateLink=Falha ao atualizar link '<b>%s</b>'
URLToLink=URL para link

View File

@@ -1,10 +0,0 @@
# Dolibarr language file - Source file is en_US - link
LinkANewFile=Vincular um novo arquivo/documento
LinkedFiles=Arquivos vinculados e documentos
NoLinkFound=Não há links registrados
LinkComplete=O arquivo foi associada com sucesso
ErrorFileNotLinked=O arquivo não pôde ser vinculado
LinkRemoved=A ligação %s foi removida
ErrorFailedToDeleteLink=Falha ao remover link '<b>%s</b>'
ErrorFailedToUpdateLink=Falha ao atualizar link '<b>%s</b>'
URLToLink=URL para link

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Associar um novo ficheiro/documento
LinkedFiles=Ficheiros e documentos associados
NoLinkFound=Nenhumas ligações registadas
LinkComplete=Os ficheiros foram ligados com sucesso
ErrorFileNotLinked=Os ficheiros não puderam ser ligados
LinkRemoved=A hiperligação %s foi removida
ErrorFailedToDeleteLink= falhou a remoção da ligação '<b>%s</b>'
ErrorFailedToUpdateLink= Falha na atualização de ligação '<b>%s</b>'
URLToLink=URL para hiperligação
OverwriteIfExists=Overwrite file if exists

View File

@@ -1,11 +0,0 @@
# Dolibarr language file - Source file is en_US - languages
LinkANewFile=Link fişier/document nou
LinkedFiles=Fişiere şi documente ataşate
NoLinkFound=Niciun link inregistrat
LinkComplete=Fişierul a fost ataşat cu succes
ErrorFileNotLinked=Fişierul nu a putut fi ataşat
LinkRemoved=Linkul %s a fost înlăturat
ErrorFailedToDeleteLink= Eşec la înlăturarea linkului '<b>%s</b>'
ErrorFailedToUpdateLink= Eşec la modificarea linkului '<b>%s</b>'
URLToLink=URL la link
OverwriteIfExists=Suprascrie dacă fişierul există

Some files were not shown because too many files have changed in this diff Show More