Merge branch 'Dolibarr:develop' into add-ticket-categories-functions
This commit is contained in:
commit
f0599095ee
21
ChangeLog
21
ChangeLog
@ -2,6 +2,27 @@
|
||||
English Dolibarr ChangeLog
|
||||
--------------------------------------------------------------
|
||||
|
||||
***** ChangeLog for 13.0.4 compared to 13.0.2 *****
|
||||
|
||||
FIX: Allow disabling of a module (not a dangerous action) even if there is problem with token (due to bugged modules).
|
||||
FIX: 13.0 - fatal - missing inclusion of ajax.lib.php for calling `ajax_autocompleter()`
|
||||
FIX: #17919 pictures in docs.
|
||||
FIX: #18006
|
||||
FIX: Accountancy - if we define a date start, automatic binding try to continue to solve old binding
|
||||
FIX: Accoutancy Limit date payment not registered on purchases operations
|
||||
FIX: Can't edit replacement invoice
|
||||
FIX: deposit can create credit note in payment conf
|
||||
FIX: division by zero on create
|
||||
FIX: holiday: balances not updated correctly with pgsql because of case sensitivity field
|
||||
FIX: holiday: status filter parameter has been renamed but not in links it was used
|
||||
FIX: List and Create Companies Left Menus
|
||||
FIX: method exists
|
||||
FIX: need to add payment sum to getlibstatus function in object linked block
|
||||
FIX: permission to close a proposal when using advanced permissions
|
||||
FIX: Problem of z-index with popup and top menu
|
||||
FIX: same thing on supplier orders
|
||||
FIX: Status of invoice when making a replacement invoice
|
||||
FIX: update contact birthday alert
|
||||
|
||||
***** ChangeLog for 14.0.0 compared to 13.0.0 *****
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -99,14 +99,16 @@ print "<br>\n";
|
||||
/**
|
||||
* Edit parameters
|
||||
*/
|
||||
print "\n".'<script type="text/javascript" language="javascript">';
|
||||
print '$(document).ready(function () {
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
print "\n".'<script type="text/javascript" language="javascript">';
|
||||
print '$(document).ready(function () {
|
||||
$("#selectcountry_id").change(function() {
|
||||
document.form_index.action.value="updateedit";
|
||||
document.form_index.submit();
|
||||
});
|
||||
});';
|
||||
print '</script>'."\n";
|
||||
print '</script>'."\n";
|
||||
}
|
||||
|
||||
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
|
||||
@ -384,21 +384,23 @@ print "<br>\n";
|
||||
/**
|
||||
* Edit parameters
|
||||
*/
|
||||
print "\n".'<script type="text/javascript" language="javascript">';
|
||||
print '$(document).ready(function () {
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
print "\n".'<script type="text/javascript" language="javascript">';
|
||||
print '$(document).ready(function () {
|
||||
$("#selectcountry_id").change(function() {
|
||||
document.form_index.action.value="updateedit";
|
||||
document.form_index.submit();
|
||||
});
|
||||
});';
|
||||
print '</script>'."\n";
|
||||
print '</script>'."\n";
|
||||
}
|
||||
|
||||
print '<form enctype="multipart/form-data" method="POST" action="'.$_SERVER["PHP_SELF"].'" name="form_index">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="action" value="update">';
|
||||
|
||||
print '<table class="noborder centpercent editmode">';
|
||||
print '<tr class="liste_titre"><th class="titlefield wordbreak">'.$langs->trans("CompanyInfo").'</th><th>'.$langs->trans("Value").'</th></tr>'."\n";
|
||||
print '<tr class="liste_titre"><th class="titlefieldcreate wordbreak">'.$langs->trans("CompanyInfo").'</th><th>'.$langs->trans("Value").'</th></tr>'."\n";
|
||||
|
||||
// Name
|
||||
print '<tr class="oddeven"><td class="fieldrequired wordbreak"><label for="name">'.$langs->trans("CompanyName").'</label></td><td>';
|
||||
@ -557,7 +559,7 @@ print '<br>';
|
||||
// IDs of the company (country-specific)
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder centpercent editmode">';
|
||||
print '<tr class="liste_titre"><td class="titlefield wordbreak">'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
|
||||
print '<tr class="liste_titre"><td class="titlefieldcreate wordbreak">'.$langs->trans("CompanyIds").'</td><td>'.$langs->trans("Value").'</td></tr>';
|
||||
|
||||
$langs->load("companies");
|
||||
|
||||
@ -668,7 +670,7 @@ print '</div>';
|
||||
print '<br>';
|
||||
print '<table class="noborder centpercent editmode">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="titlefield">'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
|
||||
print '<td class="titlefieldcreate">'.$langs->trans("FiscalYearInformation").'</td><td>'.$langs->trans("Value").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
print '<tr class="oddeven"><td><label for="SOCIETE_FISCAL_MONTH_START">'.$langs->trans("FiscalMonthStart").'</label></td><td>';
|
||||
@ -683,12 +685,12 @@ print load_fiche_titre($langs->trans("TypeOfSaleTaxes"), '', 'object_payment');
|
||||
|
||||
print '<table class="noborder centpercent editmode">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td width="25%">'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
|
||||
print '<td class="titlefieldcreate">'.$langs->trans("VATManagement").'</td><td>'.$langs->trans("Description").'</td>';
|
||||
print '<td class="right"> </td>';
|
||||
print "</tr>\n";
|
||||
|
||||
// Main tax
|
||||
print '<tr class="oddeven"><td width="140"><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(empty($conf->global->FACTURE_TVAOPTION) ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
|
||||
print '<tr class="oddeven"><td><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(empty($conf->global->FACTURE_TVAOPTION) ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
|
||||
print '<td colspan="2">';
|
||||
$tooltiphelp = '';
|
||||
if ($mysoc->country_code == 'FR') {
|
||||
@ -713,7 +715,7 @@ print "</table>";
|
||||
print '<br>';
|
||||
print '<table class="noborder centpercent editmode">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td width="25%">'.$form->textwithpicto($langs->transcountry("LocalTax1Management", $mysoc->country_code), $langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>';
|
||||
print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax1Management", $mysoc->country_code), $langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>';
|
||||
print '<td class="right"> </td>';
|
||||
print "</tr>\n";
|
||||
|
||||
@ -747,7 +749,7 @@ if ($mysoc->useLocalTax(1)) {
|
||||
if (empty($mysoc->country_code)) {
|
||||
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
||||
} else {
|
||||
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</td></tr>';
|
||||
print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</span></td></tr>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -757,7 +759,7 @@ print "</table>";
|
||||
print '<br>';
|
||||
print '<table class="noborder centpercent editmode">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td width="25%">'.$form->textwithpicto($langs->transcountry("LocalTax2Management", $mysoc->country_code), $langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>';
|
||||
print '<td class="titlefieldcreate">'.$form->textwithpicto($langs->transcountry("LocalTax2Management", $mysoc->country_code), $langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)).'</td><td>'.$langs->trans("Description").'</td>';
|
||||
print '<td class="right"> </td>';
|
||||
print "</tr>\n";
|
||||
|
||||
@ -790,7 +792,7 @@ if ($mysoc->useLocalTax(2)) {
|
||||
if (empty($mysoc->country_code)) {
|
||||
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
||||
} else {
|
||||
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</td></tr>';
|
||||
print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</span></td></tr>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -816,7 +818,7 @@ if ($mysoc->useRevenueStamp()) {
|
||||
if (empty($mysoc->country_code)) {
|
||||
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
||||
} else {
|
||||
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</td></tr>';
|
||||
print '<tr class="oddeven nohover"><td class="" colspan="3"><span class="opacitymedium">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</span></td></tr>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -413,8 +413,8 @@ if ($action != 'create') {
|
||||
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
||||
*/
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" name="label" value="'.GETPOST('label', 'alphanohtml').'"></td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Email").'</td><td><input type="text" name="email" value="'.GETPOST('email', 'alphanohtml').'"></td></tr>';
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" name="label" value="'.GETPOST('label', 'alphanohtml').'" autofocus></td></tr>';
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("Email").'</td><td><input type="text" name="email" value="'.GETPOST('email', 'alphanohtml').'"></td></tr>';
|
||||
print '<tr><td>'.$langs->trans("Signature").'</td><td>';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$doleditor = new DolEditor('signature', GETPOST('signature'), '', 138, 'dolibarr_notes', 'In', true, true, empty($conf->global->FCKEDITOR_ENABLE_USERSIGN) ? 0 : 1, ROWS_4, '90%');
|
||||
|
||||
@ -481,7 +481,9 @@ print load_fiche_titre($langs->trans("ModulesSetup"), '', 'title_setup');
|
||||
$deschelp = '';
|
||||
if ($mode == 'common' || $mode == 'commonkanban') {
|
||||
$desc = $langs->trans("ModulesDesc", '{picto}');
|
||||
$desc .= ' '.$langs->trans("ModulesDesc2", '{picto2}');
|
||||
$desc = str_replace('{picto}', img_picto('', 'switch_off'), $desc);
|
||||
$desc = str_replace('{picto2}', img_picto('', 'setup'), $desc);
|
||||
if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING) ? 1 : $conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)) { // If only minimal initial modules enabled
|
||||
$deschelp = '<div class="info hideonsmartphone">'.$desc."<br></div><br>\n";
|
||||
}
|
||||
@ -1247,7 +1249,13 @@ if ($mode == 'develop') {
|
||||
print '<div class="imgmaxheight50 logo_setup"></div>';
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("TryToUseTheModuleBuilder", $langs->transnoentitiesnoconv("ModuleBuilder")).'</td>';
|
||||
print '<td>'.$langs->trans("SeeTopRightMenu").'</td>';
|
||||
print '<td class="maxwidth300">';
|
||||
if (!empty($conf->modulebuilder->enabled)) {
|
||||
print $langs->trans("SeeTopRightMenu");
|
||||
} else {
|
||||
print '<span class="opacitymedium">'.$langs->trans("ModuleMustBeEnabledFirst", $langs->transnoentitiesnoconv("ModuleBuilder")).'</span>';
|
||||
}
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '<tr class="oddeven" height="80">'."\n";
|
||||
|
||||
@ -25,6 +25,8 @@
|
||||
*/
|
||||
|
||||
require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
|
||||
$langs->load("admin");
|
||||
|
||||
@ -35,6 +37,10 @@ if (!$user->admin) {
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
if ($action == 'convert') {
|
||||
$sql = "ALTER TABLE ".$db->escape(GETPOST("table", "aZ09"))." ENGINE=INNODB";
|
||||
$db->query($sql);
|
||||
@ -82,6 +88,7 @@ if (!$base) {
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>#</td>';
|
||||
print '<td>'.$langs->trans("TableName").'</td>';
|
||||
print '<td colspan="2">'.$langs->trans("Type").'</td>';
|
||||
print '<td>'.$langs->trans("Format").'</td>';
|
||||
@ -105,7 +112,18 @@ if (!$base) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
print '<td><a href="dbtable.php?table='.$obj->Name.'">'.$obj->Name.'</a></td>';
|
||||
print '<td>'.($i+1).'</td>';
|
||||
print '<td><a href="dbtable.php?table='.$obj->Name.'">'.$obj->Name.'</a>';
|
||||
$tablename = preg_replace('/^'.MAIN_DB_PREFIX.'/', 'llx_', $obj->Name);
|
||||
if (dol_is_file(DOL_DOCUMENT_ROOT.'/install/mysql/tables/'.$tablename.'.sql')) {
|
||||
$img = "info";
|
||||
//print img_picto($langs->trans("ExternalModule"), $img);
|
||||
} else {
|
||||
$img = "info_black";
|
||||
//print DOL_DOCUMENT_ROOT.'/install/mysql/tables/'.$tablename.'.sql';
|
||||
print img_picto($langs->trans("ExternalModule"), $img, 'class="small"');
|
||||
}
|
||||
print '</td>';
|
||||
print '<td>'.$obj->Engine.'</td>';
|
||||
if (isset($obj->Engine) && $obj->Engine == "MyISAM") {
|
||||
print '<td><a class="reposition" href="database-tables.php?action=convert&table='.$obj->Name.'">'.$langs->trans("Convert").' InnoDb</a></td>';
|
||||
@ -142,6 +160,8 @@ if (!$base) {
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
|
||||
print '<td>#</td>';
|
||||
print '<td>'.$langs->trans("TableName").'</td>';
|
||||
print '<td>Nb of tuples</td>';
|
||||
print '<td>Nb index fetcher.</td>';
|
||||
@ -160,6 +180,7 @@ if (!$base) {
|
||||
while ($i < $num) {
|
||||
$row = $db->fetch_row($resql);
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.($i+1).'</td>';
|
||||
print '<td>'.$row[0].'</td>';
|
||||
print '<td class="right">'.$row[1].'</td>';
|
||||
print '<td class="right">'.$row[2].'</td>';
|
||||
@ -179,6 +200,7 @@ if (!$base) {
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>#</td>';
|
||||
print '<td>'.$langs->trans("TableName").'</td>';
|
||||
print '<td>'.$langs->trans("NbOfRecord").'</td>';
|
||||
print "</tr>\n";
|
||||
@ -197,6 +219,7 @@ if (!$base) {
|
||||
}
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.($i+1).'</td>';
|
||||
print '<td>'.$row[0].'</td>';
|
||||
print '<td>'.$count.'</td>';
|
||||
print '</tr>';
|
||||
|
||||
@ -79,7 +79,12 @@ $file_list = array('missing' => array(), 'updated' => array());
|
||||
|
||||
// Local file to compare to
|
||||
$xmlshortfile = dol_sanitizeFileName(GETPOST('xmlshortfile', 'alpha') ? GETPOST('xmlshortfile', 'alpha') : 'filelist-'.DOL_VERSION.(empty($conf->global->MAIN_FILECHECK_LOCAL_SUFFIX) ? '' : $conf->global->MAIN_FILECHECK_LOCAL_SUFFIX).'.xml'.(empty($conf->global->MAIN_FILECHECK_LOCAL_EXT) ? '' : $conf->global->MAIN_FILECHECK_LOCAL_EXT));
|
||||
|
||||
$xmlfile = DOL_DOCUMENT_ROOT.'/install/'.$xmlshortfile;
|
||||
if (!preg_match('/\.zip$/i', $xmlfile) && dol_is_file($xmlfile.'.zip')) {
|
||||
$xmlfile = $xmlfile.'.zip';
|
||||
}
|
||||
|
||||
// Remote file to compare to
|
||||
$xmlremote = GETPOST('xmlremote', 'alphanohtml');
|
||||
if (empty($xmlremote) && !empty($conf->global->MAIN_FILECHECK_URL)) {
|
||||
@ -150,6 +155,10 @@ if (GETPOST('target') == 'local') {
|
||||
}
|
||||
}
|
||||
$xml = simplexml_load_file($xmlfile);
|
||||
if ($xml === false) {
|
||||
print '<div class="warning">'.$langs->trans('XmlCorrupted').': '.$xmlfile.'</span>';
|
||||
$error++;
|
||||
}
|
||||
} else {
|
||||
print '<div class="warning">'.$langs->trans('XmlNotFound').': '.$xmlfile.'</span>';
|
||||
$error++;
|
||||
|
||||
@ -270,15 +270,16 @@ class Categorie extends CommonObject
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('constructCategory', $parameters, $this); // Note that $action and $object may have been modified by some hooks
|
||||
if ($reshook >= 0 && !empty($hookmanager->resArray)) {
|
||||
$mapList = $hookmanager->resArray;
|
||||
$mapId = $mapList['id'];
|
||||
$mapCode = $mapList['code'];
|
||||
self::$MAP_ID_TO_CODE[$mapId] = $mapCode;
|
||||
$this->MAP_ID[$mapCode] = $mapId;
|
||||
$this->MAP_CAT_FK[$mapCode] = $mapList['cat_fk'];
|
||||
$this->MAP_CAT_TABLE[$mapCode] = $mapList['cat_table'];
|
||||
$this->MAP_OBJ_CLASS[$mapCode] = $mapList['obj_class'];
|
||||
$this->MAP_OBJ_TABLE[$mapCode] = $mapList['obj_table'];
|
||||
foreach ($hookmanager->resArray as $mapList) {
|
||||
$mapId = $mapList['id'];
|
||||
$mapCode = $mapList['code'];
|
||||
self::$MAP_ID_TO_CODE[$mapId] = $mapCode;
|
||||
$this->MAP_ID[$mapCode] = $mapId;
|
||||
$this->MAP_CAT_FK[$mapCode] = $mapList['cat_fk'];
|
||||
$this->MAP_CAT_TABLE[$mapCode] = $mapList['cat_table'];
|
||||
$this->MAP_OBJ_CLASS[$mapCode] = $mapList['obj_class'];
|
||||
$this->MAP_OBJ_TABLE[$mapCode] = $mapList['obj_table'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1504,7 +1505,10 @@ class Categorie extends CommonObject
|
||||
} else {
|
||||
$sql = "SELECT ct.fk_categorie, c.label, c.rowid";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."categorie_".(empty($this->MAP_CAT_TABLE[$type]) ? $type : $this->MAP_CAT_TABLE[$type])." as ct, ".MAIN_DB_PREFIX."categorie as c";
|
||||
$sql .= " WHERE ct.fk_categorie = c.rowid AND ct.fk_".(empty($this->MAP_CAT_FK[$type]) ? $type : $this->MAP_CAT_FK[$type])." = ".(int) $id." AND c.type = ".$this->MAP_ID[$type];
|
||||
$sql .= " WHERE ct.fk_categorie = c.rowid AND ct.fk_".(empty($this->MAP_CAT_FK[$type]) ? $type : $this->MAP_CAT_FK[$type])." = ".(int) $id;
|
||||
// This seems useless because the table already contains id of category of 1 unique type. So commented.
|
||||
// So now it works also with external added categories.
|
||||
//$sql .= " AND c.type = ".$this->MAP_ID[$type];
|
||||
$sql .= " AND c.entity IN (".getEntity('category').")";
|
||||
|
||||
$res = $this->db->query($sql);
|
||||
|
||||
@ -1470,6 +1470,80 @@ if (!$error && ($action == 'affecttag' && $confirm == 'yes') && $permissiontoadd
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error && ($massaction == 'enable' || ($action == 'enable' && $confirm == 'yes')) && $permissiontoadd) {
|
||||
$db->begin();
|
||||
|
||||
$objecttmp = new $objectclass($db);
|
||||
$nbok = 0;
|
||||
foreach ($toselect as $toselectid) {
|
||||
$result = $objecttmp->fetch($toselectid);
|
||||
if ($result>0) {
|
||||
if (in_array($objecttmp->element, array('societe'))) {
|
||||
$result =$objecttmp->setStatut(1);
|
||||
}
|
||||
if ($result <= 0) {
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
$error++;
|
||||
break;
|
||||
} else {
|
||||
$nbok++;
|
||||
}
|
||||
} else {
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
$error++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
if ($nbok > 1) {
|
||||
setEventMessages($langs->trans("RecordsEnabled", $nbok), null, 'mesgs');
|
||||
} else {
|
||||
setEventMessages($langs->trans("RecordEnabled"), null, 'mesgs');
|
||||
}
|
||||
$db->commit();
|
||||
} else {
|
||||
$db->rollback();
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error && ($massaction == 'disable' || ($action == 'disable' && $confirm == 'yes')) && $permissiontoadd) {
|
||||
$db->begin();
|
||||
|
||||
$objecttmp = new $objectclass($db);
|
||||
$nbok = 0;
|
||||
foreach ($toselect as $toselectid) {
|
||||
$result = $objecttmp->fetch($toselectid);
|
||||
if ($result>0) {
|
||||
if (in_array($objecttmp->element, array('societe'))) {
|
||||
$result =$objecttmp->setStatut(0);
|
||||
}
|
||||
if ($result <= 0) {
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
$error++;
|
||||
break;
|
||||
} else {
|
||||
$nbok++;
|
||||
}
|
||||
} else {
|
||||
setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
|
||||
$error++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
if ($nbok > 1) {
|
||||
setEventMessages($langs->trans("RecordsDisabled", $nbok), null, 'mesgs');
|
||||
} else {
|
||||
setEventMessages($langs->trans("RecordDisabled"), null, 'mesgs');
|
||||
}
|
||||
$db->commit();
|
||||
} else {
|
||||
$db->rollback();
|
||||
}
|
||||
}
|
||||
|
||||
$parameters['toselect'] = $toselect;
|
||||
$parameters['uploaddir'] = $uploaddir;
|
||||
$parameters['massaction'] = $massaction;
|
||||
|
||||
@ -2006,30 +2006,32 @@ class ExtraFields
|
||||
$collapse_display = ((isset($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key]) || GETPOST('ignorecollapsesetup', 'int')) ? ($_COOKIE['DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key] ? true : false) : ($extrafield_collapse_display_value == 2 ? false : true));
|
||||
$extrafields_collapse_num = $this->attributes[$object->table_element]['pos'][$key].(!empty($object->id)?'_'.$object->id:'');
|
||||
|
||||
$out .= '<!-- Add js script to manage the collapse/uncollapse of extrafields separators '.$key.' -->'."\n";
|
||||
$out .= '<script type="text/javascript">'."\n";
|
||||
$out .= 'jQuery(document).ready(function(){'."\n";
|
||||
if ($collapse_display === false) {
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-plus-square\"></span> ");'."\n";
|
||||
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").hide();'."\n";
|
||||
} else {
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-minus-square\"></span> ");'."\n";
|
||||
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
$out .= '<!-- Add js script to manage the collapse/uncollapse of extrafields separators '.$key.' -->'."\n";
|
||||
$out .= '<script type="text/javascript">'."\n";
|
||||
$out .= 'jQuery(document).ready(function(){'."\n";
|
||||
if ($collapse_display === false) {
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-plus-square\"></span> ");'."\n";
|
||||
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").hide();'."\n";
|
||||
} else {
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.'").prepend("<span class=\"cursorpointer far fa-minus-square\"></span> ");'."\n";
|
||||
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
|
||||
}
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').'").click(function(){'."\n";
|
||||
$out .= ' console.log("We click on collapse/uncollapse .trextrafields_collapse'.$extrafields_collapse_num.'");'."\n";
|
||||
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").toggle(300, function(){'."\n";
|
||||
$out .= ' if (jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").is(":hidden")) {'."\n";
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-plus-square").removeClass("fa-minus-square");'."\n";
|
||||
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=0; path='.$_SERVER["PHP_SELF"].'"'."\n";
|
||||
$out .= ' } else {'."\n";
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-minus-square").removeClass("fa-plus-square");'."\n";
|
||||
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
|
||||
$out .= ' }'."\n";
|
||||
$out .= ' });'."\n";
|
||||
$out .= ' });'."\n";
|
||||
$out .= '});'."\n";
|
||||
$out .= '</script>'."\n";
|
||||
}
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').'").click(function(){'."\n";
|
||||
$out .= ' console.log("We click on collapse/uncollapse .trextrafields_collapse'.$extrafields_collapse_num.'");'."\n";
|
||||
$out .= ' jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").toggle(300, function(){'."\n";
|
||||
$out .= ' if (jQuery(".trextrafields_collapse'.$extrafields_collapse_num.'").is(":hidden")) {'."\n";
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-plus-square").removeClass("fa-minus-square");'."\n";
|
||||
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=0; path='.$_SERVER["PHP_SELF"].'"'."\n";
|
||||
$out .= ' } else {'."\n";
|
||||
$out .= ' jQuery("#trextrafieldseparator'.$key.(!empty($object->id)?'_'.$object->id:'').' '.$tagtype_dyn.' span").addClass("fa-minus-square").removeClass("fa-plus-square");'."\n";
|
||||
$out .= ' document.cookie = "DOLCOLLAPSE_'.$object->table_element.'_extrafields_'.$key.'=1; path='.$_SERVER["PHP_SELF"].'"'."\n";
|
||||
$out .= ' }'."\n";
|
||||
$out .= ' });'."\n";
|
||||
$out .= ' });'."\n";
|
||||
$out .= '});'."\n";
|
||||
$out .= '</script>'."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -272,8 +272,10 @@ class HookManager
|
||||
$parameters['currentcontext'] = $context;
|
||||
// Hooks that must return int (hooks with type 'addreplace')
|
||||
if ($hooktype == 'addreplace') {
|
||||
$resaction += $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
||||
if ($resaction < 0 || !empty($actionclassinstance->error) || (!empty($actionclassinstance->errors) && count($actionclassinstance->errors) > 0)) {
|
||||
$resactiontmp = $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
||||
$resaction += $resactiontmp;
|
||||
|
||||
if ($resactiontmp < 0 || !empty($actionclassinstance->error) || (!empty($actionclassinstance->errors) && count($actionclassinstance->errors) > 0)) {
|
||||
$error++;
|
||||
$this->error = $actionclassinstance->error;
|
||||
$this->errors = array_merge($this->errors, (array) $actionclassinstance->errors);
|
||||
@ -281,13 +283,22 @@ class HookManager
|
||||
}
|
||||
|
||||
if (isset($actionclassinstance->results) && is_array($actionclassinstance->results)) {
|
||||
$this->resArray = array_merge($this->resArray, $actionclassinstance->results);
|
||||
if ($resactiontmp > 0) {
|
||||
$this->resArray = $actionclassinstance->results;
|
||||
} else {
|
||||
$this->resArray = array_merge($this->resArray, $actionclassinstance->results);
|
||||
}
|
||||
}
|
||||
if (!empty($actionclassinstance->resprints)) {
|
||||
$this->resPrint .= $actionclassinstance->resprints;
|
||||
if ($resactiontmp > 0) {
|
||||
$this->resPrint = $actionclassinstance->resprints;
|
||||
} else {
|
||||
$this->resPrint .= $actionclassinstance->resprints;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Generic hooks that return a string or array (printLeftBlock, formAddObjectLine, formBuilddocOptions, ...)
|
||||
|
||||
// TODO. this test should be done into the method of hook by returning nothing
|
||||
if (is_array($parameters) && !empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) {
|
||||
continue;
|
||||
|
||||
@ -7273,7 +7273,7 @@ class Form
|
||||
public static function selectArrayAjax($htmlname, $url, $id = '', $moreparam = '', $moreparamtourl = '', $disabled = 0, $minimumInputLength = 1, $morecss = '', $callurlonselect = 0, $placeholder = '', $acceptdelayedhtml = 0)
|
||||
{
|
||||
global $conf, $langs;
|
||||
global $delayedhtmlcontent;
|
||||
global $delayedhtmlcontent; // Will be used later outside of this function
|
||||
|
||||
// TODO Use an internal dolibarr component instead of select2
|
||||
if (empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) && !defined('REQUIRE_JQUERY_MULTISELECT')) {
|
||||
@ -7282,68 +7282,71 @@ class Form
|
||||
|
||||
$out = '<select type="text" class="'.$htmlname.($morecss ? ' '.$morecss : '').'" '.($moreparam ? $moreparam.' ' : '').'name="'.$htmlname.'"></select>';
|
||||
|
||||
$tmpplugin = 'select2';
|
||||
$outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$outdelayed = '';
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
$tmpplugin = 'select2';
|
||||
$outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
|
||||
'.($callurlonselect ? 'var saveRemoteData = [];' : '').'
|
||||
'.($callurlonselect ? 'var saveRemoteData = [];' : '').'
|
||||
|
||||
$(".'.$htmlname.'").select2({
|
||||
ajax: {
|
||||
dir: "ltr",
|
||||
url: "'.$url.'",
|
||||
dataType: \'json\',
|
||||
delay: 250,
|
||||
data: function (params) {
|
||||
return {
|
||||
q: params.term, // search term
|
||||
page: params.page
|
||||
};
|
||||
},
|
||||
processResults: function (data) {
|
||||
// parse the results into the format expected by Select2.
|
||||
// since we are using custom formatting functions we do not need to alter the remote JSON data
|
||||
//console.log(data);
|
||||
saveRemoteData = data;
|
||||
/* format json result for select2 */
|
||||
result = []
|
||||
$.each( data, function( key, value ) {
|
||||
result.push({id: key, text: value.text});
|
||||
});
|
||||
//return {results:[{id:\'none\', text:\'aa\'}, {id:\'rrr\', text:\'Red\'},{id:\'bbb\', text:\'Search a into projects\'}], more:false}
|
||||
//console.log(result);
|
||||
return {results: result, more: false}
|
||||
},
|
||||
cache: true
|
||||
},
|
||||
language: select2arrayoflanguage,
|
||||
containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
|
||||
placeholder: "'.dol_escape_js($placeholder).'",
|
||||
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
minimumInputLength: '.$minimumInputLength.',
|
||||
formatResult: function(result, container, query, escapeMarkup) {
|
||||
return escapeMarkup(result.text);
|
||||
},
|
||||
});
|
||||
$(".'.$htmlname.'").select2({
|
||||
ajax: {
|
||||
dir: "ltr",
|
||||
url: "'.$url.'",
|
||||
dataType: \'json\',
|
||||
delay: 250,
|
||||
data: function (params) {
|
||||
return {
|
||||
q: params.term, // search term
|
||||
page: params.page
|
||||
};
|
||||
},
|
||||
processResults: function (data) {
|
||||
// parse the results into the format expected by Select2.
|
||||
// since we are using custom formatting functions we do not need to alter the remote JSON data
|
||||
//console.log(data);
|
||||
saveRemoteData = data;
|
||||
/* format json result for select2 */
|
||||
result = []
|
||||
$.each( data, function( key, value ) {
|
||||
result.push({id: key, text: value.text});
|
||||
});
|
||||
//return {results:[{id:\'none\', text:\'aa\'}, {id:\'rrr\', text:\'Red\'},{id:\'bbb\', text:\'Search a into projects\'}], more:false}
|
||||
//console.log(result);
|
||||
return {results: result, more: false}
|
||||
},
|
||||
cache: true
|
||||
},
|
||||
language: select2arrayoflanguage,
|
||||
containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
|
||||
placeholder: "'.dol_escape_js($placeholder).'",
|
||||
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
minimumInputLength: '.$minimumInputLength.',
|
||||
formatResult: function(result, container, query, escapeMarkup) {
|
||||
return escapeMarkup(result.text);
|
||||
},
|
||||
});
|
||||
|
||||
'.($callurlonselect ? '
|
||||
/* Code to execute a GET when we select a value */
|
||||
$(".'.$htmlname.'").change(function() {
|
||||
var selected = $(".'.$htmlname.'").val();
|
||||
console.log("We select in selectArrayAjax the entry "+selected)
|
||||
$(".'.$htmlname.'").val(""); /* reset visible combo value */
|
||||
$.each( saveRemoteData, function( key, value ) {
|
||||
if (key == selected)
|
||||
{
|
||||
console.log("selectArrayAjax - Do a redirect to "+value.url)
|
||||
location.assign(value.url);
|
||||
}
|
||||
});
|
||||
});' : '').'
|
||||
'.($callurlonselect ? '
|
||||
/* Code to execute a GET when we select a value */
|
||||
$(".'.$htmlname.'").change(function() {
|
||||
var selected = $(".'.$htmlname.'").val();
|
||||
console.log("We select in selectArrayAjax the entry "+selected)
|
||||
$(".'.$htmlname.'").val(""); /* reset visible combo value */
|
||||
$.each( saveRemoteData, function( key, value ) {
|
||||
if (key == selected)
|
||||
{
|
||||
console.log("selectArrayAjax - Do a redirect to "+value.url)
|
||||
location.assign(value.url);
|
||||
}
|
||||
});
|
||||
});' : '').'
|
||||
|
||||
});
|
||||
</script>';
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
||||
if ($acceptdelayedhtml) {
|
||||
$delayedhtmlcontent .= $outdelayed;
|
||||
@ -7374,7 +7377,7 @@ class Form
|
||||
public static function selectArrayFilter($htmlname, $array, $id = '', $moreparam = '', $disableFiltering = 0, $disabled = 0, $minimumInputLength = 1, $morecss = '', $callurlonselect = 0, $placeholder = '', $acceptdelayedhtml = 0)
|
||||
{
|
||||
global $conf, $langs;
|
||||
global $delayedhtmlcontent;
|
||||
global $delayedhtmlcontent; // Will be used later outside of this function
|
||||
|
||||
// TODO Use an internal dolibarr component instead of select2
|
||||
if (empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) && !defined('REQUIRE_JQUERY_MULTISELECT')) {
|
||||
@ -7393,74 +7396,77 @@ class Form
|
||||
$formattedarrayresult[] = $o;
|
||||
}
|
||||
|
||||
$tmpplugin = 'select2';
|
||||
$outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
var data = '.json_encode($formattedarrayresult).';
|
||||
$outdelayed = '';
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
$tmpplugin = 'select2';
|
||||
$outdelayed = "\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
var data = '.json_encode($formattedarrayresult).';
|
||||
|
||||
'.($callurlonselect ? 'var saveRemoteData = '.json_encode($array).';' : '').'
|
||||
'.($callurlonselect ? 'var saveRemoteData = '.json_encode($array).';' : '').'
|
||||
|
||||
$(".'.$htmlname.'").select2({
|
||||
data: data,
|
||||
language: select2arrayoflanguage,
|
||||
containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
|
||||
placeholder: "'.dol_escape_js($placeholder).'",
|
||||
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
minimumInputLength: '.$minimumInputLength.',
|
||||
formatResult: function(result, container, query, escapeMarkup) {
|
||||
return escapeMarkup(result.text);
|
||||
},
|
||||
matcher: function (params, data) {
|
||||
$(".'.$htmlname.'").select2({
|
||||
data: data,
|
||||
language: select2arrayoflanguage,
|
||||
containerCssClass: \':all:\', /* Line to add class of origin SELECT propagated to the new <span class="select2-selection...> tag */
|
||||
placeholder: "'.dol_escape_js($placeholder).'",
|
||||
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work
|
||||
minimumInputLength: '.$minimumInputLength.',
|
||||
formatResult: function(result, container, query, escapeMarkup) {
|
||||
return escapeMarkup(result.text);
|
||||
},
|
||||
matcher: function (params, data) {
|
||||
|
||||
if(! data.id) return null;';
|
||||
if(! data.id) return null;';
|
||||
|
||||
if ($callurlonselect) {
|
||||
$outdelayed .= '
|
||||
|
||||
var urlBase = data.url;
|
||||
var separ = urlBase.indexOf("?") >= 0 ? "&" : "?";
|
||||
/* console.log("params.term="+params.term); */
|
||||
/* console.log("params.term encoded="+encodeURIComponent(params.term)); */
|
||||
saveRemoteData[data.id].url = urlBase + separ + "sall=" + encodeURIComponent(params.term.replace(/\"/g, ""));';
|
||||
}
|
||||
|
||||
if (!$disableFiltering) {
|
||||
$outdelayed .= '
|
||||
|
||||
if(data.text.match(new RegExp(params.term))) {
|
||||
return data;
|
||||
}
|
||||
|
||||
return null;';
|
||||
} else {
|
||||
$outdelayed .= '
|
||||
|
||||
return data;';
|
||||
}
|
||||
|
||||
if ($callurlonselect) {
|
||||
$outdelayed .= '
|
||||
|
||||
var urlBase = data.url;
|
||||
var separ = urlBase.indexOf("?") >= 0 ? "&" : "?";
|
||||
/* console.log("params.term="+params.term); */
|
||||
/* console.log("params.term encoded="+encodeURIComponent(params.term)); */
|
||||
saveRemoteData[data.id].url = urlBase + separ + "sall=" + encodeURIComponent(params.term.replace(/\"/g, ""));';
|
||||
}
|
||||
|
||||
if (!$disableFiltering) {
|
||||
$outdelayed .= '
|
||||
|
||||
if(data.text.match(new RegExp(params.term))) {
|
||||
return data;
|
||||
}
|
||||
|
||||
return null;';
|
||||
} else {
|
||||
$outdelayed .= '
|
||||
|
||||
return data;';
|
||||
}
|
||||
|
||||
$outdelayed .= '
|
||||
}
|
||||
});
|
||||
|
||||
'.($callurlonselect ? '
|
||||
/* Code to execute a GET when we select a value */
|
||||
$(".'.$htmlname.'").change(function() {
|
||||
var selected = $(".'.$htmlname.'").val();
|
||||
console.log("We select "+selected)
|
||||
|
||||
$(".'.$htmlname.'").val(""); /* reset visible combo value */
|
||||
$.each( saveRemoteData, function( key, value ) {
|
||||
if (key == selected)
|
||||
{
|
||||
console.log("selectArrayFilter - Do a redirect to "+value.url)
|
||||
location.assign(value.url);
|
||||
}
|
||||
});
|
||||
});' : '').'
|
||||
|
||||
});
|
||||
</script>';
|
||||
'.($callurlonselect ? '
|
||||
/* Code to execute a GET when we select a value */
|
||||
$(".'.$htmlname.'").change(function() {
|
||||
var selected = $(".'.$htmlname.'").val();
|
||||
console.log("We select "+selected)
|
||||
|
||||
$(".'.$htmlname.'").val(""); /* reset visible combo value */
|
||||
$.each( saveRemoteData, function( key, value ) {
|
||||
if (key == selected)
|
||||
{
|
||||
console.log("selectArrayFilter - Do a redirect to "+value.url)
|
||||
location.assign(value.url);
|
||||
}
|
||||
});
|
||||
});' : '').'
|
||||
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
||||
if ($acceptdelayedhtml) {
|
||||
$delayedhtmlcontent .= $outdelayed;
|
||||
@ -7503,7 +7509,7 @@ class Form
|
||||
}
|
||||
|
||||
// Add code for jquery to use multiselect
|
||||
if (!empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) {
|
||||
if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) {
|
||||
$out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.', addjscombo='.$addjscombo.' -->';
|
||||
$out .= "\n".'<script>'."\n";
|
||||
if ($addjscombo == 1) {
|
||||
|
||||
@ -665,11 +665,11 @@ class FormTicket
|
||||
print ajax_combobox('select'.$htmlname);
|
||||
} elseif ($htmlname!='') {
|
||||
$groupticket=GETPOST($htmlname, 'aZ09');
|
||||
$groupticketchild=GETPOST($htmlname.'_child', 'aZ09');
|
||||
$child_id=GETPOST($htmlname.'_child_id', 'aZ09')?GETPOST($htmlname.'_child_id', 'aZ09'):0;
|
||||
$arraycodenotparent[] = "";
|
||||
$arrayidused = array();
|
||||
$stringtoprint = '<span class="supportemailfield bold">'.$langs->trans("GroupOfTicket").'</span> ';
|
||||
$stringtoprint .= '<select name="'.$htmlname.'" id ="'.$htmlname.'" class="maxwidth500 minwidth400" child_id="0">';
|
||||
$stringtoprint .= '<select id ="'.$htmlname.'" class="maxwidth500 minwidth400" child_id="0">';
|
||||
$stringtoprint .= '<option value=""> </option>';
|
||||
|
||||
$sql = "SELECT ctc.rowid, ctc.code, ctc.label, ctc.fk_parent, ";
|
||||
@ -706,13 +706,17 @@ class FormTicket
|
||||
}
|
||||
if ($num_rows_level0 == 1) {
|
||||
return '<input type="hidden" name="'.$htmlname.'" id="'.$htmlname.'" value="'.dol_escape_htmltag($groupvalue).'">';
|
||||
} else {
|
||||
$stringtoprint .= '<input type="hidden" name="'.$htmlname.'" id="'.$htmlname.'_select" class="maxwidth500 minwidth400">';
|
||||
$stringtoprint .= '<input type="hidden" name="'.$htmlname.'_child_id" id="'.$htmlname.'_select_child_id" class="maxwidth500 minwidth400">';
|
||||
}
|
||||
$stringtoprint .= '<input type="submit" value="Envoyer le formulaire">';
|
||||
$stringtoprint .= '</select> ';
|
||||
|
||||
$levelid = 1;
|
||||
while ($levelid <= $use_multilevel) {
|
||||
$tabscript = array();
|
||||
$stringtoprint .= '<select name="'.$htmlname.'_child_'.$levelid.'" id ="'.$htmlname.'_child_'.$levelid.'" class="maxwidth500 minwidth400 groupticketchild" child_id="'.$levelid.'">';
|
||||
$stringtoprint .= '<select id ="'.$htmlname.'_child_'.$levelid.'" class="maxwidth500 minwidth400 groupticketchild" child_id="'.$levelid.'">';
|
||||
$stringtoprint .= '<option value=""> </option>';
|
||||
|
||||
$sql = "SELECT ctc.rowid, ctc.code, ctc.label, ctc.fk_parent, ctcjoin.code as codefather, ";
|
||||
@ -751,7 +755,7 @@ class FormTicket
|
||||
if ($isparent == 'NOTPARENT') {
|
||||
$arraycodenotparent[] = $groupvalue;
|
||||
}
|
||||
$iselected = $groupticketchild == $obj->code ?'selected':'';
|
||||
$iselected = $groupticket == $obj->code ?'selected':'';
|
||||
$stringtoprint .= '<option '.$iselected.' class="'.$htmlname.'_'.dol_escape_htmltag($fatherid).'_child_'.$levelid.'" value="'.dol_escape_htmltag($groupvalue).'" data-html="'.dol_escape_htmltag($grouplabel).'">'.dol_escape_htmltag($grouplabel).'</option>';
|
||||
if (empty($tabscript[$groupcodefather])) {
|
||||
$tabscript[$groupcodefather] = 'if ($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value == "'.dol_escape_js($groupcodefather).'"){
|
||||
@ -769,15 +773,43 @@ class FormTicket
|
||||
dol_print_error($this->db);
|
||||
}
|
||||
$stringtoprint .='</select>';
|
||||
//$stringtoprint .= ajax_combobox($htmlname.'_child_'.$levelid);
|
||||
|
||||
$stringtoprint .='<script>';
|
||||
$stringtoprint .='arraynotparents = '.json_encode($arraycodenotparent).';';
|
||||
$stringtoprint .='if (arraynotparents.includes($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value)){$("#'.$htmlname.'_child_'.$levelid.'").hide()}
|
||||
|
||||
$stringtoprint .='if (arraynotparents.includes($("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'")[0].value)){
|
||||
console.log("'.$htmlname.'_child_'.$levelid.'")
|
||||
if($("#'.$htmlname.'_child_'.$levelid.'")[0].value == "" && ($("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")>'.$child_id.')){
|
||||
$("#'.$htmlname.'_child_'.$levelid.'").hide();
|
||||
console.log("We hide '.$htmlname.'_child_'.$levelid.' input")
|
||||
}else if(($("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")!=0) && ($("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")<'.$child_id.')){
|
||||
$("#'.$htmlname.'_child_'.$levelid.'").attr("disabled",true);
|
||||
console.log("We disable '.$htmlname.'_child_'.$levelid.' input");
|
||||
}else{
|
||||
$("#'.$htmlname.'_child_'.$levelid.'").attr("disabled",true);
|
||||
$("#ticketcategory_select_child_id")[0].value = $("#'.$htmlname.'_child_'.$levelid.'").attr("child_id")
|
||||
$("#ticketcategory_select")[0].value = $("#'.$htmlname.'_child_'.$levelid.'")[0].value;
|
||||
console.log("We disable '.$htmlname.'_child_'.$levelid.' input and reload hidden input");
|
||||
}
|
||||
if(arraynotparents.includes("'.$groupticket.'") && '.$child_id.' == 0){
|
||||
$("#ticketcategory_select_child_id")[0].value = $("#'.$htmlname.'").attr("child_id")
|
||||
$("#ticketcategory_select")[0].value = $("#'.$htmlname.'")[0].value;
|
||||
console.log("We choose '.$htmlname.' input and reload hidden input");
|
||||
}
|
||||
}
|
||||
$("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'").change(function() {
|
||||
child_id = $("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid-1:'').'").attr("child_id");
|
||||
console.log("We select a new value into combo child_id="+child_id);
|
||||
child_id = $("#'.$htmlname.($levelid > 1 ?'_child_'.$levelid:'').'").attr("child_id");
|
||||
|
||||
/* Change of value to select this value*/
|
||||
if (arraynotparents.includes(this.value) || $(this).attr("child_id") == '.$use_multilevel.') {
|
||||
$("#ticketcategory_select")[0].value = this.value;
|
||||
$("#ticketcategory_select_child_id")[0].value = $(this).attr("child_id");
|
||||
console.log("We choose to select "+ $("#ticketcategory_select")[0].value );
|
||||
}else{
|
||||
$("#ticketcategory_select")[0].value = "";
|
||||
$("#ticketcategory_select_child_id")[0].value = "";
|
||||
}
|
||||
|
||||
console.log("We select a new value into combo child_id="+child_id);
|
||||
|
||||
/* Hide all selected box that are child of the one modified */
|
||||
$(".groupticketchild").each(function(){
|
||||
@ -803,7 +835,13 @@ class FormTicket
|
||||
$stringtoprint .='})';
|
||||
$stringtoprint .='</script>';
|
||||
}
|
||||
|
||||
$stringtoprint .='<script>';
|
||||
$stringtoprint .='$("#'.$htmlname.'_child_'.$use_multilevel.'").change(function() {
|
||||
$("#ticketcategory_select")[0].value = this.value;
|
||||
$("#ticketcategory_select_child_id")[0].value = $(this).attr("child_id");
|
||||
console.log($("#ticketcategory_select")[0].value);
|
||||
})';
|
||||
$stringtoprint .='</script>';
|
||||
$stringtoprint .= ajax_combobox($htmlname);
|
||||
|
||||
return $stringtoprint;
|
||||
|
||||
@ -1899,7 +1899,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin
|
||||
}
|
||||
|
||||
// Status
|
||||
$out .= '<td class="nowrap center">'.$actionstatic->LibStatut($histo[$key]['percent'], 3, 0, $histo[$key]['datestart']).'</td>';
|
||||
$out .= '<td class="nowrap center">'.$actionstatic->LibStatut($histo[$key]['percent'], 2, 0, $histo[$key]['datestart']).'</td>';
|
||||
|
||||
// Actions
|
||||
$out .= '<td></td>';
|
||||
|
||||
@ -114,8 +114,13 @@ function dol_print_cron_urls()
|
||||
|
||||
print '<u>'.$langs->trans("FileToLaunchCronJobs").':</u><br>';
|
||||
|
||||
$file = '/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' [cronjobid]';
|
||||
print '<textarea class="quatrevingtpercent">..'.$file."</textarea><br>\n";
|
||||
$pathtoscript = '/pathtoscript';
|
||||
if (!empty($conf->global->MAIN_DOL_SCRIPTS_ROOT)) {
|
||||
$pathtoscript = $conf->global->MAIN_DOL_SCRIPTS_ROOT;
|
||||
}
|
||||
|
||||
$file = $pathtoscript.'/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' [cronjobid]';
|
||||
print '<textarea class="quatrevingtpercent">'.$file."</textarea><br>\n";
|
||||
print '<br>';
|
||||
|
||||
// Add note
|
||||
@ -131,7 +136,7 @@ function dol_print_cron_urls()
|
||||
if ($linuxlike) {
|
||||
print $langs->trans("CronExplainHowToRunUnix");
|
||||
print '<br>';
|
||||
print '<textarea class="quatrevingtpercent">*/5 * * * * pathtoscript/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' > '.DOL_DATA_ROOT.'/cron_run_jobs.php.log</textarea><br>';
|
||||
print '<textarea class="quatrevingtpercent">*/5 * * * * '.$pathtoscript.'/scripts/cron/cron_run_jobs.php '.(empty($conf->global->CRON_KEY) ? 'securitykey' : ''.$conf->global->CRON_KEY.'').' '.$logintouse.' > '.DOL_DATA_ROOT.'/cron_run_jobs.php.log</textarea><br>';
|
||||
} else {
|
||||
print $langs->trans("CronExplainHowToRunWin");
|
||||
}
|
||||
|
||||
@ -8487,8 +8487,10 @@ function complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type,
|
||||
if (!empty($hookmanager)) {
|
||||
$parameters = array('object' => $object, 'mode' => $mode, 'head' => &$head);
|
||||
$reshook = $hookmanager->executeHooks('completeTabsHead', $parameters);
|
||||
if ($reshook > 0) {
|
||||
if ($reshook > 0) { // Hook ask to replace completely the array
|
||||
$head = $hookmanager->resArray;
|
||||
} else { // Hook
|
||||
$head = array_merge($head, $hookmanager->resArray);
|
||||
}
|
||||
$h = count($head);
|
||||
}
|
||||
|
||||
@ -84,14 +84,14 @@ class modProductBatch extends DolibarrModules
|
||||
$this->const[$r][0] = "PRODUCTBATCH_LOT_ADDON";
|
||||
$this->const[$r][1] = "chaine";
|
||||
$this->const[$r][2] = "mod_lot_free";
|
||||
$this->const[$r][3] = 'Module to control product codes';
|
||||
$this->const[$r][3] = 'Module to control lot number';
|
||||
$this->const[$r][4] = 0;
|
||||
$r++;
|
||||
|
||||
$this->const[$r][0] = "PRODUCTBATCH_SN_ADDON";
|
||||
$this->const[$r][1] = "chaine";
|
||||
$this->const[$r][2] = "mod_sn_free";
|
||||
$this->const[$r][3] = 'Module to control product codes';
|
||||
$this->const[$r][3] = 'Module to control serial number';
|
||||
$this->const[$r][4] = 0;
|
||||
$r++;
|
||||
|
||||
|
||||
@ -128,27 +128,27 @@ class mod_lot_advanced extends ModeleNumRefBatch
|
||||
/**
|
||||
* Return next free value
|
||||
*
|
||||
* @param Product $objprod Object product
|
||||
* @param Societe $objsoc Object Societe
|
||||
* @param Object $object Object we need next value for
|
||||
* @return string Value if KO, <0 if KO
|
||||
*/
|
||||
public function getNextValue($objprod, $object)
|
||||
public function getNextValue($objsoc, $object)
|
||||
{
|
||||
global $db, $conf;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
|
||||
// We get cursor rule
|
||||
$mask = $conf->global->BATCH_ADVANCED_MASK;
|
||||
$mask = $conf->global->LOT_ADVANCED_MASK;
|
||||
|
||||
if (!$mask) {
|
||||
$this->error = 'NotConfigured';
|
||||
return 0;
|
||||
}
|
||||
|
||||
$date = $object->date;
|
||||
$date = dol_now();
|
||||
|
||||
$numFinal = get_next_value($db, $mask, 'product_lot', 'ref', '', null, $date);
|
||||
$numFinal = get_next_value($db, $mask, 'product_lot', 'batch', '', null, $date);
|
||||
|
||||
return $numFinal;
|
||||
}
|
||||
|
||||
@ -85,17 +85,21 @@ class mod_lot_standard extends ModeleNumRefBatch
|
||||
$coyymm = ''; $max = '';
|
||||
|
||||
$posindice = strlen($this->prefix) + 6;
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
|
||||
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$row = $db->fetch_row($resql);
|
||||
if ($row) { $coyymm = substr($row[0], 0, 6); $max = $row[0]; }
|
||||
$obj = $db->fetch_object($resql);
|
||||
if ($obj) {
|
||||
$max = intval($obj->max);
|
||||
} else {
|
||||
$max = 0;
|
||||
}
|
||||
}
|
||||
if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
|
||||
if ($max && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $max)) {
|
||||
$langs->load("errors");
|
||||
$this->error = $langs->trans('ErrorNumRefModel', $max);
|
||||
return false;
|
||||
@ -117,23 +121,26 @@ class mod_lot_standard extends ModeleNumRefBatch
|
||||
|
||||
// First, we get the max value
|
||||
$posindice = strlen($this->prefix) + 6;
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
|
||||
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
if ($obj) $max = intval($obj->max);
|
||||
else $max = 0;
|
||||
if ($obj) {
|
||||
$max = intval($obj->max);
|
||||
} else {
|
||||
$max = 0;
|
||||
}
|
||||
} else {
|
||||
dol_syslog("mod_lot_standard::getNextValue", LOG_DEBUG);
|
||||
return -1;
|
||||
}
|
||||
|
||||
//$date=time();
|
||||
$date = $object->date_creation;
|
||||
$date = dol_now();
|
||||
$yymm = strftime("%y%m", $date);
|
||||
|
||||
if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
|
||||
|
||||
@ -139,16 +139,16 @@ class mod_sn_advanced extends ModeleNumRefBatch
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
|
||||
// We get cursor rule
|
||||
$mask = $conf->global->BATCH_ADVANCED_MASK;
|
||||
$mask = $conf->global->SN_ADVANCED_MASK;
|
||||
|
||||
if (!$mask) {
|
||||
$this->error = 'NotConfigured';
|
||||
return 0;
|
||||
}
|
||||
|
||||
$date = $object->date;
|
||||
$date = dol_now();
|
||||
|
||||
$numFinal = get_next_value($db, $mask, 'product_sn', 'ref', '', null, $date);
|
||||
$numFinal = get_next_value($db, $mask, 'product_lot', 'batch', '', null, $date);
|
||||
|
||||
return $numFinal;
|
||||
}
|
||||
|
||||
@ -85,17 +85,21 @@ class mod_sn_standard extends ModeleNumRefBatch
|
||||
$coyymm = ''; $max = '';
|
||||
|
||||
$posindice = strlen($this->prefix) + 6;
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
|
||||
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$row = $db->fetch_row($resql);
|
||||
if ($row) { $coyymm = substr($row[0], 0, 6); $max = $row[0]; }
|
||||
$obj = $db->fetch_object($resql);
|
||||
if ($obj) {
|
||||
$max = intval($obj->max);
|
||||
} else {
|
||||
$max = 0;
|
||||
}
|
||||
}
|
||||
if ($coyymm && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $coyymm)) {
|
||||
if ($max && !preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i', $max)) {
|
||||
$langs->load("errors");
|
||||
$this->error = $langs->trans('ErrorNumRefModel', $max);
|
||||
return false;
|
||||
@ -107,33 +111,36 @@ class mod_sn_standard extends ModeleNumRefBatch
|
||||
/**
|
||||
* Return next free value
|
||||
*
|
||||
* @param Product $objprod Object product
|
||||
* @param Societe $objsoc Object product
|
||||
* @param Object $object Object we need next value for
|
||||
* @return string Value if KO, <0 if KO
|
||||
*/
|
||||
public function getNextValue($objprod, $object)
|
||||
public function getNextValue($objsoc, $object)
|
||||
{
|
||||
global $db, $conf;
|
||||
|
||||
// First, we get the max value
|
||||
$posindice = strlen($this->prefix) + 6;
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql = "SELECT MAX(CAST(SUBSTRING(batch FROM ".$posindice.") AS SIGNED)) as max";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product_lot";
|
||||
$sql .= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " WHERE batch LIKE '".$db->escape($this->prefix)."____-%'";
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
if ($obj) $max = intval($obj->max);
|
||||
else $max = 0;
|
||||
if ($obj) {
|
||||
$max = intval($obj->max);
|
||||
} else {
|
||||
$max = 0;
|
||||
}
|
||||
} else {
|
||||
dol_syslog("mod_sn_standard::getNextValue", LOG_DEBUG);
|
||||
return -1;
|
||||
}
|
||||
|
||||
//$date=time();
|
||||
$date = $object->date_creation;
|
||||
$date = dol_now();
|
||||
$yymm = strftime("%y%m", $date);
|
||||
|
||||
if ($max >= (pow(10, 4) - 1)) $num = $max + 1; // If counter > 9999, we do not format on 4 chars, we take number as it is
|
||||
|
||||
@ -258,7 +258,6 @@ if (empty($reshook) && isset($extrafields->attributes[$object->table_element]['l
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Add code to manage list depending on others
|
||||
// TODO Test/enhance this with a more generic solution
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
|
||||
@ -194,6 +194,14 @@ if ($massaction == 'presend') {
|
||||
|
||||
print dol_get_fiche_end();
|
||||
}
|
||||
|
||||
if ($massaction == 'preenable') {
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassEnabling"), $langs->trans("ConfirmMassEnablingQuestion", count($toselect)), "enable", null, '', 0, 200, 500, 1);
|
||||
}
|
||||
if ($massaction == 'predisable') {
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDisabling"), $langs->trans("ConfirmMassDisablingQuestion", count($toselect)), "disable", null, '', 0, 200, 500, 1);
|
||||
}
|
||||
|
||||
// Allow Pre-Mass-Action hook (eg for confirmation dialog)
|
||||
$parameters = array(
|
||||
'toselect' => $toselect,
|
||||
|
||||
@ -116,8 +116,10 @@ if ($action == 'set_DONATION_ACCOUNTINGACCOUNT') {
|
||||
|
||||
if (!$error) {
|
||||
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||
$action = ''; // To avoid to execute next actions
|
||||
} else {
|
||||
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||
$action = ''; // To avoid to execute next actions
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,14 +134,15 @@ if ($action == 'set_DONATION_MESSAGE') {
|
||||
|
||||
if (!$error) {
|
||||
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||
$action = ''; // To avoid to execute next actions
|
||||
} else {
|
||||
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||
$action = ''; // To avoid to execute next actions
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Action
|
||||
*/
|
||||
// Other cases
|
||||
$reg = array();
|
||||
if (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) {
|
||||
$code = $reg[1];
|
||||
if (dolibarr_set_const($db, $code, 1, 'chaine', 0, '', $conf->entity) > 0) {
|
||||
|
||||
@ -2560,7 +2560,7 @@ if ($action != 'create' && $action != 'edit') {
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&id='.$object->id.'">'.$langs->trans('Modify').'</a></div>';
|
||||
|
||||
// setdraft (le statut refusée est identique à brouillon)
|
||||
//print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=brouillonner&id='.$id.'">'.$langs->trans('BROUILLONNER').'</a>';
|
||||
//print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=brouillonner&id='.$id.'">'.$langs->trans('ReOpen').'</a>';
|
||||
// Enregistrer depuis le statut "Refusée"
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=save_from_refuse&id='.$object->id.'">'.$langs->trans('ValidateAndSubmit').'</a></div>';
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('bills', 'companies', 'interventions'));
|
||||
$langs->loadLangs(array('bills', 'companies', 'interventions', 'stocks'));
|
||||
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
@ -1079,7 +1079,7 @@ if ($action == 'create') {
|
||||
|
||||
// Confirm back to open
|
||||
if ($action == 'reopen') {
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('Reopen'), $langs->trans('ConfirmReopenIntervention', $object->ref), 'confirm_reopen', '', 0, 1);
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ReOpen'), $langs->trans('ConfirmReopenIntervention', $object->ref), 'confirm_reopen', '', 0, 1);
|
||||
}
|
||||
|
||||
// Confirm deletion of line
|
||||
|
||||
@ -367,7 +367,7 @@ ALTER TABLE llx_actioncomm_reminder ADD UNIQUE uk_actioncomm_reminder_unique (fk
|
||||
|
||||
ALTER TABLE llx_actioncomm_reminder ADD INDEX idx_actioncomm_reminder_status (status);
|
||||
|
||||
|
||||
ALTER TABLE llx_inventorydet ADD COLUMN fk_warehouse integer DEFAULT 0;
|
||||
ALTER TABLE llx_inventorydet ADD UNIQUE uk_inventorydet(fk_inventory, fk_warehouse, fk_product, batch);
|
||||
|
||||
ALTER TABLE llx_commandedet ADD COLUMN ref_ext varchar(255) AFTER label;
|
||||
|
||||
@ -569,3 +569,30 @@ create table llx_c_partnership_type
|
||||
)ENGINE=innodb;
|
||||
|
||||
DELETE FROM llx_rights_def WHERE module = 'hrm' AND perms = 'employee';
|
||||
|
||||
|
||||
CREATE TABLE llx_ecm_directories_extrafields
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
fk_object integer NOT NULL,
|
||||
import_key varchar(14) -- import key
|
||||
) ENGINE=innodb;
|
||||
|
||||
DROP TABLE llx_categorie_association;
|
||||
DROP TABLE llx_cond_reglement;
|
||||
DROP TABLE llx_zapier_hook_extrafields;
|
||||
|
||||
create table llx_onlinesignature
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
entity integer DEFAULT 1 NOT NULL,
|
||||
object_type varchar(32) NOT NULL,
|
||||
object_id integer NOT NULL,
|
||||
datec datetime NOT NULL,
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
name varchar(255) NOT NULL,
|
||||
ip varchar(128),
|
||||
pathoffile varchar(255)
|
||||
)ENGINE=innodb;
|
||||
|
||||
|
||||
39
htdocs/install/mysql/migration/14.0.0-15.0.0.sql
Normal file
39
htdocs/install/mysql/migration/14.0.0-15.0.0.sql
Normal file
@ -0,0 +1,39 @@
|
||||
--
|
||||
-- Be carefull to requests order.
|
||||
-- This file must be loaded by calling /install/index.php page
|
||||
-- when current version is 14.0.0 or higher.
|
||||
--
|
||||
-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y
|
||||
-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y
|
||||
-- To rename a table: ALTER TABLE llx_table RENAME TO llx_table_new;
|
||||
-- To add a column: ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol;
|
||||
-- To rename a column: ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60);
|
||||
-- To drop a column: ALTER TABLE llx_table DROP COLUMN oldname;
|
||||
-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60);
|
||||
-- To drop a foreign key: ALTER TABLE llx_table DROP FOREIGN KEY fk_name;
|
||||
-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field);
|
||||
-- To drop an index: -- VMYSQL4.1 DROP INDEX nomindex on llx_table
|
||||
-- To drop an index: -- VPGSQL8.2 DROP INDEX nomindex
|
||||
-- To make pk to be auto increment (mysql): -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT;
|
||||
-- To make pk to be auto increment (postgres):
|
||||
-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid;
|
||||
-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid);
|
||||
-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq');
|
||||
-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table;
|
||||
-- To set a field as NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL;
|
||||
-- To set a field as NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL;
|
||||
-- To set a field as NOT NULL: -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL;
|
||||
-- To set a field as NOT NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL;
|
||||
-- To set a field as default NULL: -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL;
|
||||
-- Note: fields with type BLOB/TEXT can't have default value.
|
||||
-- To rebuild sequence for postgresql after insert by forcing id autoincrement fields:
|
||||
-- -- VPGSQL8.2 SELECT dol_util_rebuild_sequences();
|
||||
|
||||
|
||||
-- Missing in v14 or lower
|
||||
|
||||
|
||||
|
||||
|
||||
-- v15
|
||||
|
||||
21
htdocs/install/mysql/tables/llx_categorie_ticket.key.sql
Normal file
21
htdocs/install/mysql/tables/llx_categorie_ticket.key.sql
Normal file
@ -0,0 +1,21 @@
|
||||
-- Copyright (C) 2021 EOXIA <dev@eoxia.com>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation, either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
ALTER TABLE llx_categorie_ticket ADD PRIMARY KEY pk_categorie_ticket (fk_categorie, fk_ticket);
|
||||
ALTER TABLE llx_categorie_ticket ADD INDEX idx_categorie_ticket_fk_categorie (fk_categorie);
|
||||
ALTER TABLE llx_categorie_ticket ADD INDEX idx_categorie_ticket_fk_ticket (fk_ticket);
|
||||
|
||||
ALTER TABLE llx_categorie_ticket ADD CONSTRAINT fk_categorie_ticket_categorie_rowid FOREIGN KEY (fk_categorie) REFERENCES llx_categorie (rowid);
|
||||
ALTER TABLE llx_categorie_ticket ADD CONSTRAINT fk_categorie_ticket_ticket_rowid FOREIGN KEY (fk_ticket) REFERENCES llx_ticket (rowid);
|
||||
21
htdocs/install/mysql/tables/llx_categorie_ticket.sql
Normal file
21
htdocs/install/mysql/tables/llx_categorie_ticket.sql
Normal file
@ -0,0 +1,21 @@
|
||||
-- Copyright (C) 2021 EOXIA <dev@eoxia.com>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation, either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
create table llx_categorie_ticket
|
||||
(
|
||||
fk_categorie integer NOT NULL,
|
||||
fk_ticket integer NOT NULL,
|
||||
import_key varchar(14)
|
||||
)ENGINE=innodb;
|
||||
@ -86,7 +86,7 @@ create table llx_facture
|
||||
fk_incoterms integer, -- for incoterms
|
||||
location_incoterms varchar(255), -- for incoterms
|
||||
|
||||
fk_mode_transport integer, -- for intracomm report
|
||||
fk_transport_mode integer, -- for intracomm report
|
||||
|
||||
situation_cycle_ref smallint, -- situation cycle reference
|
||||
situation_counter smallint, -- situation counter
|
||||
|
||||
@ -74,7 +74,7 @@ create table llx_facture_fourn
|
||||
fk_incoterms integer, -- for incoterms
|
||||
location_incoterms varchar(255), -- for incoterms
|
||||
|
||||
fk_mode_transport integer, -- for intracomm report
|
||||
fk_transport_mode integer, -- for intracomm report
|
||||
|
||||
model_pdf varchar(255),
|
||||
last_main_doc varchar(255), -- relative filepath+filename of last main generated document
|
||||
|
||||
31
htdocs/install/mysql/tables/llx_onlinesignature.sql
Normal file
31
htdocs/install/mysql/tables/llx_onlinesignature.sql
Normal file
@ -0,0 +1,31 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2021 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- Table of with online signatures
|
||||
-- ===================================================================
|
||||
|
||||
create table llx_onlinesignature
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
entity integer DEFAULT 1 NOT NULL,
|
||||
object_type varchar(32) NOT NULL,
|
||||
object_id integer NOT NULL,
|
||||
datec datetime NOT NULL,
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
name varchar(255) NOT NULL,
|
||||
ip varchar(128),
|
||||
pathoffile varchar(255)
|
||||
)ENGINE=innodb;
|
||||
21
htdocs/install/mysql/tables/llx_partnership.key.sql
Normal file
21
htdocs/install/mysql/tables/llx_partnership.key.sql
Normal file
@ -0,0 +1,21 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2016 Regis Houssin <regis.houssin@inodbox.com>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ===================================================================
|
||||
|
||||
ALTER TABLE llx_partnership ADD INDEX idx_partnership_entity (entity);
|
||||
ALTER TABLE llx_partnership ADD UNIQUE INDEX uk_partnership_ref (ref, entity);
|
||||
40
htdocs/install/mysql/tables/llx_partnership.sql
Normal file
40
htdocs/install/mysql/tables/llx_partnership.sql
Normal file
@ -0,0 +1,40 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ===================================================================
|
||||
|
||||
CREATE TABLE llx_partnership(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||
ref varchar(128) DEFAULT '(PROV)' NOT NULL,
|
||||
status smallint NOT NULL DEFAULT '0',
|
||||
fk_soc integer,
|
||||
fk_member integer,
|
||||
date_partnership_start date NOT NULL,
|
||||
date_partnership_end date NOT NULL,
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id, 0 = all
|
||||
reason_decline_or_cancel text NULL,
|
||||
date_creation datetime NOT NULL,
|
||||
fk_user_creat integer NOT NULL,
|
||||
tms timestamp,
|
||||
fk_user_modif integer,
|
||||
note_private text,
|
||||
note_public text,
|
||||
last_main_doc varchar(255),
|
||||
count_last_url_check_error integer DEFAULT '0',
|
||||
last_check_backlink datetime NULL,
|
||||
import_key varchar(14),
|
||||
model_pdf varchar(255)
|
||||
) ENGINE=innodb;
|
||||
@ -0,0 +1,20 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ===================================================================
|
||||
|
||||
|
||||
ALTER TABLE llx_partnership_extrafields ADD INDEX idx_partnership_extrafields (fk_object);
|
||||
25
htdocs/install/mysql/tables/llx_partnership_extrafields.sql
Normal file
25
htdocs/install/mysql/tables/llx_partnership_extrafields.sql
Normal file
@ -0,0 +1,25 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
--
|
||||
-- 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
|
||||
-- the Free Software Foundation; either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ===================================================================
|
||||
|
||||
create table llx_partnership_extrafields
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
fk_object integer NOT NULL, -- salary payment id
|
||||
import_key varchar(14) -- import key
|
||||
)ENGINE=innodb;
|
||||
@ -531,39 +531,48 @@ if (!$error && $db->connected && $action == "set") {
|
||||
if ($db->connected) {
|
||||
$resultbis = 1;
|
||||
|
||||
// Create user
|
||||
$result = $db->DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
|
||||
|
||||
// Create user bis
|
||||
if ($databasefortest == 'mysql') {
|
||||
if (!in_array($dolibarr_main_db_host, array('127.0.0.1', '::1', 'localhost', 'localhost.local'))) {
|
||||
$resultbis = $db->DDLCreateUser('%', $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
|
||||
}
|
||||
}
|
||||
|
||||
if ($result > 0 && $resultbis > 0) {
|
||||
if (empty($dolibarr_main_db_pass)) {
|
||||
dolibarr_install_syslog("step1: failed to create user, password is empty", LOG_ERR);
|
||||
print '<tr><td>';
|
||||
print $langs->trans("UserCreation").' : ';
|
||||
print $dolibarr_main_db_user;
|
||||
print '</td>';
|
||||
print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
|
||||
print '<td>'.$langs->trans("Error").": A password for database user is mandatory.</td></tr>";
|
||||
} else {
|
||||
if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS'
|
||||
|| $db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS'
|
||||
|| $db->errno() == 'DB_ERROR_USER_ALREADY_EXISTS') {
|
||||
dolibarr_install_syslog("step1: user already exists");
|
||||
// Create user
|
||||
$result = $db->DDLCreateUser($dolibarr_main_db_host, $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
|
||||
|
||||
// Create user bis
|
||||
if ($databasefortest == 'mysql') {
|
||||
if (!in_array($dolibarr_main_db_host, array('127.0.0.1', '::1', 'localhost', 'localhost.local'))) {
|
||||
$resultbis = $db->DDLCreateUser('%', $dolibarr_main_db_user, $dolibarr_main_db_pass, $dolibarr_main_db_name);
|
||||
}
|
||||
}
|
||||
|
||||
if ($result > 0 && $resultbis > 0) {
|
||||
print '<tr><td>';
|
||||
print $langs->trans("UserCreation").' : ';
|
||||
print $dolibarr_main_db_user;
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("LoginAlreadyExists").'</td></tr>';
|
||||
print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
|
||||
} else {
|
||||
dolibarr_install_syslog("step1: failed to create user", LOG_ERR);
|
||||
print '<tr><td>';
|
||||
print $langs->trans("UserCreation").' : ';
|
||||
print $dolibarr_main_db_user;
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("Error").': '.$db->errno().' '.$db->error().($db->error ? '. '.$db->error : '')."</td></tr>";
|
||||
if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS'
|
||||
|| $db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS'
|
||||
|| $db->errno() == 'DB_ERROR_USER_ALREADY_EXISTS') {
|
||||
dolibarr_install_syslog("step1: user already exists");
|
||||
print '<tr><td>';
|
||||
print $langs->trans("UserCreation").' : ';
|
||||
print $dolibarr_main_db_user;
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("LoginAlreadyExists").'</td></tr>';
|
||||
} else {
|
||||
dolibarr_install_syslog("step1: failed to create user", LOG_ERR);
|
||||
print '<tr><td>';
|
||||
print $langs->trans("UserCreation").' : ';
|
||||
print $dolibarr_main_db_user;
|
||||
print '</td>';
|
||||
print '<td>'.$langs->trans("Error").': '.$db->errno().' '.$db->error().($db->error ? '. '.$db->error : '')."</td></tr>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -53,6 +53,7 @@ InternalUser=Internal user
|
||||
ExternalUser=External user
|
||||
InternalUsers=Internal users
|
||||
ExternalUsers=External users
|
||||
UserInterface=User interface
|
||||
GUISetup=Display
|
||||
SetupArea=Setup
|
||||
UploadNewTemplate=Upload new template(s)
|
||||
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
|
||||
DownloadMoreSkins=More skins to download
|
||||
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
|
||||
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
|
||||
ShowProfIdInAddress=Show professional id with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses
|
||||
ShowProfIdInAddress=Show professional ID with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number
|
||||
TranslationUncomplete=Partial translation
|
||||
MAIN_DISABLE_METEO=Disable meteorological view
|
||||
MeteoStdMod=Standard mode
|
||||
@ -1778,7 +1779,7 @@ ClickToDialSetup=Click To Dial module setup
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
|
||||
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
|
||||
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
|
||||
RecommendedValueIs=Recommended: %s
|
||||
NotRecommended=Not recommanded
|
||||
Recommended=Recommended
|
||||
NotRecommended=Not recommended
|
||||
ARestrictedPath=A restricted path
|
||||
CheckForModuleUpdate=Check for external modules updates
|
||||
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
|
||||
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
|
||||
RandomlySelectedIfSeveral=Randomly selected if several pictures are available
|
||||
DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
|
||||
@ -115,7 +115,7 @@ TransferTo=To
|
||||
TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
|
||||
CheckTransmitter=Sender
|
||||
ValidateCheckReceipt=Validate this check receipt?
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done.
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
|
||||
DeleteCheckReceipt=Delete this check receipt?
|
||||
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
|
||||
BankChecks=Bank checks
|
||||
|
||||
@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified
|
||||
BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified
|
||||
BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified
|
||||
BoxTitleLastModifiedPropals=Latest %s modified proposals
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified jobs
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
|
||||
ForCustomersInvoices=Customers invoices
|
||||
ForCustomersOrders=Customers orders
|
||||
ForProposals=Proposals
|
||||
|
||||
@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
|
||||
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
|
||||
@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
|
||||
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
|
||||
CheckVersionFail=Version check fail
|
||||
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
|
||||
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.
|
||||
|
||||
@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
|
||||
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference
|
||||
SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
|
||||
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
|
||||
NbVotes=Number of votes
|
||||
#
|
||||
# Status
|
||||
#
|
||||
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
|
||||
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s.
|
||||
BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
|
||||
EventType = Event type
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
|
||||
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
|
||||
MigrationReloadModule=Reload module %s
|
||||
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
|
||||
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
|
||||
ShowNotAvailableOptions=Show unavailable options
|
||||
HideNotAvailableOptions=Hide unavailable options
|
||||
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.
|
||||
|
||||
@ -64,3 +64,5 @@ InterLineDuration=Line duration intervention
|
||||
InterLineDesc=Line description intervention
|
||||
RepeatableIntervention=Template of intervention
|
||||
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
|
||||
Reopen=Reopen
|
||||
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?
|
||||
|
||||
@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
|
||||
StockDetailPerBatch=Stock detail per lot
|
||||
SerialNumberAlreadyInUse=Serial number %s is already used for product %s
|
||||
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
|
||||
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
|
||||
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
|
||||
ManageLotMask=Custom mask
|
||||
CustomMasks=Adds an option to define mask in the product card
|
||||
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask
|
||||
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask
|
||||
CustomMasks=Option to define a different numbering mask for each product
|
||||
BatchLotNumberingModules=Numbering rule for automatic generation of lot number
|
||||
BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
|
||||
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
|
||||
LifeTime=Life span (in days)
|
||||
EndOfLife=End of life
|
||||
|
||||
@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
|
||||
PriceCatalogue=A single sell price per product/service
|
||||
PricingRule=Rules for selling prices
|
||||
AddCustomerPrice=Add price by customer
|
||||
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
|
||||
ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
|
||||
PriceByCustomerLog=Log of previous customer prices
|
||||
MinimumPriceLimit=Minimum price can't be lower then %s
|
||||
MinimumRecommendedPrice=Minimum recommended price is: %s
|
||||
@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change
|
||||
ComposedProduct=Child products
|
||||
MinSupplierPrice=Minimum buying price
|
||||
MinCustomerPrice=Minimum selling price
|
||||
NoDynamicPrice=No dynamic price
|
||||
DynamicPriceConfiguration=Dynamic price configuration
|
||||
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
|
||||
AddVariable=Add Variable
|
||||
|
||||
@ -2,20 +2,23 @@
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
|
||||
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
|
||||
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
|
||||
Salary=Salary
|
||||
Salaries=Salaries
|
||||
NewSalaryPayment=New salary payment
|
||||
NewSalary=New salary
|
||||
NewSalaryPayment=New salary card
|
||||
AddSalaryPayment=Add salary payment
|
||||
SalaryPayment=Salary payment
|
||||
SalariesPayments=Salaries payments
|
||||
SalariesPaymentsOf=Salaries payments of %s
|
||||
ShowSalaryPayment=Show salary payment
|
||||
THM=Average hourly rate
|
||||
TJM=Average daily rate
|
||||
CurrentSalary=Current salary
|
||||
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
|
||||
TJMDescription=This value is currently for information only and is not used for any calculation
|
||||
LastSalaries=Latest %s salary payments
|
||||
AllSalaries=All salary payments
|
||||
LastSalaries=Latest %s salaries
|
||||
AllSalaries=All salaries
|
||||
SalariesStatistics=Salary statistics
|
||||
# Export
|
||||
SalariesAndPayments=Salaries and payments
|
||||
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?
|
||||
|
||||
@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
|
||||
|
||||
TicketTypeShortCOM=Commercial question
|
||||
TicketTypeShortHELP=Request for functionnal help
|
||||
TicketTypeShortISSUE=Issue, bug or problem
|
||||
TicketTypeShortISSUE=Issue or bug
|
||||
TicketTypeShortPROBLEM=Problem
|
||||
TicketTypeShortREQUEST=Change or enhancement request
|
||||
TicketTypeShortPROJET=Project
|
||||
TicketTypeShortOTHER=Other
|
||||
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
|
||||
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
|
||||
TypeContact_ticket_external_CONTRIBUTOR=External contributor
|
||||
|
||||
OriginEmail=Email source
|
||||
OriginEmail=Reporter Email
|
||||
Notify_TICKET_SENTBYMAIL=Send ticket message by email
|
||||
|
||||
# Status
|
||||
Read=Read
|
||||
Assigned=Assigned
|
||||
InProgress=In progress
|
||||
NeedMoreInformation=Waiting for information
|
||||
NeedMoreInformation=Waiting for reporter feedback
|
||||
NeedMoreInformationShort=Waiting for feedback
|
||||
Answered=Answered
|
||||
Waiting=Waiting
|
||||
Closed=Closed
|
||||
@ -160,7 +162,7 @@ CreatedBy=Created by
|
||||
NewTicket=New Ticket
|
||||
SubjectAnswerToTicket=Ticket answer
|
||||
TicketTypeRequest=Request type
|
||||
TicketCategory=Group
|
||||
TicketCategory=Ticket categorization
|
||||
SeeTicket=See ticket
|
||||
TicketMarkedAsRead=Ticket has been marked as read
|
||||
TicketReadOn=Read on
|
||||
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
|
||||
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
|
||||
TimeElapsedSince=Time elapsed since
|
||||
TicketTimeToRead=Time elapsed before read
|
||||
TicketTimeElapsedBeforeSince=Time elapsed before / since
|
||||
TicketContacts=Contacts ticket
|
||||
TicketDocumentsLinked=Documents linked to ticket
|
||||
ConfirmReOpenTicket=Confirm reopen this ticket ?
|
||||
|
||||
@ -97,8 +97,8 @@ LoginToCreate=Login to create
|
||||
NameToCreate=Name of third party to create
|
||||
YourRole=Your roles
|
||||
YourQuotaOfUsersIsReached=Your quota of active users is reached !
|
||||
NbOfUsers=No. of users
|
||||
NbOfPermissions=No. of permissions
|
||||
NbOfUsers=Number of users
|
||||
NbOfPermissions=Number of permissions
|
||||
DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
|
||||
HierarchicalResponsible=Supervisor
|
||||
HierarchicView=Hierarchical view
|
||||
|
||||
@ -31,7 +31,7 @@ AddWebsite=Add website
|
||||
Webpage=Web page/container
|
||||
AddPage=Add page/container
|
||||
PageContainer=Page
|
||||
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
|
||||
SiteDeleted=Web site '%s' deleted
|
||||
PageContent=Page/Contenair
|
||||
|
||||
@ -49,3 +49,4 @@ Permission81=قراءة أوامر الشراء
|
||||
MailToSendInvoice=فواتير العميل
|
||||
MailToSendSupplierOrder=أوامر الشراء
|
||||
MailToSendSupplierInvoice=فواتير المورد
|
||||
Recommended=موصى به
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
# Dolibarr language file - Source file is en_US - products
|
||||
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
|
||||
@ -1,4 +1,3 @@
|
||||
# Dolibarr language file - Source file is en_US - ticket
|
||||
Closed=مقفول
|
||||
TicketSettings=الإعدادات
|
||||
TicketCategory=Group
|
||||
|
||||
@ -9,4 +9,3 @@ WEBSITE_ALIASALT=أسماء الصفحات / الأسماء المستعارة
|
||||
WEBSITE_ALIASALTDesc=استخدم هنا قائمة بأسماء / أسماء مستعارة أخرى بحيث يمكن الوصول إلى الصفحة أيضًا باستخدام هذه الأسماء / الأسماء المستعارة الأخرى (على سبيل المثال ، الاسم القديم بعد إعادة تسمية الاسم المستعار للحفاظ على الرابط الخلفي في عمل الرابط / الاسم القديم). النحو هو: <br> Alternativename1 ، و Alternativename2 ، ...
|
||||
WEBSITE_CSS_URL=عنوان URL لملف CSS الخارجي
|
||||
WEBSITE_CSS_INLINE=محتوى ملف CSS (مشترك لجميع الصفحات)
|
||||
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
|
||||
@ -53,6 +53,7 @@ InternalUser=Internal user
|
||||
ExternalUser=External user
|
||||
InternalUsers=Internal users
|
||||
ExternalUsers=External users
|
||||
UserInterface=User interface
|
||||
GUISetup=Display
|
||||
SetupArea=Setup
|
||||
UploadNewTemplate=Upload new template(s)
|
||||
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
|
||||
DownloadMoreSkins=More skins to download
|
||||
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
|
||||
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
|
||||
ShowProfIdInAddress=Show professional id with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses
|
||||
ShowProfIdInAddress=Show professional ID with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number
|
||||
TranslationUncomplete=Partial translation
|
||||
MAIN_DISABLE_METEO=Disable meteorological view
|
||||
MeteoStdMod=Standard mode
|
||||
@ -1778,7 +1779,7 @@ ClickToDialSetup=Click To Dial module setup
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
|
||||
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
|
||||
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
|
||||
RecommendedValueIs=Recommended: %s
|
||||
NotRecommended=Not recommanded
|
||||
Recommended=Recommended
|
||||
NotRecommended=Not recommended
|
||||
ARestrictedPath=A restricted path
|
||||
CheckForModuleUpdate=Check for external modules updates
|
||||
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
|
||||
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
|
||||
RandomlySelectedIfSeveral=Randomly selected if several pictures are available
|
||||
DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
|
||||
@ -115,7 +115,7 @@ TransferTo=To
|
||||
TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
|
||||
CheckTransmitter=Sender
|
||||
ValidateCheckReceipt=Validate this check receipt?
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done.
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
|
||||
DeleteCheckReceipt=Delete this check receipt?
|
||||
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
|
||||
BankChecks=Bank checks
|
||||
|
||||
@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified
|
||||
BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified
|
||||
BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified
|
||||
BoxTitleLastModifiedPropals=Latest %s modified proposals
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified jobs
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
|
||||
ForCustomersInvoices=Customers invoices
|
||||
ForCustomersOrders=Customers orders
|
||||
ForProposals=Proposals
|
||||
|
||||
@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
|
||||
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
|
||||
@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
|
||||
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
|
||||
CheckVersionFail=Version check fail
|
||||
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
|
||||
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.
|
||||
|
||||
@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
|
||||
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference
|
||||
SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
|
||||
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
|
||||
NbVotes=Number of votes
|
||||
#
|
||||
# Status
|
||||
#
|
||||
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
|
||||
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s.
|
||||
BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
|
||||
EventType = Event type
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
|
||||
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
|
||||
MigrationReloadModule=Reload module %s
|
||||
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
|
||||
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
|
||||
ShowNotAvailableOptions=Show unavailable options
|
||||
HideNotAvailableOptions=Hide unavailable options
|
||||
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.
|
||||
|
||||
@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
|
||||
StockDetailPerBatch=Stock detail per lot
|
||||
SerialNumberAlreadyInUse=Serial number %s is already used for product %s
|
||||
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
|
||||
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
|
||||
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
|
||||
ManageLotMask=Custom mask
|
||||
CustomMasks=Adds an option to define mask in the product card
|
||||
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask
|
||||
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask
|
||||
CustomMasks=Option to define a different numbering mask for each product
|
||||
BatchLotNumberingModules=Numbering rule for automatic generation of lot number
|
||||
BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
|
||||
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
|
||||
LifeTime=Life span (in days)
|
||||
EndOfLife=End of life
|
||||
|
||||
@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
|
||||
PriceCatalogue=A single sell price per product/service
|
||||
PricingRule=Rules for selling prices
|
||||
AddCustomerPrice=Add price by customer
|
||||
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
|
||||
ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
|
||||
PriceByCustomerLog=Log of previous customer prices
|
||||
MinimumPriceLimit=Minimum price can't be lower then %s
|
||||
MinimumRecommendedPrice=Minimum recommended price is: %s
|
||||
@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change
|
||||
ComposedProduct=Child products
|
||||
MinSupplierPrice=Minimum buying price
|
||||
MinCustomerPrice=Minimum selling price
|
||||
NoDynamicPrice=No dynamic price
|
||||
DynamicPriceConfiguration=Dynamic price configuration
|
||||
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
|
||||
AddVariable=Add Variable
|
||||
|
||||
@ -17,8 +17,8 @@ TJM=Average daily rate
|
||||
CurrentSalary=Current salary
|
||||
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
|
||||
TJMDescription=This value is currently for information only and is not used for any calculation
|
||||
LastSalaries=Latest %s salary payments
|
||||
AllSalaries=All salary payments
|
||||
LastSalaries=Latest %s salaries
|
||||
AllSalaries=All salaries
|
||||
SalariesStatistics=Salary statistics
|
||||
# Export
|
||||
SalariesAndPayments=Salaries and payments
|
||||
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?
|
||||
|
||||
@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
|
||||
|
||||
TicketTypeShortCOM=Commercial question
|
||||
TicketTypeShortHELP=Request for functionnal help
|
||||
TicketTypeShortISSUE=Issue, bug or problem
|
||||
TicketTypeShortISSUE=Issue or bug
|
||||
TicketTypeShortPROBLEM=Problem
|
||||
TicketTypeShortREQUEST=Change or enhancement request
|
||||
TicketTypeShortPROJET=Project
|
||||
TicketTypeShortOTHER=Other
|
||||
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
|
||||
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
|
||||
TypeContact_ticket_external_CONTRIBUTOR=External contributor
|
||||
|
||||
OriginEmail=Email source
|
||||
OriginEmail=Reporter Email
|
||||
Notify_TICKET_SENTBYMAIL=Send ticket message by email
|
||||
|
||||
# Status
|
||||
Read=Read
|
||||
Assigned=Assigned
|
||||
InProgress=In progress
|
||||
NeedMoreInformation=Waiting for information
|
||||
NeedMoreInformation=Waiting for reporter feedback
|
||||
NeedMoreInformationShort=Waiting for feedback
|
||||
Answered=Answered
|
||||
Waiting=Waiting
|
||||
Closed=Closed
|
||||
@ -160,7 +162,7 @@ CreatedBy=Created by
|
||||
NewTicket=New Ticket
|
||||
SubjectAnswerToTicket=Ticket answer
|
||||
TicketTypeRequest=Request type
|
||||
TicketCategory=Group
|
||||
TicketCategory=Ticket categorization
|
||||
SeeTicket=See ticket
|
||||
TicketMarkedAsRead=Ticket has been marked as read
|
||||
TicketReadOn=Read on
|
||||
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
|
||||
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
|
||||
TimeElapsedSince=Time elapsed since
|
||||
TicketTimeToRead=Time elapsed before read
|
||||
TicketTimeElapsedBeforeSince=Time elapsed before / since
|
||||
TicketContacts=Contacts ticket
|
||||
TicketDocumentsLinked=Documents linked to ticket
|
||||
ConfirmReOpenTicket=Confirm reopen this ticket ?
|
||||
|
||||
@ -97,8 +97,8 @@ LoginToCreate=Login to create
|
||||
NameToCreate=Name of third party to create
|
||||
YourRole=Your roles
|
||||
YourQuotaOfUsersIsReached=Your quota of active users is reached !
|
||||
NbOfUsers=No. of users
|
||||
NbOfPermissions=No. of permissions
|
||||
NbOfUsers=Number of users
|
||||
NbOfPermissions=Number of permissions
|
||||
DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
|
||||
HierarchicalResponsible=Supervisor
|
||||
HierarchicView=Hierarchical view
|
||||
|
||||
@ -31,7 +31,7 @@ AddWebsite=Add website
|
||||
Webpage=Web page/container
|
||||
AddPage=Add page/container
|
||||
PageContainer=Page
|
||||
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
|
||||
SiteDeleted=Web site '%s' deleted
|
||||
PageContent=Page/Contenair
|
||||
|
||||
@ -53,6 +53,7 @@ InternalUser=مستخدم داخلي
|
||||
ExternalUser=مستخدم خارجي
|
||||
InternalUsers=مستخدمين داخليين
|
||||
ExternalUsers=مستخدمين خارجيين
|
||||
UserInterface=User interface
|
||||
GUISetup=العرض
|
||||
SetupArea=التثبيت
|
||||
UploadNewTemplate=تحميل قالب جديد
|
||||
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=وظائف خدمة تصميم المواقع لا
|
||||
DownloadMoreSkins=مزيد من جلود بتحميل
|
||||
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
|
||||
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
|
||||
ShowProfIdInAddress=Show professional id with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses
|
||||
ShowProfIdInAddress=Show professional ID with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number
|
||||
TranslationUncomplete=ترجمة جزئية
|
||||
MAIN_DISABLE_METEO=Disable meteorological view
|
||||
MeteoStdMod=Standard mode
|
||||
@ -1778,7 +1779,7 @@ ClickToDialSetup=انقر لإعداد وحدة الاتصال الهاتفي
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=مجرد استخدام الرابط "الهاتف:" على أرقام الهواتف
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
|
||||
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
|
||||
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
|
||||
RecommendedValueIs=Recommended: %s
|
||||
NotRecommended=Not recommanded
|
||||
Recommended=موصى بها
|
||||
NotRecommended=Not recommended
|
||||
ARestrictedPath=A restricted path
|
||||
CheckForModuleUpdate=Check for external modules updates
|
||||
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
|
||||
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
|
||||
RandomlySelectedIfSeveral=Randomly selected if several pictures are available
|
||||
DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
|
||||
@ -115,7 +115,7 @@ TransferTo=إلى
|
||||
TransferFromToDone=التحويل من <b>%s</b>إلى <b>%s</b>من <b>%s</b>%s قد تم تسجيلة.
|
||||
CheckTransmitter=مرسل
|
||||
ValidateCheckReceipt=تأكيد صحة الشيك المستلم؟
|
||||
ConfirmValidateCheckReceipt=هل انت متأكد من رغبتك بإرسال إيصال هذا الشيك للتأكيد ؟ لا تغيير ممكن بعد الاكمال.
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
|
||||
DeleteCheckReceipt=حذف هذا الشيك ؟
|
||||
ConfirmDeleteCheckReceipt=هل انت متأكد أنك تريد حذف هذا الشيك؟
|
||||
BankChecks=الشيكات المصرفية
|
||||
|
||||
@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=أوامر الموردين: آخر %s تع
|
||||
BoxTitleLastModifiedCustomerBills=فواتير العميل: آخر %s تعديل
|
||||
BoxTitleLastModifiedCustomerOrders=أوامر المبيعات: آخر %s تعديل
|
||||
BoxTitleLastModifiedPropals=أحدث %s العروض المعدلة
|
||||
BoxTitleLatestModifiedJobPositions=أحدث %s وظائف المعدلة
|
||||
BoxTitleLatestModifiedCandidatures=أحدث %s الترشيحات المعدلة
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
|
||||
ForCustomersInvoices=فواتير العملاء
|
||||
ForCustomersOrders=أوامر العملاء
|
||||
ForProposals=عروض
|
||||
|
||||
@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
|
||||
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
|
||||
@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
|
||||
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
|
||||
CheckVersionFail=Version check fail
|
||||
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
|
||||
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.
|
||||
|
||||
@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
|
||||
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference
|
||||
SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
|
||||
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
|
||||
NbVotes=Number of votes
|
||||
#
|
||||
# Status
|
||||
#
|
||||
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
|
||||
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s.
|
||||
BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
|
||||
EventType = نوع الحدث
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
|
||||
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
|
||||
MigrationReloadModule=إعادة تحديث الوحدات %s
|
||||
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
|
||||
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
|
||||
ShowNotAvailableOptions=Show unavailable options
|
||||
HideNotAvailableOptions=Hide unavailable options
|
||||
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.
|
||||
|
||||
@ -64,3 +64,5 @@ InterLineDuration=تدخل مدة خط
|
||||
InterLineDesc=خط وصف التدخل
|
||||
RepeatableIntervention=Template of intervention
|
||||
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
|
||||
Reopen=إعادة فتح
|
||||
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?
|
||||
|
||||
@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
|
||||
StockDetailPerBatch=Stock detail per lot
|
||||
SerialNumberAlreadyInUse=Serial number %s is already used for product %s
|
||||
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
|
||||
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
|
||||
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
|
||||
ManageLotMask=Custom mask
|
||||
CustomMasks=Adds an option to define mask in the product card
|
||||
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask
|
||||
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask
|
||||
CustomMasks=Option to define a different numbering mask for each product
|
||||
BatchLotNumberingModules=Numbering rule for automatic generation of lot number
|
||||
BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
|
||||
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
|
||||
LifeTime=Life span (in days)
|
||||
EndOfLife=End of life
|
||||
|
||||
@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
|
||||
PriceCatalogue=A single sell price per product/service
|
||||
PricingRule=Rules for selling prices
|
||||
AddCustomerPrice=إضافة السعر من قبل العملاء
|
||||
ForceUpdateChildPriceSoc=تعيين نفس السعر على الشركات التابعة العملاء
|
||||
ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
|
||||
PriceByCustomerLog=سجل الأسعار العملاء السابقة
|
||||
MinimumPriceLimit=سعر الحد الأدنى لا يمكن أن يكون أقل ثم٪ الصورة
|
||||
MinimumRecommendedPrice=Minimum recommended price is: %s
|
||||
@ -296,6 +296,7 @@ ComposedProductIncDecStock=زيادة / نقصان الأسهم على التغ
|
||||
ComposedProduct=Child products
|
||||
MinSupplierPrice=الحد الأدنى من سعر الشراء
|
||||
MinCustomerPrice=Minimum selling price
|
||||
NoDynamicPrice=No dynamic price
|
||||
DynamicPriceConfiguration=التكوين سعر ديناميكي
|
||||
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
|
||||
AddVariable=Add Variable
|
||||
|
||||
@ -2,20 +2,23 @@
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
|
||||
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
|
||||
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
|
||||
Salary=الراتب
|
||||
Salaries=الرواتب
|
||||
NewSalaryPayment=دفع الرواتب جديد
|
||||
NewSalary=New salary
|
||||
NewSalaryPayment=New salary card
|
||||
AddSalaryPayment=Add salary payment
|
||||
SalaryPayment=دفع الرواتب
|
||||
SalariesPayments=مدفوعات الرواتب
|
||||
SalariesPaymentsOf=Salaries payments of %s
|
||||
ShowSalaryPayment=مشاهدة دفع الرواتب
|
||||
THM=Average hourly rate
|
||||
TJM=Average daily rate
|
||||
CurrentSalary=الراتب الحالي
|
||||
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
|
||||
TJMDescription=This value is currently for information only and is not used for any calculation
|
||||
LastSalaries=Latest %s salary payments
|
||||
AllSalaries=All salary payments
|
||||
LastSalaries=Latest %s salaries
|
||||
AllSalaries=All salaries
|
||||
SalariesStatistics=Salary statistics
|
||||
# Export
|
||||
SalariesAndPayments=Salaries and payments
|
||||
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?
|
||||
|
||||
@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
|
||||
|
||||
TicketTypeShortCOM=Commercial question
|
||||
TicketTypeShortHELP=Request for functionnal help
|
||||
TicketTypeShortISSUE=Issue, bug or problem
|
||||
TicketTypeShortISSUE=Issue or bug
|
||||
TicketTypeShortPROBLEM=Problem
|
||||
TicketTypeShortREQUEST=Change or enhancement request
|
||||
TicketTypeShortPROJET=المشروع
|
||||
TicketTypeShortOTHER=الآخر
|
||||
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
|
||||
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
|
||||
TypeContact_ticket_external_CONTRIBUTOR=External contributor
|
||||
|
||||
OriginEmail=Email source
|
||||
OriginEmail=Reporter Email
|
||||
Notify_TICKET_SENTBYMAIL=Send ticket message by email
|
||||
|
||||
# Status
|
||||
Read=قرأ
|
||||
Assigned=Assigned
|
||||
InProgress=في تقدم
|
||||
NeedMoreInformation=Waiting for information
|
||||
NeedMoreInformation=Waiting for reporter feedback
|
||||
NeedMoreInformationShort=Waiting for feedback
|
||||
Answered=Answered
|
||||
Waiting=انتظار
|
||||
Closed=مغلق
|
||||
@ -160,7 +162,7 @@ CreatedBy=Created by
|
||||
NewTicket=New Ticket
|
||||
SubjectAnswerToTicket=Ticket answer
|
||||
TicketTypeRequest=Request type
|
||||
TicketCategory=مجموعة
|
||||
TicketCategory=Ticket categorization
|
||||
SeeTicket=See ticket
|
||||
TicketMarkedAsRead=Ticket has been marked as read
|
||||
TicketReadOn=Read on
|
||||
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
|
||||
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
|
||||
TimeElapsedSince=Time elapsed since
|
||||
TicketTimeToRead=Time elapsed before read
|
||||
TicketTimeElapsedBeforeSince=Time elapsed before / since
|
||||
TicketContacts=Contacts ticket
|
||||
TicketDocumentsLinked=Documents linked to ticket
|
||||
ConfirmReOpenTicket=Confirm reopen this ticket ?
|
||||
|
||||
@ -97,8 +97,8 @@ LoginToCreate=ادخل لخلق
|
||||
NameToCreate=اسم طرف ثالث لخلق
|
||||
YourRole=الأدوار الخاص
|
||||
YourQuotaOfUsersIsReached=يتم التوصل إلى حصة الخاص بك من المستخدمين النشطين!
|
||||
NbOfUsers=No. of users
|
||||
NbOfPermissions=No. of permissions
|
||||
NbOfUsers=Number of users
|
||||
NbOfPermissions=Number of permissions
|
||||
DontDowngradeSuperAdmin=يمكن فقط superadmin تقليله a superadmin
|
||||
HierarchicalResponsible=المشرف
|
||||
HierarchicView=الهرمي
|
||||
|
||||
@ -31,7 +31,7 @@ AddWebsite=إضافة موقع إلكتروني
|
||||
Webpage=الصفحة\\الحاوية
|
||||
AddPage=إضافة صفحة\\حاوية
|
||||
PageContainer=صفحة
|
||||
PreviewOfSiteNotYetAvailable=إستعراض موقعك الإلكتروني <strong>%s</strong> غير متاح الان . عليك اولاً "<strong>إستيراد قالب موقع إلكتروني </strong>" او فقط "<strong>إضافة صفحة\\حاوية</strong>".
|
||||
PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
RequestedPageHasNoContentYet=الصفحة المطلوبة بالمعرف %s لاتحتوي بعد على محتوى ، او ان ملف القالب الخاص بها قد تم حذفه. قم بتعديل محتويات الصفحة لحل ذلك
|
||||
SiteDeleted= الموقع "%s" تم حذهف
|
||||
PageContent=الصفحة\\الحاوية
|
||||
|
||||
@ -53,6 +53,7 @@ InternalUser=Internal user
|
||||
ExternalUser=External user
|
||||
InternalUsers=Internal users
|
||||
ExternalUsers=External users
|
||||
UserInterface=User interface
|
||||
GUISetup=Display
|
||||
SetupArea=Setup
|
||||
UploadNewTemplate=Upload new template(s)
|
||||
@ -1260,8 +1261,8 @@ YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
|
||||
DownloadMoreSkins=More skins to download
|
||||
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
|
||||
SimpleNumRefNoDateModelDesc=Returns the reference number in the format %s-nnnn where nnnn is a sequential auto-incrementing number with no reset
|
||||
ShowProfIdInAddress=Show professional id with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses
|
||||
ShowProfIdInAddress=Show professional ID with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number
|
||||
TranslationUncomplete=Partial translation
|
||||
MAIN_DISABLE_METEO=Disable meteorological view
|
||||
MeteoStdMod=Standard mode
|
||||
@ -1778,7 +1779,7 @@ ClickToDialSetup=Click To Dial module setup
|
||||
ClickToDialUrlDesc=Url called when a click on phone picto is done. In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
|
||||
ClickToDialDesc=This module change phone numbers, when using a desktop computer, into clickable links. A click will call the number. This can be used to start the phone call when using a soft phone on your desktop or when using a CTI system based on SIP protocol for example. Note: When using a smartphone, phone numbers are always clickable.
|
||||
ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface, installed on the same computer as the browser, and called when you click on a link starting with "tel:" in your browser. If you need link that start with "sip:" or a full server solution (no need of local software installation), you must set this to "No" and fill next field.
|
||||
##### Point Of Sale (CashDesk) #####
|
||||
CashDesk=Point of Sale
|
||||
CashDeskSetup=Point of Sales module setup
|
||||
@ -2133,7 +2134,8 @@ IfCLINotRequiredYouShouldDisablePHPFunctions=Except if you need to run system co
|
||||
PHPFunctionsRequiredForCLI=For shell purpose (like scheduled job backup or running an anitivurs program), you must keep PHP functions
|
||||
NoWritableFilesFoundIntoRootDir=No writable files or directories of the common programs were found into your root directory (Good)
|
||||
RecommendedValueIs=Recommended: %s
|
||||
NotRecommended=Not recommanded
|
||||
Recommended=Recommended
|
||||
NotRecommended=Not recommended
|
||||
ARestrictedPath=A restricted path
|
||||
CheckForModuleUpdate=Check for external modules updates
|
||||
CheckForModuleUpdateHelp=This action will connect to editors of external modules to check if a new version is available.
|
||||
@ -2144,3 +2146,5 @@ YouEnableDeprecatedWSAPIsUseRESTAPIsInstead=You enabled deprecated WS API. You s
|
||||
RandomlySelectedIfSeveral=Randomly selected if several pictures are available
|
||||
DatabasePasswordObfuscated=Database password is obfuscated in conf file
|
||||
DatabasePasswordNotObfuscated=Database password is NOT obfuscated in conf file
|
||||
APIsAreNotEnabled=APIs modules are not enabled
|
||||
YouShouldSetThisToOff=You should set this to 0 or off
|
||||
|
||||
@ -115,7 +115,7 @@ TransferTo=To
|
||||
TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
|
||||
CheckTransmitter=Sender
|
||||
ValidateCheckReceipt=Validate this check receipt?
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes are possible it's done.
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
|
||||
DeleteCheckReceipt=Delete this check receipt?
|
||||
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
|
||||
BankChecks=Bank checks
|
||||
|
||||
@ -91,8 +91,8 @@ BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified
|
||||
BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified
|
||||
BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified
|
||||
BoxTitleLastModifiedPropals=Latest %s modified proposals
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified jobs
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified candidatures
|
||||
BoxTitleLatestModifiedJobPositions=Latest %s modified job positions
|
||||
BoxTitleLatestModifiedCandidatures=Latest %s modified job applications
|
||||
ForCustomersInvoices=Customers invoices
|
||||
ForCustomersOrders=Customers orders
|
||||
ForProposals=Proposals
|
||||
|
||||
@ -127,4 +127,4 @@ AllowDelayedPayment=Allow delayed payment
|
||||
PrintPaymentMethodOnReceipts=Print payment method on tickets|receipts
|
||||
WeighingScale=Weighing scale
|
||||
ShowPriceHT = Display the column with the price excluding tax (on screen)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on receipt)
|
||||
ShowPriceHTOnReceipt = Display the column with the price excluding tax (on the receipt)
|
||||
|
||||
@ -301,3 +301,4 @@ ErrorActionCommPropertyUserowneridNotDefined=User's owner is required
|
||||
ErrorActionCommBadType=Selected event type (id: %n, code: %s) do not exist in Event Type dictionary
|
||||
CheckVersionFail=Version check fail
|
||||
ErrorWrongFileName=Name of the file cannot have __SOMETHING__ in it
|
||||
ErrorNotInDictionaryPaymentConditions=Not in Payment Terms Dictionary, please modify.
|
||||
|
||||
@ -86,6 +86,7 @@ DownloadICSLink = Download ICS link
|
||||
EVENTORGANIZATION_SECUREKEY = Secure Key of the public registration link to a conference
|
||||
SERVICE_BOOTH_LOCATION = Service used for the invoice row about a booth location
|
||||
SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION = Service used for the invoice row about an attendee subscription to a conference
|
||||
NbVotes=Number of votes
|
||||
#
|
||||
# Status
|
||||
#
|
||||
@ -115,6 +116,9 @@ EvntOrgDuration = This conference starts on %s and ends on %s.
|
||||
ConferenceAttendeeFee = Conference attendee fee for the event : '%s' occurring from %s to %s.
|
||||
BoothLocationFee = Booth location for the event : '%s' occurring from %s to %s
|
||||
EventType = Event type
|
||||
LabelOfBooth=Booth label
|
||||
LabelOfconference=Conference label
|
||||
ConferenceIsNotConfirmed=Subcription not available, conference is not confirmed yet
|
||||
|
||||
#
|
||||
# Vote page
|
||||
|
||||
@ -206,6 +206,7 @@ MigrationUserPhotoPath=Migration of photo paths for users
|
||||
MigrationFieldsSocialNetworks=Migration of users fields social networks (%s)
|
||||
MigrationReloadModule=Reload module %s
|
||||
MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
|
||||
MigrationImportOrExportProfiles=Migration of import or export profiles (%s)
|
||||
ShowNotAvailableOptions=Show unavailable options
|
||||
HideNotAvailableOptions=Hide unavailable options
|
||||
ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.
|
||||
|
||||
@ -64,3 +64,5 @@ InterLineDuration=Line duration intervention
|
||||
InterLineDesc=Line description intervention
|
||||
RepeatableIntervention=Template of intervention
|
||||
ToCreateAPredefinedIntervention=To create a predefined or recurring intervention, create a common intervention and convert it into intervention template
|
||||
Reopen=Reopen
|
||||
ConfirmReopenIntervention=Are you sure you want to open back the intervention <b>%s</b>?
|
||||
|
||||
@ -26,12 +26,10 @@ ShowLogOfMovementIfLot=Show log of movements for couple product/lot
|
||||
StockDetailPerBatch=Stock detail per lot
|
||||
SerialNumberAlreadyInUse=Serial number %s is already used for product %s
|
||||
TooManyQtyForSerialNumber=You can only have one product %s for serial number %s
|
||||
BatchLotNumberingModules=Options for automatic generation of batch products managed by lots
|
||||
BatchSerialNumberingModules=Options for automatic generation of batch products managed by serial numbers
|
||||
ManageLotMask=Custom mask
|
||||
CustomMasks=Adds an option to define mask in the product card
|
||||
LotProductTooltip=Adds an option in the product card to define a dedicated batch number mask
|
||||
SNProductTooltip=Adds an option in the product card to define a dedicated serial number mask
|
||||
CustomMasks=Option to define a different numbering mask for each product
|
||||
BatchLotNumberingModules=Numbering rule for automatic generation of lot number
|
||||
BatchSerialNumberingModules=Numbering rule for automatic generation of serial number (for products with property 1 unique lot/serial for each product)
|
||||
QtyToAddAfterBarcodeScan=Qty to add for each barcode/lot/serial scanned
|
||||
LifeTime=Life span (in days)
|
||||
EndOfLife=End of life
|
||||
|
||||
@ -277,7 +277,7 @@ PriceByCustomer=Different prices for each customer
|
||||
PriceCatalogue=A single sell price per product/service
|
||||
PricingRule=Rules for selling prices
|
||||
AddCustomerPrice=Add price by customer
|
||||
ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
|
||||
ForceUpdateChildPriceSoc=Set same price on customer's subsidiaries
|
||||
PriceByCustomerLog=Log of previous customer prices
|
||||
MinimumPriceLimit=Minimum price can't be lower then %s
|
||||
MinimumRecommendedPrice=Minimum recommended price is: %s
|
||||
@ -296,6 +296,7 @@ ComposedProductIncDecStock=Increase/Decrease stock on parent change
|
||||
ComposedProduct=Child products
|
||||
MinSupplierPrice=Minimum buying price
|
||||
MinCustomerPrice=Minimum selling price
|
||||
NoDynamicPrice=No dynamic price
|
||||
DynamicPriceConfiguration=Dynamic price configuration
|
||||
DynamicPriceDesc=You may define mathematical formulae to calculate Customer or Vendor prices. Such formulas can use all mathematical operators, some constants and variables. You can define here the variables you wish to use. If the variable needs an automatic update, you may define the external URL to allow Dolibarr to update the value automatically.
|
||||
AddVariable=Add Variable
|
||||
|
||||
@ -2,20 +2,23 @@
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
|
||||
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
|
||||
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
|
||||
Salary=Salary
|
||||
Salaries=Salaries
|
||||
NewSalaryPayment=New salary payment
|
||||
NewSalary=New salary
|
||||
NewSalaryPayment=New salary card
|
||||
AddSalaryPayment=Add salary payment
|
||||
SalaryPayment=Salary payment
|
||||
SalariesPayments=Salaries payments
|
||||
SalariesPaymentsOf=Salaries payments of %s
|
||||
ShowSalaryPayment=Show salary payment
|
||||
THM=Average hourly rate
|
||||
TJM=Average daily rate
|
||||
CurrentSalary=Current salary
|
||||
THMDescription=This value may be used to calculate the cost of time consumed on a project entered by users if module project is used
|
||||
TJMDescription=This value is currently for information only and is not used for any calculation
|
||||
LastSalaries=Latest %s salary payments
|
||||
AllSalaries=All salary payments
|
||||
LastSalaries=Latest %s salaries
|
||||
AllSalaries=All salaries
|
||||
SalariesStatistics=Salary statistics
|
||||
# Export
|
||||
SalariesAndPayments=Salaries and payments
|
||||
ConfirmDeleteSalaryPayment=Do you want to delete this salary payment ?
|
||||
|
||||
@ -34,7 +34,8 @@ TicketDictResolution=Ticket - Resolution
|
||||
|
||||
TicketTypeShortCOM=Commercial question
|
||||
TicketTypeShortHELP=Request for functionnal help
|
||||
TicketTypeShortISSUE=Issue, bug or problem
|
||||
TicketTypeShortISSUE=Issue or bug
|
||||
TicketTypeShortPROBLEM=Problem
|
||||
TicketTypeShortREQUEST=Change or enhancement request
|
||||
TicketTypeShortPROJET=Project
|
||||
TicketTypeShortOTHER=Other
|
||||
@ -54,14 +55,15 @@ TypeContact_ticket_internal_SUPPORTTEC=Assigned user
|
||||
TypeContact_ticket_external_SUPPORTCLI=Customer contact / incident tracking
|
||||
TypeContact_ticket_external_CONTRIBUTOR=External contributor
|
||||
|
||||
OriginEmail=Email source
|
||||
OriginEmail=Reporter Email
|
||||
Notify_TICKET_SENTBYMAIL=Send ticket message by email
|
||||
|
||||
# Status
|
||||
Read=Read
|
||||
Assigned=Assigned
|
||||
InProgress=In progress
|
||||
NeedMoreInformation=Waiting for information
|
||||
NeedMoreInformation=Waiting for reporter feedback
|
||||
NeedMoreInformationShort=Waiting for feedback
|
||||
Answered=Answered
|
||||
Waiting=Waiting
|
||||
Closed=Closed
|
||||
@ -160,7 +162,7 @@ CreatedBy=Created by
|
||||
NewTicket=New Ticket
|
||||
SubjectAnswerToTicket=Ticket answer
|
||||
TicketTypeRequest=Request type
|
||||
TicketCategory=Group
|
||||
TicketCategory=Ticket categorization
|
||||
SeeTicket=See ticket
|
||||
TicketMarkedAsRead=Ticket has been marked as read
|
||||
TicketReadOn=Read on
|
||||
@ -211,6 +213,7 @@ TicketMessageHelp=Only this text will be saved in the message list on ticket car
|
||||
TicketMessageSubstitutionReplacedByGenericValues=Substitutions variables are replaced by generic values.
|
||||
TimeElapsedSince=Time elapsed since
|
||||
TicketTimeToRead=Time elapsed before read
|
||||
TicketTimeElapsedBeforeSince=Time elapsed before / since
|
||||
TicketContacts=Contacts ticket
|
||||
TicketDocumentsLinked=Documents linked to ticket
|
||||
ConfirmReOpenTicket=Confirm reopen this ticket ?
|
||||
|
||||
@ -97,8 +97,8 @@ LoginToCreate=Login to create
|
||||
NameToCreate=Name of third party to create
|
||||
YourRole=Your roles
|
||||
YourQuotaOfUsersIsReached=Your quota of active users is reached !
|
||||
NbOfUsers=No. of users
|
||||
NbOfPermissions=No. of permissions
|
||||
NbOfUsers=Number of users
|
||||
NbOfPermissions=Number of permissions
|
||||
DontDowngradeSuperAdmin=Only a superadmin can downgrade a superadmin
|
||||
HierarchicalResponsible=Supervisor
|
||||
HierarchicView=Hierarchical view
|
||||
|
||||
@ -31,7 +31,7 @@ AddWebsite=Add website
|
||||
Webpage=Web page/container
|
||||
AddPage=Add page/container
|
||||
PageContainer=Page
|
||||
PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
PreviewOfSiteNotYetAvailable=The preview of your website <strong>%s</strong> is not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
|
||||
RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
|
||||
SiteDeleted=Web site '%s' deleted
|
||||
PageContent=Page/Contenair
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user