From 3036c94198d039e1ebc76c43928f3619d670172f Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Tue, 7 Aug 2018 15:18:42 +0200 Subject: [PATCH 0001/1148] Add new situation retained warranty field --- htdocs/admin/facture_situation.php | 181 ++++++++++++++++++ htdocs/compta/facture/class/facture.class.php | 18 +- htdocs/core/lib/invoice.lib.php | 9 +- .../install/mysql/migration/8.0.0-9.0.0.sql | 5 + htdocs/install/mysql/tables/llx_facture.sql | 2 + htdocs/langs/en_US/bills.lang | 4 + 6 files changed, 215 insertions(+), 4 deletions(-) create mode 100644 htdocs/admin/facture_situation.php diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php new file mode 100644 index 00000000000..cfee53da5f5 --- /dev/null +++ b/htdocs/admin/facture_situation.php @@ -0,0 +1,181 @@ + + * Copyright (C) 2004-2011 Laurent Destailleur + * Copyright (C) 2005 Eric Seigne + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2008 Raphael Bertrand (Resultic) + * Copyright (C) 2012-2013 Juanjo Menent + * Copyright (C) 2014 Teddy Andreotti <125155@supinfo.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 . + */ + +/** + * \file htdocs/admin/facture.php + * \ingroup facture + * \brief Page to setup invoice module + */ + +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array('admin', 'errors', 'other', 'bills')); + +if (! $user->admin) accessforbidden(); + +$action = GETPOST('action','alpha'); +$value = GETPOST('value','alpha'); +$label = GETPOST('label','alpha'); +$scandir = GETPOST('scan_dir','alpha'); +$type='invoice'; + + +/* + * Actions + */ + +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; + + + +/* + * View + */ + +$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); + +llxHeader("",$langs->trans("BillsSetup"),'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); + +$form=new Form($db); + + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); + +$head = invoice_admin_prepare_head(); +dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoice'); + +/* + * Numbering module + */ + +print load_fiche_titre($langs->trans("InvoiceSituation"),'',''); +$var=0; +print ''; + + +_print_on_off('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); +_print_on_off('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); +_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARANTY',$langs->trans('Retainedwarranty')); + +$metas = array( + 'type' => 'number', + 'step' => '0.01', + 'min' => 0, + 'max' => 100 +); +_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); + + + + +dol_fiche_end(); + +// End of page +llxFooter(); +$db->close(); + +function _print_on_off($confkey, $title = false, $desc ='') +{ + global $var, $bc, $langs, $conf; + $var=!$var; + + print ''; + print ''; + print ''; + print ''; +} + + +function _print_input_form_part($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) +{ + global $var, $bc, $langs, $conf, $db; + $var=!$var; + + $form=new Form($db); + + $defaultMetas = array( + 'name' => $confkey + ); + + if($type!='textarea'){ + $defaultMetas['type'] = 'text'; + $defaultMetas['value'] = $conf->global->{$confkey}; + } + + + $metas = array_merge ($defaultMetas, $metas); + $metascompil = ''; + foreach ($metas as $key => $values) + { + $metascompil .= ' '.$key.'="'.$values.'" '; + } + + print ''; + print ''; + print ''; + print ''; +} diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 4edce36b82f..418339a0383 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -160,6 +160,9 @@ class Facture extends CommonInvoice public $tab_next_situation_invoice=array(); public $oldcopy; + + + public $retained_waranty; /** * Standard invoice @@ -339,6 +342,8 @@ class Facture extends CommonInvoice $this->note_public=trim($this->note_public); $this->note_private=trim($this->note_private); $this->note_private=dol_concatdesc($this->note_private, $langs->trans("GeneratedFromRecurringInvoice", $_facrec->ref)); + + $this->retained_waranty = floatval($this->retained_waranty); $this->array_options=$_facrec->array_options; @@ -426,6 +431,7 @@ class Facture extends CommonInvoice $sql.= ", fk_multicurrency"; $sql.= ", multicurrency_code"; $sql.= ", multicurrency_tx"; + $sql.= ", retained_waranty"; $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; @@ -458,6 +464,8 @@ class Facture extends CommonInvoice $sql.= ", ".(int) $this->fk_multicurrency; $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; + $sql.= ", ".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); + $sql.=")"; $resql=$this->db->query($sql); @@ -1276,6 +1284,7 @@ class Facture extends CommonInvoice $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', f.fk_incoterms, f.location_incoterms'; $sql.= ", i.libelle as libelle_incoterms"; + $sql.= ", f.retained_waranty as retained_waranty"; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as c ON f.fk_cond_reglement = c.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON f.fk_mode_reglement = p.id'; @@ -1343,9 +1352,9 @@ class Facture extends CommonInvoice $this->situation_cycle_ref = $obj->situation_cycle_ref; $this->situation_counter = $obj->situation_counter; $this->situation_final = $obj->situation_final; + $this->retained_waranty = $obj->retained_waranty; $this->extraparams = (array) json_decode($obj->extraparams, true); - - //Incoterms + // Incoterms $this->fk_incoterms = $obj->fk_incoterms; $this->location_incoterms = $obj->location_incoterms; $this->libelle_incoterms = $obj->libelle_incoterms; @@ -1569,7 +1578,9 @@ class Facture extends CommonInvoice if (isset($this->note_public)) $this->note_public=trim($this->note_public); if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf); if (isset($this->import_key)) $this->import_key=trim($this->import_key); - + if (isset($this->retained_waranty)) $this->retained_waranty = floatval($this->retained_waranty); + + // Check parameters // Put here code to add control on parameters values @@ -1610,6 +1621,7 @@ class Facture extends CommonInvoice $sql.= " situation_cycle_ref=".(empty($this->situation_cycle_ref)?"null":$this->db->escape($this->situation_cycle_ref)).","; $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)); + $sql.= " retained_waranty=".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); $sql.= " WHERE rowid=".$this->id; $this->db->begin(); diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php index 4e7fa860529..c4ecbacf6e7 100644 --- a/htdocs/core/lib/invoice.lib.php +++ b/htdocs/core/lib/invoice.lib.php @@ -136,7 +136,14 @@ function invoice_admin_prepare_head() $head[$h][1] = $langs->trans("Payments"); $head[$h][2] = 'payment'; $h++; - + + if($conf->global->INVOICE_USE_SITUATION){ + $head[$h][0] = DOL_URL_ROOT.'/admin/facture_situation.php'; + $head[$h][1] = $langs->trans("InvoiceSituation"); + $head[$h][2] = 'situation'; + $h++; + } + // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql index be072b8bacb..2a429fc7765 100644 --- a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql @@ -50,3 +50,8 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204); ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after amount; + +ALTER TABLE llx_facture ADD COLUMN retained_waranty real DEFAULT NULL after situation_final; + + + diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index c0783a7bbd8..decd48f46bc 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -86,6 +86,8 @@ create table llx_facture situation_counter smallint, -- situation counter situation_final smallint, -- is the situation final ? + retained_waranty real DEFAULT NULL, -- % of retained warranty + import_key varchar(14), extraparams varchar(255), -- for other parameters with json format diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 54194358748..94f0786343e 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -211,6 +211,10 @@ ShowInvoiceReplace=Show replacing invoice ShowInvoiceAvoir=Show credit note ShowInvoiceDeposit=Show down payment invoice ShowInvoiceSituation=Show situation invoice +UseSituationInvoices=Allow situation invoice +UseSituationInvoicesCreditNote=Allow situation invoice credit note +Retainedwarranty=Retained warranty +RetainedwarrantyDefaultPercent=Retained warranty default percent ShowPayment=Show payment AlreadyPaid=Already paid AlreadyPaidBack=Already paid back From 06be98c63855797f67508dec6177795e2cf5b177 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Wed, 8 Aug 2018 17:36:39 +0200 Subject: [PATCH 0002/1148] add date field --- htdocs/admin/facture_situation.php | 4 +- htdocs/compta/facture/card.php | 96 ++++++++++++++++ htdocs/compta/facture/class/facture.class.php | 104 ++++++++++++++++-- .../install/mysql/migration/8.0.0-9.0.0.sql | 4 +- htdocs/install/mysql/tables/llx_facture.sql | 3 +- htdocs/langs/en_US/bills.lang | 2 + 6 files changed, 199 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index cfee53da5f5..ad6f858df20 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -81,7 +81,7 @@ print '
'.($title?$title:$langs->trans($confkey)); + if(!empty($desc)) + { + print '
'.$langs->trans($desc).''; + } + print '
 '; + print '
'; + print ''; + print ''; + print ajax_constantonoff($confkey); + print '
'; + print '
'; + + if(!empty($help)){ + print $form->textwithtooltip( ($title?$title:$langs->trans($confkey)) , $langs->trans($help),2,1,img_help(1,'')); + } + else { + print $title?$title:$langs->trans($confkey); + } + + if(!empty($desc)) + { + print '
'.$langs->trans($desc).''; + } + + print '
 '; + print '
'; + print ''; + print ''; + if($type=='textarea'){ + print ''; + } + else { + print ''; + } + + print ''; + print '
'; + print '
'; _print_on_off('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); _print_on_off('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); -_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARANTY',$langs->trans('Retainedwarranty')); +_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); $metas = array( 'type' => 'number', @@ -89,7 +89,7 @@ $metas = array( 'min' => 0, 'max' => 100 ); -_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); +_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index e411f8c5b1b..6415ef4cdcd 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -288,6 +288,23 @@ if (empty($reshook)) if ($result < 0) dol_print_error($db, $object->error); } + + else if ($action == 'setretainedwarranty' && $user->rights->facture->creer) + { + $object->fetch($id); + $result = $object->setRetainedWarranty(GETPOST('retained_warranty', 'float')); + if ($result < 0) + dol_print_error($db, $object->error); + } + + else if ($action == 'setretainedwarrantydatelimit' && $user->rights->facture->creer) + { + $object->fetch($id); + $result = $object->setRetainedWarrantyDateLimit(GETPOST('retained_warranty_date_limit', 'float')); + if ($result < 0) + dol_print_error($db, $object->error); + } + // Multicurrency Code else if ($action == 'setmulticurrencycode' && $user->rights->facture->creer) { @@ -1152,6 +1169,7 @@ if (empty($reshook)) $object->situation_counter = 1; $object->situation_final = 0; $object->situation_cycle_ref = $object->newCycle(); + $object->retained_warranty = !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)?$conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY:0; } $object->fetch_thirdparty(); @@ -3919,6 +3937,70 @@ else if ($id > 0 || ! empty($ref)) print ''; } + + if($object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) + { + // Retained Warranty + print ''; + + + // Retained Warranty payment date limit + print ''; + } + + // Other attributes $cols = 2; include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; @@ -4360,6 +4442,20 @@ else if ($id > 0 || ! empty($ref)) // Billed print ''; + if(!empty($object->retained_warranty)){ + // Billed - retained warranty + $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; + $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; + print ''; + + // retained warranty + print ''; + + } + // Remainder to pay print ''; print ''; print ''; - print ''; } function _print_input_form_part($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) { - global $var, $bc, $langs, $conf, $db; + global $var, $bc, $langs, $conf, $db, $inputCount; $var=!$var; - + $inputCount = empty($inputCount)?1:($inputCount+1); $form=new Form($db); $defaultMetas = array( - 'name' => $confkey + 'name' => 'value'.$inputCount ); if($type!='textarea'){ @@ -165,17 +190,14 @@ function _print_input_form_part($confkey, $title = false, $desc ='', $metas = ar print ''; print ''; print ''; } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 6415ef4cdcd..c9e14304954 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -289,6 +289,21 @@ if (empty($reshook)) dol_print_error($db, $object->error); } + else if ($action == 'setretainedwarrantyconditions' && $user->rights->facture->creer) + { + $object->fetch($id); + $object->retained_warranty_fk_cond_reglement = 0; // To clean property + $result = $object->setRetainedWarrantyPaymentTerms(GETPOST('retained_warranty_fk_cond_reglement', 'int')); + if ($result < 0) dol_print_error($db, $object->error); + + $old_rw_date_lim_reglement = $object->retained_warranty_date_limit; + $new_rw_date_lim_reglement = $object->calculate_date_lim_reglement($object->retained_warranty_fk_cond_reglement); + if ($new_rw_date_lim_reglement > $old_rw_date_lim_reglement) $object->retained_warranty_date_limit = $new_rw_date_lim_reglement; + if ($object->retained_warranty_date_limit < $object->date) $object->retained_warranty_date_limit = $object->date; + $result = $object->update($user); + if ($result < 0) dol_print_error($db, $object->error); + } + else if ($action == 'setretainedwarranty' && $user->rights->facture->creer) { $object->fetch($id); @@ -877,7 +892,7 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - + // Proprietes particulieres a facture de remplacement $object->fk_facture_source = $_POST['fac_replacement']; $object->type = Facture::TYPE_REPLACEMENT; @@ -1163,13 +1178,25 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); + + + if (GETPOST('type') == Facture::TYPE_SITUATION) { $object->situation_counter = 1; $object->situation_final = 0; $object->situation_cycle_ref = $object->newCycle(); - $object->retained_warranty = !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)?$conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY:0; + + + $object->retained_warranty = GETPOST('retained_warranty', 'int'); + $object->retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); + + $retained_warranty_date_limit = GETPOST('retained_warranty_date_limit'); + if(!empty($retained_warranty_date_limit) && $db->jdate($retained_warranty_date_limit)){ + $object->retained_warranty_date_limit = $db->jdate($retained_warranty_date_limit); + } + $object->retained_warranty_date_limit = !empty($object->retained_warranty_date_limit) ? $object->retained_warranty_date_limit : $object->calculate_date_lim_reglement($object->retained_warranty_fk_cond_reglement); } $object->fetch_thirdparty(); @@ -1583,7 +1610,7 @@ if (empty($reshook)) $object->mode_reglement_id = GETPOST('mode_reglement_id','int'); $object->remise_absolue = GETPOST('remise_absolue','int'); $object->remise_percent = GETPOST('remise_percent','int'); - + // Proprietes particulieres a facture de remplacement $object->situation_counter = $object->situation_counter + 1; @@ -3082,6 +3109,44 @@ if ($action == 'create') print ''; + + if (! empty($conf->global->INVOICE_USE_SITUATION)) + { + if($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY){ + + $rwStyle = 'display:none;'; + if(GETPOST('type', 'int') == Facture::TYPE_SITUATION){ + $rwStyle = ''; + } + + + $retained_warranty = GETPOST('retained_warranty', 'int'); + $retained_warranty = !empty($retained_warranty)?$retained_warranty:$conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT; + print ''; + + print ''; + } + } // Payment mode print ''; } - - if($object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) + $displayWarranty = false; + if( !empty($object->situation_final) + && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) + ) { + // Check if this situation invoice is 100% for real + if(!empty($object->lines)){ + $displayWarranty = true; + foreach( $object->lines as $i => $line ){ + if($line->product_type < 2 && $line->situation_percent < 100){ + $displayWarranty = false; + break; + } + } + } + + + // Retained Warranty - print ''; @@ -1075,7 +1075,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index fe017a6b1aa..a960c703eba 100644 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -548,7 +548,7 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error) '; $filename=dol_sanitizeFileName($objp->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($objp->ref); + $filedir=$conf->commande->multidir_output[$objp->entity] . '/' . dol_sanitizeFileName($objp->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$objp->rowid; print $formfile->getDocumentsLink($generic_commande->element, $filename, $filedir); print '
'; + print ''; + if ($action != 'editretainedwarranty' && $user->rights->facture->creer){ + print ''; + } + + print '
'; + print $langs->trans('RetainedWarranty'); + print 'id . '">' . img_edit($langs->trans('setretainedwarranty'), 1) . '
'; + print '
'; + if ($action == 'editretainedwarranty') + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + else + { + print price($object->retained_warranty).'%'; + } + print '
'; + print ''; + if ($action != 'editretainedwarrantydatelimit' && $user->rights->facture->creer){ + print ''; + } + + print '
'; + print $langs->trans('RetainedWarrantyDateLimit'); + print 'id . '">' . img_edit($langs->trans('setretainedwarrantyDateLimit'), 1) . '
'; + print '
'; + $defaultDate = !empty($object->retained_warranty_date_limit)?$object->retained_warranty_date_limit:strtotime('-1 years', $object->date_lim_reglement); + if($object->date > $defaultDate){ + $defaultDate = $object->date; + } + + if ($action == 'editretainedwarrantydatelimit') + { + //date('Y-m-d',$object->date_lim_reglement) + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + else + { + print dol_print_date($defaultDate); + } + print '
' . $langs->trans("Billed") . ' :' . price($object->total_ttc) . ' 
' . $langs->trans("ToPayOn", dol_print_date($object->date_lim_reglement)) . ' :' . price($billedWithRetainedWarranty) . ' 
'; + print $langs->trans("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; + print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit)):''; + print ' :' . price($retainedWarranty) . ' 
'; if ($resteapayeraffiche >= 0) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 418339a0383..9c387f6630a 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -162,7 +162,9 @@ class Facture extends CommonInvoice public $oldcopy; - public $retained_waranty; + public $retained_warranty; + + public $retained_warranty_date_limit; /** * Standard invoice @@ -343,7 +345,7 @@ class Facture extends CommonInvoice $this->note_private=trim($this->note_private); $this->note_private=dol_concatdesc($this->note_private, $langs->trans("GeneratedFromRecurringInvoice", $_facrec->ref)); - $this->retained_waranty = floatval($this->retained_waranty); + $this->retained_warranty = floatval($this->retained_warranty); $this->array_options=$_facrec->array_options; @@ -431,7 +433,8 @@ class Facture extends CommonInvoice $sql.= ", fk_multicurrency"; $sql.= ", multicurrency_code"; $sql.= ", multicurrency_tx"; - $sql.= ", retained_waranty"; + $sql.= ", retained_warranty"; + $sql.= ", retained_warranty_date_limit"; $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; @@ -464,7 +467,8 @@ class Facture extends CommonInvoice $sql.= ", ".(int) $this->fk_multicurrency; $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; - $sql.= ", ".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); + $sql.= ", ".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)); + $sql.= ", '".$this->db->idate($this->retained_warranty_date_limit)."'"; $sql.=")"; @@ -1284,7 +1288,7 @@ class Facture extends CommonInvoice $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', f.fk_incoterms, f.location_incoterms'; $sql.= ", i.libelle as libelle_incoterms"; - $sql.= ", f.retained_waranty as retained_waranty"; + $sql.= ", f.retained_warranty as retained_warranty, f.retained_warranty_date_limit as retained_warranty_date_limit"; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as c ON f.fk_cond_reglement = c.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON f.fk_mode_reglement = p.id'; @@ -1352,7 +1356,9 @@ class Facture extends CommonInvoice $this->situation_cycle_ref = $obj->situation_cycle_ref; $this->situation_counter = $obj->situation_counter; $this->situation_final = $obj->situation_final; - $this->retained_waranty = $obj->retained_waranty; + $this->retained_warranty = $obj->retained_warranty; + $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); + $this->extraparams = (array) json_decode($obj->extraparams, true); // Incoterms $this->fk_incoterms = $obj->fk_incoterms; @@ -1578,7 +1584,7 @@ class Facture extends CommonInvoice if (isset($this->note_public)) $this->note_public=trim($this->note_public); if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf); if (isset($this->import_key)) $this->import_key=trim($this->import_key); - if (isset($this->retained_waranty)) $this->retained_waranty = floatval($this->retained_waranty); + if (isset($this->retained_warranty)) $this->retained_warranty = floatval($this->retained_warranty); // Check parameters @@ -1620,8 +1626,9 @@ class Facture extends CommonInvoice $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").","; $sql.= " situation_cycle_ref=".(empty($this->situation_cycle_ref)?"null":$this->db->escape($this->situation_cycle_ref)).","; $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; - $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)); - $sql.= " retained_waranty=".(empty($this->retained_waranty)?"0":$this->db->escape($this->retained_waranty)); + $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)).","; + $sql.= " retained_warranty=".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)).","; + $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null'); $sql.= " WHERE rowid=".$this->id; $this->db->begin(); @@ -4226,6 +4233,85 @@ class Facture extends CommonInvoice return $this->date_lim_reglement < ($now - $conf->facture->client->warning_delay); } + + + /** + * Change the retained warranty + * + * @param float $value value of retained warranty + * @return int >0 if OK, <0 if KO + */ + function setRetainedWarranty($value) + { + dol_syslog(get_class($this).'::setRetainedWarranty('.$value.')'); + if ($this->statut >= 0) + { + $fieldname = 'retained_warranty'; + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; + $sql .= ' SET '.$fieldname.' = '.floatval($value); + $sql .= ' WHERE rowid='.$this->id; + + if ($this->db->query($sql)) + { + $this->retained_warranty = floatval($value); + return 1; + } + else + { + dol_syslog(get_class($this).'::setRetainedWarranty Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog(get_class($this).'::setRetainedWarranty, status of the object is incompatible'); + $this->error='Status of the object is incompatible '.$this->statut; + return -2; + } + } + + + /** + * Change the retained_warranty_date_limit + * + * @param timestamp $value value of retained warranty + * @return int >0 if OK, <0 if KO + */ + function setRetainedWarrantyDateLimit($timestamp,$dateYmd=false) + { + if(!$timestamp && $dateYmd){ + $timestamp = $this->db->jdate($dateYmd); + } + + + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$value.')'); + if ($this->statut >= 0) + { + $fieldname = 'retained_warranty_date_limit'; + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; + $sql .= ' SET '.$fieldname.' = '.(strval($timestamp)!='' ? '\'' .$this->db->idate($timestamp).'\'' : 'null' ); + $sql .= ' WHERE rowid='.$this->id; + + if ($this->db->query($sql)) + { + $this->retained_warranty_date_limit = $timestamp; + return 1; + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit, status of the object is incompatible'); + $this->error='Status of the object is incompatible '.$this->statut; + return -2; + } + } } /** diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql index 2a429fc7765..fb7db220138 100644 --- a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql @@ -51,7 +51,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after amount; -ALTER TABLE llx_facture ADD COLUMN retained_waranty real DEFAULT NULL after situation_final; - +ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; +ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index decd48f46bc..abdefedc944 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -86,7 +86,8 @@ create table llx_facture situation_counter smallint, -- situation counter situation_final smallint, -- is the situation final ? - retained_waranty real DEFAULT NULL, -- % of retained warranty + retained_warranty real DEFAULT NULL, -- % of retained warranty + retained_warranty_date_limit date DEFAULT NULL, import_key varchar(14), extraparams varchar(255), -- for other parameters with json format diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 94f0786343e..c547f385be0 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -550,3 +550,5 @@ AutoFillDateFromShort=Set start date AutoFillDateTo=Set end date for service line with next invoice date AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached +ToPayOn=To pay on %s +RetainedWarranty=Retained Warranty From d6d8f98f38f01930958654f6d720f478c60c88b5 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 10 Aug 2018 15:06:00 +0200 Subject: [PATCH 0003/1148] add retained warranty cond field and add forms --- htdocs/admin/facture_situation.php | 54 ++++-- htdocs/compta/facture/card.php | 169 +++++++++++++++--- htdocs/compta/facture/class/facture.class.php | 23 ++- htdocs/core/class/commonobject.class.php | 37 ++++ .../install/mysql/migration/8.0.0-9.0.0.sql | 1 + htdocs/install/mysql/tables/llx_facture.sql | 5 +- htdocs/langs/en_US/bills.lang | 7 + 7 files changed, 248 insertions(+), 48 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index ad6f858df20..dc3ec771b16 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -76,6 +76,12 @@ dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoi print load_fiche_titre($langs->trans("InvoiceSituation"),'',''); $var=0; + +print '
'; +print ''; + +_updateBtn(); + print ''; @@ -94,17 +100,40 @@ _print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$la +// Conditions paiements +$inputCount = empty($inputCount)?1:($inputCount+1); +print ''; +print ''; +print ''; +print ''; + + +print '
'.$langs->trans('PaymentConditionsShortRetainedWarranty').' '; +print ''; +$form->select_conditions_paiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'value'.$inputCount, -1, 1); +print '
'; + +_updateBtn(); + +print '
'; + dol_fiche_end(); // End of page llxFooter(); $db->close(); +function _updateBtn(){ + global $langs; + print '
'; + print ''; + print '
'; +} + function _print_on_off($confkey, $title = false, $desc ='') { - global $var, $bc, $langs, $conf; + global $var, $bc, $langs; $var=!$var; - print '
'.($title?$title:$langs->trans($confkey)); if(!empty($desc)) @@ -113,25 +142,21 @@ function _print_on_off($confkey, $title = false, $desc ='') } print ' '; - print '
'; - print ''; - print ''; + print '
'; print ajax_constantonoff($confkey); - print ''; print '
 '; - print '
'; - print ''; - print ''; + print ''; + + print ''; if($type=='textarea'){ print ''; } else { print ''; } - - print ''; - print '
'; print '
' . $langs->trans('PaymentConditionsShort') . ''; $form->select_conditions_paiements(isset($_POST['cond_reglement_id']) ? $_POST['cond_reglement_id'] : $cond_reglement_id, 'cond_reglement_id'); print '
' . $langs->trans('RetainedWarranty') . ''; + print '%'; + + // Retained warranty payment term + print '
' . $langs->trans('PaymentConditionsShortRetainedWarranty') . ''; + $retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); + $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID; + $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement'); + print '
' . $langs->trans('PaymentMode') . ''; @@ -3937,12 +4002,27 @@ else if ($id > 0 || ! empty($ref)) print '
'; - print '
'; + print '
'; + print ''; if ($action != 'editretainedwarranty' && $user->rights->facture->creer){ @@ -3953,7 +4033,7 @@ else if ($id > 0 || ! empty($ref)) print ''; - - // Retained Warranty payment date limit - print '
'; print $langs->trans('RetainedWarranty'); print ''; if ($action == 'editretainedwarranty') { - print '
'; + print ''; print ''; print ''; print ''; @@ -3966,14 +4046,13 @@ else if ($id > 0 || ! empty($ref)) } print '
'; - print ''; + + + + + if($displayWarranty) + { + // Retained Warranty payment date limit + print ''; + } + } @@ -4442,16 +4566,17 @@ else if ($id > 0 || ! empty($ref)) // Billed print ''; - if(!empty($object->retained_warranty)){ + // Retained warranty : usualy use on construction industry + if(!empty($object->situation_final) && !empty($object->retained_warranty) && $displayWarranty){ // Billed - retained warranty $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; - print ''; + print ''; // retained warranty print ''; } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 9c387f6630a..e108b526576 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -165,6 +165,8 @@ class Facture extends CommonInvoice public $retained_warranty; public $retained_warranty_date_limit; + + public $retained_warranty_fk_cond_reglement; /** * Standard invoice @@ -345,8 +347,8 @@ class Facture extends CommonInvoice $this->note_private=trim($this->note_private); $this->note_private=dol_concatdesc($this->note_private, $langs->trans("GeneratedFromRecurringInvoice", $_facrec->ref)); - $this->retained_warranty = floatval($this->retained_warranty); + $this->array_options=$_facrec->array_options; //if (! $this->remise) $this->remise = 0; @@ -356,6 +358,7 @@ class Facture extends CommonInvoice $this->linked_objects = $_facrec->linkedObjectsIds; $forceduedate = $this->calculate_date_lim_reglement(); + // For recurring invoices, update date and number of last generation of recurring template invoice, before inserting new invoice if ($_facrec->frequency > 0) @@ -407,7 +410,7 @@ class Facture extends CommonInvoice // Define due date if not already defined $datelim=(empty($forceduedate)?$this->calculate_date_lim_reglement():$forceduedate); - + // Insert into database $socid = $this->socid; @@ -435,6 +438,7 @@ class Facture extends CommonInvoice $sql.= ", multicurrency_tx"; $sql.= ", retained_warranty"; $sql.= ", retained_warranty_date_limit"; + $sql.= ", retained_warranty_fk_cond_reglement"; $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; @@ -468,10 +472,11 @@ class Facture extends CommonInvoice $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; $sql.= ", ".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)); - $sql.= ", '".$this->db->idate($this->retained_warranty_date_limit)."'"; + $sql.= ", ".(!empty($this->retained_warranty_date_limit)?"'".$this->db->idate($this->retained_warranty_date_limit)."'":'NULL'); + $sql.= ", ".(int) $this->retained_warranty_fk_cond_reglement; $sql.=")"; - + $resql=$this->db->query($sql); if ($resql) { @@ -1288,7 +1293,7 @@ class Facture extends CommonInvoice $sql.= ', c.code as cond_reglement_code, c.libelle as cond_reglement_libelle, c.libelle_facture as cond_reglement_libelle_doc'; $sql.= ', f.fk_incoterms, f.location_incoterms'; $sql.= ", i.libelle as libelle_incoterms"; - $sql.= ", f.retained_warranty as retained_warranty, f.retained_warranty_date_limit as retained_warranty_date_limit"; + $sql.= ", f.retained_warranty as retained_warranty, f.retained_warranty_date_limit as retained_warranty_date_limit, f.retained_warranty_fk_cond_reglement as retained_warranty_fk_cond_reglement"; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as c ON f.fk_cond_reglement = c.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON f.fk_mode_reglement = p.id'; @@ -1356,8 +1361,9 @@ class Facture extends CommonInvoice $this->situation_cycle_ref = $obj->situation_cycle_ref; $this->situation_counter = $obj->situation_counter; $this->situation_final = $obj->situation_final; - $this->retained_warranty = $obj->retained_warranty; - $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); + $this->retained_warranty = $obj->retained_warranty; + $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); + $this->retained_warranty_fk_cond_reglement = $obj->retained_warranty_fk_cond_reglement; $this->extraparams = (array) json_decode($obj->extraparams, true); // Incoterms @@ -1628,7 +1634,8 @@ class Facture extends CommonInvoice $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; $sql.= " situation_final=".(empty($this->situation_counter)?"0":$this->db->escape($this->situation_counter)).","; $sql.= " retained_warranty=".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)).","; - $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null'); + $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null').","; + $sql.= " retained_warranty_fk_cond_reglement=".(isset($this->retained_warranty_fk_cond_reglement)?intval($this->retained_warranty_fk_cond_reglement):"null"); $sql.= " WHERE rowid=".$this->id; $this->db->begin(); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5e528f6a1d0..37f61e01f32 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1906,6 +1906,43 @@ abstract class CommonObject return -2; } } + + /** + * Change the retained warranty payments terms + * + * @param int $id Id of new payment terms + * @return int >0 if OK, <0 if KO + */ + function setRetainedWarrantyPaymentTerms($id) + { + dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms('.$id.')'); + if ($this->statut >= 0 || $this->element == 'societe') + { + $fieldname = 'retained_warranty_fk_cond_reglement'; + + $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; + $sql .= ' SET '.$fieldname.' = '.$id; + $sql .= ' WHERE rowid='.$this->id; + + if ($this->db->query($sql)) + { + $this->retained_warranty_fk_cond_reglement = $id; + return 1; + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms Erreur '.$sql.' - '.$this->db->error()); + $this->error=$this->db->error(); + return -1; + } + } + else + { + dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms, status of the object is incompatible'); + $this->error='Status of the object is incompatible '.$this->statut; + return -2; + } + } /** * Define delivery address diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql index fb7db220138..3eb266d3559 100644 --- a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql @@ -53,5 +53,6 @@ ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after a ALTER TABLE llx_facture ADD COLUMN retained_warranty real DEFAULT NULL after situation_final; ALTER TABLE llx_facture ADD COLUMN retained_warranty_date_limit date DEFAULT NULL after retained_warranty; +ALTER TABLE llx_facture ADD COLUMN retained_warranty_fk_cond_reglement integer DEFAULT NULL after retained_warranty_date_limit; diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql index abdefedc944..f18ec0f521c 100644 --- a/htdocs/install/mysql/tables/llx_facture.sql +++ b/htdocs/install/mysql/tables/llx_facture.sql @@ -86,8 +86,9 @@ create table llx_facture situation_counter smallint, -- situation counter situation_final smallint, -- is the situation final ? - retained_warranty real DEFAULT NULL, -- % of retained warranty - retained_warranty_date_limit date DEFAULT NULL, + retained_warranty real DEFAULT NULL, -- % of retained warranty + retained_warranty_date_limit date DEFAULT NULL, + retained_warranty_fk_cond_reglement integer DEFAULT NULL, -- payment condition of retained warranty import_key varchar(14), extraparams varchar(255), -- for other parameters with json format diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index c547f385be0..c9f966b2e2a 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -552,3 +552,10 @@ AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached ToPayOn=To pay on %s RetainedWarranty=Retained Warranty +PaymentConditionsShortRetainedWarranty=Retained warranty payment terms +DefaultPaymentConditionsRetainedWarranty=Default retained warranty payment terms +setPaymentConditionsShortRetainedWarranty=Set retained warranty payment terms +setretainedwarranty=Set retained warranty +setretainedwarrantyDateLimit=Set retained warranty date limit +RetainedWarrantyDateLimit=Retained warranty date limit +RetainedWarrantyNeed100Percent=The situation invoice need to be at 100%% progress to be displayed on PDF From 6fad0ea5bd07307efb56573714b377db3bde61a9 Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 10 Aug 2018 16:03:39 +0200 Subject: [PATCH 0004/1148] Add retained warranty to pdf --- htdocs/compta/facture/card.php | 2 +- .../modules/facture/doc/pdf_crabe.modules.php | 43 +++++++++++++++++++ htdocs/langs/en_US/bills.lang | 1 + 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index c9e14304954..b1d1116e54c 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4079,7 +4079,7 @@ else if ($id > 0 || ! empty($ref)) { print $form->form_conditions_reglement($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $object->retained_warranty_fk_cond_reglement, 'none'); if(!$displayWarranty){ - print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')); + print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle" '); } } print ''; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index ba52759ea35..ad650aca9b4 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1331,6 +1331,49 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($sign * $total_ttc, 0, $outputlangs), $useborder, 'R', 1); + + // Retained warranty + if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) + { + // Check if this situation invoice is 100% for real + if(!empty($object->lines)){ + $displayWarranty = true; + foreach( $object->lines as $i => $line ){ + if($line->product_type < 2 && $line->situation_percent < 100){ + $displayWarranty = false; + break; + } + } + } + + if($displayWarranty){ + $pdf->SetTextColor(40,40,40); + $pdf->SetFillColor(255,255,255); + + $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; + $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; + + // Billed - retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("ToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + + // retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $retainedWarrantyToPayOn = $outputlangs->transnoentities("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; + $retainedWarrantyToPayOn.= !empty($object->retained_warranty_date_limit)?' '.$outputlangs->transnoentities("toPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; + + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + } + } + } } diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index c9f966b2e2a..95c1a87172a 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -551,6 +551,7 @@ AutoFillDateTo=Set end date for service line with next invoice date AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached ToPayOn=To pay on %s +toPayOn=to pay on %s RetainedWarranty=Retained Warranty PaymentConditionsShortRetainedWarranty=Retained warranty payment terms DefaultPaymentConditionsRetainedWarranty=Default retained warranty payment terms From 681ae88e97b8b3155ccdf7ffbd5072a63961314e Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Fri, 10 Aug 2018 16:59:22 +0200 Subject: [PATCH 0005/1148] fix display cond --- htdocs/compta/facture/card.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index b1d1116e54c..6f4796106c7 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4001,14 +4001,12 @@ else if ($id > 0 || ! empty($ref)) } print ''; } - + $displayWarranty = false; - if( !empty($object->situation_final) - && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) - ) + if( ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) || !empty($conf->global->INVOICE_USE_SITUATION_RETAINED_WARRANTY)) ) ) { // Check if this situation invoice is 100% for real - if(!empty($object->lines)){ + if(!empty($object->situation_final) && !empty($object->lines)){ $displayWarranty = true; foreach( $object->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ From 40369280ba330e9645d5e52835f212311e01883a Mon Sep 17 00:00:00 2001 From: John BOTELLA Date: Tue, 25 Sep 2018 12:16:16 +0200 Subject: [PATCH 0006/1148] fix allow empty selection on form conditions reglement --- htdocs/compta/facture/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 6f4796106c7..4974bcb4a39 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -3129,7 +3129,7 @@ if ($action == 'create') print ''; print ' + Date: Tue, 16 Apr 2019 16:21:32 +0200 Subject: [PATCH 0025/1148] add freetextsubstitutionexclude parameter --- htdocs/admin/contract.php | 1 + htdocs/admin/holiday.php | 1 + htdocs/core/tpl/admin_freetext.tpl.php | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php index 36236fc1b30..74df1b6af31 100644 --- a/htdocs/admin/contract.php +++ b/htdocs/admin/contract.php @@ -467,6 +467,7 @@ print "\n"; // free text $freetexttitle = $langs->trans("FreeLegalTextOnContracts"); $freetextvar = "CONTRACT_FREE_TEXT"; +$freetextsubstitutionexclude = array('objectamount'); require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); print ''; diff --git a/htdocs/admin/holiday.php b/htdocs/admin/holiday.php index ce6d390aa69..f81bf8fa4a4 100644 --- a/htdocs/admin/holiday.php +++ b/htdocs/admin/holiday.php @@ -474,6 +474,7 @@ print "\n"; // free text $freetexttitle = $langs->trans("FreeLegalTextOnHolidays"); $freetextvar = "HOLIDAY_FREE_TEXT"; +$freetextsubstitutionexclude = array('objectamount'); require_once(DOL_DOCUMENT_ROOT.'/core/tpl/admin_freetext.tpl.php'); print ''; diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index f80ce8b224e..98b83215e86 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -23,6 +23,7 @@ * $conf, $langs, $db * The following vars may also be defined: * $freetextlang + * $freetextsubstitutionexclude */ // Protection to avoid direct call of template @@ -32,7 +33,7 @@ if (empty($conf) || ! is_object($conf)) exit; } -$substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); +$substitutionarray=pdf_getSubstitutionArray($langs, $freetextsubstitutionexclude, null, 2); $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $htmltext = ''.$langs->trans("AvailableVariables").':
'; foreach($substitutionarray as $key => $val) $htmltext.=$key.'
'; From ce4b67ecaa2ecd15fdf33240867ada0f978cdf90 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Apr 2019 16:45:43 +0200 Subject: [PATCH 0026/1148] fix pagefoot --- htdocs/core/lib/pdf.lib.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 2e8d286fc26..d38d6d3f3ca 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -874,9 +874,10 @@ function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_ $dims=$pdf->getPageDimensions(); - if ( ! empty($conf->global->$paramfreetext."_".$outputlangs->defaultlang) ) + $paramfreetextlang = $paramfreetext."_".$outputlangs->defaultlang; + if ( ! empty($conf->global->$paramfreetextlang) ) { - $paramfreetext .= "_".$outputlangs->defaultlang; + $paramfreetext = $paramfreetextlang; } // Line of free text From f4cc1695f46ee3d8677c600c42ebf4e3e7d36faf Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Apr 2019 17:22:33 +0200 Subject: [PATCH 0027/1148] fix when ckeditor is not enabled --- htdocs/core/tpl/admin_freetext.tpl.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index 98b83215e86..55269b0d6fc 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -64,7 +64,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) } } -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +if (empty($conf->modFckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { print ''; } @@ -97,10 +97,10 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) $('#freetextlang').change(function() { global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) + if (empty($conf->modFckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { ?> - $('#freetext').html(freetext[$(this).val()]); + $('textarea[name=freetext]').val(freetext[$(this).val()]); Date: Tue, 16 Apr 2019 17:30:57 +0200 Subject: [PATCH 0028/1148] fix javascript --- htdocs/core/tpl/admin_freetext.tpl.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index 55269b0d6fc..d3b61ebf776 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -64,7 +64,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) } } -if (empty($conf->modFckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { print ''; } @@ -83,6 +83,8 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) { ?> Date: Tue, 16 Apr 2019 17:36:42 +0200 Subject: [PATCH 0029/1148] fix javascript --- htdocs/core/tpl/admin_freetext.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index d3b61ebf776..37d014be7d9 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -64,7 +64,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) } } -if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) +if (empty($conf->fckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { print ''; } @@ -99,7 +99,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) $('#freetextlang').change(function() { global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) + if (empty($conf->fckeditor->enabled) || empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) { ?> $('textarea[name=freetext]').val(freetext[$(this).val()]); From 79fc351cbdf204807c01e065cf5fe4e064f1a107 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Wed, 17 Apr 2019 09:26:45 +0200 Subject: [PATCH 0030/1148] credentials --- htdocs/core/actions_setfreetext.inc.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/core/actions_setfreetext.inc.php b/htdocs/core/actions_setfreetext.inc.php index 7e76a3d5a6d..deb6efd9f86 100644 --- a/htdocs/core/actions_setfreetext.inc.php +++ b/htdocs/core/actions_setfreetext.inc.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2019 Christophe Battarel * * 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 @@ -23,9 +23,7 @@ // $action must be defined -// $arrayofparameters must be set for action 'update' -// $nomessageinupdate can be set to 1 -// $nomessageinsetmoduleoptions can be set to 1 + if ($action == 'set_freetext') { $freetextvar = GETPOST("freetextvar", 'alpha'); From 0b5cb9770f68081abad703961db11f903c6ce58a Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Thu, 18 Apr 2019 09:59:39 +0200 Subject: [PATCH 0031/1148] use dol_escapa_js --- htdocs/core/tpl/admin_freetext.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_freetext.tpl.php b/htdocs/core/tpl/admin_freetext.tpl.php index 37d014be7d9..99c4f62a209 100644 --- a/htdocs/core/tpl/admin_freetext.tpl.php +++ b/htdocs/core/tpl/admin_freetext.tpl.php @@ -93,7 +93,7 @@ if (! empty($conf->global->MAIN_MULTILANGS) ) foreach ($langs_available as $key => $value) { $freetextlangvar = $freetextvar."_".$key; - print 'freetext["'.$key.'"] = "'.$conf->global->$freetextlangvar.'";'; + print 'freetext["'.$key.'"] = "'.dol_escape_js($conf->global->$freetextlangvar,2).'";'; } ?> $('#freetextlang').change(function() From b73df2698dbf7310473d40f2ad8a35c955c13c9b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 14:25:41 +0200 Subject: [PATCH 0032/1148] FIX better compatibility with Multicompany --- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/comm/propal/list.php | 2 +- htdocs/commande/card.php | 167 +++++++++--------- htdocs/commande/class/commande.class.php | 16 +- htdocs/commande/document.php | 6 +- htdocs/commande/index.php | 12 +- htdocs/commande/list.php | 8 +- htdocs/commande/orderstoinvoice.php | 4 +- htdocs/compta/facture/document.php | 2 +- htdocs/compta/facture/list.php | 2 +- htdocs/core/class/html.formfile.class.php | 2 +- htdocs/core/lib/files.lib.php | 20 +-- htdocs/core/lib/order.lib.php | 2 +- .../doc/doc_generic_order_odt.modules.php | 2 +- .../commande/doc/pdf_einstein.modules.php | 4 +- .../commande/doc/pdf_eratosthene.modules.php | 4 +- .../modules/commande/mod_commande_marbre.php | 2 +- .../modules/commande/mod_commande_saphir.php | 5 +- htdocs/support/index.php | 2 +- 19 files changed, 133 insertions(+), 131 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 0b9863f287b..4945ff63305 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1138,7 +1138,7 @@ class Propal extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $sql.= " SET fk_delivery_address = ".$this->fk_delivery_address; $sql.= " WHERE ref = '".$this->db->escape($this->ref)."'"; - $sql.= " AND entity = ".$conf->entity; + $sql.= " AND entity = ".$this->entity; $result=$this->db->query($sql); } diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index b02f788f040..01b07e0d08d 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -998,7 +998,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 05d02c487c0..32863263d7f 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -96,9 +96,17 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be inclu // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('ordercard','globalcard')); -$permissionnote = $user->rights->commande->creer; // Used by the include of actions_setnotes.inc.php -$permissiondellink = $user->rights->commande->creer; // Used by the include of actions_dellink.inc.php -$permissionedit = $user->rights->commande->creer; // Used by the include of actions_lineupdown.inc.php +$usercanread = $user->rights->commande->lire; +$usercancreate = $user->rights->commande->creer; +$usercanclose = $user->rights->commande->cloturer; +$usercandelete = $user->rights->commande->supprimer; +$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))); +$usercancancel = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->annuler))); +$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->commande->order_advance->send); + +$permissionnote = $usercancreate; // Used by the include of actions_setnotes.inc.php +$permissiondellink = $usercancreate; // Used by the include of actions_dellink.inc.php +$permissionedit = $usercancreate; // Used by the include of actions_lineupdown.inc.php /* @@ -129,7 +137,7 @@ if (empty($reshook)) include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php'; // Must be include, not include_once // Action clone object - if ($action == 'confirm_clone' && $confirm == 'yes' && $user->rights->commande->creer) + if ($action == 'confirm_clone' && $confirm == 'yes' && $usercancreate) { if (1==0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers')) { @@ -159,7 +167,7 @@ if (empty($reshook)) } // Reopen a closed order - elseif ($action == 'reopen' && $user->rights->commande->creer) + elseif ($action == 'reopen' && $usercancreate) { if ($object->statut == Commande::STATUS_CANCELED || $object->statut == Commande::STATUS_CLOSED) { @@ -176,7 +184,7 @@ if (empty($reshook)) } // Remove order - elseif ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->commande->supprimer) + elseif ($action == 'confirm_delete' && $confirm == 'yes' && $usercandelete) { $result = $object->delete($user); if ($result > 0) @@ -191,7 +199,7 @@ if (empty($reshook)) } // Remove a product line - elseif ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->commande->creer) + elseif ($action == 'confirm_deleteline' && $confirm == 'yes' && $usercancreate) { $result = $object->deleteline($user, $lineid); if ($result > 0) @@ -222,13 +230,13 @@ if (empty($reshook)) } // Link to a project - elseif ($action == 'classin' && $user->rights->commande->creer) + elseif ($action == 'classin' && $usercancreate) { $object->setProject(GETPOST('projectid', 'int')); } // Add order - elseif ($action == 'add' && $user->rights->commande->creer) + elseif ($action == 'add' && $usercancreate) { $datecommande = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $datelivraison = dol_mktime(12, 0, 0, GETPOST('liv_month'), GETPOST('liv_day'), GETPOST('liv_year')); @@ -252,6 +260,7 @@ if (empty($reshook)) $db->begin(); $object->date_commande = $datecommande; + $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->source = GETPOST('source_id'); @@ -481,7 +490,7 @@ if (empty($reshook)) } } - elseif ($action == 'classifybilled' && $user->rights->commande->creer) + elseif ($action == 'classifybilled' && $usercancreate) { $ret=$object->classifyBilled($user); @@ -489,7 +498,7 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } } - elseif ($action == 'classifyunbilled' && $user->rights->commande->creer) + elseif ($action == 'classifyunbilled' && $usercancreate) { $ret=$object->classifyUnBilled(); if ($ret < 0) { @@ -498,7 +507,7 @@ if (empty($reshook)) } // Positionne ref commande client - elseif ($action == 'setref_client' && $user->rights->commande->creer) { + elseif ($action == 'setref_client' && $usercancreate) { $result = $object->set_ref_client($user, GETPOST('ref_client')); if ($result < 0) { @@ -506,7 +515,7 @@ if (empty($reshook)) } } - elseif ($action == 'setremise' && $user->rights->commande->creer) { + elseif ($action == 'setremise' && $usercancreate) { $result = $object->set_remise($user, GETPOST('remise')); if ($result < 0) { @@ -514,7 +523,7 @@ if (empty($reshook)) } } - elseif ($action == 'setabsolutediscount' && $user->rights->commande->creer) { + elseif ($action == 'setabsolutediscount' && $usercancreate) { if (GETPOST('remise_id')) { if ($object->id > 0) { $object->insert_discount(GETPOST('remise_id')); @@ -524,7 +533,7 @@ if (empty($reshook)) } } - elseif ($action == 'setdate' && $user->rights->commande->creer) { + elseif ($action == 'setdate' && $usercancreate) { // print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year']; $date = dol_mktime(0, 0, 0, GETPOST('order_month'), GETPOST('order_day'), GETPOST('order_year')); @@ -534,7 +543,7 @@ if (empty($reshook)) } } - elseif ($action == 'setdate_livraison' && $user->rights->commande->creer) { + elseif ($action == 'setdate_livraison' && $usercancreate) { // print "x ".$_POST['liv_month'].", ".$_POST['liv_day'].", ".$_POST['liv_year']; $datelivraison = dol_mktime(0, 0, 0, GETPOST('liv_month'), GETPOST('liv_day'), GETPOST('liv_year')); @@ -544,35 +553,35 @@ if (empty($reshook)) } } - elseif ($action == 'setmode' && $user->rights->commande->creer) { + elseif ($action == 'setmode' && $usercancreate) { $result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } // Multicurrency Code - elseif ($action == 'setmulticurrencycode' && $user->rights->commande->creer) { + elseif ($action == 'setmulticurrencycode' && $usercancreate) { $result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha')); } // Multicurrency rate - elseif ($action == 'setmulticurrencyrate' && $user->rights->commande->creer) { + elseif ($action == 'setmulticurrencyrate' && $usercancreate) { $result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx'))); } - elseif ($action == 'setavailability' && $user->rights->commande->creer) { + elseif ($action == 'setavailability' && $usercancreate) { $result = $object->availability(GETPOST('availability_id')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } - elseif ($action == 'setdemandreason' && $user->rights->commande->creer) { + elseif ($action == 'setdemandreason' && $usercancreate) { $result = $object->demand_reason(GETPOST('demand_reason_id')); if ($result < 0) setEventMessages($object->error, $object->errors, 'errors'); } - elseif ($action == 'setconditions' && $user->rights->commande->creer) { + elseif ($action == 'setconditions' && $usercancreate) { $result = $object->setPaymentTerms(GETPOST('cond_reglement_id', 'int')); if ($result < 0) { dol_print_error($db, $object->error); @@ -604,7 +613,7 @@ if (empty($reshook)) } // bank account - elseif ($action == 'setbankaccount' && $user->rights->commande->creer) { + elseif ($action == 'setbankaccount' && $usercancreate) { $result=$object->setBankAccount(GETPOST('fk_account', 'int')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); @@ -612,7 +621,7 @@ if (empty($reshook)) } // shipping method - elseif ($action == 'setshippingmethod' && $user->rights->commande->creer) { + elseif ($action == 'setshippingmethod' && $usercancreate) { $result = $object->setShippingMethod(GETPOST('shipping_method_id', 'int')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); @@ -620,23 +629,23 @@ if (empty($reshook)) } // warehouse - elseif ($action == 'setwarehouse' && $user->rights->commande->creer) { + elseif ($action == 'setwarehouse' && $usercancreate) { $result = $object->setWarehouse(GETPOST('warehouse_id', 'int')); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } - elseif ($action == 'setremisepercent' && $user->rights->commande->creer) { + elseif ($action == 'setremisepercent' && $usercancreate) { $result = $object->set_remise($user, GETPOST('remise_percent')); } - elseif ($action == 'setremiseabsolue' && $user->rights->commande->creer) { + elseif ($action == 'setremiseabsolue' && $usercancreate) { $result = $object->set_remise_absolue($user, GETPOST('remise_absolue')); } // Add a new line - elseif ($action == 'addline' && $user->rights->commande->creer) + elseif ($action == 'addline' && $usercancreate) { $langs->load('errors'); $error = 0; @@ -999,7 +1008,7 @@ if (empty($reshook)) /* * Update a line */ - elseif ($action == 'updateline' && $user->rights->commande->creer && GETPOST('save')) + elseif ($action == 'updateline' && $usercancreate && GETPOST('save')) { // Clean parameters $date_start=''; @@ -1133,15 +1142,12 @@ if (empty($reshook)) setEventMessages($object->error, $object->errors, 'errors'); } } - } elseif ($action == 'updateline' && $user->rights->commande->creer && GETPOST('cancel', 'alpha') == $langs->trans('Cancel')) { + } elseif ($action == 'updateline' && $usercancreate && GETPOST('cancel', 'alpha') == $langs->trans('Cancel')) { header('Location: ' . $_SERVER['PHP_SELF'] . '?id=' . $object->id); // Pour reaffichage de la fiche en cours d'edition exit(); } - elseif ($action == 'confirm_validate' && $confirm == 'yes' && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))) - ) + elseif ($action == 'confirm_validate' && $confirm == 'yes' && $usercanvalidate) { $idwarehouse = GETPOST('idwarehouse'); @@ -1195,7 +1201,7 @@ if (empty($reshook)) } // Go back to draft status - elseif ($action == 'confirm_modif' && $user->rights->commande->creer) { + elseif ($action == 'confirm_modif' && $usercancreate) { $idwarehouse = GETPOST('idwarehouse'); $qualified_for_stock_change=0; @@ -1243,17 +1249,14 @@ if (empty($reshook)) } } - elseif ($action == 'confirm_shipped' && $confirm == 'yes' && $user->rights->commande->cloturer) { + elseif ($action == 'confirm_shipped' && $confirm == 'yes' && $usercanclose) { $result = $object->cloture($user); if ($result < 0) { setEventMessages($object->error, $object->errors, 'errors'); } } - elseif ($action == 'confirm_cancel' && $confirm == 'yes' && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))) - ) + elseif ($action == 'confirm_cancel' && $confirm == 'yes' && $usercanvalidate) { $idwarehouse = GETPOST('idwarehouse'); @@ -1310,7 +1313,7 @@ if (empty($reshook)) if ($error) $action = 'edit_extras'; } - if ($action == 'set_thirdparty' && $user->rights->commande->creer) + if ($action == 'set_thirdparty' && $usercancreate) { $object->fetch($id); $object->setValueFrom('fk_soc', $socid, '', '', 'date', '', $user, 'ORDER_MODIFY'); @@ -1321,7 +1324,7 @@ if (empty($reshook)) // add lines from objectlinked if($action == 'import_lines_from_object' - && $user->rights->commande->creer + && $usercancreate && $object->statut == Commande::STATUS_DRAFT ) { @@ -1405,8 +1408,8 @@ if (empty($reshook)) include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php'; // Actions to build doc - $upload_dir = $conf->commande->dir_output; - $permissioncreate = $user->rights->commande->creer; + $upload_dir = $conf->commande->multidir_output[$object->entity]; + $permissioncreate = $usercancreate; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; // Actions to send emails @@ -1417,7 +1420,7 @@ if (empty($reshook)) include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; - if (! $error && ! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->commande->creer) + if (! $error && ! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $usercancreate) { if ($action == 'addcontact') { @@ -1478,7 +1481,7 @@ $formmargin = new FormMargin($db); if (! empty($conf->projet->enabled)) { $formproject = new FormProjets($db); } // Mode creation -if ($action == 'create' && $user->rights->commande->creer) +if ($action == 'create' && $usercancreate) { print load_fiche_titre($langs->trans('CreateOrder'), '', 'title_commercial.png'); @@ -2069,8 +2072,8 @@ if ($action == 'create' && $user->rights->commande->creer) $morehtmlref='
'; // Ref customer - $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', 0, 1); - $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->commande->creer, 'string', '', null, null, '', 1); + $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', null, null, '', 1); // Thirdparty $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1); if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref.=' ('.$langs->trans("OtherOrders").')'; @@ -2079,7 +2082,7 @@ if ($action == 'create' && $user->rights->commande->creer) { $langs->load("projects"); $morehtmlref.='
'.$langs->trans('Project') . ' '; - if ($user->rights->commande->creer) + if ($usercancreate) { if ($action != 'classify') $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; @@ -2159,7 +2162,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Date print '
'; print ''; print ''; print '
'; - print $langs->trans('RetainedWarrantyDateLimit'); + // Retained warranty payment term + print '
'; + print ''; - if ($action != 'editretainedwarrantydatelimit' && $user->rights->facture->creer){ - print ''; + if ($action != 'editretainedwarrantypaymentterms' && $user->rights->facture->creer){ + print ''; } print '
'; + print $langs->trans('PaymentConditionsShortRetainedWarranty'); print 'id . '">' . img_edit($langs->trans('setretainedwarrantyDateLimit'), 1) . 'id . '">' . img_edit($langs->trans('setPaymentConditionsShortRetainedWarranty'), 1) . '
'; @@ -3983,21 +4062,66 @@ else if ($id > 0 || ! empty($ref)) $defaultDate = $object->date; } - if ($action == 'editretainedwarrantydatelimit') + if ($action == 'editretainedwarrantypaymentterms') { //date('Y-m-d',$object->date_lim_reglement) print ''; - print ''; + print ''; print ''; - print ''; + $retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); + $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $object->retained_warranty_fk_cond_reglement; + $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID; + $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement'); print ''; print ''; } else { - print dol_print_date($defaultDate); + print $form->form_conditions_reglement($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $object->retained_warranty_fk_cond_reglement, 'none'); + if(!$displayWarranty){ + print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle"'.($moreatt ? ($moreatt == '1' ? ' style="float: right"' : ' '.$moreatt): '')); + } } print '
'; + print ''; + if ($action != 'editretainedwarrantydatelimit' && $user->rights->facture->creer){ + print ''; + } + + print '
'; + print $langs->trans('RetainedWarrantyDateLimit'); + print 'id . '">' . img_edit($langs->trans('setretainedwarrantyDateLimit'), 1) . '
'; + print '
'; + $defaultDate = !empty($object->retained_warranty_date_limit)?$object->retained_warranty_date_limit:strtotime('-1 years', $object->date_lim_reglement); + if($object->date > $defaultDate){ + $defaultDate = $object->date; + } + + if ($action == 'editretainedwarrantydatelimit') + { + //date('Y-m-d',$object->date_lim_reglement) + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + else + { + print dol_print_date($object->retained_warranty_date_limit, 'day'); + } + print '
' . $langs->trans("Billed") . ' :' . price($object->total_ttc) . ' 
' . $langs->trans("ToPayOn", dol_print_date($object->date_lim_reglement)) . ' :' . price($billedWithRetainedWarranty) . ' 
' . $langs->trans("ToPayOn", dol_print_date($object->date_lim_reglement, 'day')) . ' :' . price($billedWithRetainedWarranty) . ' 
'; print $langs->trans("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; - print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit)):''; + print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; print ' :' . price($retainedWarranty) . ' 
' . $langs->trans('PaymentConditionsShortRetainedWarranty') . ''; $retained_warranty_fk_cond_reglement = GETPOST('retained_warranty_fk_cond_reglement', 'int'); $retained_warranty_fk_cond_reglement = !empty($retained_warranty_fk_cond_reglement)? $retained_warranty_fk_cond_reglement : $conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID; - $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement'); + $form->select_conditions_paiements($retained_warranty_fk_cond_reglement, 'retained_warranty_fk_cond_reglement', -1, 1); print '
'; - $editenable = $user->rights->commande->creer && $object->statut == Commande::STATUS_DRAFT; + $editenable = $usercancreate && $object->statut == Commande::STATUS_DRAFT; print $form->editfieldkey("Date", 'date', '', $object, $editenable); print ''; if ($action == 'editdate') { @@ -2180,7 +2183,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Delivery date planed print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("DateDeliveryPlanned", 'date_livraison', '', $object, $editenable); print ''; if ($action == 'editdate_livraison') { @@ -2202,7 +2205,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Shipping Method if (! empty($conf->expedition->enabled)) { print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("SendingMethod", 'shippingmethod', '', $object, $editenable); print ''; if ($action == 'editshippingmethod') { @@ -2220,7 +2223,7 @@ if ($action == 'create' && $user->rights->commande->creer) require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php'; $formproduct=new FormProduct($db); print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("Warehouse", 'warehouse', '', $object, $editenable); print ''; if ($action == 'editwarehouse') { @@ -2234,7 +2237,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Terms of payment print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("PaymentConditionsShort", 'conditions', '', $object, $editenable); print ''; if ($action == 'editconditions') { @@ -2248,7 +2251,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Mode of payment print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("PaymentMode", 'mode', '', $object, $editenable); print ''; if ($action == 'editmode') { @@ -2264,7 +2267,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Multicurrency code print '
'; - $editenable = $user->rights->commande->creer && $object->statut == Commande::STATUS_DRAFT; + $editenable = $usercancreate && $object->statut == Commande::STATUS_DRAFT; print $form->editfieldkey("Currency", 'multicurrencycode', '', $object, $editenable); print ''; if ($action == 'editmulticurrencycode') { @@ -2277,7 +2280,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Multicurrency rate print '
'; - $editenable = $user->rights->commande->creer && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $object->statut == Commande::STATUS_DRAFT; + $editenable = $usercancreate && $object->multicurrency_code && $object->multicurrency_code != $conf->currency && $object->statut == Commande::STATUS_DRAFT; print $form->editfieldkey("CurrencyRate", 'multicurrencyrate', '', $object, $editenable); print ''; if ($action == 'editmulticurrencyrate' || $action == 'actualizemulticurrencyrate') { @@ -2298,7 +2301,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Delivery delay print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("AvailabilityPeriod", 'availability', '', $object, $editenable); print ''; if ($action == 'editavailability') { @@ -2310,7 +2313,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Source reason (why we have an ordrer) print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("Channel", 'demandreason', '', $object, $editenable); print ''; if ($action == 'editdemandreason') { @@ -2323,7 +2326,7 @@ if ($action == 'create' && $user->rights->commande->creer) // TODO Order mode (how we receive order). Not yet implemented /* print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("SourceMode", 'inputmode', '', $object, $editenable); print ''; if ($action == 'editinputmode') { @@ -2355,7 +2358,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Incoterms if (!empty($conf->incoterm->enabled)) { print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("IncotermLabel", 'incoterm', '', $object, $editenable); print ''; @@ -2373,7 +2376,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Bank Account if (! empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_ORDER) && ! empty($conf->banque->enabled)) { print '
'; - $editenable = $user->rights->commande->creer; + $editenable = $usercancreate; print $form->editfieldkey("BankAccount", 'bankaccount', '', $object, $editenable); print ''; if ($action == 'editbankaccount') { @@ -2497,7 +2500,7 @@ if ($action == 'create' && $user->rights->commande->creer) /* * Form to add new line */ - if ($object->statut == Commande::STATUS_DRAFT && $user->rights->commande->creer && $action != 'selectlines') + if ($object->statut == Commande::STATUS_DRAFT && $usercancreate && $action != 'selectlines') { if ($action != 'editline') { @@ -2528,22 +2531,19 @@ if ($action == 'create' && $user->rights->commande->creer) if (empty($reshook)) { // Send if ($object->statut > Commande::STATUS_DRAFT) { - if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->commande->order_advance->send)) { + if ($usercansend) { print ''; } else print ''; } // Valid - if ($object->statut == Commande::STATUS_DRAFT && $object->total_ttc >= 0 && $numlines > 0 && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))) - ) + if ($object->statut == Commande::STATUS_DRAFT && $object->total_ttc >= 0 && $numlines > 0 && $usercanvalidate) { print ''; } // Edit - if ($object->statut == Commande::STATUS_VALIDATED && $user->rights->commande->creer) { + if ($object->statut == Commande::STATUS_VALIDATED && $usercancreate) { print ''; } // Create event @@ -2597,12 +2597,12 @@ if ($action == 'create' && $user->rights->commande->creer) } // Reopen a closed order - if (($object->statut == Commande::STATUS_CLOSED || $object->statut == Commande::STATUS_CANCELED) && $user->rights->commande->creer) { + if (($object->statut == Commande::STATUS_CLOSED || $object->statut == Commande::STATUS_CANCELED) && $usercancreate) { print ''; } // Set to shipped - if (($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS) && $user->rights->commande->cloturer) { + if (($object->statut == Commande::STATUS_VALIDATED || $object->statut == Commande::STATUS_SHIPMENTONPROCESS) && $usercanclose) { print ''; } @@ -2612,31 +2612,28 @@ if ($action == 'create' && $user->rights->commande->creer) if (! empty($conf->facture->enabled) && $user->rights->facture->creer && empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) { print ''; } - if ($user->rights->commande->creer && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { + if ($usercancreate && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { print ''; } } if ($object->statut > Commande::STATUS_DRAFT && $object->billed) { - if ($user->rights->commande->creer && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { + if ($usercancreate && $object->statut >= Commande::STATUS_VALIDATED && empty($conf->global->WORKFLOW_DISABLE_CLASSIFY_BILLED_FROM_ORDER) && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT)) { print ''; } } // Clone - if ($user->rights->commande->creer) { + if ($usercancreate) { print ''; } // Cancel order - if ($object->statut == Commande::STATUS_VALIDATED && - ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->cloturer)) - || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->annuler))) - ) + if ($object->statut == Commande::STATUS_VALIDATED && (! empty($usercanclose) || ! empty($usercancancel))) { print ''; } // Delete order - if ($user->rights->commande->supprimer) { + if ($usercandelete) { if ($numshipping == 0) { print ''; } else { @@ -2659,18 +2656,18 @@ if ($action == 'create' && $user->rights->commande->creer) // Documents $comref = dol_sanitizeFileName($object->ref); $relativepath = $comref . '/' . $comref . '.pdf'; - $filedir = $conf->commande->dir_output . '/' . $comref; + $filedir = $conf->commande->multidir_output[$object->entity] . '/' . $comref; $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id; - $genallowed = $user->rights->commande->lire; - $delallowed = $user->rights->commande->creer; - print $formfile->showdocuments('commande', $comref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); + $genallowed = $usercanread; + $delallowed = $usercancreate; + print $formfile->showdocuments('commande', $comref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang, '', $object); // Show links to link elements $linktoelem = $form->showLinkToObjectBlock($object, null, array('order')); $compatibleImportElementsList = false; - if($user->rights->commande->creer + if($usercancreate && $object->statut == Commande::STATUS_DRAFT) { $compatibleImportElementsList = array('commande','propal'); // import from linked elements @@ -2707,7 +2704,7 @@ if ($action == 'create' && $user->rights->commande->creer) // Presend form $modelmail='order_send'; $defaulttopic='SendOrderRef'; - $diroutput = $conf->commande->dir_output; + $diroutput = $conf->commande->multidir_output[$object->entity]; $trackid = 'ord'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 35cb8335232..fdf9703eb8f 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -427,8 +427,8 @@ class Commande extends CommonOrder // in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); - $dirsource = $conf->commande->dir_output.'/'.$oldref; - $dirdest = $conf->commande->dir_output.'/'.$newref; + $dirsource = $conf->commande->multidir_output[$this->entity].'/'.$oldref; + $dirdest = $conf->commande->multidir_output[$this->entity].'/'.$newref; if (file_exists($dirsource)) { dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); @@ -437,7 +437,7 @@ class Commande extends CommonOrder { dol_syslog("Rename ok"); // Rename docs starting with $oldref with $newref - $listoffiles=dol_dir_list($conf->commande->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); + $listoffiles=dol_dir_list($conf->commande->multidir_output[$this->entity].'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); foreach($listoffiles as $fileentry) { $dirsource=$fileentry['name']; @@ -776,6 +776,7 @@ class Commande extends CommonOrder // Clean parameters $this->brouillon = 1; // set command as draft + if (empty($this->entity)) $this->entity = $conf->entity; // $date_commande is deprecated $date = ($this->date_commande ? $this->date_commande : $this->date); @@ -859,7 +860,7 @@ class Commande extends CommonOrder $sql.= ", ".($this->remise_percent>0?$this->db->escape($this->remise_percent):0); $sql.= ", ".(int) $this->fk_incoterms; $sql.= ", '".$this->db->escape($this->location_incoterms)."'"; - $sql.= ", ".$conf->entity; + $sql.= ", ".$this->entity; $sql.= ", ".($this->module_source ? "'".$this->db->escape($this->module_source)."'" : "null"); $sql.= ", ".($this->pos_source != '' ? "'".$this->db->escape($this->pos_source)."'" : "null"); $sql.= ", ".(int) $this->fk_multicurrency; @@ -1232,6 +1233,7 @@ class Commande extends CommonOrder $this->lines[$i] = $line; } + $this->entity = $object->entity; $this->socid = $object->socid; $this->fk_project = $object->fk_project; $this->cond_reglement_id = $object->cond_reglement_id; @@ -3320,10 +3322,10 @@ class Commande extends CommonOrder { // Remove directory with files $comref = dol_sanitizeFileName($this->ref); - if ($conf->commande->dir_output && !empty($this->ref)) + if ($conf->commande->multidir_output[$this->entity] && !empty($this->ref)) { - $dir = $conf->commande->dir_output . "/" . $comref ; - $file = $conf->commande->dir_output . "/" . $comref . "/" . $comref . ".pdf"; + $dir = $conf->commande->multidir_output[$this->entity] . "/" . $comref ; + $file = $conf->commande->multidir_output[$this->entity] . "/" . $comref . "/" . $comref . ".pdf"; if (file_exists($file)) // We must delete all files before deleting directory { dol_delete_preview($this); diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php index 37cbc70cd40..ec6ed2fd91b 100644 --- a/htdocs/commande/document.php +++ b/htdocs/commande/document.php @@ -72,7 +72,7 @@ $object = new Commande($db); if ($object->fetch($id)) { $object->fetch_thirdparty(); - $upload_dir = $conf->commande->dir_output . "/" . dol_sanitizeFileName($object->ref); + $upload_dir = $conf->commande->multidir_output[$object->entity] . "/" . dol_sanitizeFileName($object->ref); } include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php'; @@ -92,7 +92,7 @@ if ($id > 0 || ! empty($ref)) { $object->fetch_thirdparty(); - $upload_dir = $conf->commande->dir_output.'/'.dol_sanitizeFileName($object->ref); + $upload_dir = $conf->commande->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); $head = commande_prepare_head($object); dol_fiche_head($head, 'documents', $langs->trans('CustomerOrder'), -1, 'order'); @@ -174,7 +174,7 @@ if ($id > 0 || ! empty($ref)) $modulepart = 'commande'; $permission = $user->rights->commande->creer; $permtoedit = $user->rights->commande->creer; - $param = '&id=' . $object->id; + $param = '&id=' . $object->id.'&entity=' . (! empty($object->entity)?$object->entity:$conf->entity); include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php'; } else diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php index c0091b43af0..123bb64b837 100644 --- a/htdocs/commande/index.php +++ b/htdocs/commande/index.php @@ -235,7 +235,7 @@ $max=5; * Last modified orders */ -$sql = "SELECT c.rowid, c.ref, c.fk_statut, c.facture, c.date_cloture as datec, c.tms as datem,"; +$sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, c.date_cloture as datec, c.tms as datem,"; $sql.= " s.nom as name, s.rowid as socid"; $sql.= ", s.client"; $sql.= ", s.code_client"; @@ -291,7 +291,7 @@ if ($resql) print ''; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$obj->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir); print '
'; @@ -317,7 +317,7 @@ else dol_print_error($db); */ if (! empty($conf->commande->enabled)) { - $sql = "SELECT c.rowid, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; + $sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; $sql.= ", s.client"; $sql.= ", s.code_client"; $sql.= ", s.canvas"; @@ -371,7 +371,7 @@ if (! empty($conf->commande->enabled)) print '
'; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$obj->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir); print '
'; @@ -399,7 +399,7 @@ if (! empty($conf->commande->enabled)) */ if (! empty($conf->commande->enabled)) { - $sql = "SELECT c.rowid, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; + $sql = "SELECT c.rowid, c.entity, c.ref, c.fk_statut, c.facture, s.nom as name, s.rowid as socid"; $sql.= ", s.client"; $sql.= ", s.code_client"; $sql.= ", s.canvas"; @@ -453,7 +453,7 @@ if (! empty($conf->commande->enabled)) print '
'; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$obj->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($commandestatic->element, $filename, $filedir); print '
'; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index ad3fd777a5c..073228194b5 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -91,7 +91,7 @@ $id = (GETPOST('orderid')?GETPOST('orderid', 'int'):GETPOST('id', 'int')); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'commande', $id, ''); -$diroutputmassaction=$conf->commande->dir_output . '/temp/massgeneration/'.$user->id; +$diroutputmassaction=$conf->commande->multidir_output[$conf->entity] . '/temp/massgeneration/'.$user->id; // Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; @@ -217,7 +217,7 @@ if (empty($reshook)) $objectlabel='Orders'; $permtoread = $user->rights->commande->lire; $permtodelete = $user->rights->commande->supprimer; - $uploaddir = $conf->commande->dir_output; + $uploaddir = $conf->commande->multidir_output[$conf->entity]; $trigger_name='ORDER_SENTBYMAIL'; include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php'; } @@ -928,7 +928,7 @@ if ($resql) print '
'; $filename=dol_sanitizeFileName($obj->ref); - $filedir=$conf->commande->dir_output . '/' . dol_sanitizeFileName($obj->ref); + $filedir=$conf->commande->multidir_output[$conf->entity] . '/' . dol_sanitizeFileName($obj->ref); $urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->rowid; print $formfile->getDocumentsLink($generic_commande->element, $filename, $filedir); print '
'; diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php index 44f69f512bd..9a8f308a0d1 100644 --- a/htdocs/compta/facture/document.php +++ b/htdocs/compta/facture/document.php @@ -97,7 +97,7 @@ if ($id > 0 || ! empty($ref)) { $object->fetch_thirdparty(); - $upload_dir = $conf->facture->dir_output.'/'.dol_sanitizeFileName($object->ref); + $upload_dir = $conf->facture->multidir_output[$object->entity].'/'.dol_sanitizeFileName($object->ref); $head = facture_prepare_head($object); dol_fiche_head($head, 'documents', $langs->trans('InvoiceCustomer'), -1, 'bill'); diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 05ce6cc3504..b89d257e258 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -1202,7 +1202,7 @@ if ($resql) // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php'; // Fields from hook - $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj); + $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i); $reshook=$hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; // Date creation diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 576aff4db66..858d16948e2 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1228,7 +1228,7 @@ class FormFile print ''; } // Preview link - if (! $editline) print $this->showPreview($file, $modulepart, $filepath); + if (! $editline) print $this->showPreview($file, $modulepart, $filepath, 0, '&entity='.(! empty($object->entity)?$object->entity:$onf->entity)); print "\n"; diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index e00f79b27bc..c7585b65254 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2186,10 +2186,10 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file=$conf->adherent->dir_output.'/'.$original_file; } // Wrapping pour les apercu factures - elseif ($modulepart == 'apercufacture' && !empty($conf->facture->dir_output)) + elseif ($modulepart == 'apercufacture' && !empty($conf->facture->multidir_output[$entity])) { if ($fuser->rights->facture->{$lire}) $accessallowed=1; - $original_file=$conf->facture->dir_output.'/'.$original_file; + $original_file=$conf->facture->multidir_output[$entity].'/'.$original_file; } // Wrapping pour les apercu propal elseif ($modulepart == 'apercupropal' && !empty($conf->propal->multidir_output[$entity])) @@ -2198,10 +2198,10 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $original_file=$conf->propal->multidir_output[$entity].'/'.$original_file; } // Wrapping pour les apercu commande - elseif ($modulepart == 'apercucommande' && !empty($conf->commande->dir_output)) + elseif ($modulepart == 'apercucommande' && !empty($conf->commande->multidir_output[$entity])) { if ($fuser->rights->commande->{$lire}) $accessallowed=1; - $original_file=$conf->commande->dir_output.'/'.$original_file; + $original_file=$conf->commande->multidir_output[$entity].'/'.$original_file; } // Wrapping pour les apercu intervention elseif (($modulepart == 'apercufichinter' || $modulepart == 'apercuficheinter') && !empty($conf->ficheinter->dir_output)) @@ -2397,13 +2397,13 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping for invoices - elseif (($modulepart == 'facture' || $modulepart == 'invoice') && !empty($conf->facture->dir_output)) + elseif (($modulepart == 'facture' || $modulepart == 'invoice') && !empty($conf->facture->multidir_output[$entity])) { if ($fuser->rights->facture->{$lire} || preg_match('/^specimen/i', $original_file)) { $accessallowed=1; } - $original_file=$conf->facture->dir_output.'/'.$original_file; + $original_file=$conf->facture->multidir_output[$entity].'/'.$original_file; $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } // Wrapping for mass actions @@ -2421,7 +2421,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, { $accessallowed=1; } - $original_file=$conf->commande->dir_output.'/temp/massgeneration/'.$user->id.'/'.$original_file; + $original_file=$conf->commande->multidir_output[$entity].'/temp/massgeneration/'.$user->id.'/'.$original_file; } elseif ($modulepart == 'massfilesarea_invoices') { @@ -2429,7 +2429,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, { $accessallowed=1; } - $original_file=$conf->facture->dir_output.'/temp/massgeneration/'.$user->id.'/'.$original_file; + $original_file=$conf->facture->multidir_output[$entity].'/temp/massgeneration/'.$user->id.'/'.$original_file; } elseif ($modulepart == 'massfilesarea_expensereport') { @@ -2513,13 +2513,13 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping pour les commandes - elseif (($modulepart == 'commande' || $modulepart == 'order') && !empty($conf->commande->dir_output)) + elseif (($modulepart == 'commande' || $modulepart == 'order') && !empty($conf->commande->multidir_output[$entity])) { if ($fuser->rights->commande->{$lire} || preg_match('/^specimen/i', $original_file)) { $accessallowed=1; } - $original_file=$conf->commande->dir_output.'/'.$original_file; + $original_file=$conf->commande->multidir_output[$entity].'/'.$original_file; $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."commande WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } diff --git a/htdocs/core/lib/order.lib.php b/htdocs/core/lib/order.lib.php index 6e276dcf8f4..5727ececb5e 100644 --- a/htdocs/core/lib/order.lib.php +++ b/htdocs/core/lib/order.lib.php @@ -96,7 +96,7 @@ function commande_prepare_head(Commande $object) require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->commande->dir_output . "/" . dol_sanitizeFileName($object->ref); + $upload_dir = $conf->commande->multidir_output[$object->entity] . "/" . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/commande/document.php?id='.$object->id; diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php index 5685a839314..eced22d03d8 100644 --- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php +++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php @@ -244,7 +244,7 @@ class doc_generic_order_odt extends ModelePDFCommandes } } - $dir = $conf->commande->dir_output; + $dir = $conf->commande->multidir_output[$object->entity]; $objectref = dol_sanitizeFileName($object->ref); if (! preg_match('/specimen/i', $objectref)) $dir.= "/" . $objectref; $file = $dir . "/" . $objectref . ".odt"; diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 5975da49fbe..78cb2adc9f9 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -239,13 +239,13 @@ class pdf_einstein extends ModelePDFCommandes // Definition of $dir and $file if ($object->specimen) { - $dir = $conf->commande->dir_output; + $dir = $conf->commande->multidir_output[$conf->entity]; $file = $dir . "/SPECIMEN.pdf"; } else { $objectref = dol_sanitizeFileName($object->ref); - $dir = $conf->commande->dir_output . "/" . $objectref; + $dir = $conf->commande->multidir_output[$object->entity] . "/" . $objectref; $file = $dir . "/" . $objectref . ".pdf"; } diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 1abc6c95e20..d0c5197587f 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -281,13 +281,13 @@ class pdf_eratosthene extends ModelePDFCommandes // Definition of $dir and $file if ($object->specimen) { - $dir = $conf->commande->dir_output; + $dir = $conf->commande->multidir_output[$conf->entity]; $file = $dir . "/SPECIMEN.pdf"; } else { $objectref = dol_sanitizeFileName($object->ref); - $dir = $conf->commande->dir_output . "/" . $objectref; + $dir = $conf->commande->multidir_output[$object->entity] . "/" . $objectref; $file = $dir . "/" . $objectref . ".pdf"; } diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php index 28d488eb6fb..160a07635f4 100644 --- a/htdocs/core/modules/commande/mod_commande_marbre.php +++ b/htdocs/core/modules/commande/mod_commande_marbre.php @@ -121,7 +121,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes $sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max"; $sql.= " FROM ".MAIN_DB_PREFIX."commande"; $sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'"; - $sql.= " AND entity = ".$conf->entity; + $sql.= " AND entity IN (".getEntity('ordernumber', 1, $object).")"; $resql=$db->query($sql); if ($resql) diff --git a/htdocs/core/modules/commande/mod_commande_saphir.php b/htdocs/core/modules/commande/mod_commande_saphir.php index 8c96c237a0f..f722a017c0b 100644 --- a/htdocs/core/modules/commande/mod_commande_saphir.php +++ b/htdocs/core/modules/commande/mod_commande_saphir.php @@ -137,9 +137,12 @@ class mod_commande_saphir extends ModeleNumRefCommandes return 0; } + // Get entities + $entity = getEntity('ordernumber', 1, $object); + $date = ($object->date_commande ? $object->date_commande : $object->date); - $numFinal=get_next_value($db, $mask, 'commande', 'ref', '', $objsoc, $date); + $numFinal=get_next_value($db, $mask, 'commande', 'ref', '', $objsoc, $date, 'next', false, null, $entity); return $numFinal; } diff --git a/htdocs/support/index.php b/htdocs/support/index.php index c5f0494eb59..9bc1027805a 100644 --- a/htdocs/support/index.php +++ b/htdocs/support/index.php @@ -73,7 +73,7 @@ print '
'.img_picto('', 'who.png', 'class="valigntex print ''.$langs->trans("CommunitySupport").''; print '
'.$langs->trans("TypeOfSupport").': '.$langs->trans("TypeSupportCommunauty").''; print '
'.$langs->trans("TypeOfHelp").'/'.$langs->trans("Efficiency").'/'.$langs->trans("Price").': '; -print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); +print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); print '
'; print ''; From 82ee85b665f7f5fc2155f2c7f22090c0208b3d81 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 14:29:41 +0200 Subject: [PATCH 0033/1148] FIX remove test --- htdocs/support/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/support/index.php b/htdocs/support/index.php index 9bc1027805a..c5f0494eb59 100644 --- a/htdocs/support/index.php +++ b/htdocs/support/index.php @@ -73,7 +73,7 @@ print '
'.img_picto('', 'who.png', 'class="valigntex print ''.$langs->trans("CommunitySupport").''; print '
'.$langs->trans("TypeOfSupport").': '.$langs->trans("TypeSupportCommunauty").''; print '
'.$langs->trans("TypeOfHelp").'/'.$langs->trans("Efficiency").'/'.$langs->trans("Price").': '; -print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom minwidth50"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); +print $langs->trans("TypeHelpDev").'/'.img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).img_picto_common('', 'redstar', 'class="valigntextbottom"', 1).'/'.img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1).img_picto_common('', 'star', 'class="valigntextbottom"', 1); print '
'; print ''; From 62489d1f5ef67fa97e263cecf12de883eb8e70fc Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 14:41:30 +0200 Subject: [PATCH 0034/1148] FIX replace "dir_output" with "multidir_output" --- htdocs/compta/facture/card.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index beebe3cb561..3733fda8e67 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2425,7 +2425,7 @@ $result = $object->updateline(GETPOST('lineid'), $description, $pu_ht, $qty, GET include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; // Actions to build doc - $upload_dir = $conf->facture->dir_output; + $upload_dir = $conf->facture->multidir_output[$object->entity]; $permissioncreate=$usercancreate; include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php'; @@ -4859,12 +4859,12 @@ elseif ($id > 0 || ! empty($ref)) // Documents generes $filename = dol_sanitizeFileName($object->ref); - $filedir = $conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref); + $filedir = $conf->facture->multidir_output[$object->entity] . '/' . dol_sanitizeFileName($object->ref); $urlsource = $_SERVER['PHP_SELF'] . '?facid=' . $object->id; $genallowed = $usercanread; $delallowed = $usercancreate; - print $formfile->showdocuments('facture', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang); + print $formfile->showdocuments('facture', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang, '', $object); $somethingshown = $formfile->numoffiles; // Show links to link elements @@ -4911,7 +4911,7 @@ elseif ($id > 0 || ! empty($ref)) // Presend form $modelmail='facture_send'; $defaulttopic='SendBillRef'; - $diroutput = $conf->facture->dir_output; + $diroutput = $conf->facture->multidir_output[$object->entity]; $trackid = 'inv'.$object->id; include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php'; From 3cb6ca34e9596587779fa0f722b0c76365dcb1ef Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 16:06:16 +0200 Subject: [PATCH 0035/1148] FIX multicompany compatibility --- htdocs/core/class/conf.class.php | 3 +++ htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 861c273e28a..d3ca2c6126f 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -327,6 +327,9 @@ class Conf } // For mycompany storage + $this->mycompany->multidir_output = array($this->entity => $rootfordata."/mycompany"); + $this->mycompany->multidir_temp = array($this->entity => $rootfordata."/mycompany/temp"); + // For backward compatibility $this->mycompany->dir_output=$rootfordata."/mycompany"; $this->mycompany->dir_temp=$rootfordata."/mycompany/temp"; diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 78cb2adc9f9..63f9093842b 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1255,7 +1255,8 @@ class pdf_einstein extends ModelePDFCommandes // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + var_dump($conf->mycompany); exit; + $logo=$conf->mycompany->dir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) From 156b25a702665077d880a3212a591f51297fdd7b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sun, 12 May 2019 16:36:29 +0200 Subject: [PATCH 0036/1148] FIX use "multidir_output" instead "dir_output" --- htdocs/core/modules/commande/doc/pdf_einstein.modules.php | 5 ++--- .../core/modules/commande/doc/pdf_eratosthene.modules.php | 4 ++-- htdocs/core/modules/facture/doc/pdf_crabe.modules.php | 4 ++-- htdocs/core/modules/facture/doc/pdf_sponge.modules.php | 6 +++--- htdocs/core/modules/propale/doc/pdf_azur.modules.php | 4 ++-- htdocs/core/modules/propale/doc/pdf_cyan.modules.php | 4 ++-- 6 files changed, 13 insertions(+), 14 deletions(-) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 63f9093842b..f9c62a197ff 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -290,7 +290,7 @@ class pdf_einstein extends ModelePDFCommandes // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1255,8 +1255,7 @@ class pdf_einstein extends ModelePDFCommandes // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - var_dump($conf->mycompany); exit; - $logo=$conf->mycompany->dir_output[$object->entity].'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index d0c5197587f..ff1c84a2783 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -331,7 +331,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1390,7 +1390,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index a641e209f9e..dd6300f4296 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -340,7 +340,7 @@ class pdf_crabe extends ModelePDFFactures // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1582,7 +1582,7 @@ class pdf_crabe extends ModelePDFFactures // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 9c7c7797841..fbe5bdfb5da 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -352,7 +352,7 @@ class pdf_sponge extends ModelePDFFactures // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -449,7 +449,7 @@ class pdf_sponge extends ModelePDFFactures complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $pdf->startTransaction(); $pdf->SetFont('', '', $default_font_size - 1); @@ -1600,7 +1600,7 @@ class pdf_sponge extends ModelePDFFactures // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 54fe56421ea..5f5b2dcf4cb 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -344,7 +344,7 @@ class pdf_azur extends ModelePDFPropales // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1459,7 +1459,7 @@ class pdf_azur extends ModelePDFPropales // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 14a2456157a..0ba7cf574ce 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -330,7 +330,7 @@ class pdf_cyan extends ModelePDFPropales // Set path to the background PDF File if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND)) { - $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); + $pagecount = $pdf->setSourceFile($conf->mycompany->multidir_output[$object->entity].'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND); $tplidx = $pdf->importPage(1); } @@ -1505,7 +1505,7 @@ class pdf_cyan extends ModelePDFPropales // Logo if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO)) { - $logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo; + $logo=$conf->mycompany->multidir_output[$object->entity].'/logos/'.$this->emetteur->logo; if ($this->emetteur->logo) { if (is_readable($logo)) From 69e4420772841af91074503b3c6b6d31af9b79b7 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 22 May 2019 11:53:36 +0200 Subject: [PATCH 0037/1148] FIX missing "dropdown-icon" replacement --- htdocs/main.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index b0d34db43eb..6563e60e239 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1738,7 +1738,7 @@ function top_menu_user(User $user, Translate $langs) $userImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'photouserphoto userphoto', 'small', 0, 1); $userDropDownImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'dropdown-user-image', 'small', 0, 1); } - else{ + else { $nophoto='/public/theme/common/user_anonymous.png'; if ($user->gender == 'man') $nophoto='/public/theme/common/user_man.png'; if ($user->gender == 'woman') $nophoto='/public/theme/common/user_woman.png'; @@ -1752,7 +1752,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'; // login infos - if (!empty($user->admin)) { + if (! empty($user->admin)) { $dropdownBody.= '
' . $langs->trans("Administrator").': '.yn($user->admin); } if (! empty($user->socid)) // Add thirdparty for external users @@ -1805,7 +1805,7 @@ function top_menu_user(User $user, Translate $langs) $profilName = $user->getFullName($langs).' ('.$user->login.')'; - if($user->admin){ + if (! empty($user->admin)) { $profilName = ' '.$profilName; } @@ -1851,6 +1851,8 @@ function top_menu_user(User $user, Translate $langs) if (!$(event.target).closest("#topmenu-login-dropdown").length) { // Hide the menus. $("#topmenu-login-dropdown").removeClass("open"); + $("#dropdown-icon-down").show(); // use show/hide instead toggle for avoid conflict + $("#dropdown-icon-up").hide(); // use show/hide instead toggle for avoid conflict } }); From 38246b408815c26ee0655f95f10a9af53339d426 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 11:13:26 +0200 Subject: [PATCH 0038/1148] NEW add new function "setEntity()" --- htdocs/commande/card.php | 1 - htdocs/commande/class/commande.class.php | 3 +-- htdocs/core/class/html.formfile.class.php | 2 +- htdocs/core/lib/functions.lib.php | 22 +++++++++++++++++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 32863263d7f..a0552586ffe 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -260,7 +260,6 @@ if (empty($reshook)) $db->begin(); $object->date_commande = $datecommande; - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->source = GETPOST('source_id'); diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 37f4ac4b9b2..d43e3eb6041 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -776,7 +776,6 @@ class Commande extends CommonOrder // Clean parameters $this->brouillon = 1; // set command as draft - if (empty($this->entity)) $this->entity = $conf->entity; // $date_commande is deprecated $date = ($this->date_commande ? $this->date_commande : $this->date); @@ -860,7 +859,7 @@ class Commande extends CommonOrder $sql.= ", ".($this->remise_percent>0?$this->db->escape($this->remise_percent):0); $sql.= ", ".(int) $this->fk_incoterms; $sql.= ", '".$this->db->escape($this->location_incoterms)."'"; - $sql.= ", ".$this->entity; + $sql.= ", ".setEntity($this); $sql.= ", ".($this->module_source ? "'".$this->db->escape($this->module_source)."'" : "null"); $sql.= ", ".($this->pos_source != '' ? "'".$this->db->escape($this->pos_source)."'" : "null"); $sql.= ", ".(int) $this->fk_multicurrency; diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 135fd2969d3..d965ca9f245 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1238,7 +1238,7 @@ class FormFile print ''; } // Preview link - if (! $editline) print $this->showPreview($file, $modulepart, $filepath, 0, '&entity='.(! empty($object->entity)?$object->entity:$onf->entity)); + if (! $editline) print $this->showPreview($file, $modulepart, $filepath, 0, '&entity='.(! empty($object->entity)?$object->entity:$conf->entity)); print "\n"; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 19b39fd776d..de52d3a74d1 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -75,7 +75,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port) * @param int $shared 0=Return id of current entity only, * 1=Return id of current entity + shared entities (default) * @param object $currentobject Current object if needed - * @return mixed Entity id(s) to use + * @return mixed Entity id(s) to use */ function getEntity($element, $shared = 1, $currentobject = null) { @@ -95,6 +95,26 @@ function getEntity($element, $shared = 1, $currentobject = null) } } +/** + * Get entity id to use when to create an object + * + * @param object $currentobject Current object + * @return mixed Entity id to use + */ +function setEntity($currentobject) +{ + global $conf, $mc; + + if (is_object($mc)) + { + return $mc->setEntity($currentobject); + } + else + { + return $conf->entity; + } +} + /** * Return information about user browser * From fc83585574254e32ecc0ed9131bcd05227b35f0e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 11:37:04 +0200 Subject: [PATCH 0039/1148] FIX use setEntity() to move code in multicompany module --- htdocs/comm/propal/card.php | 1 - htdocs/comm/propal/class/propal.class.php | 7 +++-- htdocs/compta/facture/card.php | 6 +---- htdocs/compta/facture/class/facture.class.php | 27 +++++++++++-------- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index c8cba5c3dda..c2d765afab7 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -380,7 +380,6 @@ if (empty($reshook)) } } else { $object->ref = GETPOST('ref'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); $object->ref_client = GETPOST('ref_client'); $object->datep = $datep; $object->date_livraison = $date_delivery; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 4945ff63305..599f3685f8d 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -890,7 +890,6 @@ class Propal extends CommonObject $now=dol_now(); // Clean parameters - if (empty($this->entity)) $this->entity = $conf->entity; if (empty($this->date)) $this->date=$this->datep; $this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600); if (empty($this->availability_id)) $this->availability_id=0; @@ -1000,7 +999,7 @@ class Propal extends CommonObject $sql.= ", ".($this->fk_project?$this->fk_project:"null"); $sql.= ", ".(int) $this->fk_incoterms; $sql.= ", '".$this->db->escape($this->location_incoterms)."'"; - $sql.= ", ".$this->entity; + $sql.= ", ".setEntity($this); $sql.= ", ".(int) $this->fk_multicurrency; $sql.= ", '".$this->db->escape($this->multicurrency_code)."'"; $sql.= ", ".(double) $this->multicurrency_tx; @@ -1091,7 +1090,7 @@ class Propal extends CommonObject $vatrate = $line->tva_tx; if ($line->vat_src_code && ! preg_match('/\(.*\)/', $vatrate)) $vatrate.=' ('.$line->vat_src_code.')'; - $result = $this->addline( + $result = $this->addline( $line->desc, $line->subprice, $line->qty, @@ -1138,7 +1137,7 @@ class Propal extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."propal"; $sql.= " SET fk_delivery_address = ".$this->fk_delivery_address; $sql.= " WHERE ref = '".$this->db->escape($this->ref)."'"; - $sql.= " AND entity = ".$this->entity; + $sql.= " AND entity = ".setEntity($this); $result=$this->db->query($sql); } diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index a7ce35974fb..f3361eb78ee 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -912,7 +912,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); // Proprietes particulieres a facture de remplacement $object->fk_facture_source = $_POST['fac_replacement']; @@ -946,7 +945,7 @@ if (empty($reshook)) if (! $error) { - if(!empty($originentity)){ + if (!empty($originentity)) { $object->entity = $originentity; } $object->socid = GETPOST('socid', 'int'); @@ -968,7 +967,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); // Proprietes particulieres a facture avoir $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice : ''; @@ -1150,7 +1148,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); // Source facture $object->fac_rec = GETPOST('fac_rec', 'int'); @@ -1201,7 +1198,6 @@ if (empty($reshook)) $object->location_incoterms = GETPOST('location_incoterms', 'alpha'); $object->multicurrency_code = GETPOST('multicurrency_code', 'alpha'); $object->multicurrency_tx = GETPOST('originmulticurrency_tx', 'int'); - $object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity); if (GETPOST('type') == Facture::TYPE_SITUATION) { diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 686190c359b..991569ec4ae 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -303,7 +303,6 @@ class Facture extends CommonInvoice if (! $this->cond_reglement_id) $this->cond_reglement_id = 0; if (! $this->mode_reglement_id) $this->mode_reglement_id = 0; $this->brouillon = 1; - if (empty($this->entity)) $this->entity = $conf->entity; // Multicurrency (test on $this->multicurrency_tx because we should take the default rate only if not using origin rate) if (!empty($this->multicurrency_code) && empty($this->multicurrency_tx)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code); @@ -474,7 +473,7 @@ class Facture extends CommonInvoice $sql.= ")"; $sql.= " VALUES ("; $sql.= "'(PROV)'"; - $sql.= ", ".$this->entity; + $sql.= ", ".setEntity($this); $sql.= ", ".($this->ref_ext?"'".$this->db->escape($this->ref_ext)."'":"null"); $sql.= ", '".$this->db->escape($this->type)."'"; $sql.= ", '".$socid."'"; @@ -913,8 +912,8 @@ class Facture extends CommonInvoice $facture->remise_absolue = $this->remise_absolue; $facture->remise_percent = $this->remise_percent; - $facture->origin = $this->origin; - $facture->origin_id = $this->origin_id; + $facture->origin = $this->origin; + $facture->origin_id = $this->origin_id; $facture->lines = $this->lines; // Tableau des lignes de factures $facture->products = $this->lines; // Tant que products encore utilise @@ -1582,7 +1581,11 @@ class Facture extends CommonInvoice $this->tab_previous_situation_invoice = array(); $this->tab_next_situation_invoice = array(); - $sql = 'SELECT rowid, situation_counter FROM '.MAIN_DB_PREFIX.'facture WHERE rowid <> '.$this->id.' AND entity = '.$conf->entity.' AND situation_cycle_ref = '.(int) $this->situation_cycle_ref.' ORDER BY situation_counter ASC'; + $sql = 'SELECT rowid, situation_counter FROM '.MAIN_DB_PREFIX.'facture'; + $sql.= ' WHERE rowid <> '.$this->id; + $sql.= ' AND entity = '.$this->entity; + $sql.= ' AND situation_cycle_ref = '.(int) $this->situation_cycle_ref; + $sql.= ' ORDER BY situation_counter ASC'; dol_syslog(get_class($this).'::fetchPreviousNextSituationInvoice ', LOG_DEBUG); $result = $this->db->query($sql); @@ -3648,11 +3651,11 @@ class Facture extends CommonInvoice $sql.= " AND ff.type IS NULL"; // Renvoi vrai si pas facture de remplacement $sql.= " AND f.type != ".self::TYPE_CREDIT_NOTE; // Type non 2 si facture non avoir - if($conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE){ + if (! empty($conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE)) { // Select the last situation invoice $sqlSit = 'SELECT MAX(fs.rowid)'; $sqlSit.= " FROM ".MAIN_DB_PREFIX."facture as fs"; - $sqlSit.= " WHERE fs.entity = ".$conf->entity; + $sqlSit.= " WHERE fs.entity IN (".getEntity('invoice').")"; $sqlSit.= " AND fs.type = ".self::TYPE_SITUATION; $sqlSit.= " AND fs.fk_statut in (".self::STATUS_VALIDATED.",".self::STATUS_CLOSED.")"; $sqlSit.= " GROUP BY fs.situation_cycle_ref"; @@ -4178,7 +4181,7 @@ class Facture extends CommonInvoice public function newCycle() { $sql = 'SELECT max(situation_cycle_ref) FROM ' . MAIN_DB_PREFIX . 'facture as f'; - $sql.= " WHERE f.entity in (".getEntity('invoice', 0).")"; + $sql.= " WHERE f.entity IN (".getEntity('invoice', 0).")"; $resql = $this->db->query($sql); if ($resql) { if ($resql->num_rows > 0) @@ -4222,8 +4225,8 @@ class Facture extends CommonInvoice global $conf; $sql = 'SELECT rowid FROM ' . MAIN_DB_PREFIX . 'facture'; - $sql .= ' where situation_cycle_ref = ' . $this->situation_cycle_ref; - $sql .= ' and situation_counter < ' . $this->situation_counter; + $sql .= ' WHERE situation_cycle_ref = ' . $this->situation_cycle_ref; + $sql .= ' AND situation_counter < ' . $this->situation_counter; $sql .= ' AND entity = '. ($this->entity > 0 ? $this->entity : $conf->entity); $resql = $this->db->query($sql); $res = array(); @@ -4304,7 +4307,9 @@ class Facture extends CommonInvoice if (!empty($this->situation_cycle_ref)) { // No point in testing anything if we're not inside a cycle - $sql = 'SELECT max(situation_counter) FROM ' . MAIN_DB_PREFIX . 'facture WHERE situation_cycle_ref = ' . $this->situation_cycle_ref . ' AND entity = ' . ($this->entity > 0 ? $this->entity : $conf->entity); + $sql = 'SELECT max(situation_counter) FROM ' . MAIN_DB_PREFIX . 'facture'; + $sql.= ' WHERE situation_cycle_ref = ' . $this->situation_cycle_ref; + $sql.= ' AND entity = ' . ($this->entity > 0 ? $this->entity : $conf->entity); $resql = $this->db->query($sql); if ($resql && $resql->num_rows > 0) { From b0042995ac7fb8bf00d23033b41154d02f195f7a Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 12:04:17 +0200 Subject: [PATCH 0040/1148] FIX add docs --- htdocs/core/lib/functions.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index de52d3a74d1..69fde6369e6 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -75,7 +75,7 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port) * @param int $shared 0=Return id of current entity only, * 1=Return id of current entity + shared entities (default) * @param object $currentobject Current object if needed - * @return mixed Entity id(s) to use + * @return mixed Entity id(s) to use ( eg. entity IN ('.getEntity(elementname).')' ) */ function getEntity($element, $shared = 1, $currentobject = null) { @@ -96,10 +96,10 @@ function getEntity($element, $shared = 1, $currentobject = null) } /** - * Get entity id to use when to create an object + * Set entity id to use when to create an object * * @param object $currentobject Current object - * @return mixed Entity id to use + * @return mixed Entity id to use ( eg. entity = '.getEntity($object) ) */ function setEntity($currentobject) { From e5e611154436f64b8b43d1d237a1ec76ff97c0b5 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 3 Jun 2019 12:05:58 +0200 Subject: [PATCH 0041/1148] FIX wrong function name --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 69fde6369e6..978c360f60d 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -99,7 +99,7 @@ function getEntity($element, $shared = 1, $currentobject = null) * Set entity id to use when to create an object * * @param object $currentobject Current object - * @return mixed Entity id to use ( eg. entity = '.getEntity($object) ) + * @return mixed Entity id to use ( eg. entity = '.setEntity($object) ) */ function setEntity($currentobject) { From 71d984483d5883a1b9ac3fd928175df45bf90031 Mon Sep 17 00:00:00 2001 From: Eric Seigne <1468823+rycks@users.noreply.github.com> Date: Mon, 17 Jun 2019 14:45:49 +0200 Subject: [PATCH 0042/1148] Update print VAT document: remove form part and add right title --- htdocs/compta/tva/quadri_detail.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index 8b58bde4199..0f359dd9721 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -5,6 +5,7 @@ * Copyright (C) 2006-2015 Yannick Warnier * Copyright (C) 2014 Ferran Marcet * Copyright (C) 2018 Frédéric France + * Copyright (C) 2019 Eric Seigne * * 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 @@ -116,7 +117,8 @@ foreach ($listofparams as $param) if (GETPOST($param)!='') $morequerystring.=($morequerystring?'&':'').$param.'='.GETPOST($param); } -llxHeader('', $langs->trans("VATReport"), '', '', 0, 0, '', '', $morequerystring); +$title = $langs->trans("VATReport") . " " . dol_print_date($date_start) . " -> " . dol_print_date($date_end); +llxHeader('',$title,'','',0,0,'','',$morequerystring); //print load_fiche_titre($langs->trans("VAT"),""); @@ -184,8 +186,10 @@ if ($mysoc->tva_assuj) { $vatsup.=' ('.$langs->trans("ToGetBack").')'; } - -report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode); +$optioncss = GETPOST('optioncss'); +if($optioncss != "print") { + report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode); +} $vatcust=$langs->trans("VATReceived"); $vatsup=$langs->trans("VATPaid"); From a83e7f3665ef09ebb8fa443e731f47867812c11a Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 24 Jun 2019 12:00:55 +0200 Subject: [PATCH 0043/1148] Add retained warranty to PDF --- htdocs/compta/facture/class/facture.class.php | 2 +- htdocs/core/lib/pdf.lib.php | 47 ++++ .../facture/doc/pdf_sponge.modules.php | 246 +++++++++++++++++- 3 files changed, 286 insertions(+), 9 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 43bdacdc514..b10b4183223 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1698,7 +1698,7 @@ class Facture extends CommonInvoice $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").","; $sql.= " situation_cycle_ref=".(empty($this->situation_cycle_ref)?"null":$this->db->escape($this->situation_cycle_ref)).","; $sql.= " situation_counter=".(empty($this->situation_counter)?"null":$this->db->escape($this->situation_counter)).","; - $sql.= " situation_final=".(empty($this->situation_final)?"0":$this->db->escape($this->situation_final)); + $sql.= " situation_final=".(empty($this->situation_final)?"0":$this->db->escape($this->situation_final)).","; $sql.= " retained_warranty=".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)).","; $sql.= " retained_warranty_date_limit=".(strval($this->retained_warranty_date_limit)!='' ? "'".$this->db->idate($this->retained_warranty_date_limit)."'" : 'null').","; $sql.= " retained_warranty_fk_cond_reglement=".(isset($this->retained_warranty_fk_cond_reglement)?intval($this->retained_warranty_fk_cond_reglement):"null"); diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 56ca215e118..05f9cb78ca4 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2206,3 +2206,50 @@ function pdf_getSizeForImage($realpath) } return array('width'=>$width,'height'=>$height); } + +/** + * Return line total amount discount + * + * @param Object $object Object + * @param int $i Current line number + * @param Translate $outputlangs Object langs for output + * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) + * @return string Return total of line excl tax + */ + +function pdf_getLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) +{ + global $conf, $hookmanager; + $sign=1; + if (isset($object->type) && $object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1; + if ($object->lines[$i]->special_code == 3) + { + return $outputlangs->transnoentities("Option"); + } + else + { + + if (is_object($hookmanager)) + { + $special_code = $object->lines[$i]->special_code; + if (! empty($object->lines[$i]->fk_parent_line)) $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line); + + $parameters = array( + 'i'=>$i, + 'outputlangs'=>$outputlangs, + 'hidedetails'=>$hidedetails, + 'special_code'=>$special_code + ); + + $action=''; + + if( $hookmanager->executeHooks('getlinetotalremise',$parameters,$object,$action)>0) + { + return $hookmanager->resPrint; // Note that $action and $object may have been modified by some hooks + } + } + + if (empty($hidedetails) || $hidedetails > 1) return $sign * ( ($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht ); + } + return ''; +} \ No newline at end of file diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 9c7c7797841..9a5a3a371f6 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1225,13 +1225,174 @@ class pdf_sponge extends ModelePDFFactures $useborder=0; $index = 0; + + + // pourcentage global d'avancement + $percent = 0; + $i=0; + foreach ($object->lines as $line) + { + if(!class_exists('TSubtotal') || !TSubtotal::isModSubtotalLine($line)){ + $percent += $line->situation_percent; + $i++; + } + } + if(!empty($i)){ + $avancementGlobal = $percent/$i; + } + else{ + $avancementGlobal = 0; + } + + $object->fetchPreviousNextSituationInvoice(); + $TPreviousIncoice = $object->tab_previous_situation_invoice; + + $total_a_payer = 0; + $total_a_payer_ttc = 0; + foreach ($TPreviousIncoice as &$fac){ + $total_a_payer += $fac->total_ht; + $total_a_payer_ttc += $fac->total_ttc; + } + $total_a_payer += $object->total_ht; + $total_a_payer_ttc += $object->total_ttc; + + if(!empty($avancementGlobal)){ + $total_a_payer = $total_a_payer * 100 / $avancementGlobal; + $total_a_payer_ttc = $total_a_payer_ttc * 100 / $avancementGlobal; + } + else{ + $total_a_payer = 0; + $total_a_payer_ttc = 0; + } + + $deja_paye = 0; + $i = 1; + if(!empty($TPreviousIncoice)){ + + $pdf->setY($tab2_top); + $posy = $pdf->GetY(); + + + + + foreach ($TPreviousIncoice as &$fac){ + + if($posy > $this->page_hauteur - 4 ) { + $this->_pagefoot($pdf,$object,$outputlangs,1); + $pdf->addPage(); + $pdf->setY($this->marge_haute); + $posy = $pdf->GetY(); + } + + // cumul TVA précédent + $index++; + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $posy); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $fac->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); + + $pdf->SetXY($col2x,$posy); + + $facSign = ''; + if($i>1){ + $facSign = $fac->total_ht>=0?'+':''; + } + + $displayAmount = ' '.$facSign.' '.price($fac->total_ht, 0, $outputlangs); + + $pdf->MultiCell($largcol2, $tab2_hl, $displayAmount, 0, 'R', 1); + + $i++; + $deja_paye += $fac->total_ht; + $posy += $tab2_hl; + + $pdf->setY($posy); + + } + + // Display curent total + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $posy); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $object->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); + + $pdf->SetXY($col2x,$posy); + $facSign = ''; + if($i>1){ + $facSign = $object->total_ht>=0?'+':''; // gestion d'un cas particulier client + } + + if($fac->type === facture::TYPE_CREDIT_NOTE){ + $facSign = '-'; // les avoirs + } + + + $displayAmount = ' '.$facSign.' '.price($object->total_ht, 0, $outputlangs); + $pdf->MultiCell($largcol2, $tab2_hl, $displayAmount, 0, 'R', 1); + + $posy += $tab2_hl; + + // Display all total + $pdf->SetFont('','', $default_font_size - 1); + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $posy); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("SituationTotalProgress", $avancementGlobal), 0, 'L', 1); + + $pdf->SetXY($col2x,$posy); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_a_payer*$avancementGlobal/100, 0, $outputlangs), 0, 'R', 1); + $pdf->SetFont('','', $default_font_size - 2); + + $posy += $tab2_hl; + + if($posy > $this->page_hauteur - 4 ) { + $pdf->addPage(); + $pdf->setY($this->marge_haute); + $posy = $pdf->GetY(); + } + + $tab2_top = $posy; + $index=0; + + } + + $tab2_top += 3; + + // Get Total HT + $total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht); + + // Total remise + $total_line_remise=0; + foreach($object->lines as $i => $line) { + $total_line_remise+= pdf_getLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib + // Gestion remise sous forme de ligne négative + if($line->total_ht < 0) $total_line_remise += -$line->total_ht; + } + if($total_line_remise > 0) { + if (! empty($conf->global->MAIN_SHOW_AMOUNT_DISCOUNT)) { + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + $tab2_hl); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalDiscount"), 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_line_remise, 0, $outputlangs), 0, 'R', 1); + + $index++; + } + // Show total NET before discount + if (! empty($conf->global->MAIN_SHOW_AMOUNT_BEFORE_DISCOUNT)) { + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + 0); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHTBeforeDiscount"), 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + 0); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_line_remise + $total_ht, 0, $outputlangs), 0, 'R', 1); + + $index++; + } + } + // Total HT - $pdf->SetFillColor(255, 255, 255); - $pdf->SetXY($col1x, $tab2_top + 0); + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - $total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht); - $pdf->SetXY($col2x, $tab2_top + 0); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($sign * ($total_ht + (! empty($object->remise)?$object->remise:0)), 0, $outputlangs), 0, 'R', 1); // Show VAT by rates and total @@ -1330,7 +1491,14 @@ class pdf_sponge extends ModelePDFFactures } if($sum_pdf_tva!=$object->total_tva) { // apply coef to recover the VAT object amount (the good one) - $coef_fix_tva = $object->total_tva / $sum_pdf_tva; + if(!empty($sum_pdf_tva)) + { + $coef_fix_tva = $object->total_tva / $sum_pdf_tva; + } + else { + $coef_fix_tva = 1; + } + foreach($this->tva as $tvakey => $tvaval) { $this->tva[$tvakey]=$tvaval * $coef_fix_tva; @@ -1427,7 +1595,7 @@ class pdf_sponge extends ModelePDFFactures } } } - //} + // Revenue stamp if (price2num($object->revenuestamp) != 0) @@ -1449,14 +1617,76 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($largcol2, $tab2_hl, price($sign * $total_ttc, 0, $outputlangs), $useborder, 'R', 1); + + + /*if($object->type == Facture::TYPE_SITUATION) + { + // reste à payer total + $index++; + + $pdf->SetFont('','', $default_font_size - 1); + $pdf->SetFillColor(255,255,255); + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities('SituationTotalRayToRest'), 0, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($total_a_payer_ttc-$deja_paye, 0, $outputlangs), 0, 'R', 1); + }*/ + + + // Retained warranty + if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) + { + $displayWarranty = false; + // Check if this situation invoice is 100% for real + if(!empty($object->situation_final)){ + $displayWarranty = true; + } + elseif(!empty($object->lines) && $object->status == Facture::STATUS_DRAFT ){ + // $object->situation_final need validation to be done so this test is need for draft + $displayWarranty = true; + foreach( $object->lines as $i => $line ){ + if($line->product_type < 2 && $line->situation_percent < 100){ + $displayWarranty = false; + break; + } + } + } + + if($displayWarranty){ + $pdf->SetTextColor(40, 40, 40); + $pdf->SetFillColor(255, 255, 255); + + $retainedWarranty = $total_a_payer_ttc * $object->retained_warranty / 100; + $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; + + // Billed - retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFEVOLToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); + + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + + // retained warranty + $index++; + $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); + + $retainedWarrantyToPayOn = $outputlangs->transnoentities("PDFEVOLRetainedWarranty") . ' ('.$object->retained_warranty.'%)'; + $retainedWarrantyToPayOn.= !empty($object->retained_warranty_date_limit)?' '.$outputlangs->transnoentities("PDFEVOLtoPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; + + $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); + $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + } + } } } - $pdf->SetTextColor(0, 0, 0); + $pdf->SetTextColor(0,0,0); $creditnoteamount=$object->getSumCreditNotesUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); $depositsamount=$object->getSumDepositsUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); - //print "x".$creditnoteamount."-".$depositsamount;exit; + $resteapayer = price2num($total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 'MT'); if ($object->paye) $resteapayer=0; From 9c414a7a5726bcfccc86e36fabd8f7a0d9b5e4a4 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 24 Jun 2019 12:22:33 +0200 Subject: [PATCH 0044/1148] Change function to camel case --- htdocs/core/lib/pdf.lib.php | 2 +- htdocs/core/modules/facture/doc/pdf_sponge.modules.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 05f9cb78ca4..a4954c07f39 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2217,7 +2217,7 @@ function pdf_getSizeForImage($realpath) * @return string Return total of line excl tax */ -function pdf_getLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) +function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) { global $conf, $hookmanager; $sign=1; diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 9a5a3a371f6..0e5f9a69819 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1361,7 +1361,7 @@ class pdf_sponge extends ModelePDFFactures // Total remise $total_line_remise=0; foreach($object->lines as $i => $line) { - $total_line_remise+= pdf_getLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib + $total_line_remise+= pdfGetLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib // Gestion remise sous forme de ligne négative if($line->total_ht < 0) $total_line_remise += -$line->total_ht; } From ec7446762c7c20be0d3a3d7fc26a373fe10d3864 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 24 Jun 2019 14:36:06 +0200 Subject: [PATCH 0045/1148] Fix travis --- htdocs/compta/facture/card.php | 9 +++--- htdocs/compta/facture/class/facture.class.php | 18 +++++------ htdocs/compta/facture/list.php | 2 +- htdocs/core/class/commonobject.class.php | 2 +- htdocs/core/lib/pdf.lib.php | 7 ++--- .../modules/facture/doc/pdf_crabe.modules.php | 12 ++++---- .../facture/doc/pdf_sponge.modules.php | 30 +++++++++---------- 7 files changed, 40 insertions(+), 40 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 5a987c4b542..e105535ee89 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4102,7 +4102,7 @@ elseif ($id > 0 || ! empty($ref)) // Check if this situation invoice is 100% for real if(!empty($object->situation_final) && !empty($object->lines)){ $displayWarranty = true; - foreach( $object->lines as $i => $line ){ + foreach($object->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -4136,7 +4136,7 @@ elseif ($id > 0 || ! empty($ref)) { print price($object->retained_warranty).'%'; } - print ''; + print ''; // Retained warranty payment term print ''; @@ -4174,7 +4174,7 @@ elseif ($id > 0 || ! empty($ref)) print img_picto($langs->trans('RetainedWarrantyNeed100Percent'), 'warning.png', 'class="pictowarning valignmiddle" '); } } - print ''; + print ''; @@ -4203,7 +4203,7 @@ elseif ($id > 0 || ! empty($ref)) print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; } @@ -4213,7 +4213,6 @@ elseif ($id > 0 || ! empty($ref)) } print ''; } - } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index b10b4183223..a19843452b8 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4387,8 +4387,8 @@ class Facture extends CommonInvoice /** * @return number or -1 if not available */ - function getRetainedWarrantyAmount() { - + public function getRetainedWarrantyAmount() + { if(empty($this->retained_warranty) ){ return -1; } @@ -4401,11 +4401,11 @@ class Facture extends CommonInvoice $displayWarranty = true; // Check if this situation invoice is 100% for real if(!empty($this->lines)){ - foreach( $this->lines as $i => $line ){ + foreach($this->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; - } + } } } @@ -4425,7 +4425,6 @@ class Facture extends CommonInvoice else{ return -1; } - } else { @@ -4442,7 +4441,7 @@ class Facture extends CommonInvoice * @param float $value value of retained warranty * @return int >0 if OK, <0 if KO */ - function setRetainedWarranty($value) + public function setRetainedWarranty($value) { dol_syslog(get_class($this).'::setRetainedWarranty('.$value.')'); if ($this->statut >= 0) @@ -4476,17 +4475,18 @@ class Facture extends CommonInvoice /** * Change the retained_warranty_date_limit * - * @param timestamp $value value of retained warranty + * @param int $timestamp date limit of retained warranty in timestamp format + * @param string $dateYmd date limit of retained warranty in Y m d format * @return int >0 if OK, <0 if KO */ - function setRetainedWarrantyDateLimit($timestamp,$dateYmd=false) + public function setRetainedWarrantyDateLimit($timestamp, $dateYmd = false) { if(!$timestamp && $dateYmd){ $timestamp = $this->db->jdate($dateYmd); } - dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$value.')'); + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$timestamp.')'); if ($this->statut >= 0) { $fieldname = 'retained_warranty_date_limit'; diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index d586125785a..01693645435 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -916,7 +916,7 @@ if ($resql) if (! empty($arrayfields['f.total_localtax1']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax1']['label'], $_SERVER['PHP_SELF'], 'f.localtax1', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['f.total_localtax2']['checked'])) print_liste_field_titre($arrayfields['f.total_localtax2']['label'], $_SERVER['PHP_SELF'], 'f.localtax2', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['f.total_ttc']['checked'])) print_liste_field_titre($arrayfields['f.total_ttc']['label'], $_SERVER['PHP_SELF'], 'f.total_ttc', '', $param, 'class="right"', $sortfield, $sortorder); - if (! empty($arrayfields['f.retained_warranty']['checked'])) print_liste_field_titre($arrayfields['f.retained_warranty']['label'],$_SERVER['PHP_SELF'],'','',$param,'align="right"',$sortfield,$sortorder); + if (! empty($arrayfields['f.retained_warranty']['checked'])) print_liste_field_titre($arrayfields['f.retained_warranty']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'align="right"', $sortfield, $sortorder); if (! empty($arrayfields['dynamount_payed']['checked'])) print_liste_field_titre($arrayfields['dynamount_payed']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); if (! empty($arrayfields['rtp']['checked'])) print_liste_field_titre($arrayfields['rtp']['label'], $_SERVER['PHP_SELF'], '', '', $param, 'class="right"', $sortfield, $sortorder); // Extra fields diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index d6d82f5c363..92234a31301 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2059,7 +2059,7 @@ abstract class CommonObject * @param int $id Id of new payment terms * @return int >0 if OK, <0 if KO */ - function setRetainedWarrantyPaymentTerms($id) + public function setRetainedWarrantyPaymentTerms($id) { dol_syslog(get_class($this).'::setRetainedWarrantyPaymentTerms('.$id.')'); if ($this->statut >= 0 || $this->element == 'societe') diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index a4954c07f39..3e792035e5b 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2216,8 +2216,7 @@ function pdf_getSizeForImage($realpath) * @param int $hidedetails Hide details (0=no, 1=yes, 2=just special lines) * @return string Return total of line excl tax */ - -function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0) +function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails = 0) { global $conf, $hookmanager; $sign=1; @@ -2243,7 +2242,7 @@ function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0 $action=''; - if( $hookmanager->executeHooks('getlinetotalremise',$parameters,$object,$action)>0) + if( $hookmanager->executeHooks('getlinetotalremise', $parameters, $object, $action)>0) { return $hookmanager->resPrint; // Note that $action and $object may have been modified by some hooks } @@ -2252,4 +2251,4 @@ function pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0 if (empty($hidedetails) || $hidedetails > 1) return $sign * ( ($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht ); } return ''; -} \ No newline at end of file +} diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index e5c5b64e809..7922f96d94f 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1349,10 +1349,12 @@ class pdf_crabe extends ModelePDFFactures // Retained warranty if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) { + $displayWarranty = false; + // Check if this situation invoice is 100% for real if(!empty($object->lines)){ $displayWarranty = true; - foreach( $object->lines as $i => $line ){ + foreach($object->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -1361,8 +1363,8 @@ class pdf_crabe extends ModelePDFFactures } if($displayWarranty){ - $pdf->SetTextColor(40,40,40); - $pdf->SetFillColor(255,255,255); + $pdf->SetTextColor(40, 40, 40); + $pdf->SetFillColor(255, 255, 255); $retainedWarranty = $object->total_ttc * $object->retained_warranty / 100; $billedWithRetainedWarranty = $object->total_ttc - $retainedWarranty ; @@ -1373,7 +1375,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("ToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty), $useborder, 'R', 1); // retained warranty $index++; @@ -1384,7 +1386,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty), $useborder, 'R', 1); } } diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 0e5f9a69819..1e16c4439dd 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1278,7 +1278,7 @@ class pdf_sponge extends ModelePDFFactures foreach ($TPreviousIncoice as &$fac){ if($posy > $this->page_hauteur - 4 ) { - $this->_pagefoot($pdf,$object,$outputlangs,1); + $this->_pagefoot($pdf, $object, $outputlangs, 1); $pdf->addPage(); $pdf->setY($this->marge_haute); $posy = $pdf->GetY(); @@ -1286,11 +1286,11 @@ class pdf_sponge extends ModelePDFFactures // cumul TVA précédent $index++; - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $fac->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - $pdf->SetXY($col2x,$posy); + $pdf->SetXY($col2x, $posy); $facSign = ''; if($i>1){ @@ -1306,15 +1306,14 @@ class pdf_sponge extends ModelePDFFactures $posy += $tab2_hl; $pdf->setY($posy); - } // Display curent total - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFSituationTitle", $object->situation_counter).' '.$outputlangs->transnoentities("TotalHT"), 0, 'L', 1); - $pdf->SetXY($col2x,$posy); + $pdf->SetXY($col2x, $posy); $facSign = ''; if($i>1){ $facSign = $object->total_ht>=0?'+':''; // gestion d'un cas particulier client @@ -1332,7 +1331,7 @@ class pdf_sponge extends ModelePDFFactures // Display all total $pdf->SetFont('','', $default_font_size - 1); - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("SituationTotalProgress", $avancementGlobal), 0, 'L', 1); @@ -1367,7 +1366,7 @@ class pdf_sponge extends ModelePDFFactures } if($total_line_remise > 0) { if (! empty($conf->global->MAIN_SHOW_AMOUNT_DISCOUNT)) { - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + $tab2_hl); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalDiscount"), 0, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl); @@ -1377,7 +1376,7 @@ class pdf_sponge extends ModelePDFFactures } // Show total NET before discount if (! empty($conf->global->MAIN_SHOW_AMOUNT_BEFORE_DISCOUNT)) { - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + 0); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHTBeforeDiscount"), 0, 'L', 1); $pdf->SetXY($col2x, $tab2_top + 0); @@ -1388,7 +1387,7 @@ class pdf_sponge extends ModelePDFFactures } // Total HT - $pdf->SetFillColor(255,255,255); + $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1); @@ -1417,7 +1416,7 @@ class pdf_sponge extends ModelePDFFactures //{ foreach($this->localtax1 as $localtax_type => $localtax_rate) { - if (in_array((string) $localtax_type, array('1','3','5'))) continue; + if (in_array((string) $localtax_type, array('1', '3', '5'))) continue; foreach($localtax_rate as $tvakey => $tvaval) { @@ -1637,6 +1636,7 @@ class pdf_sponge extends ModelePDFFactures if( !empty($object->situation_final) && ( $object->type == Facture::TYPE_SITUATION && (!empty($object->retained_warranty) ) ) ) { $displayWarranty = false; + // Check if this situation invoice is 100% for real if(!empty($object->situation_final)){ $displayWarranty = true; @@ -1644,7 +1644,7 @@ class pdf_sponge extends ModelePDFFactures elseif(!empty($object->lines) && $object->status == Facture::STATUS_DRAFT ){ // $object->situation_final need validation to be done so this test is need for draft $displayWarranty = true; - foreach( $object->lines as $i => $line ){ + foreach($object->lines as $i => $line ){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -1665,7 +1665,7 @@ class pdf_sponge extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("PDFEVOLToPayOn", dol_print_date($object->date_lim_reglement, 'day')), $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($billedWithRetainedWarranty), $useborder, 'R', 1); // retained warranty $index++; @@ -1676,13 +1676,13 @@ class pdf_sponge extends ModelePDFFactures $pdf->MultiCell($col2x-$col1x, $tab2_hl, $retainedWarrantyToPayOn, $useborder, 'L', 1); $pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index); - $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty) , $useborder, 'R', 1); + $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty), $useborder, 'R', 1); } } } } - $pdf->SetTextColor(0,0,0); + $pdf->SetTextColor(0, 0, 0); $creditnoteamount=$object->getSumCreditNotesUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); $depositsamount=$object->getSumDepositsUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0); From 7a17c43b262bfcf565fea6922b33d574020ebe4e Mon Sep 17 00:00:00 2001 From: atm-josselin Date: Mon, 24 Jun 2019 16:05:24 +0200 Subject: [PATCH 0046/1148] FIX : filepath of generated documents doesn't handle products with special characters --- htdocs/core/class/html.formfile.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 679989a75a0..522804b601c 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -764,7 +764,7 @@ class FormFile // Show file name with link to download $out.= ''; - $out.= ' Date: Tue, 25 Jun 2019 09:07:04 +0200 Subject: [PATCH 0047/1148] Fix function name and doc --- htdocs/admin/facture_situation.php | 33 ++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index dc3ec771b16..9b275944e3a 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -85,9 +85,9 @@ _updateBtn(); print ''; -_print_on_off('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); -_print_on_off('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); -_print_on_off('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); +_printOnOff('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); +_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); +_printOnOff('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); $metas = array( 'type' => 'number', @@ -95,7 +95,7 @@ $metas = array( 'min' => 0, 'max' => 100 ); -_print_input_form_part('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); +_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); @@ -123,6 +123,10 @@ dol_fiche_end(); llxFooter(); $db->close(); +/** + * print an update button + * @return void + */ function _updateBtn(){ global $langs; print '
'; @@ -130,7 +134,14 @@ function _updateBtn(){ print '
'; } -function _print_on_off($confkey, $title = false, $desc ='') +/** + * Print a On/Off button + * @param $confkey + * @param bool $title + * @param string $desc + * @return void + */ +function _printOnOff($confkey, $title = false, $desc ='') { global $var, $bc, $langs; $var=!$var; @@ -148,7 +159,17 @@ function _print_on_off($confkey, $title = false, $desc ='') } -function _print_input_form_part($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) +/** + * Print a form part + * @param $confkey + * @param bool $title + * @param string $desc + * @param array $metas + * @param string $type + * @param bool $help + * @return void + */ +function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) { global $var, $bc, $langs, $conf, $db, $inputCount; $var=!$var; From 4c4444a53f1399410eb13077cf9c465c370b85ce Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 09:36:53 +0200 Subject: [PATCH 0048/1148] fix travis recommendations --- .../modules/facture/doc/pdf_crabe.modules.php | 3 +-- .../modules/facture/doc/pdf_sponge.modules.php | 16 ++++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 7922f96d94f..f30193b3a9e 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1359,7 +1359,7 @@ class pdf_crabe extends ModelePDFFactures $displayWarranty = false; break; } - } + } } if($displayWarranty){ @@ -1389,7 +1389,6 @@ class pdf_crabe extends ModelePDFFactures $pdf->MultiCell($largcol2, $tab2_hl, price($retainedWarranty), $useborder, 'R', 1); } } - } } diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 1e16c4439dd..ed18eb1b954 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1330,14 +1330,14 @@ class pdf_sponge extends ModelePDFFactures $posy += $tab2_hl; // Display all total - $pdf->SetFont('','', $default_font_size - 1); + $pdf->SetFont('', '', $default_font_size - 1); $pdf->SetFillColor(255, 255, 255); $pdf->SetXY($col1x, $posy); $pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("SituationTotalProgress", $avancementGlobal), 0, 'L', 1); - $pdf->SetXY($col2x,$posy); + $pdf->SetXY($col2x, $posy); $pdf->MultiCell($largcol2, $tab2_hl, price($total_a_payer*$avancementGlobal/100, 0, $outputlangs), 0, 'R', 1); - $pdf->SetFont('','', $default_font_size - 2); + $pdf->SetFont('', '', $default_font_size - 2); $posy += $tab2_hl; @@ -1349,7 +1349,6 @@ class pdf_sponge extends ModelePDFFactures $tab2_top = $posy; $index=0; - } $tab2_top += 3; @@ -1360,7 +1359,7 @@ class pdf_sponge extends ModelePDFFactures // Total remise $total_line_remise=0; foreach($object->lines as $i => $line) { - $total_line_remise+= pdfGetLineTotalDiscountAmount($object,$i,$outputlangs,2); // TODO: add this methode to core/lib/pdf.lib + $total_line_remise+= pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, 2); // TODO: add this methode to core/lib/pdf.lib // Gestion remise sous forme de ligne négative if($line->total_ht < 0) $total_line_remise += -$line->total_ht; } @@ -1648,7 +1647,7 @@ class pdf_sponge extends ModelePDFFactures if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; - } + } } } @@ -1739,6 +1738,11 @@ class pdf_sponge extends ModelePDFFactures return ($tab2_top + ($tab2_hl * $index)); } + public static function liste_modeles($db, $maxfilenamelength = 0) + { + return parent::liste_modeles($db, $maxfilenamelength); // TODO: Change the autogenerated stub + } + /** * Show table for lines * From ee98f3e6d79b7af29bfb64688041e7a7d9a8d0c3 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 10:48:22 +0200 Subject: [PATCH 0049/1148] fix travis recommendations --- htdocs/admin/facture_situation.php | 46 +++++++++---------- htdocs/compta/facture/card.php | 1 - htdocs/compta/facture/class/facture.class.php | 2 +- .../modules/facture/doc/pdf_crabe.modules.php | 2 +- .../facture/doc/pdf_sponge.modules.php | 11 ++++- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index 9b275944e3a..a63233329f3 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -38,10 +38,10 @@ $langs->loadLangs(array('admin', 'errors', 'other', 'bills')); if (! $user->admin) accessforbidden(); -$action = GETPOST('action','alpha'); -$value = GETPOST('value','alpha'); -$label = GETPOST('label','alpha'); -$scandir = GETPOST('scan_dir','alpha'); +$action = GETPOST('action', 'alpha'); +$value = GETPOST('value', 'alpha'); +$label = GETPOST('label', 'alpha'); +$scandir = GETPOST('scan_dir', 'alpha'); $type='invoice'; @@ -57,15 +57,15 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; * View */ -$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']); +$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); -llxHeader("",$langs->trans("BillsSetup"),'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); +llxHeader("", $langs->trans("BillsSetup"), 'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); $form=new Form($db); $linkback=''.$langs->trans("BackToModuleList").''; -print load_fiche_titre($langs->trans("BillsSetup"),$linkback,'title_setup'); +print load_fiche_titre($langs->trans("BillsSetup"), $linkback, 'title_setup'); $head = invoice_admin_prepare_head(); dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoice'); @@ -74,7 +74,7 @@ dol_fiche_head($head, 'situation', $langs->trans("InvoiceSituation"), -1, 'invoi * Numbering module */ -print load_fiche_titre($langs->trans("InvoiceSituation"),'',''); +print load_fiche_titre($langs->trans("InvoiceSituation"), '', ''); $var=0; print '
'; @@ -85,9 +85,9 @@ _updateBtn(); print '
'; -_printOnOff('INVOICE_USE_SITUATION',$langs->trans('UseSituationInvoices')); -_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE',$langs->trans('UseSituationInvoicesCreditNote')); -_printOnOff('INVOICE_USE_SITUATION_RETAINED_WARRANTY',$langs->trans('Retainedwarranty')); +_printOnOff('INVOICE_USE_SITUATION', $langs->trans('UseSituationInvoices')); +_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE', $langs->trans('UseSituationInvoicesCreditNote')); +_printOnOff('INVOICE_USE_SITUATION_RETAINED_WARRANTY', $langs->trans('Retainedwarranty')); $metas = array( 'type' => 'number', @@ -95,7 +95,7 @@ $metas = array( 'min' => 0, 'max' => 100 ); -_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT',$langs->trans('RetainedwarrantyDefaultPercent'),'',$metas); +_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT', $langs->trans('RetainedwarrantyDefaultPercent'), '', $metas); @@ -136,12 +136,12 @@ function _updateBtn(){ /** * Print a On/Off button - * @param $confkey - * @param bool $title - * @param string $desc + * @param string $confkey the conf key + * @param bool $title Title of conf + * @param string $desc Description of * @return void */ -function _printOnOff($confkey, $title = false, $desc ='') +function _printOnOff($confkey, $title = false, $desc = '') { global $var, $bc, $langs; $var=!$var; @@ -161,11 +161,11 @@ function _printOnOff($confkey, $title = false, $desc ='') /** * Print a form part - * @param $confkey - * @param bool $title - * @param string $desc - * @param array $metas - * @param string $type + * @param string $confkey the conf key + * @param bool $title Title of conf + * @param string $desc Description of + * @param array $metas html meta + * @param string $type type of input textarea or input * @param bool $help * @return void */ @@ -186,7 +186,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array } - $metas = array_merge ($defaultMetas, $metas); + $metas = array_merge($defaultMetas, $metas); $metascompil = ''; foreach ($metas as $key => $values) { @@ -197,7 +197,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array print ''; - } } else // Credit note diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 8c8fd3365ca..c6b83793f77 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -4409,7 +4409,7 @@ class Facture extends CommonInvoice $displayWarranty = true; // Check if this situation invoice is 100% for real if(!empty($this->lines)){ - foreach($this->lines as $i => $line ){ + foreach($this->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index f30193b3a9e..8cac32d1f2d 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1354,7 +1354,7 @@ class pdf_crabe extends ModelePDFFactures // Check if this situation invoice is 100% for real if(!empty($object->lines)){ $displayWarranty = true; - foreach($object->lines as $i => $line ){ + foreach($object->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index ed18eb1b954..2a1b0516112 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -1643,7 +1643,7 @@ class pdf_sponge extends ModelePDFFactures elseif(!empty($object->lines) && $object->status == Facture::STATUS_DRAFT ){ // $object->situation_final need validation to be done so this test is need for draft $displayWarranty = true; - foreach($object->lines as $i => $line ){ + foreach($object->lines as $i => $line){ if($line->product_type < 2 && $line->situation_percent < 100){ $displayWarranty = false; break; @@ -1738,8 +1738,17 @@ class pdf_sponge extends ModelePDFFactures return ($tab2_top + ($tab2_hl * $index)); } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Return list of active generation modules + * + * @param DoliDB $db Database handler + * @param integer $maxfilenamelength Max length of value to show + * @return array List of templates + */ public static function liste_modeles($db, $maxfilenamelength = 0) { + // phpcs:enable return parent::liste_modeles($db, $maxfilenamelength); // TODO: Change the autogenerated stub } From a8157f865efe258abdef80d6bf4300e9836c2697 Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 11:59:35 +0200 Subject: [PATCH 0050/1148] fix travis recommendations --- htdocs/admin/facture_situation.php | 44 ++++++++++++++++-------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index a63233329f3..c6fcf57ea22 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -59,7 +59,10 @@ include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php'; $dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']); -llxHeader("", $langs->trans("BillsSetup"), 'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'); +llxHeader( + "", $langs->trans("BillsSetup"), + 'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura' +); $form=new Form($db); @@ -124,10 +127,12 @@ llxFooter(); $db->close(); /** - * print an update button + * Print an update button + * * @return void */ -function _updateBtn(){ +function _updateBtn() +{ global $langs; print '
'; print ''; @@ -136,9 +141,11 @@ function _updateBtn(){ /** * Print a On/Off button + * * @param string $confkey the conf key - * @param bool $title Title of conf - * @param string $desc Description of + * @param bool $title Title of conf + * @param string $desc Description + * * @return void */ function _printOnOff($confkey, $title = false, $desc = '') @@ -147,8 +154,7 @@ function _printOnOff($confkey, $title = false, $desc = '') $var=!$var; print '
'; print ''; @@ -161,12 +167,14 @@ function _printOnOff($confkey, $title = false, $desc = '') /** * Print a form part + * * @param string $confkey the conf key - * @param bool $title Title of conf - * @param string $desc Description of - * @param array $metas html meta - * @param string $type type of input textarea or input - * @param bool $help + * @param bool $title Title of conf + * @param string $desc Description of + * @param array $metas html meta + * @param string $type type of input textarea or input + * @param bool $help help description + * * @return void */ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) @@ -188,8 +196,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array $metas = array_merge($defaultMetas, $metas); $metascompil = ''; - foreach ($metas as $key => $values) - { + foreach ($metas as $key => $values){ $metascompil .= ' '.$key.'="'.$values.'" '; } @@ -198,13 +205,11 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array if(!empty($help)){ print $form->textwithtooltip(($title?$title:$langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, '')); - } - else { + }else{ print $title?$title:$langs->trans($confkey); } - if(!empty($desc)) - { + if(!empty($desc)){ print '
'.$langs->trans($desc).''; } @@ -216,8 +221,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array print ''; if($type=='textarea'){ print ''; - } - else { + }else{ print ''; } print ''; From 8b7c260180edbba3324cbd3cc6472c5e16ba018d Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 26 Jun 2019 12:13:52 +0200 Subject: [PATCH 0051/1148] fix travis recommendations --- htdocs/admin/facture_situation.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index c6fcf57ea22..4907aaf2fea 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -107,8 +107,8 @@ _printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT', $lang $inputCount = empty($inputCount)?1:($inputCount+1); print ''; print ''; -print ''; -print ''; +print ''; @@ -154,12 +154,12 @@ function _printOnOff($confkey, $title = false, $desc = '') $var=!$var; print ''; print ''; - print ''; - print ''; + print ''; } @@ -188,7 +188,7 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array 'name' => 'value'.$inputCount ); - if($type!='textarea'){ + if ($type!='textarea') { $defaultMetas['type'] = 'text'; $defaultMetas['value'] = $conf->global->{$confkey}; } @@ -196,32 +196,32 @@ function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array $metas = array_merge($defaultMetas, $metas); $metascompil = ''; - foreach ($metas as $key => $values){ + foreach ($metas as $key => $values) { $metascompil .= ' '.$key.'="'.$values.'" '; } print ''; print ''; - print ''; - print ''; + print ''; From 49db277368b0bcc89eabf0930d019963c43f592f Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Wed, 26 Jun 2019 16:42:14 +0200 Subject: [PATCH 0052/1148] FIX ending slash --- htdocs/core/lib/order.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/order.lib.php b/htdocs/core/lib/order.lib.php index 93a7aaa71e0..cbb33bb6615 100644 --- a/htdocs/core/lib/order.lib.php +++ b/htdocs/core/lib/order.lib.php @@ -68,7 +68,7 @@ function commande_prepare_head(Commande $object) if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled) $text.='/'; if ($conf->livraison_bon->enabled) $text.=$langs->trans("Receivings"); if ($nbShipments > 0 || $nbReceiption > 0) $text.= ' '.($nbShipments?$nbShipments:0); - if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled) $text.='/'; + if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled && ($nbShipments > 0 || $nbReceiption > 0)) $text.='/'; if ($conf->expedition_bon->enabled && $conf->livraison_bon->enabled && ($nbShipments > 0 || $nbReceiption > 0)) $text.= ($nbReceiption?$nbReceiption:0); if ($nbShipments > 0 || $nbReceiption > 0) $text.= ''; $head[$h][1] = $text; From e6ee1e70413f19e139a089f1626770b6f73e0a76 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Thu, 27 Jun 2019 14:21:38 +0200 Subject: [PATCH 0053/1148] FIX Force order method in order supplier before making order --- htdocs/fourn/commande/card.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 9b27810e6bb..178816bccbb 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -902,6 +902,17 @@ $result = $object->updateline( } } + // Open DSI -- Force mandatory order method -- Begin + if ($action == 'commande') { + $methodecommande = GETPOST('methodecommande'); + + if ($methodecommande <= 0) { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("OrderMode")), null, 'errors'); + $action = 'makeorder'; + } + } + // Open DSI -- Force mandatory order method -- End + if ($action == 'confirm_commande' && $confirm == 'yes' && $user->rights->fournisseur->commande->commander) { $result = $object->commande($user, $_REQUEST["datecommande"], $_REQUEST["methode"], $_REQUEST['comment']); @@ -2543,7 +2554,10 @@ elseif (! empty($object->id)) print $form->selectDate($date_com, '', 1, 1, '', "commande", 1, 1); print ''; - print ''; From fc1d4704a52ddce4e8d5ed5b6ba0b94efb0a6295 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Thu, 27 Jun 2019 17:33:47 +0200 Subject: [PATCH 0054/1148] Fix invoice list filter on withdrawal card --- htdocs/compta/prelevement/factures.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/prelevement/factures.php b/htdocs/compta/prelevement/factures.php index 64811c7604a..48bc508455e 100644 --- a/htdocs/compta/prelevement/factures.php +++ b/htdocs/compta/prelevement/factures.php @@ -160,7 +160,7 @@ $sql.= " AND pl.fk_prelevement_bons = p.rowid"; $sql.= " AND f.fk_soc = s.rowid"; $sql.= " AND pf.fk_facture = f.rowid"; $sql.= " AND f.entity = ".$conf->entity; -if ($prev_id) $sql.= " AND p.rowid=".$prev_id; +if ($object->id) $sql.= " AND p.rowid=".$object->id; if ($socid) $sql.= " AND s.rowid = ".$socid; $sql.= $db->order($sortfield,$sortorder); From f4978e9473e53a4959155ae731fe4fd839097ead Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Fri, 28 Jun 2019 10:58:31 +0200 Subject: [PATCH 0055/1148] FIX/NEW - Force mandatory order method --- htdocs/fourn/commande/card.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 178816bccbb..ff1b1020ae6 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -902,7 +902,7 @@ $result = $object->updateline( } } - // Open DSI -- Force mandatory order method -- Begin + // Force mandatory order method if ($action == 'commande') { $methodecommande = GETPOST('methodecommande'); @@ -911,7 +911,6 @@ $result = $object->updateline( $action = 'makeorder'; } } - // Open DSI -- Force mandatory order method -- End if ($action == 'confirm_commande' && $confirm == 'yes' && $user->rights->fournisseur->commande->commander) { @@ -2554,10 +2553,8 @@ elseif (! empty($object->id)) print $form->selectDate($date_com, '', 1, 1, '', "commande", 1, 1); print ''; - // Open DSI -- Force mandatory order method -- Begin - //print ''; From a33071d7792079351849291616c41447427f805f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 28 Jun 2019 12:52:35 +0200 Subject: [PATCH 0056/1148] FIX #11421 --- htdocs/bom/class/bom.class.php | 8 ++++---- htdocs/emailcollector/class/emailcollector.class.php | 4 ++-- .../emailcollector/class/emailcollectoraction.class.php | 6 +++--- .../emailcollector/class/emailcollectorfilter.class.php | 4 ++-- htdocs/modulebuilder/template/class/myobject.class.php | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 5d9f1f50cbc..73682c7698c 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -183,9 +183,9 @@ class BOM extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields[$key]['arrayofkeyval'])) + if (is_array($val['arrayofkeyval'])) { - foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) + foreach($val['arrayofkeyval'] as $key2 => $val2) { $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } @@ -1084,9 +1084,9 @@ class BOMLine extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields[$key]['arrayofkeyval'])) + if (is_array($val['arrayofkeyval'])) { - foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) + foreach($val['arrayofkeyval'] as $key2 => $val2) { $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php index b22d7b23607..86b7e5a547d 100644 --- a/htdocs/emailcollector/class/emailcollector.class.php +++ b/htdocs/emailcollector/class/emailcollector.class.php @@ -209,9 +209,9 @@ class EmailCollector extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields[$key]['arrayofkeyval'])) + if (is_array($val['arrayofkeyval'])) { - foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) + foreach($val['arrayofkeyval'] as $key2 => $val2) { $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php index 96f650c9fc0..e8062497534 100644 --- a/htdocs/emailcollector/class/emailcollectoraction.class.php +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php @@ -164,11 +164,11 @@ class EmailCollectorAction extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields[$key]['arrayofkeyval'])) + if (is_array($val['arrayofkeyval'])) { - foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) + foreach($val['arrayofkeyval'] as $key2 => $val2) { - $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); + $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } } } diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php index 5c7c7184ffc..69ab957040d 100644 --- a/htdocs/emailcollector/class/emailcollectorfilter.class.php +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php @@ -133,9 +133,9 @@ class EmailCollectorFilter extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields[$key]['arrayofkeyval'])) + if (is_array($val['arrayofkeyval'])) { - foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) + foreach($val['arrayofkeyval'] as $key2 => $val2) { $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 0025c00165d..13157b2c18f 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -225,9 +225,9 @@ class MyObject extends CommonObject // Translate some data of arrayofkeyval foreach($this->fields as $key => $val) { - if (is_array($this->fields[$key]['arrayofkeyval'])) + if (is_array($val['arrayofkeyval'])) { - foreach($this->fields[$key]['arrayofkeyval'] as $key2 => $val2) + foreach($val['arrayofkeyval'] as $key2 => $val2) { $this->fields[$key]['arrayofkeyval'][$key2]=$langs->trans($val2); } From 75b55ac5d6406a6559e5650e7b2fe850f2b66606 Mon Sep 17 00:00:00 2001 From: John Botella Date: Fri, 28 Jun 2019 16:10:41 +0200 Subject: [PATCH 0057/1148] fix travis recommendations --- htdocs/admin/facture_situation.php | 2 +- htdocs/compta/facture/card.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/admin/facture_situation.php b/htdocs/admin/facture_situation.php index 4907aaf2fea..0e62029e8f2 100644 --- a/htdocs/admin/facture_situation.php +++ b/htdocs/admin/facture_situation.php @@ -177,7 +177,7 @@ function _printOnOff($confkey, $title = false, $desc = '') * * @return void */ -function _printInputFormPart($confkey, $title = false, $desc ='', $metas = array(), $type='input', $help = false) +function _printInputFormPart($confkey, $title = false, $desc = '', $metas = array(), $type = 'input', $help = false) { global $var, $bc, $langs, $conf, $db, $inputCount; $var=!$var; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 340527f16ae..df753c1b5ac 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -308,7 +308,7 @@ if (empty($reshook)) dol_print_error($db, $object->error); } - else if ($action == 'setretainedwarrantyconditions' && $user->rights->facture->creer) + elseif ($action == 'setretainedwarrantyconditions' && $user->rights->facture->creer) { $object->fetch($id); $object->retained_warranty_fk_cond_reglement = 0; // To clean property @@ -323,7 +323,7 @@ if (empty($reshook)) if ($result < 0) dol_print_error($db, $object->error); } - else if ($action == 'setretainedwarranty' && $user->rights->facture->creer) + elseif ($action == 'setretainedwarranty' && $user->rights->facture->creer) { $object->fetch($id); $result = $object->setRetainedWarranty(GETPOST('retained_warranty', 'float')); @@ -331,7 +331,7 @@ if (empty($reshook)) dol_print_error($db, $object->error); } - else if ($action == 'setretainedwarrantydatelimit' && $user->rights->facture->creer) + elseif ($action == 'setretainedwarrantydatelimit' && $user->rights->facture->creer) { $object->fetch($id); $result = $object->setRetainedWarrantyDateLimit(GETPOST('retained_warranty_date_limit', 'float')); From 97827f5172d227981d936c7a6daeaf3a7e350837 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 01:44:49 +0200 Subject: [PATCH 0058/1148] Fix print --- htdocs/product/stats/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php index 399cc59b7c2..c8b34a1182d 100644 --- a/htdocs/product/stats/card.php +++ b/htdocs/product/stats/card.php @@ -388,7 +388,7 @@ if ($result || empty($id)) } else { - print $dategenerated=($mesg?''.$mesg.'':$langs->trans("ChartNotGenerated")); + $dategenerated=($mesg?''.$mesg.'':$langs->trans("ChartNotGenerated")); } $linktoregenerate='id).((string) $type != ''?'&type='.$type:'').'&action=recalcul&mode='.$mode.'&search_year='.$search_year.'&search_categ='.$search_categ.'">'.img_picto($langs->trans("ReCalculate").' ('.$dategenerated.')', 'refresh').''; From 8aebcc45b229f783c6d62ac88b8051a9bbd2adf5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 01:54:38 +0200 Subject: [PATCH 0059/1148] Fix message to not show sometimes --- htdocs/product/stats/card.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php index c8b34a1182d..b95613c0e68 100644 --- a/htdocs/product/stats/card.php +++ b/htdocs/product/stats/card.php @@ -350,9 +350,9 @@ if ($result || empty($id)) dol_print_error($db, 'Error for calculating graph on key='.$key.' - '.$object->error); } } - } - $mesg = $langs->trans("ChartGenerated"); + //setEventMessages($langs->trans("ChartGenerated"), null, 'mesgs'); + } } // Show graphs @@ -390,7 +390,7 @@ if ($result || empty($id)) { $dategenerated=($mesg?''.$mesg.'':$langs->trans("ChartNotGenerated")); } - $linktoregenerate='id).((string) $type != ''?'&type='.$type:'').'&action=recalcul&mode='.$mode.'&search_year='.$search_year.'&search_categ='.$search_categ.'">'.img_picto($langs->trans("ReCalculate").' ('.$dategenerated.')', 'refresh').''; + $linktoregenerate='id).((string) $type != ''?'&type='.$type:'').'&action=recalcul&mode='.$mode.'&search_year='.$search_year.'&search_categ='.$search_categ.'">'.img_picto($langs->trans("ReCalculate").' ('.$dategenerated.')', 'refresh').''; // Show graph print '
'; if(!empty($help)){ - print $form->textwithtooltip( ($title?$title:$langs->trans($confkey)) , $langs->trans($help),2,1,img_help(1,'')); + print $form->textwithtooltip(($title?$title:$langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, '')); } else { print $title?$title:$langs->trans($confkey); diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 169577a2c1e..340527f16ae 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -4684,7 +4684,6 @@ elseif ($id > 0 || ! empty($ref)) print $langs->trans("RetainedWarranty") . ' ('.$object->retained_warranty.'%)'; print !empty($object->retained_warranty_date_limit)?' '.$langs->trans("ToPayOn", dol_print_date($object->retained_warranty_date_limit, 'day')):''; print ' :' . price($retainedWarranty) . ' 
'.($title?$title:$langs->trans($confkey)); - if(!empty($desc)) - { + if(!empty($desc)){ print '
'.$langs->trans($desc).''; } print '
'.$langs->trans('PaymentConditionsShortRetainedWarranty').' '; +print ' '; print ''; $form->select_conditions_paiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'value'.$inputCount, -1, 1); print '
'.($title?$title:$langs->trans($confkey)); - if(!empty($desc)){ + if (!empty($desc)) { print '
'.$langs->trans($desc).''; } print '
 '; + print ' '; print ajax_constantonoff($confkey); print '
'; - if(!empty($help)){ + if (!empty($help)) { print $form->textwithtooltip(($title?$title:$langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, '')); - }else{ + } else { print $title?$title:$langs->trans($confkey); } - if(!empty($desc)){ + if (!empty($desc)) { print '
'.$langs->trans($desc).''; } print '
 '; + print ' '; print ''; print ''; - if($type=='textarea'){ + if ($type=='textarea') { print ''; - }else{ + } else { print ''; } print '
'.$langs->trans("OrderMode").''; + // Open DSI -- Force mandatory order method -- Begin + //print '
'.$langs->trans("OrderMode").''; + print '
'.$langs->trans("OrderMode").''; + // Open DSI -- Force mandatory order method -- End $formorder->selectInputMethod(GETPOST('methodecommande'), "methodecommande", 1); print '
'.$langs->trans("OrderMode").''; + // Force mandatory order method print '
'.$langs->trans("OrderMode").''; - // Open DSI -- Force mandatory order method -- End $formorder->selectInputMethod(GETPOST('methodecommande'), "methodecommande", 1); print '
'; From 93b0e452468beb61c1cc75feb6a622df71db3c09 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 02:27:58 +0200 Subject: [PATCH 0060/1148] Fix duplicate class in some cases --- htdocs/product/class/product.class.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 02de9b4d47d..fc966f7f19a 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -4033,7 +4033,7 @@ class Product extends CommonObject } $linkclose.= ' title="'.dol_escape_htmltag($label, 1, 1).'"'; - $linkclose.= ' class="classfortooltip"'; + $linkclose.= ' class="nowraponall classfortooltip"'; /* $hookmanager->initHooks(array('productdao')); @@ -4042,6 +4042,10 @@ class Product extends CommonObject if ($reshook > 0) $linkclose = $hookmanager->resPrint; */ } + else + { + $linkclose = ' class="nowraponall"'; + } if ($option == 'supplier' || $option == 'category') { $url = DOL_URL_ROOT.'/product/fournisseurs.php?id='.$this->id; @@ -4062,7 +4066,7 @@ class Product extends CommonObject } } - $linkstart = ''; $linkend=''; From b37f55d13a775cda146aa252304464ed4267cfbb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 16:06:40 +0200 Subject: [PATCH 0061/1148] Add log --- htdocs/core/modules/facture/doc/pdf_crabe.modules.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 9890df8b607..8252403ea3f 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -237,6 +237,8 @@ class pdf_crabe extends ModelePDFFactures // phpcs:enable global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + dol_syslog("write_file outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang : 'null')); + if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; From 046f32df4474b921bbbf53eecec48b897a169d83 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 16:29:32 +0200 Subject: [PATCH 0062/1148] Work on nblignes -> nblines --- htdocs/admin/boxes.php | 2 +- htdocs/cashdesk/include/environnement.php | 2 +- htdocs/comm/propal/class/propal.class.php | 4 ++-- htdocs/comm/remx.php | 4 ++-- htdocs/commande/class/commande.class.php | 4 ++-- .../facture/class/facture-rec.class.php | 6 +++--- htdocs/compta/facture/class/facture.class.php | 6 +++--- htdocs/contrat/card.php | 2 -- htdocs/contrat/class/contrat.class.php | 8 ++++---- htdocs/core/boxes/box_services_contracts.php | 20 +++++++++---------- htdocs/core/class/CMailFile.class.php | 3 +-- htdocs/core/db/Database.interface.php | 6 +++--- htdocs/core/db/mssql.class.php | 4 ++-- htdocs/core/db/mysqli.class.php | 4 ++-- htdocs/core/db/pgsql.class.php | 4 ++-- htdocs/core/lib/files.lib.php | 6 +++--- htdocs/core/lib/pdf.lib.php | 4 ++-- .../core/modules/bank/doc/pdf_ban.modules.php | 2 +- .../bank/doc/pdf_sepamandate.modules.php | 2 +- .../commande/doc/pdf_einstein.modules.php | 12 +++++------ .../commande/doc/pdf_eratosthene.modules.php | 14 ++++++------- .../expedition/doc/pdf_espadon.modules.php | 12 +++++------ .../expedition/doc/pdf_merou.modules.php | 6 +++--- .../expedition/doc/pdf_rouget.modules.php | 12 +++++------ .../doc/pdf_standard.modules.php | 8 ++++---- .../modules/facture/doc/pdf_crabe.modules.php | 18 ++++++++--------- .../facture/doc/pdf_sponge.modules.php | 16 +++++++-------- .../fichinter/doc/pdf_soleil.modules.php | 4 ++-- .../livraison/doc/pdf_typhon.modules.php | 2 +- .../product/doc/pdf_standard.modules.php | 8 ++++---- .../project/doc/pdf_baleine.modules.php | 14 ++++++------- .../project/doc/pdf_beluga.modules.php | 8 ++++---- .../project/doc/pdf_timespent.modules.php | 14 ++++++------- .../modules/propale/doc/pdf_azur.modules.php | 16 +++++++-------- .../modules/propale/doc/pdf_cyan.modules.php | 14 ++++++------- .../reception/doc/pdf_squille.modules.php | 12 +++++------ .../stock/doc/pdf_standard.modules.php | 20 +++++++++---------- .../stock/doc/pdf_stdmovement.modules.php | 16 +++++++-------- .../pdf/pdf_canelle.modules.php | 14 ++++++------- .../supplier_order/pdf/pdf_cornas.modules.php | 16 +++++++-------- .../pdf/pdf_muscadet.modules.php | 18 ++++++++--------- .../doc/pdf_standard.modules.php | 10 +++++----- .../doc/pdf_aurore.modules.php | 16 +++++++-------- htdocs/debugbar/class/TraceableDB.php | 4 ++-- htdocs/expedition/class/expedition.class.php | 4 ++-- .../class/expensereport.class.php | 10 +++++----- htdocs/fichinter/card-rec.php | 2 +- htdocs/fichinter/card.php | 5 ++--- htdocs/fourn/class/paiementfourn.class.php | 2 +- htdocs/fourn/facture/card.php | 2 +- htdocs/holiday/class/holiday.class.php | 4 ++-- htdocs/livraison/class/livraison.class.php | 2 +- htdocs/opensurvey/results.php | 8 ++++---- htdocs/product/fournisseurs.php | 3 +-- htdocs/public/opensurvey/studs.php | 6 +++--- htdocs/reception/class/reception.class.php | 2 +- htdocs/resource/class/dolresource.class.php | 2 +- .../class/supplier_proposal.class.php | 2 +- htdocs/ticket/class/ticket.class.php | 10 +++++----- 59 files changed, 228 insertions(+), 233 deletions(-) diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 70672f9b6fb..2e81a2c6dad 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -169,7 +169,7 @@ if ($action == 'delete') if ($action == 'switch') { - // On permute les valeur du champ box_order des 2 lignes de la table boxes + // We switch values of field box_order for the 2 lines of table boxes $db->begin(); $objfrom=new ModeleBoxes($db); diff --git a/htdocs/cashdesk/include/environnement.php b/htdocs/cashdesk/include/environnement.php index 6442d1776e3..e06bd7d3704 100644 --- a/htdocs/cashdesk/include/environnement.php +++ b/htdocs/cashdesk/include/environnement.php @@ -44,7 +44,7 @@ $conf_fkaccount_cb = (! empty($_SESSION["CASHDESK_ID_BANKACCOUNT_CB"]))?$_SESSIO // View parameters -$conf_taille_listes = (empty($conf->global->PRODUIT_LIMIT_SIZE)?1000:$conf->global->PRODUIT_LIMIT_SIZE); // Nombre max de lignes a afficher dans les listes +$conf_taille_listes = (empty($conf->global->PRODUIT_LIMIT_SIZE)?1000:$conf->global->PRODUIT_LIMIT_SIZE); // Number max of lines to show in lists $conf_nbr_car_listes = 60; // Nombre max de caracteres par ligne dans les listes // Add hidden option to force decrease of stock whatever is user setup diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 25b04c7c1e2..753d92131cb 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -415,7 +415,7 @@ class Propal extends CommonObject * @param float $remise_percent Pourcentage de remise de la ligne * @param string $price_base_type HT or TTC * @param float $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits for type of lines * @param int $type Type of line (0=product, 1=service). Not used if fk_product is defined, the type of product is used. * @param int $rang Position of line * @param int $special_code Special code (also used by externals modules!) @@ -1715,7 +1715,7 @@ class Propal extends CommonObject $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc; $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index eabb217fb99..bd143b551ae 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -734,7 +734,7 @@ if ($socid > 0) print load_fiche_titre($langs->trans("CustomerDiscounts"), '', ''); } - // Remises liees a lignes de factures + // Discount linked to invoice lines $sql = "SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, rc.tva_tx, rc.multicurrency_amount_ht, rc.multicurrency_amount_tva, rc.multicurrency_amount_ttc,"; $sql.= " rc.datec as dc, rc.description, rc.fk_facture_line, rc.fk_facture,"; $sql.= " rc.fk_facture_source,"; @@ -904,7 +904,7 @@ if ($socid > 0) print load_fiche_titre($langs->trans("SupplierDiscounts"), '', ''); } - // Remises liees a lignes de factures + // Discount linked to invoice lines $sql = "SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, rc.tva_tx, rc.multicurrency_amount_ht, rc.multicurrency_amount_tva, rc.multicurrency_amount_ttc,"; $sql.= " rc.datec as dc, rc.description, rc.fk_invoice_supplier_line, rc.fk_invoice_supplier,"; $sql.= " rc.fk_invoice_supplier_source,"; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 8469dc0cd1f..f1f9dbd1b00 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -1312,7 +1312,7 @@ class Commande extends CommonOrder * @param float $txlocaltax2 Local tax 2 rate (deprecated, use instead txtva with code inside) * @param int $fk_product Id of product * @param float $remise_percent Percentage discount of the line - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_remise_except Id remise * @param string $price_base_type HT or TTC * @param float $pu_ttc Prix unitaire TTC @@ -1985,7 +1985,7 @@ class Commande extends CommonOrder $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc; $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index c1cc9df9e5c..f6b148d308c 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -510,7 +510,7 @@ class FactureRec extends CommonInvoice // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Recupere les lignes de factures predefinies dans this->lines + * Get lines of template invoices into this->lines * * @return int 1 if OK, < 0 if KO */ @@ -876,7 +876,7 @@ class FactureRec extends CommonInvoice * @param int $fk_product Product/Service ID predefined * @param double $remise_percent Percentage discount of the line * @param string $price_base_type HT or TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_remise_except Id remise * @param double $pu_ttc Prix unitaire TTC (> 0 even for credit note) * @param int $type Type of line (0=product, 1=service) @@ -1807,7 +1807,7 @@ class FactureLigneRec extends CommonInvoiceLine /** - * Recupere les lignes de factures predefinies dans this->lines + * Get line of template invoice * * @param int $rowid Id of invoice * @return int 1 if OK, < 0 if KO diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index a502b885ab3..e54e11896b5 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -917,7 +917,7 @@ class Facture extends CommonInvoice $facture->origin = $this->origin; $facture->origin_id = $this->origin_id; - $facture->lines = $this->lines; // Tableau des lignes de factures + $facture->lines = $this->lines; // Array of lines of invoice $facture->products = $this->lines; // Tant que products encore utilise $facture->situation_counter = $this->situation_counter; $facture->situation_cycle_ref=$this->situation_cycle_ref; @@ -1563,7 +1563,7 @@ class Facture extends CommonInvoice $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc; $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); @@ -2661,7 +2661,7 @@ class Facture extends CommonInvoice * @param int $date_start Date start of service * @param int $date_end Date end of service * @param int $ventil Code of dispatching into accountancy - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_remise_except Id discount used * @param string $price_base_type 'HT' or 'TTC' * @param double $pu_ttc Unit price with tax (> 0 even for credit note) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 5c9ac3375dd..671888545c8 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -1096,8 +1096,6 @@ $form = new Form($db); $formfile = new FormFile($db); if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db); -$objectlignestatic=new ContratLigne($db); - // Load object modContract $module=(! empty($conf->global->CONTRACT_ADDON)?$conf->global->CONTRACT_ADDON:'mod_contract_serpis'); if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index e16187412a0..7273ffc3a8e 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -832,7 +832,7 @@ class Contrat extends CommonObject // Retreive all extrafields for contract // fetch optionals attributes and labels $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); @@ -1361,7 +1361,7 @@ class Contrat extends CommonObject * @param int $date_end Date de fin prevue * @param string $price_base_type HT or TTC * @param float $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_fournprice Fourn price id * @param int $pa_ht Buying price HT * @param array $array_options extrafields array @@ -1579,7 +1579,7 @@ class Contrat extends CommonObject * @param int|string $date_debut_reel Date de debut reelle * @param int|string $date_fin_reel Date de fin reelle * @param string $price_base_type HT or TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_fournprice Fourn price id * @param int $pa_ht Buying price HT * @param array $array_options extrafields array @@ -2542,7 +2542,7 @@ class Contrat extends CommonObject /** - * Classe permettant la gestion des lignes de contrats + * Class to manage lines of contracts */ class ContratLigne extends CommonObjectLine { diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php index b1330192a11..3fcd8001227 100644 --- a/htdocs/core/boxes/box_services_contracts.php +++ b/htdocs/core/boxes/box_services_contracts.php @@ -84,7 +84,7 @@ class box_services_contracts extends ModeleBoxes if ($user->rights->service->lire && $user->rights->contrat->lire) { $contractstatic=new Contrat($db); - $contratlignestatic=new ContratLigne($db); + $contractlinestatic=new ContratLigne($db); $thirdpartytmp = new Societe($db); $productstatic = new Product($db); @@ -116,13 +116,13 @@ class box_services_contracts extends ModeleBoxes $objp = $db->fetch_object($result); $datem=$db->jdate($objp->datem); - $contratlignestatic->id=$objp->cdid; - $contratlignestatic->fk_contrat=$objp->rowid; - $contratlignestatic->label=$objp->label; - $contratlignestatic->description=$objp->description; - $contratlignestatic->type=$objp->type; - $contratlignestatic->product_id=$objp->product_id; - $contratlignestatic->product_ref=$objp->product_ref; + $contractlinestatic->id=$objp->cdid; + $contractlinestatic->fk_contrat=$objp->rowid; + $contractlinestatic->label=$objp->label; + $contractlinestatic->description=$objp->description; + $contractlinestatic->type=$objp->type; + $contractlinestatic->product_id=$objp->product_id; + $contractlinestatic->product_ref=$objp->product_ref; $contractstatic->statut=$objp->contract_status; $contractstatic->id=$objp->rowid; @@ -153,7 +153,7 @@ class box_services_contracts extends ModeleBoxes if ($resultd) { $objtp = $db->fetch_object($resultd); - if ($objtp->label != '') $contratlignestatic->label = $objtp->label; + if ($objtp->label != '') $contractlinestatic->label = $objtp->label; } } @@ -215,7 +215,7 @@ class box_services_contracts extends ModeleBoxes $this->info_box_contents[$i][] = array( 'td' => 'class="right" width="18"', - 'text' => $contratlignestatic->LibStatut($objp->statut, 3) + 'text' => $contractlinestatic->LibStatut($objp->statut, 3) ); $i++; diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index bf9b617693f..eabe0440dca 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -286,8 +286,7 @@ class CMailFile // We now define $this->headers and $this->message $this->headers = $smtp_headers . $mime_headers; // On nettoie le header pour qu'il ne se termine pas par un retour chariot. - // Ceci evite aussi les lignes vides en fin qui peuvent etre interpretees - // comme des injections mail par les serveurs de messagerie. + // This avoid also empty lines at end that can be interpreted as mail injection by email servers. $this->headers = preg_replace("/([\r\n]+)$/i", "", $this->headers); //$this->message = $this->eol.'This is a message with multiple parts in MIME format.'.$this->eol; diff --git a/htdocs/core/db/Database.interface.php b/htdocs/core/db/Database.interface.php index 75a6fa14ec1..55e7fe27b0b 100644 --- a/htdocs/core/db/Database.interface.php +++ b/htdocs/core/db/Database.interface.php @@ -101,11 +101,11 @@ interface Database // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Curseur de la requete voulue - * @return int Nombre de lignes - * @see num_rows + * @return int Number of lines + * @see num_rows() */ public function affected_rows($resultset); // phpcs:enable diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index efffd5059c6..d8261b8034e 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -523,10 +523,10 @@ class DoliDBMssql extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @return int Number of lines * @see num_rows() */ public function affected_rows($resultset) diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 98f2e5c5a1b..96763077e66 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -363,10 +363,10 @@ class DoliDBMysqli extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param mysqli_result $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @return int Number of lines * @see num_rows() */ public function affected_rows($resultset) diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 2777f2d0365..250429ce422 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -617,11 +617,11 @@ class DoliDBPgsql extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Result set of request * @return int Nb of lines - * @see num_rows + * @see num_rows() */ public function affected_rows($resultset) { diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index f4a25334e00..8fe5f5b0db4 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1435,16 +1435,16 @@ function dol_meta_create($object) if (is_dir($dir)) { - $nblignes = count($object->lines); + $nblines = count($object->lines); $client = $object->thirdparty->name . " " . $object->thirdparty->address . " " . $object->thirdparty->zip . " " . $object->thirdparty->town; $meta = "REFERENCE=\"" . $object->ref . "\" DATE=\"" . dol_print_date($object->date, '') . "\" - NB_ITEMS=\"" . $nblignes . "\" + NB_ITEMS=\"" . $nblines . "\" CLIENT=\"" . $client . "\" AMOUNT_EXCL_TAX=\"" . $object->total_ht . "\" AMOUNT=\"" . $object->total_ttc . "\"\n"; - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { //Pour les articles $meta .= "ITEM_" . $i . "_QUANTITY=\"" . $object->lines[$i]->qty . "\" diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index db3b8763941..c1b5f4c489d 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2045,10 +2045,10 @@ function pdf_getTotalQty($object, $type, $outputlangs) global $hookmanager; $total=0; - $nblignes=count($object->lines); + $nblines=count($object->lines); // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->special_code != 3) { diff --git a/htdocs/core/modules/bank/doc/pdf_ban.modules.php b/htdocs/core/modules/bank/doc/pdf_ban.modules.php index 5deb40fc7ad..c750ac4e6c5 100644 --- a/htdocs/core/modules/bank/doc/pdf_ban.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_ban.modules.php @@ -111,7 +111,7 @@ class pdf_ban extends ModeleBankAccountDoc if ($conf->bank->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks // Definition of $dir and $file if ($object->specimen) diff --git a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php index 9783c4690b2..40f18d7f158 100644 --- a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php @@ -114,7 +114,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc if (! empty($conf->bank->dir_output)) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks // Definition of $dir and $file if ($object->specimen) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 8677a16db38..0e064991444 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -219,7 +219,7 @@ class pdf_einstein extends ModelePDFCommandes public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblignes; + global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -228,7 +228,7 @@ class pdf_einstein extends ModelePDFCommandes // Load translation files required by the page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->commande->dir_output) { @@ -308,7 +308,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -400,7 +400,7 @@ class pdf_einstein extends ModelePDFCommandes $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -429,7 +429,7 @@ class pdf_einstein extends ModelePDFCommandes $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -540,7 +540,7 @@ class pdf_einstein extends ModelePDFCommandes $this->tva[$vatrate] += $tvaligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 71345305579..ad9f2f5fbf4 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -194,7 +194,7 @@ class pdf_eratosthene extends ModelePDFCommandes public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblignes; + global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -203,7 +203,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Translations $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -217,7 +217,7 @@ class pdf_eratosthene extends ModelePDFCommandes { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -541,7 +541,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -599,7 +599,7 @@ class pdf_eratosthene extends ModelePDFCommandes $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -738,7 +738,7 @@ class pdf_eratosthene extends ModelePDFCommandes $this->tva[$vatrate] += $tvaligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -747,7 +747,7 @@ class pdf_eratosthene extends ModelePDFCommandes $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 87f04dca016..745c09c8130 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -168,7 +168,7 @@ class pdf_espadon extends ModelePdfExpedition // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies", "propal", "deliveries", "sendings", "productbatch")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -176,7 +176,7 @@ class pdf_espadon extends ModelePdfExpedition { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -254,7 +254,7 @@ class pdf_espadon extends ModelePdfExpedition $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -404,7 +404,7 @@ class pdf_espadon extends ModelePdfExpedition $nexY = $tab_top + $this->tabTitleHeight + 2; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -464,7 +464,7 @@ class pdf_espadon extends ModelePdfExpedition //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -548,7 +548,7 @@ class pdf_espadon extends ModelePdfExpedition if ($weighttxt && $voltxt) $nexY+=2; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1', 'color'=>array(80,80,80))); diff --git a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php index 235e7e5c66c..bd46fc5a75e 100644 --- a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php @@ -222,7 +222,7 @@ class pdf_merou extends ModelePdfExpedition global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format, 'mm', 'l'); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -347,7 +347,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->MultiCell(30, 3, $object->lines[$i]->qty_shipped, 0, 'C', 0); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -356,7 +356,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index ea5efb359d0..d255c4486fd 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -197,7 +197,7 @@ class pdf_rouget extends ModelePdfExpedition // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies", "propal", "deliveries", "sendings", "productbatch")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -205,7 +205,7 @@ class pdf_rouget extends ModelePdfExpedition { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -283,7 +283,7 @@ class pdf_rouget extends ModelePdfExpedition $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -423,7 +423,7 @@ class pdf_rouget extends ModelePdfExpedition $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -481,7 +481,7 @@ class pdf_rouget extends ModelePdfExpedition //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -563,7 +563,7 @@ class pdf_rouget extends ModelePdfExpedition if ($weighttxt && $voltxt) $nexY+=2; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index e0bba62df3b..99d2ab322e0 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -220,7 +220,7 @@ class pdf_standard extends ModeleExpenseReport // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "trips", "projects", "dict", "bills", "banks")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->expensereport->dir_output) { // Definition of $dir and $file @@ -351,7 +351,7 @@ class pdf_standard extends ModeleExpenseReport $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) { + for ($i = 0 ; $i < $nblines ; $i++) { $pdf->SetFont('', '', $default_font_size - 2); // Into loop to work with multipage $pdf->SetTextColor(0, 0, 0); @@ -374,7 +374,7 @@ class pdf_standard extends ModeleExpenseReport //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) { // There is no space left for total+free text - if ($i == ($nblignes-1)) { + if ($i == ($nblines-1)) { // No more lines, and no space left to show total, so we create a new page $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -401,7 +401,7 @@ class pdf_standard extends ModeleExpenseReport //$nblineFollowComment = 1; // Cherche nombre de lignes a venir pour savoir si place suffisante - // if ($i < ($nblignes - 1)) // If it's not last line + // if ($i < ($nblines - 1)) // If it's not last line // { // //Fetch current description to know on which line the next one should be placed // $follow_comment = $object->lines[$i]->comments; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 8252403ea3f..4536add16bb 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -235,7 +235,7 @@ class pdf_crabe extends ModelePDFFactures public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; dol_syslog("write_file outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang : 'null')); @@ -246,13 +246,13 @@ class pdf_crabe extends ModelePDFFactures // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_INVOICES_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -319,7 +319,7 @@ class pdf_crabe extends ModelePDFFactures $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); // Create pdf instance @@ -360,7 +360,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -467,7 +467,7 @@ class pdf_crabe extends ModelePDFFactures $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -523,7 +523,7 @@ class pdf_crabe extends ModelePDFFactures //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -652,7 +652,7 @@ class pdf_crabe extends ModelePDFFactures if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -661,7 +661,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 1413bd3c777..422060ab30b 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -209,7 +209,7 @@ class pdf_sponge extends ModelePDFFactures public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -218,7 +218,7 @@ class pdf_sponge extends ModelePDFFactures // Translations $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies")); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -232,7 +232,7 @@ class pdf_sponge extends ModelePDFFactures { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -330,7 +330,7 @@ class pdf_sponge extends ModelePDFFactures $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); // Create pdf instance @@ -572,7 +572,7 @@ class pdf_sponge extends ModelePDFFactures // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; @@ -630,7 +630,7 @@ class pdf_sponge extends ModelePDFFactures //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -782,7 +782,7 @@ class pdf_sponge extends ModelePDFFactures $nexY = max($nexY, $posYAfterImage); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -791,7 +791,7 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php index 41edc6c0a1d..fa32d3df0d2 100644 --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php @@ -216,7 +216,7 @@ class pdf_soleil extends ModelePDFFicheinter global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); // Create pdf instance $pdf=pdf_getInstance($this->format); @@ -274,7 +274,7 @@ class pdf_soleil extends ModelePDFFicheinter complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top = 88; $pdf->SetFont('', '', $default_font_size - 1); diff --git a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php index a2124b801a6..0a339a9a61f 100644 --- a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php +++ b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php @@ -479,7 +479,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/product/doc/pdf_standard.modules.php b/htdocs/core/modules/product/doc/pdf_standard.modules.php index 89f0f67ae53..6089a9fe66e 100644 --- a/htdocs/core/modules/product/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/product/doc/pdf_standard.modules.php @@ -172,7 +172,7 @@ class pdf_standard extends ModelePDFProduct // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->product->dir_output) { @@ -346,7 +346,7 @@ class pdf_standard extends ModelePDFProduct // Loop on each lines /* - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('','', $default_font_size - 1); // Into loop to work with multipage @@ -375,7 +375,7 @@ class pdf_standard extends ModelePDFProduct $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('','',true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -484,7 +484,7 @@ class pdf_standard extends ModelePDFProduct $this->tva[$vatrate] += $tvaligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/project/doc/pdf_baleine.modules.php b/htdocs/core/modules/project/doc/pdf_baleine.modules.php index c7005206fcc..257b477a8df 100644 --- a/htdocs/core/modules/project/doc/pdf_baleine.modules.php +++ b/htdocs/core/modules/project/doc/pdf_baleine.modules.php @@ -188,7 +188,7 @@ class pdf_baleine extends ModelePDFProjects if ($conf->projet->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks $objectref = dol_sanitizeFileName($object->ref); $dir = $conf->projet->dir_output; @@ -250,7 +250,7 @@ class pdf_baleine extends ModelePDFProjects } $object->lines=$tasksarray; - $nblignes=count($object->lines); + $nblines=count($object->lines); $pdf->Open(); $pagenb=0; @@ -287,7 +287,7 @@ class pdf_baleine extends ModelePDFProjects complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top -= 2; $pdf->SetFont('', '', $default_font_size - 1); @@ -313,7 +313,7 @@ class pdf_baleine extends ModelePDFProjects $nexY = $tab_top + $heightoftitleline + 1; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -352,7 +352,7 @@ class pdf_baleine extends ModelePDFProjects $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -428,7 +428,7 @@ class pdf_baleine extends ModelePDFProjects $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->posxdateend, 3, $dateend, 0, 'C'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -437,7 +437,7 @@ class pdf_baleine extends ModelePDFProjects $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/project/doc/pdf_beluga.modules.php b/htdocs/core/modules/project/doc/pdf_beluga.modules.php index dfbe97c3fd5..1d7e3d983fb 100644 --- a/htdocs/core/modules/project/doc/pdf_beluga.modules.php +++ b/htdocs/core/modules/project/doc/pdf_beluga.modules.php @@ -160,7 +160,7 @@ class pdf_beluga extends ModelePDFProjects if ($conf->projet->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks $objectref = dol_sanitizeFileName($object->ref); $dir = $conf->projet->dir_output; @@ -223,7 +223,7 @@ class pdf_beluga extends ModelePDFProjects } $object->lines=$tasksarray; - $nblignes=count($object->lines); + $nblines=count($object->lines); $pdf->Open(); $pagenb=0; @@ -260,7 +260,7 @@ class pdf_beluga extends ModelePDFProjects complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top -= 2; $pdf->SetFont('', '', $default_font_size - 1); @@ -642,7 +642,7 @@ class pdf_beluga extends ModelePDFProjects } } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/project/doc/pdf_timespent.modules.php b/htdocs/core/modules/project/doc/pdf_timespent.modules.php index 2c69fbd6bab..14946ca5cf3 100644 --- a/htdocs/core/modules/project/doc/pdf_timespent.modules.php +++ b/htdocs/core/modules/project/doc/pdf_timespent.modules.php @@ -120,7 +120,7 @@ class pdf_timespent extends ModelePDFProjects if ($conf->projet->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks $objectref = dol_sanitizeFileName($object->ref); $dir = $conf->projet->dir_output; @@ -181,7 +181,7 @@ class pdf_timespent extends ModelePDFProjects } $object->lines=$tasksarray; - $nblignes=count($object->lines); + $nblines=count($object->lines); $pdf->Open(); $pagenb=0; @@ -218,7 +218,7 @@ class pdf_timespent extends ModelePDFProjects complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top -= 2; $pdf->SetFont('', '', $default_font_size - 1); @@ -244,7 +244,7 @@ class pdf_timespent extends ModelePDFProjects $nexY = $tab_top + $heightoftitleline + 1; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -283,7 +283,7 @@ class pdf_timespent extends ModelePDFProjects $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -359,7 +359,7 @@ class pdf_timespent extends ModelePDFProjects $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->posxdateend, 3, $dateend, 0, 'C'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -368,7 +368,7 @@ class pdf_timespent extends ModelePDFProjects $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 54fe56421ea..4ad23a1704e 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -218,7 +218,7 @@ class pdf_azur extends ModelePDFPropales public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -227,7 +227,7 @@ class pdf_azur extends ModelePDFPropales // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "propal", "products")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -235,7 +235,7 @@ class pdf_azur extends ModelePDFPropales { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -362,7 +362,7 @@ class pdf_azur extends ModelePDFPropales $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -470,7 +470,7 @@ class pdf_azur extends ModelePDFPropales $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -527,7 +527,7 @@ class pdf_azur extends ModelePDFPropales //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -640,7 +640,7 @@ class pdf_azur extends ModelePDFPropales if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -649,7 +649,7 @@ class pdf_azur extends ModelePDFPropales $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 14a2456157a..3ddc8a45a52 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -193,7 +193,7 @@ class pdf_cyan extends ModelePDFPropales public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -206,7 +206,7 @@ class pdf_cyan extends ModelePDFPropales $outputlangs->load("propal"); $outputlangs->load("products"); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -220,7 +220,7 @@ class pdf_cyan extends ModelePDFPropales { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -557,7 +557,7 @@ class pdf_cyan extends ModelePDFPropales // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -617,7 +617,7 @@ class pdf_cyan extends ModelePDFPropales //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -755,7 +755,7 @@ class pdf_cyan extends ModelePDFPropales if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -764,7 +764,7 @@ class pdf_cyan extends ModelePDFPropales $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index dec1f35e7b0..10be4430aea 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -131,7 +131,7 @@ class pdf_squille extends ModelePdfReception $outputlangs->load("receptions"); $outputlangs->load("productbatch"); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -139,7 +139,7 @@ class pdf_squille extends ModelePdfReception { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -217,7 +217,7 @@ class pdf_squille extends ModelePdfReception $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -357,7 +357,7 @@ class pdf_squille extends ModelePdfReception $fk_commandefourndet=0; $totalOrdered=0; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -416,7 +416,7 @@ class pdf_squille extends ModelePdfReception //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -496,7 +496,7 @@ class pdf_squille extends ModelePdfReception if ($weighttxt && $voltxt) $nexY+=2; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/stock/doc/pdf_standard.modules.php b/htdocs/core/modules/stock/doc/pdf_standard.modules.php index e1181aa6fe2..4be99b07c11 100644 --- a/htdocs/core/modules/stock/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_standard.modules.php @@ -201,7 +201,7 @@ class pdf_standard extends ModelePDFStock // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "stocks", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->stock->dir_output) { @@ -323,8 +323,8 @@ class pdf_standard extends ModelePDFStock { $num = $db->num_rows($resql); $i = 0; - $nblignes = $num; - for ($i = 0 ; $i < $nblignes ; $i++) + $nblines = $num; + for ($i = 0 ; $i < $nblines ; $i++) { $objp = $db->fetch_object($resql); @@ -372,7 +372,7 @@ class pdf_standard extends ModelePDFStock $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -452,7 +452,7 @@ class pdf_standard extends ModelePDFStock $totalvaluesell+=price2num($pricemin*$objp->value, 'MT'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -550,7 +550,7 @@ class pdf_standard extends ModelePDFStock complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top = 88; $pdf->SetFont('', '', $default_font_size - 1); @@ -576,7 +576,7 @@ class pdf_standard extends ModelePDFStock // Loop on each lines /* - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('','', $default_font_size - 1); // Into loop to work with multipage @@ -605,7 +605,7 @@ class pdf_standard extends ModelePDFStock $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('','',true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -644,7 +644,7 @@ class pdf_standard extends ModelePDFStock $pdf->MultiCell($this->posxdiscount-$this->posxqty-0.8, 4, $qty, 0, 'R'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -653,7 +653,7 @@ class pdf_standard extends ModelePDFStock $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php index 2a1819a3aa0..5efa1b0b312 100644 --- a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php @@ -331,7 +331,7 @@ class pdf_stdmovement extends ModelePDFMovement * END TODO **/ - //$nblignes = count($object->lines); + //$nblines = count($object->lines); if ($conf->stock->dir_output) { @@ -481,8 +481,8 @@ class pdf_stdmovement extends ModelePDFMovement { $num = $db->num_rows($resql); $i = 0; - $nblignes = $num; - for ($i = 0 ; $i < $nblignes ; $i++) + $nblines = $num; + for ($i = 0 ; $i < $nblines ; $i++) { $objp = $db->fetch_object($resql); @@ -530,7 +530,7 @@ class pdf_stdmovement extends ModelePDFMovement $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -639,9 +639,9 @@ class pdf_stdmovement extends ModelePDFMovement $totalvaluesell+=price2num($pricemin*$objp->value, 'MT'); - $nexY+=3.5; // Passe espace entre les lignes + $nexY+=3.5; // Add space between lines // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -650,7 +650,7 @@ class pdf_stdmovement extends ModelePDFMovement $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) @@ -724,7 +724,7 @@ class pdf_stdmovement extends ModelePDFMovement complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top = 88; $pdf->SetFont('', '', $default_font_size - 1); diff --git a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php index 5c0904baba8..4c4fe7106a7 100644 --- a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php +++ b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php @@ -199,7 +199,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices public function write_file($object, $outputlangs = '', $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$hookmanager,$nblines; // Get source company if (! is_object($object->thirdparty)) $object->fetch_thirdparty(); @@ -259,7 +259,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -296,7 +296,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -370,7 +370,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -397,7 +397,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -495,7 +495,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $this->localtax2[$localtax2rate]+=$localtax2ligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -504,7 +504,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php b/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php index 612595b8c44..e96f5ef4eab 100644 --- a/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php @@ -185,7 +185,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders public function write_file($object, $outputlangs = '', $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$hookmanager,$mysoc,$nblignes; + global $user,$langs,$conf,$hookmanager,$mysoc,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -194,7 +194,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders // Load translation files required by the page $outputlangs->loadLangs(array("main", "orders", "companies", "bills", "dict", "products")); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -205,7 +205,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_SUPPLIER_ORDER_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -284,7 +284,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -496,7 +496,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -553,7 +553,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -689,7 +689,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1', 'color'=>array(80,80,80))); @@ -698,7 +698,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php b/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php index 0c9e8e0967a..9f9f0cfad38 100644 --- a/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php @@ -213,7 +213,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders public function write_file($object, $outputlangs = '', $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$hookmanager,$mysoc,$nblignes; + global $user,$langs,$conf,$hookmanager,$mysoc,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -222,13 +222,13 @@ class pdf_muscadet extends ModelePDFSuppliersOrders // Load translation files required by the page $outputlangs->loadLangs(array("main", "orders", "companies", "bills", "dict", "products")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_SUPPLIER_ORDER_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -307,7 +307,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -344,7 +344,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -418,7 +418,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -481,7 +481,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -591,7 +591,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -600,7 +600,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php index 79ad993ef81..e4b6b73fbc1 100644 --- a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php @@ -264,7 +264,7 @@ class pdf_standard extends ModelePDFSuppliersPayments global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -325,7 +325,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -354,7 +354,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -412,7 +412,7 @@ class pdf_standard extends ModelePDFSuppliersPayments // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -421,7 +421,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php index d8d489c1bbf..e486474d1d5 100644 --- a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php +++ b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php @@ -209,7 +209,7 @@ class pdf_aurore extends ModelePDFSupplierProposal public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -218,13 +218,13 @@ class pdf_aurore extends ModelePDFSupplierProposal // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "supplier_proposal")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -333,7 +333,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -403,7 +403,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -469,7 +469,7 @@ class pdf_aurore extends ModelePDFSupplierProposal //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -587,7 +587,7 @@ class pdf_aurore extends ModelePDFSupplierProposal if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -596,7 +596,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/debugbar/class/TraceableDB.php b/htdocs/debugbar/class/TraceableDB.php index 4edc39a74af..775c2a7c300 100644 --- a/htdocs/debugbar/class/TraceableDB.php +++ b/htdocs/debugbar/class/TraceableDB.php @@ -148,10 +148,10 @@ class TraceableDB extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number o flines into the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @return int Number of lines * @see num_rows() */ public function affected_rows($resultset) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index a17da1c84b4..c83a1172a03 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -347,7 +347,7 @@ class Expedition extends CommonObject dol_syslog(get_class($this)."::create", LOG_DEBUG); if ($this->db->query($sql)) { - // Insertion des lignes + // Insert of lines $num=count($this->lines); for ($i = 0; $i < $num; $i++) { @@ -2355,7 +2355,7 @@ class Expedition extends CommonObject /** - * Classe de gestion des lignes de bons d'expedition + * Classe to manage lines of shipment */ class ExpeditionLigne extends CommonObjectLine { diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index c09d2897980..c3e7ed4eb29 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2112,16 +2112,16 @@ class ExpenseReport extends CommonObject dol_syslog(get_class($this)."::periode_existe sql=".$sql); $result = $this->db->query($sql); if ($result) { - $num_lignes = $this->db->num_rows($result); $i = 0; + $num_rows = $this->db->num_rows($result); $i = 0; - if ($num_lignes>0) + if ($num_rows > 0) { $date_d_form = $date_debut; $date_f_form = $date_fin; $existe = false; - while ($i < $num_lignes) + while ($i < $num_rows) { $objp = $this->db->fetch_object($result); @@ -2175,8 +2175,8 @@ class ExpenseReport extends CommonObject $result = $this->db->query($sql); if($result) { - $num_lignes = $this->db->num_rows($result); $i = 0; - while ($i < $num_lignes) + $num_rows = $this->db->num_rows($result); $i = 0; + while ($i < $num_rows) { $objp = $this->db->fetch_object($result); array_push($users_validator, $objp->fk_user); diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index 2afd0745c8e..6ee445d68a1 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -183,7 +183,7 @@ if ($action == 'add') { $newfichinterid = $newinter->create($user); if ($newfichinterid > 0) { - // on ajoute les lignes de détail ensuite + // Now we add line of details foreach ($object->lines as $ficheinterligne) $newinter->addline($user, $newfichinterid, $ficheinterligne->desc, "", $ficheinterligne->duree, ''); diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index abcea896c06..e64b86340f3 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -679,9 +679,8 @@ if (empty($reshook)) } /* - * Ordonnancement des lignes - */ - + * Set position of lines + */ elseif ($action == 'up' && $user->rights->ficheinter->creer) { $object->line_up($lineid); diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 45ad69f6c64..e4d70ff255a 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -312,7 +312,7 @@ class PaiementFourn extends Paiement /** - * Supprime un paiement ainsi que les lignes qu'il a genere dans comptes + * Delete a payment and lines generated into accounts * Si le paiement porte sur un ecriture compte qui est rapprochee, on refuse * Si le paiement porte sur au moins une facture a "payee", on refuse * diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index dfab5ebf2ac..a0a966e7210 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1415,7 +1415,7 @@ if (empty($reshook)) $totalpaye = $object->getSommePaiement(); $resteapayer = $object->total_ttc - $totalpaye; - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + // We check that lines of invoices are exported in accountancy //$ventilExportCompta = $object->getVentilExportCompta(); // On verifie si aucun paiement n'a ete effectue diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 05083877b32..533f6c9c748 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1899,8 +1899,8 @@ class Holiday extends CommonObject $result = $this->db->query($sql); if($result) { - $num_lignes = $this->db->num_rows($result); $i = 0; - while ($i < $num_lignes) + $num_rows = $this->db->num_rows($result); $i = 0; + while ($i < $num_rows) { $objp = $this->db->fetch_object($result); array_push($users_validator, $objp->fk_user); diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 9a5780b351d..5d01dffa886 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -942,7 +942,7 @@ class Livraison extends CommonObject { $objSourceLine = $this->db->fetch_object($resultSourceLine); - // Recupere les lignes de la source deja livrees + // Get lines of sources alread delivered $sql = "SELECT ld.fk_origin_line, sum(ld.qty) as qty"; $sql.= " FROM ".MAIN_DB_PREFIX."livraisondet as ld, ".MAIN_DB_PREFIX."livraison as l,"; $sql.= " ".MAIN_DB_PREFIX.$this->linked_object[0]['type']." as c"; diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index 1b3034bb82c..2376de4ef16 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -42,7 +42,7 @@ $object=new Opensurveysondage($db); $result=$object->fetch(0, $numsondage); if ($result <= 0) dol_print_error('', 'Failed to get survey id '.$numsondage); -$nblignes=$object->fetch_lines(); +$nblines=$object->fetch_lines(); /* @@ -108,7 +108,7 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) // bout $testmodifier = false; $testligneamodifier = false; $ligneamodifier = -1; -for ($i=0; $i<$nblignes; $i++) +for ($i=0; $i<$nblines; $i++) { if (isset($_POST['modifierligne'.$i])) { @@ -271,7 +271,7 @@ if (isset($_POST["ajoutercolonne"]) && $object->format == "D") } // Delete line -for ($i = 0; $i < $nblignes; $i++) +for ($i = 0; $i < $nblines; $i++) { if (GETPOST("effaceligne".$i) || GETPOST("effaceligne".$i."_x") || GETPOST("effaceligne".$i.".x")) // effacelignei for chrome, effacelignei_x for firefox { @@ -916,7 +916,7 @@ while ($compteur < $num) } //demande de confirmation pour modification de ligne - for ($i=0; $i<$nblignes; $i++) + for ($i=0; $i<$nblines; $i++) { if (isset($_POST["modifierligne".$i])) { diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f1e27c02501..283d81f2713 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -783,10 +783,9 @@ SCRIPT; // Suppliers list title print '
'; print '
'; - if ($object->isProduct()) $nblignefour=4; - else $nblignefour=4; $param="&id=".$object->id; + print ''; print_liste_field_titre("AppliedPricesFrom", $_SERVER["PHP_SELF"], "pfp.datec", "", $param, "", $sortfield, $sortorder); print_liste_field_titre("Suppliers", $_SERVER["PHP_SELF"], "s.nom", "", $param, "", $sortfield, $sortorder); diff --git a/htdocs/public/opensurvey/studs.php b/htdocs/public/opensurvey/studs.php index 56c43556c6e..d4b4ccde404 100644 --- a/htdocs/public/opensurvey/studs.php +++ b/htdocs/public/opensurvey/studs.php @@ -42,7 +42,7 @@ if (GETPOST('sondage')) $object=new Opensurveysondage($db); $result=$object->fetch(0, $numsondage); -$nblignes=$object->fetch_lines(); +$nblines=$object->fetch_lines(); //If the survey has not yet finished, then it can be modified $canbemodified = ((empty($object->date_fin) || $object->date_fin > dol_now()) && $object->status != Opensurveysondage::STATUS_CLOSED); @@ -184,7 +184,7 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) // bout $testmodifier = false; $testligneamodifier = false; $ligneamodifier = -1; -for ($i=0; $i<$nblignes; $i++) +for ($i=0; $i < $nblines; $i++) { if (isset($_POST['modifierligne'.$i])) { @@ -557,7 +557,7 @@ while ($compteur < $num) } //demande de confirmation pour modification de ligne - for ($i=0; $i<$nblignes; $i++) + for ($i=0; $i < $nblines; $i++) { if (isset($_POST["modifierligne".$i])) { diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index f1877ace179..d0baa948950 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -259,7 +259,7 @@ class Reception extends CommonObject dol_syslog(get_class($this)."::create", LOG_DEBUG); if ($this->db->query($sql)) { - // Insertion des lignes + // Insert of lines $num=count($this->lines); for ($i = 0; $i < $num; $i++) { diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php index 2f45be04542..4cb115ef378 100644 --- a/htdocs/resource/class/dolresource.class.php +++ b/htdocs/resource/class/dolresource.class.php @@ -899,7 +899,7 @@ class Dolresource extends CommonObject /** * Load in cache resource type code (setup in dictionary) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function load_cache_code_type_resource() { diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index ca16348dcd6..74073c0d7e4 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -377,7 +377,7 @@ class SupplierProposal extends CommonObject * @param double $remise_percent Percentage discount of the line * @param string $price_base_type HT or TTC * @param double $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $type Type of line (product, service) * @param int $rang Position of line * @param int $special_code Special code (also used by externals modules!) diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 69708e06516..bb5f673d57e 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1034,7 +1034,7 @@ class Ticket extends CommonObject /** * Charge dans cache la liste des types de tickets (paramétrable dans dictionnaire) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheTypesTickets() { @@ -1074,7 +1074,7 @@ class Ticket extends CommonObject /** * Charge dans cache la liste des catégories de tickets (paramétrable dans dictionnaire) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheCategoriesTickets() { @@ -1114,7 +1114,7 @@ class Ticket extends CommonObject /** * Charge dans cache la liste des sévérité de tickets (paramétrable dans dictionnaire) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheSeveritiesTickets() { @@ -1561,7 +1561,7 @@ class Ticket extends CommonObject /** * Charge la liste des actions sur le ticket * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheLogsTicket() { @@ -1662,7 +1662,7 @@ class Ticket extends CommonObject /** * Charge la liste des messages sur le ticket * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheMsgsTicket() { From adb3062a9f803a0861fdc9cfe21646c6a135dcfa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 16:29:32 +0200 Subject: [PATCH 0063/1148] Work on nblignes -> nblines --- htdocs/admin/boxes.php | 2 +- htdocs/cashdesk/include/environnement.php | 2 +- htdocs/comm/propal/class/propal.class.php | 4 ++-- htdocs/comm/remx.php | 4 ++-- htdocs/commande/class/commande.class.php | 4 ++-- .../contrat/admin/contract_extrafields.php | 0 .../contrat/admin/contractdet_extrafields.php | 0 .../{ => commande}/contrat/admin/index.html | 0 htdocs/{ => commande}/contrat/card.php | 2 -- .../contrat/class/api_contracts.class.php | 0 .../contrat/class/contrat.class.php | 8 ++++---- .../{ => commande}/contrat/class/index.html | 0 htdocs/{ => commande}/contrat/contact.php | 0 htdocs/{ => commande}/contrat/document.php | 0 htdocs/{ => commande}/contrat/index.php | 0 htdocs/{ => commande}/contrat/info.php | 0 htdocs/{ => commande}/contrat/list.php | 0 htdocs/{ => commande}/contrat/note.php | 0 .../{ => commande}/contrat/services_list.php | 0 htdocs/{ => commande}/contrat/tpl/index.html | 0 .../contrat/tpl/linkedobjectblock.tpl.php | 0 .../facture/class/facture-rec.class.php | 6 +++--- htdocs/compta/facture/class/facture.class.php | 6 +++--- htdocs/core/boxes/box_services_contracts.php | 20 +++++++++---------- htdocs/core/class/CMailFile.class.php | 3 +-- htdocs/core/db/Database.interface.php | 6 +++--- htdocs/core/db/mssql.class.php | 4 ++-- htdocs/core/db/mysqli.class.php | 4 ++-- htdocs/core/db/pgsql.class.php | 4 ++-- htdocs/core/lib/files.lib.php | 6 +++--- htdocs/core/lib/pdf.lib.php | 4 ++-- .../core/modules/bank/doc/pdf_ban.modules.php | 4 ++-- .../bank/doc/pdf_sepamandate.modules.php | 4 ++-- .../commande/doc/pdf_einstein.modules.php | 12 +++++------ .../commande/doc/pdf_eratosthene.modules.php | 14 ++++++------- .../expedition/doc/pdf_espadon.modules.php | 12 +++++------ .../expedition/doc/pdf_merou.modules.php | 6 +++--- .../expedition/doc/pdf_rouget.modules.php | 12 +++++------ .../doc/pdf_standard.modules.php | 8 ++++---- .../modules/facture/doc/pdf_crabe.modules.php | 18 ++++++++--------- .../facture/doc/pdf_sponge.modules.php | 16 +++++++-------- .../fichinter/doc/pdf_soleil.modules.php | 4 ++-- .../livraison/doc/pdf_typhon.modules.php | 2 +- .../product/doc/pdf_standard.modules.php | 8 ++++---- .../project/doc/pdf_baleine.modules.php | 14 ++++++------- .../project/doc/pdf_beluga.modules.php | 8 ++++---- .../project/doc/pdf_timespent.modules.php | 14 ++++++------- .../modules/propale/doc/pdf_azur.modules.php | 16 +++++++-------- .../modules/propale/doc/pdf_cyan.modules.php | 14 ++++++------- .../reception/doc/pdf_squille.modules.php | 12 +++++------ .../stock/doc/pdf_standard.modules.php | 20 +++++++++---------- .../stock/doc/pdf_stdmovement.modules.php | 16 +++++++-------- .../pdf/pdf_canelle.modules.php | 14 ++++++------- .../supplier_order/pdf/pdf_cornas.modules.php | 16 +++++++-------- .../pdf/pdf_muscadet.modules.php | 18 ++++++++--------- .../doc/pdf_standard.modules.php | 10 +++++----- .../doc/pdf_aurore.modules.php | 16 +++++++-------- htdocs/debugbar/class/TraceableDB.php | 4 ++-- htdocs/expedition/class/expedition.class.php | 4 ++-- .../class/expensereport.class.php | 10 +++++----- htdocs/fichinter/card-rec.php | 2 +- htdocs/fichinter/card.php | 5 ++--- htdocs/fourn/class/paiementfourn.class.php | 2 +- htdocs/fourn/facture/card.php | 2 +- htdocs/holiday/class/holiday.class.php | 4 ++-- htdocs/livraison/class/livraison.class.php | 2 +- htdocs/opensurvey/results.php | 8 ++++---- htdocs/product/fournisseurs.php | 3 +-- htdocs/public/opensurvey/studs.php | 6 +++--- htdocs/reception/class/reception.class.php | 2 +- htdocs/resource/class/dolresource.class.php | 2 +- .../class/supplier_proposal.class.php | 2 +- htdocs/ticket/class/ticket.class.php | 10 +++++----- 73 files changed, 230 insertions(+), 235 deletions(-) rename htdocs/{ => commande}/contrat/admin/contract_extrafields.php (100%) rename htdocs/{ => commande}/contrat/admin/contractdet_extrafields.php (100%) rename htdocs/{ => commande}/contrat/admin/index.html (100%) rename htdocs/{ => commande}/contrat/card.php (99%) rename htdocs/{ => commande}/contrat/class/api_contracts.class.php (100%) rename htdocs/{ => commande}/contrat/class/contrat.class.php (99%) rename htdocs/{ => commande}/contrat/class/index.html (100%) rename htdocs/{ => commande}/contrat/contact.php (100%) rename htdocs/{ => commande}/contrat/document.php (100%) rename htdocs/{ => commande}/contrat/index.php (100%) rename htdocs/{ => commande}/contrat/info.php (100%) rename htdocs/{ => commande}/contrat/list.php (100%) rename htdocs/{ => commande}/contrat/note.php (100%) rename htdocs/{ => commande}/contrat/services_list.php (100%) rename htdocs/{ => commande}/contrat/tpl/index.html (100%) rename htdocs/{ => commande}/contrat/tpl/linkedobjectblock.tpl.php (100%) diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php index 70672f9b6fb..2e81a2c6dad 100644 --- a/htdocs/admin/boxes.php +++ b/htdocs/admin/boxes.php @@ -169,7 +169,7 @@ if ($action == 'delete') if ($action == 'switch') { - // On permute les valeur du champ box_order des 2 lignes de la table boxes + // We switch values of field box_order for the 2 lines of table boxes $db->begin(); $objfrom=new ModeleBoxes($db); diff --git a/htdocs/cashdesk/include/environnement.php b/htdocs/cashdesk/include/environnement.php index 6442d1776e3..e06bd7d3704 100644 --- a/htdocs/cashdesk/include/environnement.php +++ b/htdocs/cashdesk/include/environnement.php @@ -44,7 +44,7 @@ $conf_fkaccount_cb = (! empty($_SESSION["CASHDESK_ID_BANKACCOUNT_CB"]))?$_SESSIO // View parameters -$conf_taille_listes = (empty($conf->global->PRODUIT_LIMIT_SIZE)?1000:$conf->global->PRODUIT_LIMIT_SIZE); // Nombre max de lignes a afficher dans les listes +$conf_taille_listes = (empty($conf->global->PRODUIT_LIMIT_SIZE)?1000:$conf->global->PRODUIT_LIMIT_SIZE); // Number max of lines to show in lists $conf_nbr_car_listes = 60; // Nombre max de caracteres par ligne dans les listes // Add hidden option to force decrease of stock whatever is user setup diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 25b04c7c1e2..753d92131cb 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -415,7 +415,7 @@ class Propal extends CommonObject * @param float $remise_percent Pourcentage de remise de la ligne * @param string $price_base_type HT or TTC * @param float $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits for type of lines * @param int $type Type of line (0=product, 1=service). Not used if fk_product is defined, the type of product is used. * @param int $rang Position of line * @param int $special_code Special code (also used by externals modules!) @@ -1715,7 +1715,7 @@ class Propal extends CommonObject $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc; $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php index eabb217fb99..bd143b551ae 100644 --- a/htdocs/comm/remx.php +++ b/htdocs/comm/remx.php @@ -734,7 +734,7 @@ if ($socid > 0) print load_fiche_titre($langs->trans("CustomerDiscounts"), '', ''); } - // Remises liees a lignes de factures + // Discount linked to invoice lines $sql = "SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, rc.tva_tx, rc.multicurrency_amount_ht, rc.multicurrency_amount_tva, rc.multicurrency_amount_ttc,"; $sql.= " rc.datec as dc, rc.description, rc.fk_facture_line, rc.fk_facture,"; $sql.= " rc.fk_facture_source,"; @@ -904,7 +904,7 @@ if ($socid > 0) print load_fiche_titre($langs->trans("SupplierDiscounts"), '', ''); } - // Remises liees a lignes de factures + // Discount linked to invoice lines $sql = "SELECT rc.rowid, rc.amount_ht, rc.amount_tva, rc.amount_ttc, rc.tva_tx, rc.multicurrency_amount_ht, rc.multicurrency_amount_tva, rc.multicurrency_amount_ttc,"; $sql.= " rc.datec as dc, rc.description, rc.fk_invoice_supplier_line, rc.fk_invoice_supplier,"; $sql.= " rc.fk_invoice_supplier_source,"; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 8469dc0cd1f..f1f9dbd1b00 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -1312,7 +1312,7 @@ class Commande extends CommonOrder * @param float $txlocaltax2 Local tax 2 rate (deprecated, use instead txtva with code inside) * @param int $fk_product Id of product * @param float $remise_percent Percentage discount of the line - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_remise_except Id remise * @param string $price_base_type HT or TTC * @param float $pu_ttc Prix unitaire TTC @@ -1985,7 +1985,7 @@ class Commande extends CommonOrder $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc; $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); diff --git a/htdocs/contrat/admin/contract_extrafields.php b/htdocs/commande/contrat/admin/contract_extrafields.php similarity index 100% rename from htdocs/contrat/admin/contract_extrafields.php rename to htdocs/commande/contrat/admin/contract_extrafields.php diff --git a/htdocs/contrat/admin/contractdet_extrafields.php b/htdocs/commande/contrat/admin/contractdet_extrafields.php similarity index 100% rename from htdocs/contrat/admin/contractdet_extrafields.php rename to htdocs/commande/contrat/admin/contractdet_extrafields.php diff --git a/htdocs/contrat/admin/index.html b/htdocs/commande/contrat/admin/index.html similarity index 100% rename from htdocs/contrat/admin/index.html rename to htdocs/commande/contrat/admin/index.html diff --git a/htdocs/contrat/card.php b/htdocs/commande/contrat/card.php similarity index 99% rename from htdocs/contrat/card.php rename to htdocs/commande/contrat/card.php index 5c9ac3375dd..671888545c8 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/commande/contrat/card.php @@ -1096,8 +1096,6 @@ $form = new Form($db); $formfile = new FormFile($db); if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db); -$objectlignestatic=new ContratLigne($db); - // Load object modContract $module=(! empty($conf->global->CONTRACT_ADDON)?$conf->global->CONTRACT_ADDON:'mod_contract_serpis'); if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/commande/contrat/class/api_contracts.class.php similarity index 100% rename from htdocs/contrat/class/api_contracts.class.php rename to htdocs/commande/contrat/class/api_contracts.class.php diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/commande/contrat/class/contrat.class.php similarity index 99% rename from htdocs/contrat/class/contrat.class.php rename to htdocs/commande/contrat/class/contrat.class.php index e16187412a0..7273ffc3a8e 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/commande/contrat/class/contrat.class.php @@ -832,7 +832,7 @@ class Contrat extends CommonObject // Retreive all extrafields for contract // fetch optionals attributes and labels $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); @@ -1361,7 +1361,7 @@ class Contrat extends CommonObject * @param int $date_end Date de fin prevue * @param string $price_base_type HT or TTC * @param float $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_fournprice Fourn price id * @param int $pa_ht Buying price HT * @param array $array_options extrafields array @@ -1579,7 +1579,7 @@ class Contrat extends CommonObject * @param int|string $date_debut_reel Date de debut reelle * @param int|string $date_fin_reel Date de fin reelle * @param string $price_base_type HT or TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_fournprice Fourn price id * @param int $pa_ht Buying price HT * @param array $array_options extrafields array @@ -2542,7 +2542,7 @@ class Contrat extends CommonObject /** - * Classe permettant la gestion des lignes de contrats + * Class to manage lines of contracts */ class ContratLigne extends CommonObjectLine { diff --git a/htdocs/contrat/class/index.html b/htdocs/commande/contrat/class/index.html similarity index 100% rename from htdocs/contrat/class/index.html rename to htdocs/commande/contrat/class/index.html diff --git a/htdocs/contrat/contact.php b/htdocs/commande/contrat/contact.php similarity index 100% rename from htdocs/contrat/contact.php rename to htdocs/commande/contrat/contact.php diff --git a/htdocs/contrat/document.php b/htdocs/commande/contrat/document.php similarity index 100% rename from htdocs/contrat/document.php rename to htdocs/commande/contrat/document.php diff --git a/htdocs/contrat/index.php b/htdocs/commande/contrat/index.php similarity index 100% rename from htdocs/contrat/index.php rename to htdocs/commande/contrat/index.php diff --git a/htdocs/contrat/info.php b/htdocs/commande/contrat/info.php similarity index 100% rename from htdocs/contrat/info.php rename to htdocs/commande/contrat/info.php diff --git a/htdocs/contrat/list.php b/htdocs/commande/contrat/list.php similarity index 100% rename from htdocs/contrat/list.php rename to htdocs/commande/contrat/list.php diff --git a/htdocs/contrat/note.php b/htdocs/commande/contrat/note.php similarity index 100% rename from htdocs/contrat/note.php rename to htdocs/commande/contrat/note.php diff --git a/htdocs/contrat/services_list.php b/htdocs/commande/contrat/services_list.php similarity index 100% rename from htdocs/contrat/services_list.php rename to htdocs/commande/contrat/services_list.php diff --git a/htdocs/contrat/tpl/index.html b/htdocs/commande/contrat/tpl/index.html similarity index 100% rename from htdocs/contrat/tpl/index.html rename to htdocs/commande/contrat/tpl/index.html diff --git a/htdocs/contrat/tpl/linkedobjectblock.tpl.php b/htdocs/commande/contrat/tpl/linkedobjectblock.tpl.php similarity index 100% rename from htdocs/contrat/tpl/linkedobjectblock.tpl.php rename to htdocs/commande/contrat/tpl/linkedobjectblock.tpl.php diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index c1cc9df9e5c..f6b148d308c 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -510,7 +510,7 @@ class FactureRec extends CommonInvoice // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Recupere les lignes de factures predefinies dans this->lines + * Get lines of template invoices into this->lines * * @return int 1 if OK, < 0 if KO */ @@ -876,7 +876,7 @@ class FactureRec extends CommonInvoice * @param int $fk_product Product/Service ID predefined * @param double $remise_percent Percentage discount of the line * @param string $price_base_type HT or TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_remise_except Id remise * @param double $pu_ttc Prix unitaire TTC (> 0 even for credit note) * @param int $type Type of line (0=product, 1=service) @@ -1807,7 +1807,7 @@ class FactureLigneRec extends CommonInvoiceLine /** - * Recupere les lignes de factures predefinies dans this->lines + * Get line of template invoice * * @param int $rowid Id of invoice * @return int 1 if OK, < 0 if KO diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index a502b885ab3..e54e11896b5 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -917,7 +917,7 @@ class Facture extends CommonInvoice $facture->origin = $this->origin; $facture->origin_id = $this->origin_id; - $facture->lines = $this->lines; // Tableau des lignes de factures + $facture->lines = $this->lines; // Array of lines of invoice $facture->products = $this->lines; // Tant que products encore utilise $facture->situation_counter = $this->situation_counter; $facture->situation_cycle_ref=$this->situation_cycle_ref; @@ -1563,7 +1563,7 @@ class Facture extends CommonInvoice $line->multicurrency_total_ttc = $objp->multicurrency_total_ttc; $line->fetch_optionals(); - + // multilangs if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($objp->fk_product) && ! empty($loadalsotranslation)) { $line = new Product($this->db); @@ -2661,7 +2661,7 @@ class Facture extends CommonInvoice * @param int $date_start Date start of service * @param int $date_end Date end of service * @param int $ventil Code of dispatching into accountancy - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $fk_remise_except Id discount used * @param string $price_base_type 'HT' or 'TTC' * @param double $pu_ttc Unit price with tax (> 0 even for credit note) diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php index b1330192a11..3fcd8001227 100644 --- a/htdocs/core/boxes/box_services_contracts.php +++ b/htdocs/core/boxes/box_services_contracts.php @@ -84,7 +84,7 @@ class box_services_contracts extends ModeleBoxes if ($user->rights->service->lire && $user->rights->contrat->lire) { $contractstatic=new Contrat($db); - $contratlignestatic=new ContratLigne($db); + $contractlinestatic=new ContratLigne($db); $thirdpartytmp = new Societe($db); $productstatic = new Product($db); @@ -116,13 +116,13 @@ class box_services_contracts extends ModeleBoxes $objp = $db->fetch_object($result); $datem=$db->jdate($objp->datem); - $contratlignestatic->id=$objp->cdid; - $contratlignestatic->fk_contrat=$objp->rowid; - $contratlignestatic->label=$objp->label; - $contratlignestatic->description=$objp->description; - $contratlignestatic->type=$objp->type; - $contratlignestatic->product_id=$objp->product_id; - $contratlignestatic->product_ref=$objp->product_ref; + $contractlinestatic->id=$objp->cdid; + $contractlinestatic->fk_contrat=$objp->rowid; + $contractlinestatic->label=$objp->label; + $contractlinestatic->description=$objp->description; + $contractlinestatic->type=$objp->type; + $contractlinestatic->product_id=$objp->product_id; + $contractlinestatic->product_ref=$objp->product_ref; $contractstatic->statut=$objp->contract_status; $contractstatic->id=$objp->rowid; @@ -153,7 +153,7 @@ class box_services_contracts extends ModeleBoxes if ($resultd) { $objtp = $db->fetch_object($resultd); - if ($objtp->label != '') $contratlignestatic->label = $objtp->label; + if ($objtp->label != '') $contractlinestatic->label = $objtp->label; } } @@ -215,7 +215,7 @@ class box_services_contracts extends ModeleBoxes $this->info_box_contents[$i][] = array( 'td' => 'class="right" width="18"', - 'text' => $contratlignestatic->LibStatut($objp->statut, 3) + 'text' => $contractlinestatic->LibStatut($objp->statut, 3) ); $i++; diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index bf9b617693f..eabe0440dca 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -286,8 +286,7 @@ class CMailFile // We now define $this->headers and $this->message $this->headers = $smtp_headers . $mime_headers; // On nettoie le header pour qu'il ne se termine pas par un retour chariot. - // Ceci evite aussi les lignes vides en fin qui peuvent etre interpretees - // comme des injections mail par les serveurs de messagerie. + // This avoid also empty lines at end that can be interpreted as mail injection by email servers. $this->headers = preg_replace("/([\r\n]+)$/i", "", $this->headers); //$this->message = $this->eol.'This is a message with multiple parts in MIME format.'.$this->eol; diff --git a/htdocs/core/db/Database.interface.php b/htdocs/core/db/Database.interface.php index 75a6fa14ec1..55e7fe27b0b 100644 --- a/htdocs/core/db/Database.interface.php +++ b/htdocs/core/db/Database.interface.php @@ -101,11 +101,11 @@ interface Database // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Curseur de la requete voulue - * @return int Nombre de lignes - * @see num_rows + * @return int Number of lines + * @see num_rows() */ public function affected_rows($resultset); // phpcs:enable diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php index efffd5059c6..d8261b8034e 100644 --- a/htdocs/core/db/mssql.class.php +++ b/htdocs/core/db/mssql.class.php @@ -523,10 +523,10 @@ class DoliDBMssql extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @return int Number of lines * @see num_rows() */ public function affected_rows($resultset) diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php index 98f2e5c5a1b..96763077e66 100644 --- a/htdocs/core/db/mysqli.class.php +++ b/htdocs/core/db/mysqli.class.php @@ -363,10 +363,10 @@ class DoliDBMysqli extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param mysqli_result $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @return int Number of lines * @see num_rows() */ public function affected_rows($resultset) diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php index 2777f2d0365..250429ce422 100644 --- a/htdocs/core/db/pgsql.class.php +++ b/htdocs/core/db/pgsql.class.php @@ -617,11 +617,11 @@ class DoliDBPgsql extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number of lines in the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Result set of request * @return int Nb of lines - * @see num_rows + * @see num_rows() */ public function affected_rows($resultset) { diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index f4a25334e00..8fe5f5b0db4 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1435,16 +1435,16 @@ function dol_meta_create($object) if (is_dir($dir)) { - $nblignes = count($object->lines); + $nblines = count($object->lines); $client = $object->thirdparty->name . " " . $object->thirdparty->address . " " . $object->thirdparty->zip . " " . $object->thirdparty->town; $meta = "REFERENCE=\"" . $object->ref . "\" DATE=\"" . dol_print_date($object->date, '') . "\" - NB_ITEMS=\"" . $nblignes . "\" + NB_ITEMS=\"" . $nblines . "\" CLIENT=\"" . $client . "\" AMOUNT_EXCL_TAX=\"" . $object->total_ht . "\" AMOUNT=\"" . $object->total_ttc . "\"\n"; - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { //Pour les articles $meta .= "ITEM_" . $i . "_QUANTITY=\"" . $object->lines[$i]->qty . "\" diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index db3b8763941..c1b5f4c489d 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -2045,10 +2045,10 @@ function pdf_getTotalQty($object, $type, $outputlangs) global $hookmanager; $total=0; - $nblignes=count($object->lines); + $nblines=count($object->lines); // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->special_code != 3) { diff --git a/htdocs/core/modules/bank/doc/pdf_ban.modules.php b/htdocs/core/modules/bank/doc/pdf_ban.modules.php index 5deb40fc7ad..7be15c048ef 100644 --- a/htdocs/core/modules/bank/doc/pdf_ban.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_ban.modules.php @@ -111,7 +111,7 @@ class pdf_ban extends ModeleBankAccountDoc if ($conf->bank->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks // Definition of $dir and $file if ($object->specimen) @@ -287,7 +287,7 @@ class pdf_ban extends ModeleBankAccountDoc * @param int $hidebottom Hide bottom bar of array * @return void */ - private function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) + protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $conf,$mysoc; diff --git a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php index 9783c4690b2..96254c3a9d6 100644 --- a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php @@ -114,7 +114,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc if (! empty($conf->bank->dir_output)) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks // Definition of $dir and $file if ($object->specimen) @@ -430,7 +430,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc * @param int $hidebottom Hide bottom bar of array * @return void */ - private function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) + protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $conf,$mysoc; diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 8677a16db38..0e064991444 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -219,7 +219,7 @@ class pdf_einstein extends ModelePDFCommandes public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblignes; + global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -228,7 +228,7 @@ class pdf_einstein extends ModelePDFCommandes // Load translation files required by the page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->commande->dir_output) { @@ -308,7 +308,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -400,7 +400,7 @@ class pdf_einstein extends ModelePDFCommandes $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -429,7 +429,7 @@ class pdf_einstein extends ModelePDFCommandes $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -540,7 +540,7 @@ class pdf_einstein extends ModelePDFCommandes $this->tva[$vatrate] += $tvaligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 71345305579..ad9f2f5fbf4 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -194,7 +194,7 @@ class pdf_eratosthene extends ModelePDFCommandes public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblignes; + global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -203,7 +203,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Translations $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -217,7 +217,7 @@ class pdf_eratosthene extends ModelePDFCommandes { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -541,7 +541,7 @@ class pdf_eratosthene extends ModelePDFCommandes // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -599,7 +599,7 @@ class pdf_eratosthene extends ModelePDFCommandes $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -738,7 +738,7 @@ class pdf_eratosthene extends ModelePDFCommandes $this->tva[$vatrate] += $tvaligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -747,7 +747,7 @@ class pdf_eratosthene extends ModelePDFCommandes $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 87f04dca016..745c09c8130 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -168,7 +168,7 @@ class pdf_espadon extends ModelePdfExpedition // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies", "propal", "deliveries", "sendings", "productbatch")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -176,7 +176,7 @@ class pdf_espadon extends ModelePdfExpedition { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -254,7 +254,7 @@ class pdf_espadon extends ModelePdfExpedition $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -404,7 +404,7 @@ class pdf_espadon extends ModelePdfExpedition $nexY = $tab_top + $this->tabTitleHeight + 2; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -464,7 +464,7 @@ class pdf_espadon extends ModelePdfExpedition //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -548,7 +548,7 @@ class pdf_espadon extends ModelePdfExpedition if ($weighttxt && $voltxt) $nexY+=2; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1', 'color'=>array(80,80,80))); diff --git a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php index 235e7e5c66c..bd46fc5a75e 100644 --- a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php @@ -222,7 +222,7 @@ class pdf_merou extends ModelePdfExpedition global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format, 'mm', 'l'); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -347,7 +347,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->MultiCell(30, 3, $object->lines[$i]->qty_shipped, 0, 'C', 0); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -356,7 +356,7 @@ class pdf_merou extends ModelePdfExpedition $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index ea5efb359d0..d255c4486fd 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -197,7 +197,7 @@ class pdf_rouget extends ModelePdfExpedition // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies", "propal", "deliveries", "sendings", "productbatch")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -205,7 +205,7 @@ class pdf_rouget extends ModelePdfExpedition { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -283,7 +283,7 @@ class pdf_rouget extends ModelePdfExpedition $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -423,7 +423,7 @@ class pdf_rouget extends ModelePdfExpedition $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -481,7 +481,7 @@ class pdf_rouget extends ModelePdfExpedition //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -563,7 +563,7 @@ class pdf_rouget extends ModelePdfExpedition if ($weighttxt && $voltxt) $nexY+=2; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index e0bba62df3b..99d2ab322e0 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -220,7 +220,7 @@ class pdf_standard extends ModeleExpenseReport // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "trips", "projects", "dict", "bills", "banks")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->expensereport->dir_output) { // Definition of $dir and $file @@ -351,7 +351,7 @@ class pdf_standard extends ModeleExpenseReport $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) { + for ($i = 0 ; $i < $nblines ; $i++) { $pdf->SetFont('', '', $default_font_size - 2); // Into loop to work with multipage $pdf->SetTextColor(0, 0, 0); @@ -374,7 +374,7 @@ class pdf_standard extends ModeleExpenseReport //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) { // There is no space left for total+free text - if ($i == ($nblignes-1)) { + if ($i == ($nblines-1)) { // No more lines, and no space left to show total, so we create a new page $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -401,7 +401,7 @@ class pdf_standard extends ModeleExpenseReport //$nblineFollowComment = 1; // Cherche nombre de lignes a venir pour savoir si place suffisante - // if ($i < ($nblignes - 1)) // If it's not last line + // if ($i < ($nblines - 1)) // If it's not last line // { // //Fetch current description to know on which line the next one should be placed // $follow_comment = $object->lines[$i]->comments; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 8252403ea3f..4536add16bb 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -235,7 +235,7 @@ class pdf_crabe extends ModelePDFFactures public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; dol_syslog("write_file outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang : 'null')); @@ -246,13 +246,13 @@ class pdf_crabe extends ModelePDFFactures // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_INVOICES_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -319,7 +319,7 @@ class pdf_crabe extends ModelePDFFactures $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); // Create pdf instance @@ -360,7 +360,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -467,7 +467,7 @@ class pdf_crabe extends ModelePDFFactures $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -523,7 +523,7 @@ class pdf_crabe extends ModelePDFFactures //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -652,7 +652,7 @@ class pdf_crabe extends ModelePDFFactures if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -661,7 +661,7 @@ class pdf_crabe extends ModelePDFFactures $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 1413bd3c777..422060ab30b 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -209,7 +209,7 @@ class pdf_sponge extends ModelePDFFactures public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -218,7 +218,7 @@ class pdf_sponge extends ModelePDFFactures // Translations $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies")); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -232,7 +232,7 @@ class pdf_sponge extends ModelePDFFactures { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -330,7 +330,7 @@ class pdf_sponge extends ModelePDFFactures $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); // Create pdf instance @@ -572,7 +572,7 @@ class pdf_sponge extends ModelePDFFactures // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; @@ -630,7 +630,7 @@ class pdf_sponge extends ModelePDFFactures //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -782,7 +782,7 @@ class pdf_sponge extends ModelePDFFactures $nexY = max($nexY, $posYAfterImage); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -791,7 +791,7 @@ class pdf_sponge extends ModelePDFFactures $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php index 41edc6c0a1d..fa32d3df0d2 100644 --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php @@ -216,7 +216,7 @@ class pdf_soleil extends ModelePDFFicheinter global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); // Create pdf instance $pdf=pdf_getInstance($this->format); @@ -274,7 +274,7 @@ class pdf_soleil extends ModelePDFFicheinter complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top = 88; $pdf->SetFont('', '', $default_font_size - 1); diff --git a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php index a2124b801a6..0a339a9a61f 100644 --- a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php +++ b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php @@ -479,7 +479,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/product/doc/pdf_standard.modules.php b/htdocs/core/modules/product/doc/pdf_standard.modules.php index 89f0f67ae53..6089a9fe66e 100644 --- a/htdocs/core/modules/product/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/product/doc/pdf_standard.modules.php @@ -172,7 +172,7 @@ class pdf_standard extends ModelePDFProduct // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->product->dir_output) { @@ -346,7 +346,7 @@ class pdf_standard extends ModelePDFProduct // Loop on each lines /* - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('','', $default_font_size - 1); // Into loop to work with multipage @@ -375,7 +375,7 @@ class pdf_standard extends ModelePDFProduct $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('','',true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -484,7 +484,7 @@ class pdf_standard extends ModelePDFProduct $this->tva[$vatrate] += $tvaligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/project/doc/pdf_baleine.modules.php b/htdocs/core/modules/project/doc/pdf_baleine.modules.php index c7005206fcc..257b477a8df 100644 --- a/htdocs/core/modules/project/doc/pdf_baleine.modules.php +++ b/htdocs/core/modules/project/doc/pdf_baleine.modules.php @@ -188,7 +188,7 @@ class pdf_baleine extends ModelePDFProjects if ($conf->projet->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks $objectref = dol_sanitizeFileName($object->ref); $dir = $conf->projet->dir_output; @@ -250,7 +250,7 @@ class pdf_baleine extends ModelePDFProjects } $object->lines=$tasksarray; - $nblignes=count($object->lines); + $nblines=count($object->lines); $pdf->Open(); $pagenb=0; @@ -287,7 +287,7 @@ class pdf_baleine extends ModelePDFProjects complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top -= 2; $pdf->SetFont('', '', $default_font_size - 1); @@ -313,7 +313,7 @@ class pdf_baleine extends ModelePDFProjects $nexY = $tab_top + $heightoftitleline + 1; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -352,7 +352,7 @@ class pdf_baleine extends ModelePDFProjects $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -428,7 +428,7 @@ class pdf_baleine extends ModelePDFProjects $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->posxdateend, 3, $dateend, 0, 'C'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -437,7 +437,7 @@ class pdf_baleine extends ModelePDFProjects $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/project/doc/pdf_beluga.modules.php b/htdocs/core/modules/project/doc/pdf_beluga.modules.php index dfbe97c3fd5..1d7e3d983fb 100644 --- a/htdocs/core/modules/project/doc/pdf_beluga.modules.php +++ b/htdocs/core/modules/project/doc/pdf_beluga.modules.php @@ -160,7 +160,7 @@ class pdf_beluga extends ModelePDFProjects if ($conf->projet->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks $objectref = dol_sanitizeFileName($object->ref); $dir = $conf->projet->dir_output; @@ -223,7 +223,7 @@ class pdf_beluga extends ModelePDFProjects } $object->lines=$tasksarray; - $nblignes=count($object->lines); + $nblines=count($object->lines); $pdf->Open(); $pagenb=0; @@ -260,7 +260,7 @@ class pdf_beluga extends ModelePDFProjects complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top -= 2; $pdf->SetFont('', '', $default_font_size - 1); @@ -642,7 +642,7 @@ class pdf_beluga extends ModelePDFProjects } } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/project/doc/pdf_timespent.modules.php b/htdocs/core/modules/project/doc/pdf_timespent.modules.php index 2c69fbd6bab..14946ca5cf3 100644 --- a/htdocs/core/modules/project/doc/pdf_timespent.modules.php +++ b/htdocs/core/modules/project/doc/pdf_timespent.modules.php @@ -120,7 +120,7 @@ class pdf_timespent extends ModelePDFProjects if ($conf->projet->dir_output) { - //$nblignes = count($object->lines); // This is set later with array of tasks + //$nblines = count($object->lines); // This is set later with array of tasks $objectref = dol_sanitizeFileName($object->ref); $dir = $conf->projet->dir_output; @@ -181,7 +181,7 @@ class pdf_timespent extends ModelePDFProjects } $object->lines=$tasksarray; - $nblignes=count($object->lines); + $nblines=count($object->lines); $pdf->Open(); $pagenb=0; @@ -218,7 +218,7 @@ class pdf_timespent extends ModelePDFProjects complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top -= 2; $pdf->SetFont('', '', $default_font_size - 1); @@ -244,7 +244,7 @@ class pdf_timespent extends ModelePDFProjects $nexY = $tab_top + $heightoftitleline + 1; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -283,7 +283,7 @@ class pdf_timespent extends ModelePDFProjects $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -359,7 +359,7 @@ class pdf_timespent extends ModelePDFProjects $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->posxdateend, 3, $dateend, 0, 'C'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -368,7 +368,7 @@ class pdf_timespent extends ModelePDFProjects $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 54fe56421ea..4ad23a1704e 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -218,7 +218,7 @@ class pdf_azur extends ModelePDFPropales public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -227,7 +227,7 @@ class pdf_azur extends ModelePDFPropales // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "propal", "products")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -235,7 +235,7 @@ class pdf_azur extends ModelePDFPropales { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -362,7 +362,7 @@ class pdf_azur extends ModelePDFPropales $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -470,7 +470,7 @@ class pdf_azur extends ModelePDFPropales $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -527,7 +527,7 @@ class pdf_azur extends ModelePDFPropales //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -640,7 +640,7 @@ class pdf_azur extends ModelePDFPropales if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -649,7 +649,7 @@ class pdf_azur extends ModelePDFPropales $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php index 14a2456157a..3ddc8a45a52 100644 --- a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php @@ -193,7 +193,7 @@ class pdf_cyan extends ModelePDFPropales public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -206,7 +206,7 @@ class pdf_cyan extends ModelePDFPropales $outputlangs->load("propal"); $outputlangs->load("products"); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -220,7 +220,7 @@ class pdf_cyan extends ModelePDFPropales { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -557,7 +557,7 @@ class pdf_cyan extends ModelePDFPropales // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -617,7 +617,7 @@ class pdf_cyan extends ModelePDFPropales //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -755,7 +755,7 @@ class pdf_cyan extends ModelePDFPropales if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -764,7 +764,7 @@ class pdf_cyan extends ModelePDFPropales $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index dec1f35e7b0..10be4430aea 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -131,7 +131,7 @@ class pdf_squille extends ModelePdfReception $outputlangs->load("receptions"); $outputlangs->load("productbatch"); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); @@ -139,7 +139,7 @@ class pdf_squille extends ModelePdfReception { $objphoto = new Product($this->db); - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -217,7 +217,7 @@ class pdf_squille extends ModelePdfReception $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks // Set nblignes with the new facture lines content after hook - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -357,7 +357,7 @@ class pdf_squille extends ModelePdfReception $fk_commandefourndet=0; $totalOrdered=0; // Loop on each lines - for ($i = 0; $i < $nblignes; $i++) + for ($i = 0; $i < $nblines; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -416,7 +416,7 @@ class pdf_squille extends ModelePdfReception //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -496,7 +496,7 @@ class pdf_squille extends ModelePdfReception if ($weighttxt && $voltxt) $nexY+=2; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); diff --git a/htdocs/core/modules/stock/doc/pdf_standard.modules.php b/htdocs/core/modules/stock/doc/pdf_standard.modules.php index e1181aa6fe2..4be99b07c11 100644 --- a/htdocs/core/modules/stock/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_standard.modules.php @@ -201,7 +201,7 @@ class pdf_standard extends ModelePDFStock // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "stocks", "orders", "deliveries")); - $nblignes = count($object->lines); + $nblines = count($object->lines); if ($conf->stock->dir_output) { @@ -323,8 +323,8 @@ class pdf_standard extends ModelePDFStock { $num = $db->num_rows($resql); $i = 0; - $nblignes = $num; - for ($i = 0 ; $i < $nblignes ; $i++) + $nblines = $num; + for ($i = 0 ; $i < $nblines ; $i++) { $objp = $db->fetch_object($resql); @@ -372,7 +372,7 @@ class pdf_standard extends ModelePDFStock $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -452,7 +452,7 @@ class pdf_standard extends ModelePDFStock $totalvaluesell+=price2num($pricemin*$objp->value, 'MT'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -550,7 +550,7 @@ class pdf_standard extends ModelePDFStock complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top = 88; $pdf->SetFont('', '', $default_font_size - 1); @@ -576,7 +576,7 @@ class pdf_standard extends ModelePDFStock // Loop on each lines /* - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('','', $default_font_size - 1); // Into loop to work with multipage @@ -605,7 +605,7 @@ class pdf_standard extends ModelePDFStock $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('','',true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -644,7 +644,7 @@ class pdf_standard extends ModelePDFStock $pdf->MultiCell($this->posxdiscount-$this->posxqty-0.8, 4, $qty, 0, 'R'); // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -653,7 +653,7 @@ class pdf_standard extends ModelePDFStock $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php index 2a1819a3aa0..5efa1b0b312 100644 --- a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php @@ -331,7 +331,7 @@ class pdf_stdmovement extends ModelePDFMovement * END TODO **/ - //$nblignes = count($object->lines); + //$nblines = count($object->lines); if ($conf->stock->dir_output) { @@ -481,8 +481,8 @@ class pdf_stdmovement extends ModelePDFMovement { $num = $db->num_rows($resql); $i = 0; - $nblignes = $num; - for ($i = 0 ; $i < $nblignes ; $i++) + $nblines = $num; + for ($i = 0 ; $i < $nblines ; $i++) { $objp = $db->fetch_object($resql); @@ -530,7 +530,7 @@ class pdf_stdmovement extends ModelePDFMovement $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -639,9 +639,9 @@ class pdf_stdmovement extends ModelePDFMovement $totalvaluesell+=price2num($pricemin*$objp->value, 'MT'); - $nexY+=3.5; // Passe espace entre les lignes + $nexY+=3.5; // Add space between lines // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -650,7 +650,7 @@ class pdf_stdmovement extends ModelePDFMovement $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) @@ -724,7 +724,7 @@ class pdf_stdmovement extends ModelePDFMovement complete_substitutions_array($substitutionarray, $outputlangs, $object); $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs); $notetoshow = convertBackOfficeMediasLinksToPublicLinks($notetoshow); - + $tab_top = 88; $pdf->SetFont('', '', $default_font_size - 1); diff --git a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php index 5c0904baba8..4c4fe7106a7 100644 --- a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php +++ b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php @@ -199,7 +199,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices public function write_file($object, $outputlangs = '', $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$hookmanager,$nblines; // Get source company if (! is_object($object->thirdparty)) $object->fetch_thirdparty(); @@ -259,7 +259,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -296,7 +296,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -370,7 +370,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -397,7 +397,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -495,7 +495,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $this->localtax2[$localtax2rate]+=$localtax2ligne; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -504,7 +504,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php b/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php index 612595b8c44..e96f5ef4eab 100644 --- a/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/pdf_cornas.modules.php @@ -185,7 +185,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders public function write_file($object, $outputlangs = '', $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$hookmanager,$mysoc,$nblignes; + global $user,$langs,$conf,$hookmanager,$mysoc,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -194,7 +194,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders // Load translation files required by the page $outputlangs->loadLangs(array("main", "orders", "companies", "bills", "dict", "products")); - $nblignes = count($object->lines); + $nblines = count($object->lines); $hidetop=0; if(!empty($conf->global->MAIN_PDF_DISABLE_COL_HEAD_TITLE)){ @@ -205,7 +205,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_SUPPLIER_ORDER_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -284,7 +284,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -496,7 +496,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders // Loop on each lines $pageposbeforeprintlines=$pdf->getPage(); $pagenb = $pageposbeforeprintlines; - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -553,7 +553,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -689,7 +689,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1', 'color'=>array(80,80,80))); @@ -698,7 +698,7 @@ class pdf_cornas extends ModelePDFSuppliersOrders $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php b/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php index 0c9e8e0967a..9f9f0cfad38 100644 --- a/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php @@ -213,7 +213,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders public function write_file($object, $outputlangs = '', $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$hookmanager,$mysoc,$nblignes; + global $user,$langs,$conf,$hookmanager,$mysoc,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -222,13 +222,13 @@ class pdf_muscadet extends ModelePDFSuppliersOrders // Load translation files required by the page $outputlangs->loadLangs(array("main", "orders", "companies", "bills", "dict", "products")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_SUPPLIER_ORDER_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -307,7 +307,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -344,7 +344,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -418,7 +418,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -481,7 +481,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -591,7 +591,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -600,7 +600,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php index 79ad993ef81..e4b6b73fbc1 100644 --- a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php @@ -264,7 +264,7 @@ class pdf_standard extends ModelePDFSuppliersPayments global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - $nblignes = count($object->lines); + $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); $default_font_size = pdf_getPDFFontSize($outputlangs); // Must be after pdf_getInstance @@ -325,7 +325,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -354,7 +354,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $posyafter=$pdf->GetY(); if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -412,7 +412,7 @@ class pdf_standard extends ModelePDFSuppliersPayments // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -421,7 +421,7 @@ class pdf_standard extends ModelePDFSuppliersPayments $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php index d8d489c1bbf..e486474d1d5 100644 --- a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php +++ b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php @@ -209,7 +209,7 @@ class pdf_aurore extends ModelePDFSupplierProposal public function write_file($object, $outputlangs, $srctemplatepath = '', $hidedetails = 0, $hidedesc = 0, $hideref = 0) { // phpcs:enable - global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes; + global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblines; if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO @@ -218,13 +218,13 @@ class pdf_aurore extends ModelePDFSupplierProposal // Load traductions files requiredby by page $outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "supplier_proposal")); - $nblignes = count($object->lines); + $nblines = count($object->lines); // Loop on each lines to detect if there is at least one image to show $realpatharray=array(); if (! empty($conf->global->MAIN_GENERATE_SUPPLIER_PROPOSAL_WITH_PICTURE)) { - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if (empty($object->lines[$i]->fk_product)) continue; @@ -333,7 +333,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); // Left, Top, Right // Positionne $this->atleastonediscount si on a au moins une remise - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { if ($object->lines[$i]->remise_percent) { @@ -403,7 +403,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $nexY = $tab_top + 7; // Loop on each lines - for ($i = 0 ; $i < $nblignes ; $i++) + for ($i = 0 ; $i < $nblines ; $i++) { $curY = $nexY; $pdf->SetFont('', '', $default_font_size - 1); // Into loop to work with multipage @@ -469,7 +469,7 @@ class pdf_aurore extends ModelePDFSupplierProposal //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit; if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))) // There is no space left for total+free text { - if ($i == ($nblignes-1)) // No more lines, and no space left to show total, so we create a new page + if ($i == ($nblines-1)) // No more lines, and no space left to show total, so we create a new page { $pdf->AddPage('', '', true); if (! empty($tplidx)) $pdf->useTemplate($tplidx); @@ -587,7 +587,7 @@ class pdf_aurore extends ModelePDFSupplierProposal if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage; // Add line - if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1)) + if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblines - 1)) { $pdf->setPage($pageposafter); $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80))); @@ -596,7 +596,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/debugbar/class/TraceableDB.php b/htdocs/debugbar/class/TraceableDB.php index 4edc39a74af..775c2a7c300 100644 --- a/htdocs/debugbar/class/TraceableDB.php +++ b/htdocs/debugbar/class/TraceableDB.php @@ -148,10 +148,10 @@ class TraceableDB extends DoliDB // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE + * Return the number o flines into the result of a request INSERT, DELETE or UPDATE * * @param resource $resultset Curseur de la requete voulue - * @return int Nombre de lignes + * @return int Number of lines * @see num_rows() */ public function affected_rows($resultset) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index a17da1c84b4..c83a1172a03 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -347,7 +347,7 @@ class Expedition extends CommonObject dol_syslog(get_class($this)."::create", LOG_DEBUG); if ($this->db->query($sql)) { - // Insertion des lignes + // Insert of lines $num=count($this->lines); for ($i = 0; $i < $num; $i++) { @@ -2355,7 +2355,7 @@ class Expedition extends CommonObject /** - * Classe de gestion des lignes de bons d'expedition + * Classe to manage lines of shipment */ class ExpeditionLigne extends CommonObjectLine { diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index c09d2897980..c3e7ed4eb29 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2112,16 +2112,16 @@ class ExpenseReport extends CommonObject dol_syslog(get_class($this)."::periode_existe sql=".$sql); $result = $this->db->query($sql); if ($result) { - $num_lignes = $this->db->num_rows($result); $i = 0; + $num_rows = $this->db->num_rows($result); $i = 0; - if ($num_lignes>0) + if ($num_rows > 0) { $date_d_form = $date_debut; $date_f_form = $date_fin; $existe = false; - while ($i < $num_lignes) + while ($i < $num_rows) { $objp = $this->db->fetch_object($result); @@ -2175,8 +2175,8 @@ class ExpenseReport extends CommonObject $result = $this->db->query($sql); if($result) { - $num_lignes = $this->db->num_rows($result); $i = 0; - while ($i < $num_lignes) + $num_rows = $this->db->num_rows($result); $i = 0; + while ($i < $num_rows) { $objp = $this->db->fetch_object($result); array_push($users_validator, $objp->fk_user); diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index 2afd0745c8e..6ee445d68a1 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -183,7 +183,7 @@ if ($action == 'add') { $newfichinterid = $newinter->create($user); if ($newfichinterid > 0) { - // on ajoute les lignes de détail ensuite + // Now we add line of details foreach ($object->lines as $ficheinterligne) $newinter->addline($user, $newfichinterid, $ficheinterligne->desc, "", $ficheinterligne->duree, ''); diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index abcea896c06..e64b86340f3 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -679,9 +679,8 @@ if (empty($reshook)) } /* - * Ordonnancement des lignes - */ - + * Set position of lines + */ elseif ($action == 'up' && $user->rights->ficheinter->creer) { $object->line_up($lineid); diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 45ad69f6c64..e4d70ff255a 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -312,7 +312,7 @@ class PaiementFourn extends Paiement /** - * Supprime un paiement ainsi que les lignes qu'il a genere dans comptes + * Delete a payment and lines generated into accounts * Si le paiement porte sur un ecriture compte qui est rapprochee, on refuse * Si le paiement porte sur au moins une facture a "payee", on refuse * diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index dfab5ebf2ac..a0a966e7210 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1415,7 +1415,7 @@ if (empty($reshook)) $totalpaye = $object->getSommePaiement(); $resteapayer = $object->total_ttc - $totalpaye; - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + // We check that lines of invoices are exported in accountancy //$ventilExportCompta = $object->getVentilExportCompta(); // On verifie si aucun paiement n'a ete effectue diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 05083877b32..533f6c9c748 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1899,8 +1899,8 @@ class Holiday extends CommonObject $result = $this->db->query($sql); if($result) { - $num_lignes = $this->db->num_rows($result); $i = 0; - while ($i < $num_lignes) + $num_rows = $this->db->num_rows($result); $i = 0; + while ($i < $num_rows) { $objp = $this->db->fetch_object($result); array_push($users_validator, $objp->fk_user); diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 9a5780b351d..5d01dffa886 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -942,7 +942,7 @@ class Livraison extends CommonObject { $objSourceLine = $this->db->fetch_object($resultSourceLine); - // Recupere les lignes de la source deja livrees + // Get lines of sources alread delivered $sql = "SELECT ld.fk_origin_line, sum(ld.qty) as qty"; $sql.= " FROM ".MAIN_DB_PREFIX."livraisondet as ld, ".MAIN_DB_PREFIX."livraison as l,"; $sql.= " ".MAIN_DB_PREFIX.$this->linked_object[0]['type']." as c"; diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php index 1b3034bb82c..2376de4ef16 100644 --- a/htdocs/opensurvey/results.php +++ b/htdocs/opensurvey/results.php @@ -42,7 +42,7 @@ $object=new Opensurveysondage($db); $result=$object->fetch(0, $numsondage); if ($result <= 0) dol_print_error('', 'Failed to get survey id '.$numsondage); -$nblignes=$object->fetch_lines(); +$nblines=$object->fetch_lines(); /* @@ -108,7 +108,7 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) // bout $testmodifier = false; $testligneamodifier = false; $ligneamodifier = -1; -for ($i=0; $i<$nblignes; $i++) +for ($i=0; $i<$nblines; $i++) { if (isset($_POST['modifierligne'.$i])) { @@ -271,7 +271,7 @@ if (isset($_POST["ajoutercolonne"]) && $object->format == "D") } // Delete line -for ($i = 0; $i < $nblignes; $i++) +for ($i = 0; $i < $nblines; $i++) { if (GETPOST("effaceligne".$i) || GETPOST("effaceligne".$i."_x") || GETPOST("effaceligne".$i.".x")) // effacelignei for chrome, effacelignei_x for firefox { @@ -916,7 +916,7 @@ while ($compteur < $num) } //demande de confirmation pour modification de ligne - for ($i=0; $i<$nblignes; $i++) + for ($i=0; $i<$nblines; $i++) { if (isset($_POST["modifierligne".$i])) { diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index f1e27c02501..283d81f2713 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -783,10 +783,9 @@ SCRIPT; // Suppliers list title print '
'; print '
'; - if ($object->isProduct()) $nblignefour=4; - else $nblignefour=4; $param="&id=".$object->id; + print ''; print_liste_field_titre("AppliedPricesFrom", $_SERVER["PHP_SELF"], "pfp.datec", "", $param, "", $sortfield, $sortorder); print_liste_field_titre("Suppliers", $_SERVER["PHP_SELF"], "s.nom", "", $param, "", $sortfield, $sortorder); diff --git a/htdocs/public/opensurvey/studs.php b/htdocs/public/opensurvey/studs.php index 56c43556c6e..d4b4ccde404 100644 --- a/htdocs/public/opensurvey/studs.php +++ b/htdocs/public/opensurvey/studs.php @@ -42,7 +42,7 @@ if (GETPOST('sondage')) $object=new Opensurveysondage($db); $result=$object->fetch(0, $numsondage); -$nblignes=$object->fetch_lines(); +$nblines=$object->fetch_lines(); //If the survey has not yet finished, then it can be modified $canbemodified = ((empty($object->date_fin) || $object->date_fin > dol_now()) && $object->status != Opensurveysondage::STATUS_CLOSED); @@ -184,7 +184,7 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) // bout $testmodifier = false; $testligneamodifier = false; $ligneamodifier = -1; -for ($i=0; $i<$nblignes; $i++) +for ($i=0; $i < $nblines; $i++) { if (isset($_POST['modifierligne'.$i])) { @@ -557,7 +557,7 @@ while ($compteur < $num) } //demande de confirmation pour modification de ligne - for ($i=0; $i<$nblignes; $i++) + for ($i=0; $i < $nblines; $i++) { if (isset($_POST["modifierligne".$i])) { diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index f1877ace179..d0baa948950 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -259,7 +259,7 @@ class Reception extends CommonObject dol_syslog(get_class($this)."::create", LOG_DEBUG); if ($this->db->query($sql)) { - // Insertion des lignes + // Insert of lines $num=count($this->lines); for ($i = 0; $i < $num; $i++) { diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php index 2f45be04542..4cb115ef378 100644 --- a/htdocs/resource/class/dolresource.class.php +++ b/htdocs/resource/class/dolresource.class.php @@ -899,7 +899,7 @@ class Dolresource extends CommonObject /** * Load in cache resource type code (setup in dictionary) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function load_cache_code_type_resource() { diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index ca16348dcd6..74073c0d7e4 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -377,7 +377,7 @@ class SupplierProposal extends CommonObject * @param double $remise_percent Percentage discount of the line * @param string $price_base_type HT or TTC * @param double $pu_ttc Prix unitaire TTC - * @param int $info_bits Bits de type de lignes + * @param int $info_bits Bits of type of lines * @param int $type Type of line (product, service) * @param int $rang Position of line * @param int $special_code Special code (also used by externals modules!) diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 69708e06516..bb5f673d57e 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1034,7 +1034,7 @@ class Ticket extends CommonObject /** * Charge dans cache la liste des types de tickets (paramétrable dans dictionnaire) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheTypesTickets() { @@ -1074,7 +1074,7 @@ class Ticket extends CommonObject /** * Charge dans cache la liste des catégories de tickets (paramétrable dans dictionnaire) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheCategoriesTickets() { @@ -1114,7 +1114,7 @@ class Ticket extends CommonObject /** * Charge dans cache la liste des sévérité de tickets (paramétrable dans dictionnaire) * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheSeveritiesTickets() { @@ -1561,7 +1561,7 @@ class Ticket extends CommonObject /** * Charge la liste des actions sur le ticket * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheLogsTicket() { @@ -1662,7 +1662,7 @@ class Ticket extends CommonObject /** * Charge la liste des messages sur le ticket * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Number of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheMsgsTicket() { From 7de92070d7333c1a8848219c4b2d983a6dcd8cbd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 16:46:16 +0200 Subject: [PATCH 0064/1148] Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop Conflicts: htdocs/contrat/card.php htdocs/contrat/class/contrat.class.php --- htdocs/{commande => }/contrat/admin/contract_extrafields.php | 0 htdocs/{commande => }/contrat/admin/contractdet_extrafields.php | 0 htdocs/{commande => }/contrat/admin/index.html | 0 htdocs/{commande => }/contrat/card.php | 0 htdocs/{commande => }/contrat/class/api_contracts.class.php | 0 htdocs/{commande => }/contrat/class/contrat.class.php | 0 htdocs/{commande => }/contrat/class/index.html | 0 htdocs/{commande => }/contrat/contact.php | 0 htdocs/{commande => }/contrat/document.php | 0 htdocs/{commande => }/contrat/index.php | 0 htdocs/{commande => }/contrat/info.php | 0 htdocs/{commande => }/contrat/list.php | 0 htdocs/{commande => }/contrat/note.php | 0 htdocs/{commande => }/contrat/services_list.php | 0 htdocs/{commande => }/contrat/tpl/index.html | 0 htdocs/{commande => }/contrat/tpl/linkedobjectblock.tpl.php | 0 16 files changed, 0 insertions(+), 0 deletions(-) rename htdocs/{commande => }/contrat/admin/contract_extrafields.php (100%) rename htdocs/{commande => }/contrat/admin/contractdet_extrafields.php (100%) rename htdocs/{commande => }/contrat/admin/index.html (100%) rename htdocs/{commande => }/contrat/card.php (100%) rename htdocs/{commande => }/contrat/class/api_contracts.class.php (100%) rename htdocs/{commande => }/contrat/class/contrat.class.php (100%) rename htdocs/{commande => }/contrat/class/index.html (100%) rename htdocs/{commande => }/contrat/contact.php (100%) rename htdocs/{commande => }/contrat/document.php (100%) rename htdocs/{commande => }/contrat/index.php (100%) rename htdocs/{commande => }/contrat/info.php (100%) rename htdocs/{commande => }/contrat/list.php (100%) rename htdocs/{commande => }/contrat/note.php (100%) rename htdocs/{commande => }/contrat/services_list.php (100%) rename htdocs/{commande => }/contrat/tpl/index.html (100%) rename htdocs/{commande => }/contrat/tpl/linkedobjectblock.tpl.php (100%) diff --git a/htdocs/commande/contrat/admin/contract_extrafields.php b/htdocs/contrat/admin/contract_extrafields.php similarity index 100% rename from htdocs/commande/contrat/admin/contract_extrafields.php rename to htdocs/contrat/admin/contract_extrafields.php diff --git a/htdocs/commande/contrat/admin/contractdet_extrafields.php b/htdocs/contrat/admin/contractdet_extrafields.php similarity index 100% rename from htdocs/commande/contrat/admin/contractdet_extrafields.php rename to htdocs/contrat/admin/contractdet_extrafields.php diff --git a/htdocs/commande/contrat/admin/index.html b/htdocs/contrat/admin/index.html similarity index 100% rename from htdocs/commande/contrat/admin/index.html rename to htdocs/contrat/admin/index.html diff --git a/htdocs/commande/contrat/card.php b/htdocs/contrat/card.php similarity index 100% rename from htdocs/commande/contrat/card.php rename to htdocs/contrat/card.php diff --git a/htdocs/commande/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php similarity index 100% rename from htdocs/commande/contrat/class/api_contracts.class.php rename to htdocs/contrat/class/api_contracts.class.php diff --git a/htdocs/commande/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php similarity index 100% rename from htdocs/commande/contrat/class/contrat.class.php rename to htdocs/contrat/class/contrat.class.php diff --git a/htdocs/commande/contrat/class/index.html b/htdocs/contrat/class/index.html similarity index 100% rename from htdocs/commande/contrat/class/index.html rename to htdocs/contrat/class/index.html diff --git a/htdocs/commande/contrat/contact.php b/htdocs/contrat/contact.php similarity index 100% rename from htdocs/commande/contrat/contact.php rename to htdocs/contrat/contact.php diff --git a/htdocs/commande/contrat/document.php b/htdocs/contrat/document.php similarity index 100% rename from htdocs/commande/contrat/document.php rename to htdocs/contrat/document.php diff --git a/htdocs/commande/contrat/index.php b/htdocs/contrat/index.php similarity index 100% rename from htdocs/commande/contrat/index.php rename to htdocs/contrat/index.php diff --git a/htdocs/commande/contrat/info.php b/htdocs/contrat/info.php similarity index 100% rename from htdocs/commande/contrat/info.php rename to htdocs/contrat/info.php diff --git a/htdocs/commande/contrat/list.php b/htdocs/contrat/list.php similarity index 100% rename from htdocs/commande/contrat/list.php rename to htdocs/contrat/list.php diff --git a/htdocs/commande/contrat/note.php b/htdocs/contrat/note.php similarity index 100% rename from htdocs/commande/contrat/note.php rename to htdocs/contrat/note.php diff --git a/htdocs/commande/contrat/services_list.php b/htdocs/contrat/services_list.php similarity index 100% rename from htdocs/commande/contrat/services_list.php rename to htdocs/contrat/services_list.php diff --git a/htdocs/commande/contrat/tpl/index.html b/htdocs/contrat/tpl/index.html similarity index 100% rename from htdocs/commande/contrat/tpl/index.html rename to htdocs/contrat/tpl/index.html diff --git a/htdocs/commande/contrat/tpl/linkedobjectblock.tpl.php b/htdocs/contrat/tpl/linkedobjectblock.tpl.php similarity index 100% rename from htdocs/commande/contrat/tpl/linkedobjectblock.tpl.php rename to htdocs/contrat/tpl/linkedobjectblock.tpl.php From 72084f4684afeca200b0f135741eb9ca162c1444 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 16:49:32 +0200 Subject: [PATCH 0065/1148] Fix protected --- htdocs/core/modules/bank/doc/pdf_ban.modules.php | 6 +++--- .../core/modules/bank/doc/pdf_sepamandate.modules.php | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/modules/bank/doc/pdf_ban.modules.php b/htdocs/core/modules/bank/doc/pdf_ban.modules.php index 5deb40fc7ad..a6ec1eabcd9 100644 --- a/htdocs/core/modules/bank/doc/pdf_ban.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_ban.modules.php @@ -287,7 +287,7 @@ class pdf_ban extends ModeleBankAccountDoc * @param int $hidebottom Hide bottom bar of array * @return void */ - private function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) + protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $conf,$mysoc; @@ -303,7 +303,7 @@ class pdf_ban extends ModeleBankAccountDoc * @param Translate $outputlangs Object lang for output * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs) + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs) { global $langs,$conf,$mysoc; @@ -389,7 +389,7 @@ class pdf_ban extends ModeleBankAccountDoc * @param int $hidefreetext 1=Hide free text * @return integer */ - private function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) + protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { global $conf; $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; diff --git a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php index 9783c4690b2..657a3146e6e 100644 --- a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php @@ -430,7 +430,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc * @param int $hidebottom Hide bottom bar of array * @return void */ - private function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) + protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $conf,$mysoc; @@ -448,7 +448,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc * @param Translate $outputlangs Langs object * @return void */ - private function _tableau_info(&$pdf, $object, $posy, $outputlangs) + protected function _tableau_info(&$pdf, $object, $posy, $outputlangs) { // phpcs:enable global $conf, $mysoc; @@ -485,7 +485,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc * @param Translate $outputlangs Objet langs * @return int Position pour suite */ - private function _signature_area(&$pdf, $object, $posy, $outputlangs) + protected function _signature_area(&$pdf, $object, $posy, $outputlangs) { // phpcs:enable $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -526,7 +526,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc * @param Translate $outputlangs Object lang for output * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs) + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs) { global $langs,$conf,$mysoc; @@ -618,7 +618,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc * @param int $hidefreetext 1=Hide free text * @return integer */ - private function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) + protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { global $conf; $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; From e9c6a10bdd68ff75fcdacdd20aea356cca091934 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 18:35:36 +0200 Subject: [PATCH 0066/1148] Fix phpcs --- htdocs/core/modules/bank/doc/pdf_ban.modules.php | 7 +++++++ .../modules/bank/doc/pdf_sepamandate.modules.php | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/bank/doc/pdf_ban.modules.php b/htdocs/core/modules/bank/doc/pdf_ban.modules.php index a6ec1eabcd9..dfe612b0012 100644 --- a/htdocs/core/modules/bank/doc/pdf_ban.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_ban.modules.php @@ -275,6 +275,7 @@ class pdf_ban extends ModeleBankAccountDoc } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show table for lines * @@ -289,11 +290,13 @@ class pdf_ban extends ModeleBankAccountDoc */ protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { + // phpcs:enable global $conf,$mysoc; $default_font_size = pdf_getPDFFontSize($outputlangs); } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -306,6 +309,7 @@ class pdf_ban extends ModeleBankAccountDoc protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs) { global $langs,$conf,$mysoc; + // phpcs:enable $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -380,6 +384,7 @@ class pdf_ban extends ModeleBankAccountDoc */ } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show footer of page. Need this->emetteur object * @@ -391,7 +396,9 @@ class pdf_ban extends ModeleBankAccountDoc */ protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { + // phpcs:enable global $conf; + $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; //return pdf_pagefoot($pdf,$outputlangs,'BANK_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext); } diff --git a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php index 657a3146e6e..df8a7993dce 100644 --- a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php +++ b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php @@ -418,6 +418,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show table for lines * @@ -432,13 +433,15 @@ class pdf_sepamandate extends ModeleBankAccountDoc */ protected function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { + // phpcs:enable global $conf,$mysoc; $default_font_size = pdf_getPDFFontSize($outputlangs); } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Show miscellaneous information (payment mode, payment term, ...) * @@ -475,7 +478,8 @@ class pdf_sepamandate extends ModeleBankAccountDoc - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Show area for the customer to sign * @@ -517,6 +521,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -528,6 +533,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc */ protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs) { + // phpcs:enable global $langs,$conf,$mysoc; $default_font_size = pdf_getPDFFontSize($outputlangs); @@ -609,6 +615,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc */ } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show footer of page. Need this->emetteur object * @@ -620,7 +627,9 @@ class pdf_sepamandate extends ModeleBankAccountDoc */ protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { + // phpcs:enable global $conf; + $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; return pdf_pagefoot($pdf, $outputlangs, 'PAYMENTORDER_FREE_TEXT', null, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext); } From 09d420307db71d178aa81a38860911d219a56d56 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 23:16:07 +0200 Subject: [PATCH 0067/1148] =?UTF-8?q?Fix=20error=20"fatal:=20ni=20ceci=20n?= =?UTF-8?q?i=20aucun=20de=20ses=20r=C3=A9pertoires=20parents=20n'est=20un?= =?UTF-8?q?=20d=C3=A9p=C3=B4t=20git=C2=A0:=20.git"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/makepack-dolibarr.pl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index b787d439243..3884969eceb 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -382,11 +382,14 @@ if ($nboftargetok) { } } } - + # Build xml check file #----------------------- if ($CHOOSEDTARGET{'-CHKSUM'}) { + print "Go to directory $SOURCE\n"; + $olddir=getcwd(); + chdir("$SOURCE"); $ret=`git ls-files . --exclude-standard --others`; if ($ret) { From fdc958a17215dde76d7d55ebfe5c5ee375831efc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 23:17:36 +0200 Subject: [PATCH 0068/1148] Fix launch of ISCC.ex if not into path --- build/makepack-dolibarr.pl | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index 7ba988231cc..14d4924136a 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -22,7 +22,7 @@ $PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr"; $PUBLISHBETARC="dolibarr\@vmprod1.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files"; -#@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT"); # Possible packages +#@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","EXEDOLIWAMP","SNAPSHOT"); # Possible packages @LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","EXEDOLIWAMP","SNAPSHOT"); # Possible packages %REQUIREMENTPUBLISH=( "SF"=>"git ssh rsync", @@ -36,8 +36,8 @@ $PUBLISHBETARC="dolibarr\@vmprod1.dolibarr.org:/home/dolibarr/dolibarr.org/httpd "RPM_FEDORA"=>"rpmbuild", "RPM_MANDRIVA"=>"rpmbuild", "RPM_OPENSUSE"=>"rpmbuild", -"DEB"=>"dpkg", -"APS"=>"zip", +"DEB"=>"dpkg dpatch", +"FLATPACK"=>"flatpack", "EXEDOLIWAMP"=>"ISCC.exe", "SNAPSHOT"=>"tar" ); @@ -142,7 +142,6 @@ $FILENAMETGZ = "$PROJECT-$MAJOR.$MINOR.$BUILD"; $FILENAMEZIP = "$PROJECT-$MAJOR.$MINOR.$BUILD"; $FILENAMEXZ = "$PROJECT-$MAJOR.$MINOR.$BUILD"; $FILENAMEDEB = "see later"; -$FILENAMEAPS = "$PROJECT-$MAJOR.$MINOR.$BUILD.app"; $FILENAMEEXEDOLIWAMP = "DoliWamp-$MAJOR.$MINOR.$BUILD"; # For RPM $ARCH='noarch'; @@ -358,16 +357,16 @@ if ($nboftargetok) { } else { - print "ChangeLog for $MAJOR.$MINOR\.$BUILD was found into '$SOURCE/ChangeLog. But you can regenerate it with command:'\n"; + print "ChangeLog for $MAJOR.$MINOR\.$BUILD was found into '$SOURCE/ChangeLog. But you can regenerate it with command:\n"; } if (! $BUILD || $BUILD eq '0-rc') # For a major version { - print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log `git rev-list --boundary '.$MAJOR.'.'.$MINOR.'..origin/develop | grep ^- | cut -c2- | head -n 1`.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa'; + print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log `git rev-list --boundary '.$MAJOR.'.'.$MINOR.'..origin/develop | grep ^- | cut -c2- | head -n 1`.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\|CLOSE\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa'; } else # For a maintenance release { #print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log '.$MAJOR.'.'.$MINOR.'.'.($BUILD-1).'.. --no-merges --pretty=short --oneline | sed -e "s/^[0-9a-z]* //" | grep -e \'^FIX\|NEW\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa'; - print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log '.$MAJOR.'.'.$MINOR.'.'.($BUILD-1).'.. | grep -v "Merge branch" | grep -v "Merge pull" | grep "^ " | sed -e "s/^[0-9a-z]* *//" | grep -e \'^FIX\|NEW\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa'; + print 'cd ~/git/dolibarr_'.$MAJOR.'.'.$MINOR.'; git log '.$MAJOR.'.'.$MINOR.'.'.($BUILD-1).'.. | grep -v "Merge branch" | grep -v "Merge pull" | grep "^ " | sed -e "s/^[0-9a-z]* *//" | grep -e \'^FIX\|NEW\|CLOSE\' | sort -u | sed \'s/FIXED:/FIX:/g\' | sed \'s/FIXED :/FIX:/g\' | sed \'s/FIX :/FIX:/g\' | sed \'s/FIX /FIX: /g\' | sed \'s/NEW :/NEW:/g\' | sed \'s/NEW /NEW: /g\' > /tmp/aaa'; } print "\n"; @@ -388,6 +387,7 @@ if ($nboftargetok) { #----------------------- if ($CHOOSEDTARGET{'-CHKSUM'}) { + chdir("$SOURCE"); print 'Create xml check file with md5 checksum with command php '.$SOURCE.'/build/generate_filelist_xml.php release='.$MAJOR.'.'.$MINOR.'.'.$BUILD."\n"; $ret=`php $SOURCE/build/generate_filelist_xml.php release=$MAJOR.$MINOR.$BUILD`; print $ret."\n"; @@ -536,6 +536,8 @@ if ($nboftargetok) { $ret=`find $BUILDROOT/$PROJECT/htdocs/custom/* -type l -exec rm -fr {} \\; >/dev/null 2>&1`; # For custom we want to remove all subdirs, even symbolic links, but not files # Removed known external modules to avoid any error when packaging from env where external modules are tested + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/abricot*`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/allscreens*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/ancotec*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/cabinetmed*`; @@ -550,11 +552,14 @@ if ($nboftargetok) { $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/ndf*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/nltechno*`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/nomenclature*`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/of/`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/oscim*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/pos*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/teclib*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/timesheet*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/webmail*`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/workstation*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/oblyon*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/allscreen*`; @@ -586,6 +591,8 @@ if ($nboftargetok) { $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Examples`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/unitTests`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/license.md`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/tests`; + $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/tests`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/LICENSE`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/freefont-*`; @@ -692,7 +699,7 @@ if ($nboftargetok) { print "Go to directory $BUILDROOT\n"; $olddir=getcwd(); chdir("$BUILDROOT"); - $cmd= "xz -9 -r $BUILDROOT/$FILENAMEAPS.xz \*"; + $cmd= "xz -9 -r $BUILDROOT/$FILENAMEXZ.xz \*"; print $cmd."\n"; $ret= `$cmd`; chdir("$olddir"); @@ -1140,7 +1147,7 @@ if ($nboftargetok) { $ret=`cat "$SOURCE/build/exe/doliwamp/doliwamp.iss" | sed -e 's/__FILENAMEEXEDOLIWAMP__/$FILENAMEEXEDOLIWAMP/g' > "$SOURCE/build/exe/doliwamp/doliwamp.tmp.iss"`; print "Compil exe $FILENAMEEXEDOLIWAMP.exe file from iss file \"$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\"\n"; - $cmd= "ISCC.exe \"Z:$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\""; + $cmd= "wine ISCC.exe \"Z:$SOURCEBACK\\build\\exe\\doliwamp\\doliwamp.tmp.iss\""; print "$cmd\n"; $ret= `$cmd`; #print "$ret\n"; From 0aeb27ba9707fca4849d7698bb4f009c32a80ae6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 23:25:07 +0200 Subject: [PATCH 0069/1148] Fix merge --- build/makepack-dolibarr.pl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index df58566c2d5..bf593192507 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -387,7 +387,8 @@ if ($nboftargetok) { #----------------------- if ($CHOOSEDTARGET{'-CHKSUM'}) { -<<<<<<< HEAD + chdir("$SOURCE"); + $ret=`git ls-files . --exclude-standard --others`; if ($ret) { @@ -397,9 +398,6 @@ if ($nboftargetok) { exit; } -======= - chdir("$SOURCE"); ->>>>>>> branch '8.0' of git@github.com:Dolibarr/dolibarr.git print 'Create xml check file with md5 checksum with command php '.$SOURCE.'/build/generate_filelist_xml.php release='.$MAJOR.'.'.$MINOR.'.'.$BUILD."\n"; $ret=`php $SOURCE/build/generate_filelist_xml.php release=$MAJOR.$MINOR.$BUILD`; print $ret."\n"; From 6537faa35eb00d00e6201c794e89f840a4a3beae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 29 Jun 2019 23:26:14 +0200 Subject: [PATCH 0070/1148] Fix merge --- build/makepack-dolibarr.pl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl index bf593192507..138c1cd21d5 100755 --- a/build/makepack-dolibarr.pl +++ b/build/makepack-dolibarr.pl @@ -570,10 +570,6 @@ if ($nboftargetok) { $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/timesheet*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/webmail*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/workstation*`; -<<<<<<< HEAD -======= - $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*`; ->>>>>>> branch '8.0' of git@github.com:Dolibarr/dolibarr.git $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/oblyon*`; $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/allscreen*`; # Removed other test files From fcf3ec3f0e56924a67095646bea140c5db7d2cb2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 30 Jun 2019 14:01:02 +0200 Subject: [PATCH 0071/1148] Fix software is uncountable noun --- build/exe/doliwamp/Languages/MyEnglish.isl | 2 +- build/exe/doliwamp/doliwamp.iss | 2 +- build/exe/doliwamp/httpd.conf.install | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/exe/doliwamp/Languages/MyEnglish.isl b/build/exe/doliwamp/Languages/MyEnglish.isl index 18068087804..b066a5f87f6 100644 --- a/build/exe/doliwamp/Languages/MyEnglish.isl +++ b/build/exe/doliwamp/Languages/MyEnglish.isl @@ -11,7 +11,7 @@ LaunchProgram=Launch %1 AssocFileExtension=&Associate %1 with the %2 file extension AssocingFileExtension=Associating %1 with the %2 file extension... -YouWillInstallDoliWamp=You will install or upgrade DoliWamp (so Dolibarr + all required third party softwares like Apache, Mysql and PHP) on your computer. +YouWillInstallDoliWamp=You will install or upgrade DoliWamp (so Dolibarr + all required third party software like Apache, Mysql and PHP) on your computer. ThisAssistantInstallOrUpgrade=WARNING: Using an ERP CRM installed on a local computer can be dangerous: if your computer break down, you can lose all your data. Do this if you are ready to manage backup yourself seriously. If not, use an installation in Saas instead (see https://saas.dolibarr.org). IfYouHaveTechnicalKnowledge=Moreover, if you have technical knowledges and want to manage your Apache, Mysql and PHP yourself, you should not use this assistant and make a manual installation of Dolibarr on your existing server with Apache, Mysql and PHP. ButIfYouLook=But if you look for an automatic setup on your local computer, you''re on the good way... diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss index 587f2584dbe..93f515d3440 100644 --- a/build/exe/doliwamp/doliwamp.iss +++ b/build/exe/doliwamp/doliwamp.iss @@ -31,7 +31,7 @@ AppPublisher=NLTechno AppPublisherURL=https://www.nltechno.com AppSupportURL=https://www.dolibarr.org AppUpdatesURL=https://www.dolibarr.org -AppComments=DoliWamp includes Dolibarr, Apache, PHP and Mysql softwares. +AppComments=DoliWamp includes Dolibarr, Apache, PHP and Mysql software. AppCopyright=Copyright (C) 2008-2019 Laurent Destailleur (NLTechno), Fabian Rodriguez (Le Goût du Libre) DefaultDirName=c:\dolibarr DefaultGroupName=Dolibarr diff --git a/build/exe/doliwamp/httpd.conf.install b/build/exe/doliwamp/httpd.conf.install index b2b3a9a8118..a23a994f670 100644 --- a/build/exe/doliwamp/httpd.conf.install +++ b/build/exe/doliwamp/httpd.conf.install @@ -772,5 +772,5 @@ SSLCertificateKeyFile "WAMPROOT/myserver.key" # -# Declare alias for Dolibarr, PHPMyAdmin and other softwares +# Declare alias for Dolibarr, PHPMyAdmin and other software Include "WAMPROOT/alias/*.conf" From b31297b712d2fdb2ce1d6ea1a8e3a0fd1d2a37a1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 30 Jun 2019 14:45:36 +0200 Subject: [PATCH 0072/1148] Add comment for microsoft edge --- build/exe/doliwamp/rundoliadmin.bat.install | 1 + build/exe/doliwamp/rundolihelp.bat.install | 1 + build/exe/doliwamp/rundoliwamp.bat.install | 2 ++ 3 files changed, 4 insertions(+) diff --git a/build/exe/doliwamp/rundoliadmin.bat.install b/build/exe/doliwamp/rundoliadmin.bat.install index dcd113f4ab5..c5186c7d1e7 100644 --- a/build/exe/doliwamp/rundoliadmin.bat.install +++ b/build/exe/doliwamp/rundoliadmin.bat.install @@ -4,3 +4,4 @@ REM ---------------------------- REM Go to admin center page start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/ +REM FOR EDGE start microsoft-edge:"http://localhost:WAMPAPACHEPORT/" \ No newline at end of file diff --git a/build/exe/doliwamp/rundolihelp.bat.install b/build/exe/doliwamp/rundolihelp.bat.install index eed5346de9f..c1c4a7c3d27 100644 --- a/build/exe/doliwamp/rundolihelp.bat.install +++ b/build/exe/doliwamp/rundolihelp.bat.install @@ -5,3 +5,4 @@ REM --------------------------- REM Go to help center page echo Please wait... start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/support/ +REM FOR EDGE start microsoft-edge:"http://localhost:WAMPAPACHEPORT/dolibarr/support/" \ No newline at end of file diff --git a/build/exe/doliwamp/rundoliwamp.bat.install b/build/exe/doliwamp/rundoliwamp.bat.install index c576c5d240b..9470717d661 100644 --- a/build/exe/doliwamp/rundoliwamp.bat.install +++ b/build/exe/doliwamp/rundoliwamp.bat.install @@ -4,6 +4,8 @@ REM --------------- REM If no lock file, we call install process IF NOT EXIST dolibarr_documents\install.lock start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/install/ +REM FOR EDGE IF NOT EXIST dolibarr_documents\install.lock start microsoft-edge:"http://localhost:WAMPAPACHEPORT/dolibarr/install/" REM If lock file exists, we call home page IF EXIST dolibarr_documents\install.lock start "WAMPBROWSER" http://localhost:WAMPAPACHEPORT/dolibarr/ +REM FOR EDGE IF EXIST dolibarr_documents\install.lock start microsoft-edge:"http://localhost:WAMPAPACHEPORT/dolibarr/" From a992690c4386e5dd7494b8c78589e25758845d47 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 30 Jun 2019 14:49:51 +0200 Subject: [PATCH 0073/1148] Fix missing php-intl --- build/exe/doliwamp/php.ini.install | 1 + 1 file changed, 1 insertion(+) diff --git a/build/exe/doliwamp/php.ini.install b/build/exe/doliwamp/php.ini.install index 46e4dc685b7..928e967f184 100644 --- a/build/exe/doliwamp/php.ini.install +++ b/build/exe/doliwamp/php.ini.install @@ -665,6 +665,7 @@ extension=php_gd2.dll ;extension=php_ifx.dll ;extension=php_imap.dll ;extension=php_interbase.dll +extension=php_intl.dll extension=php_ldap.dll extension=php_mbstring.dll ;extension=php_mcrypt.dll From 8f5b575b194501dd6f295ae5576f007fab9ed93e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 30 Jun 2019 16:19:26 +0200 Subject: [PATCH 0074/1148] Fix missing php-intl is not blocking (not working on windows) --- build/exe/doliwamp/php.ini.install | 2 ++ htdocs/core/lib/functions.lib.php | 2 +- htdocs/install/check.php | 10 +++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/build/exe/doliwamp/php.ini.install b/build/exe/doliwamp/php.ini.install index 928e967f184..04191a71f5a 100644 --- a/build/exe/doliwamp/php.ini.install +++ b/build/exe/doliwamp/php.ini.install @@ -653,6 +653,8 @@ default_socket_timeout = 60 ; extension folders as well as the separate PECL DLL download (PHP 5). ; Be sure to appropriately set the extension_dir directive. +; If an extension does not load, run "deplister.exe php_xxx.dll" to get list of dependency dll missing. + extension=php_bz2.dll extension=php_curl.dll ;extension=php_dba.dll diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 7341bc0c2cb..c930dbf172a 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -7037,7 +7037,7 @@ function getLanguageCodeFromCountryCode($countrycode) $buildprimarykeytotest = strtolower($countrycode).'-'.strtoupper($countrycode); if (in_array($buildprimarykeytotest, $locales)) return strtolower($countrycode).'_'.strtoupper($countrycode); - if (function_exists('locale_get_primary_language')) // Need extension php-intl + if (function_exists('locale_get_primary_language') && function_exists('locale_get_region')) // Need extension php-intl { foreach ($locales as $locale) { diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 55331634aff..0b98183904a 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -127,7 +127,7 @@ if (! function_exists("imagecreate")) { $langs->load("errors"); print 'Error '.$langs->trans("ErrorPHPDoesNotSupportGD")."
\n"; - // $checksok=0; // If image ko, just warning. So check must still be 1 (otherwise no way to install) + // $checksok=0; // If ko, just warning. So check must still be 1 (otherwise no way to install) } else { @@ -140,7 +140,7 @@ if (! function_exists("curl_init")) { $langs->load("errors"); print 'Error '.$langs->trans("ErrorPHPDoesNotSupportCurl")."
\n"; - // $checksok=0; // If image ko, just warning. So check must still be 1 (otherwise no way to install) + // $checksok=0; // If ko, just warning. So check must still be 1 (otherwise no way to install) } else { @@ -153,7 +153,7 @@ if (! function_exists("utf8_encode")) { $langs->load("errors"); print 'Error '.$langs->trans("ErrorPHPDoesNotSupportUTF8")."
\n"; - // $checksok=0; // If image ko, just warning. So check must still be 1 (otherwise no way to install) + // $checksok=0; // If ko, just warning. So check must still be 1 (otherwise no way to install) } else { @@ -162,11 +162,11 @@ else // Check if UTF8 supported -if (! function_exists("locale_get_primary_language")) +if (! function_exists("locale_get_primary_language") || ! function_exists("locale_get_region")) { $langs->load("errors"); print 'Error '.$langs->trans("ErrorPHPDoesNotSupportIntl")."
\n"; - // $checksok=0; // If image ko, just warning. So check must still be 1 (otherwise no way to install) + // $checksok=0; // If ko, just warning. So check must still be 1 (otherwise no way to install) } else { From 46ced373be59380f1706e6a48f3065be2b02ea71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 30 Jun 2019 23:52:28 +0200 Subject: [PATCH 0075/1148] Fix for doliwamp --- build/exe/doliwamp/install.forced.php.install | 1 + htdocs/install/check.php | 22 ++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/build/exe/doliwamp/install.forced.php.install b/build/exe/doliwamp/install.forced.php.install index 5b186c17268..c59b373a7a0 100644 --- a/build/exe/doliwamp/install.forced.php.install +++ b/build/exe/doliwamp/install.forced.php.install @@ -5,6 +5,7 @@ // during install process to be used. // // +$force_install_type='doliwamp'; $force_install_noedit=2; // 1=To block vars specific to distrib, 2 to block all technical parameters $force_install_message='KeepDefaultValuesWamp'; $force_install_main_data_root='WAMPROOT/dolibarr_documents'; diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 0b98183904a..9d6d9adbc16 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -161,18 +161,20 @@ else } -// Check if UTF8 supported -if (! function_exists("locale_get_primary_language") || ! function_exists("locale_get_region")) +// Check if intl methods are supported +if (empty($force_install_type) || $force_install_type != 'doliwamp') { - $langs->load("errors"); - print 'Error '.$langs->trans("ErrorPHPDoesNotSupportIntl")."
\n"; - // $checksok=0; // If ko, just warning. So check must still be 1 (otherwise no way to install) + if (! function_exists("locale_get_primary_language") || ! function_exists("locale_get_region")) + { + $langs->load("errors"); + print 'Error '.$langs->trans("ErrorPHPDoesNotSupportIntl")."
\n"; + // $checksok=0; // If ko, just warning. So check must still be 1 (otherwise no way to install) + } + else + { + print 'Ok '.$langs->trans("PHPSupportIntl")."
\n"; + } } -else -{ - print 'Ok '.$langs->trans("PHPSupportIntl")."
\n"; -} - // Check memory From 511b21ca9c94d2820b953117dffa0a0f23a8f171 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 1 Jul 2019 00:22:28 +0200 Subject: [PATCH 0076/1148] Fix for doliwamp --- build/exe/doliwamp/httpd.conf.install | 2 +- htdocs/install/check.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/exe/doliwamp/httpd.conf.install b/build/exe/doliwamp/httpd.conf.install index a23a994f670..40cc9a2f5c6 100644 --- a/build/exe/doliwamp/httpd.conf.install +++ b/build/exe/doliwamp/httpd.conf.install @@ -150,7 +150,7 @@ Require local # e-mailed. This address appears on some server-generated pages, such # as error documents. e.g. admin@your-domain.com # -ServerAdmin webmaster@localhost +ServerAdmin doliwamp@localhost # # ServerName gives the name and port that the server uses to identify itself. diff --git a/htdocs/install/check.php b/htdocs/install/check.php index 9d6d9adbc16..43645f402ed 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -162,7 +162,7 @@ else // Check if intl methods are supported -if (empty($force_install_type) || $force_install_type != 'doliwamp') +if (empty($_SERVER["SERVER_ADMIN"]) || $_SERVER["SERVER_ADMIN"] != 'doliwamp@localhost') { if (! function_exists("locale_get_primary_language") || ! function_exists("locale_get_region")) { From c24a95b7ad11322eede188e630ac8b38e1ca631c Mon Sep 17 00:00:00 2001 From: atm-josselin Date: Mon, 1 Jul 2019 09:31:01 +0200 Subject: [PATCH 0077/1148] Sanitize at creation of the product instead of the creation of the filepath --- htdocs/core/class/html.formfile.class.php | 2 +- htdocs/product/class/product.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 522804b601c..679989a75a0 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -764,7 +764,7 @@ class FormFile // Show file name with link to download $out.= '
\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; $totalarray['totalht'] += $obj->total_ht; @@ -1151,7 +1151,7 @@ if ($resql) // Amount VAT if (! empty($arrayfields['f.total_vat']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; $totalarray['totalvat'] += $obj->total_vat; @@ -1159,7 +1159,7 @@ if ($resql) // Amount LocalTax1 if (! empty($arrayfields['f.total_localtax1']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totallocaltax1field']=$totalarray['nbfield']; $totalarray['totallocaltax1'] += $obj->total_localtax1; @@ -1167,7 +1167,7 @@ if ($resql) // Amount LocalTax2 if (! empty($arrayfields['f.total_localtax2']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totallocaltax2field']=$totalarray['nbfield']; $totalarray['totallocaltax2'] += $obj->total_localtax2; @@ -1175,7 +1175,7 @@ if ($resql) // Amount TTC if (! empty($arrayfields['f.total_ttc']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; $totalarray['totalttc'] += $obj->total_ttc; @@ -1183,7 +1183,7 @@ if ($resql) if (! empty($arrayfields['dynamount_payed']['checked'])) { - print ''; // TODO Use a denormalized field + print ''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalamfield']=$totalarray['nbfield']; $totalarray['totalam'] += $totalpay; @@ -1191,7 +1191,7 @@ if ($resql) if (! empty($arrayfields['rtp']['checked'])) { - print ''; // TODO Use a denormalized field + print ''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalrtpfield']=$totalarray['nbfield']; $totalarray['totalrtp'] += $remaintopay; diff --git a/htdocs/don/card.php b/htdocs/don/card.php index cd92d8d02f5..6e6bab0cf57 100644 --- a/htdocs/don/card.php +++ b/htdocs/don/card.php @@ -154,7 +154,7 @@ if ($action == 'add') if (! $error) { - $object->socid = GETPOST("socid", 'int'); + $object->socid = GETPOST("socid", 'int'); $object->firstname = GETPOST("firstname", 'alpha'); $object->lastname = GETPOST("lastname", 'alpha'); $object->societe = GETPOST("societe", 'alpha'); @@ -164,7 +164,7 @@ if ($action == 'add') $object->town = GETPOST("town", 'alpha'); $object->country_id = GETPOST('country_id', 'int'); $object->email = GETPOST('email', 'alpha'); - $object->date = $donation_date; + $object->date = $donation_date; $object->note_private = GETPOST("note_private", 'none'); $object->note_public = GETPOST("note_public", 'none'); $object->public = GETPOST("public", 'alpha'); diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index d75e658a191..caeb70aca94 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -392,11 +392,11 @@ class Don extends CommonObject $sql.= ", phone"; $sql.= ", phone_mobile"; $sql.= ") VALUES ("; - $sql.= " '".$this->db->idate($now)."'"; + $sql.= "'".$this->db->idate($now)."'"; $sql.= ", ".$conf->entity; $sql.= ", ".price2num($this->amount); $sql.= ", ".($this->modepaymentid?$this->modepaymentid:"null"); - $sql.= ", '".$this->db->escape($this->socid)."'"; + $sql.= ", ".($this->socid?$this->socid:"null"); $sql.= ", '".$this->db->escape($this->firstname)."'"; $sql.= ", '".$this->db->escape($this->lastname)."'"; $sql.= ", '".$this->db->escape($this->societe)."'"; diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php index ed7caf0061d..7d51f3783c1 100644 --- a/htdocs/fourn/facture/list.php +++ b/htdocs/fourn/facture/list.php @@ -986,7 +986,7 @@ if ($resql) // Amount HT if (! empty($arrayfields['f.total_ht']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalhtfield']=$totalarray['nbfield']; $totalarray['totalht'] += $obj->total_ht; @@ -994,7 +994,7 @@ if ($resql) // Amount VAT if (! empty($arrayfields['f.total_vat']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalvatfield']=$totalarray['nbfield']; $totalarray['totalvat'] += $obj->total_vat; @@ -1002,7 +1002,7 @@ if ($resql) // Amount LocalTax1 if (! empty($arrayfields['f.total_localtax1']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totallocaltax1field']=$totalarray['nbfield']; $totalarray['totallocaltax1'] += $obj->total_localtax1; @@ -1010,7 +1010,7 @@ if ($resql) // Amount LocalTax2 if (! empty($arrayfields['f.total_localtax2']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totallocaltax2field']=$totalarray['nbfield']; $totalarray['totallocaltax2'] += $obj->total_localtax2; @@ -1018,7 +1018,7 @@ if ($resql) // Amount TTC if (! empty($arrayfields['f.total_ttc']['checked'])) { - print '\n"; + print '\n"; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalttcfield']=$totalarray['nbfield']; $totalarray['totalttc'] += $obj->total_ttc; @@ -1026,7 +1026,7 @@ if ($resql) if (! empty($arrayfields['dynamount_payed']['checked'])) { - print ''; // TODO Use a denormalized field + print ''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalamfield']=$totalarray['nbfield']; $totalarray['totalam'] += $totalpay; @@ -1034,7 +1034,7 @@ if ($resql) if (! empty($arrayfields['rtp']['checked'])) { - print ''; // TODO Use a denormalized field + print ''; // TODO Use a denormalized field if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalrtpfield']=$totalarray['nbfield']; $totalarray['totalrtp'] += $remaintopay; From 92f6cef00f9b2f0a606291cd37564e99172e917c Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 2 Jul 2019 12:07:22 +0200 Subject: [PATCH 0088/1148] Fix unit test --- test/phpunit/FactureTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/phpunit/FactureTest.php b/test/phpunit/FactureTest.php index 4f680ba32db..ccc6aaeff85 100644 --- a/test/phpunit/FactureTest.php +++ b/test/phpunit/FactureTest.php @@ -232,7 +232,8 @@ class FactureTest extends PHPUnit_Framework_TestCase 'newref','oldref','id','lines','client','thirdparty','brouillon','user_author','date_creation','date_validation','datem','date_modification', 'ref','statut','paye','specimen','ref','actiontypecode','actionmsg2','actionmsg','mode_reglement','cond_reglement', 'cond_reglement_doc','situation_cycle_ref','situation_counter','situation_final','multicurrency_total_ht','multicurrency_total_tva', - 'multicurrency_total_ttc','fk_multicurrency','multicurrency_code','multicurrency_tx' + 'multicurrency_total_ttc','fk_multicurrency','multicurrency_code','multicurrency_tx', + 'retained_warranty' ,'retained_warranty_date_limit', 'retained_warranty_fk_cond_reglement' ) ); $this->assertEquals($arraywithdiff, array()); // Actual, Expected From 028833836445f5553e4a9a9b3140464b363090ec Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 2 Jul 2019 14:38:09 +0200 Subject: [PATCH 0089/1148] Fix column price display --- htdocs/product/price.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/product/price.php b/htdocs/product/price.php index c636deab22b..4b777feb6ef 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -1554,12 +1554,12 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_ { print '"; print '"; if (! empty($conf->dynamicprices->enabled)) { //Only if module is enabled @@ -1569,13 +1569,13 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action=='showlog_default_ print ''; print ''; From 8a25c854e9b75c9134e5232a0640799e9badaa9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 14:38:26 +0200 Subject: [PATCH 0090/1148] Hide sensitive data --- .../DataCollector/DolRequestDataCollector.php | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php b/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php index e4d8e89159a..d6e939a9964 100644 --- a/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php +++ b/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php @@ -8,6 +8,31 @@ use \DebugBar\DataCollector\RequestDataCollector; class DolRequestDataCollector extends RequestDataCollector { + public function collect() + { + $vars = array('_GET', '_POST', '_SESSION', '_COOKIE', '_SERVER'); + $data = array(); + + foreach ($vars as $var) { + if (isset($GLOBALS[$var])) { + $arrayofvalues = $GLOBALS[$var]; + + if ($var == '_COOKIE') + { + foreach($arrayofvalues as $key => $val) + { + if (preg_match('/^DOLSESSID_/', $key)) $arrayofvalues[$key]='*****hidden*****'; + } + //var_dump($arrayofvalues); + } + + $data["$" . $var] = $this->getDataFormatter()->formatVar($arrayofvalues); + } + } + + return $data; + } + /** * Return widget settings * @@ -20,7 +45,7 @@ class DolRequestDataCollector extends RequestDataCollector $langs->load("other"); return array( - $langs->transnoentities('Request') => array( + $langs->transnoentities('Variables') => array( "icon" => "tags", "widget" => "PhpDebugBar.Widgets.VariableListWidget", "map" => "request", From 3b0f1c733f36d6a6de2181da60783fdd71624da7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 15:00:17 +0200 Subject: [PATCH 0091/1148] Fix missing token --- htdocs/core/boxes/box_graph_invoices_permonth.php | 1 + htdocs/core/boxes/box_graph_invoices_supplier_permonth.php | 1 + htdocs/core/boxes/box_graph_orders_permonth.php | 1 + htdocs/core/boxes/box_graph_orders_supplier_permonth.php | 1 + htdocs/core/boxes/box_graph_product_distribution.php | 1 + htdocs/core/boxes/box_graph_propales_permonth.php | 1 + htdocs/main.inc.php | 1 + 7 files changed, 7 insertions(+) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index 4323661370c..91416452609 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -224,6 +224,7 @@ class box_graph_invoices_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index bba5185c94a..b95cffdb499 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -221,6 +221,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index b06558393aa..271ed4911b4 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -220,6 +220,7 @@ class box_graph_orders_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index 9cb11aed7c1..b7589e0efd2 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -219,6 +219,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_product_distribution.php b/htdocs/core/boxes/box_graph_product_distribution.php index 0fe5c66d532..0cdffafa050 100644 --- a/htdocs/core/boxes/box_graph_product_distribution.php +++ b/htdocs/core/boxes/box_graph_product_distribution.php @@ -338,6 +338,7 @@ class box_graph_product_distribution extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index b21381473c2..42643fb72bc 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -223,6 +223,7 @@ class box_graph_propales_permonth extends ModeleBoxes '; $stringtoshow.='
'; // hideobject is to start hidden $stringtoshow.=''; + $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; $stringtoshow.=''; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index d283abd7d15..5456e2ce1eb 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -374,6 +374,7 @@ if (! defined('NOTOKENRENEWAL')) //var_dump(GETPOST('token').' '.$_SESSION['token'].' - '.$_SESSION['newtoken'].' '.$_SERVER['SCRIPT_FILENAME']); // Check token +//var_dump((! defined('NOCSRFCHECK')).' '.empty($dolibarr_nocsrfcheck).' '.(! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)).' '.$_SERVER['REQUEST_METHOD'].' '.(! GETPOSTISSET('token'))); if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) || defined('CSRFCHECK_WITH_TOKEN')) // Check validity of token, only if option MAIN_SECURITY_CSRF_WITH_TOKEN enabled or if constant CSRFCHECK_WITH_TOKEN is set { From a75a2ae8e45a730e9a74ac9944acb43aac4c4ee2 Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 2 Jul 2019 15:44:42 +0200 Subject: [PATCH 0092/1148] Fix missing hidden input and short label --- htdocs/admin/dict.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index d160793b735..6bffb7fe535 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1889,6 +1889,9 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') { print ''; } + else{ + print ''; + } print ''; } elseif ($fieldlist[$field] == 'price' || preg_match('/^amount/i',$fieldlist[$field])) { @@ -1951,7 +1954,13 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } else { - if ($fieldlist[$field]=='sortorder') $fieldlist[$field]='position'; + + $fieldValue = isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''; + + if ($fieldlist[$field]=='sortorder') + { + $fieldlist[$field]='position'; + } $classtd=''; $class=''; if ($fieldlist[$field]=='code') $classtd='width100'; @@ -1972,7 +1981,7 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } if ($tabname == MAIN_DB_PREFIX.'c_payment_term') { $langs->load("bills"); - $transkey="PaymentCondition".strtoupper($obj->code); + $transkey="PaymentConditionShort".strtoupper($obj->code); } if ($transkey && $langs->trans($transkey) != $transkey) { @@ -1982,8 +1991,11 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') } if (! $transfound) { - print ''; + print ''; } + else{ + print ''; + } print ''; } } From d9560dbb6187a26c6badf7af3be04e467cccc1bf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 18:02:06 +0200 Subject: [PATCH 0093/1148] Fix var not initialized --- htdocs/core/modules/export/export_csv.modules.php | 3 +++ htdocs/core/modules/export/export_excel.modules.php | 2 ++ htdocs/core/modules/export/export_excel2007new.modules.php | 2 ++ 3 files changed, 7 insertions(+) diff --git a/htdocs/core/modules/export/export_csv.modules.php b/htdocs/core/modules/export/export_csv.modules.php index c3c8431962e..9d606aadc33 100644 --- a/htdocs/core/modules/export/export_csv.modules.php +++ b/htdocs/core/modules/export/export_csv.modules.php @@ -261,6 +261,9 @@ class ExportCsv extends ModeleExports } $this->col=0; + + $reg=array(); + foreach($array_selected_sorted as $code => $value) { if (strpos($code, ' as ') == 0) $alias=str_replace(array('.','-','(',')'), '_', $code); diff --git a/htdocs/core/modules/export/export_excel.modules.php b/htdocs/core/modules/export/export_excel.modules.php index ffb1fd83cce..0e7fd0f1169 100644 --- a/htdocs/core/modules/export/export_excel.modules.php +++ b/htdocs/core/modules/export/export_excel.modules.php @@ -345,6 +345,8 @@ class ExportExcel extends ModeleExports // Define first row $this->col=0; + $reg=array(); + foreach($array_selected_sorted as $code => $value) { if (strpos($code, ' as ') == 0) $alias=str_replace(array('.','-','(',')'), '_', $code); diff --git a/htdocs/core/modules/export/export_excel2007new.modules.php b/htdocs/core/modules/export/export_excel2007new.modules.php index 266cedc1310..038446643a2 100644 --- a/htdocs/core/modules/export/export_excel2007new.modules.php +++ b/htdocs/core/modules/export/export_excel2007new.modules.php @@ -304,6 +304,8 @@ class ExportExcel2007new extends ModeleExports // Define first row $this->col=0; + $reg=array(); + foreach($array_selected_sorted as $code => $value) { if (strpos($code, ' as ') == 0) $alias=str_replace(array('.','-','(',')'), '_', $code); From 9d50c672088b16a6208358e4f1e890ca3ab0eaab Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 18:06:51 +0200 Subject: [PATCH 0094/1148] FIX option EXPORT_LABEL_FOR_SELECT to restore compatibility in export --- htdocs/core/extrafieldsinexport.inc.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/htdocs/core/extrafieldsinexport.inc.php b/htdocs/core/extrafieldsinexport.inc.php index 13b2d1ae520..78dbba9934e 100644 --- a/htdocs/core/extrafieldsinexport.inc.php +++ b/htdocs/core/extrafieldsinexport.inc.php @@ -34,6 +34,15 @@ if ($resql) // This can fail when class is used on old database (during migra case 'boolean': $typeFilter="Boolean"; break; + case 'select': + if (! empty($conf->global->EXPORT_LABEL_FOR_SELECT)) + { + $tmpparam=unserialize($obj->param); // $tmpparam may be array with 'options' = array(key1=>val1, key2=>val2 ...) + if ($tmpparam['options'] && is_array($tmpparam['options'])) { + $typeFilter="Select:".$obj->param; + } + } + break; case 'sellist': $tmp=''; $tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null From 126479b5a9408bc3c6c55fa640e276fc44d36c4e Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 2 Jul 2019 21:46:00 +0200 Subject: [PATCH 0095/1148] Fix paymentmethod detach --- htdocs/societe/paymentmodes.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 6a3596f6e24..21af1f0a35c 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -637,6 +637,16 @@ if (empty($reshook)) elseif ($action == 'deletecard' && $source) { try { + if (preg_match('/pm_/', $source)) + { + $payment_method = \Stripe\PaymentMethod::retrieve($source); + if ($payment_method) + { + $payment_method->detach(); + } + } + else + { $cu=$stripe->customerStripe($object, $stripeacc, $servicestatus); $card=$cu->sources->retrieve("$source"); if ($card) @@ -645,6 +655,7 @@ if (empty($reshook)) if (method_exists($card, 'detach')) $card->detach(); else $card->delete(); } + } $url=DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.$object->id; header('Location: '.$url); From 03938e21239396b44353f234a2d8219694722332 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 2 Jul 2019 21:56:50 +0200 Subject: [PATCH 0096/1148] Update paymentmodes.php --- htdocs/societe/paymentmodes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 21af1f0a35c..0e41e11cbaa 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -639,7 +639,7 @@ if (empty($reshook)) try { if (preg_match('/pm_/', $source)) { - $payment_method = \Stripe\PaymentMethod::retrieve($source); + $payment_method = \Stripe\PaymentMethod::retrieve($source, ["stripe_account" => $stripeacc]); if ($payment_method) { $payment_method->detach(); From ff68b110b27aca9c0f76b12d0ddc38acdd73726a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 23:14:22 +0200 Subject: [PATCH 0097/1148] Fix phpcs --- .../debugbar/class/DataCollector/DolRequestDataCollector.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php b/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php index d6e939a9964..ebf9e2bfbd2 100644 --- a/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php +++ b/htdocs/debugbar/class/DataCollector/DolRequestDataCollector.php @@ -8,6 +8,11 @@ use \DebugBar\DataCollector\RequestDataCollector; class DolRequestDataCollector extends RequestDataCollector { + /** + * Collects the data from the collectors + * + * @return array + */ public function collect() { $vars = array('_GET', '_POST', '_SESSION', '_COOKIE', '_SERVER'); From 221c202add5821ed95c81d855446fbdac86df68e Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 06:59:52 +0200 Subject: [PATCH 0098/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index b065bb27470..8949dbc5f97 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5026,7 +5026,7 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); - if (!empty($attrfieldcomputed)) + if ((!empty($attrfieldcomputed) && (! empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) { $value = dol_eval($attrfieldcomputed, 1, 0); $new_array_options[$key] = $value; From 9064737930307a62f75c0f406794925ddf7056df Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 07:08:53 +0200 Subject: [PATCH 0099/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 8949dbc5f97..d164761366d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5026,7 +5026,7 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); - if ((!empty($attrfieldcomputed) && (! empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) + if ((!empty($attrfieldcomputed)) && (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) { $value = dol_eval($attrfieldcomputed, 1, 0); $new_array_options[$key] = $value; From 818a8c7d5963c719f26ebaa92f069aef345c8ab4 Mon Sep 17 00:00:00 2001 From: Louis Sautier Date: Wed, 3 Jul 2019 10:44:12 +0200 Subject: [PATCH 0100/1148] Fix missing form end tag in prelevement --- htdocs/compta/prelevement/create.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index d9298c9f607..747bbdf828d 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -181,6 +181,7 @@ else print 'transnoentitiesnoconv("StandingOrders"))).'">'.$langs->trans("CreateAll")."\n"; } +print "\n"; print "
\n"; print '
'; From 116c6d7a6a9b03eb61ba8564646b4a22fe1a7cc1 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 11:09:24 +0200 Subject: [PATCH 0101/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index d164761366d..67d75a62169 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5026,10 +5026,19 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); - if ((!empty($attrfieldcomputed)) && (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS))) + + if (!empty($attrfieldcomputed)) { + if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) + { $value = dol_eval($attrfieldcomputed, 1, 0); + dol_syslog($langs->trans("Extrafieldcomputed")." sur ".$attributeLabel."(".$value.")", LOG_DEBUG); $new_array_options[$key] = $value; + } + else + { + $new_array_options[$key] = null; + } } From 433835860c2cbf470b9421d75f035a2567c33aee Mon Sep 17 00:00:00 2001 From: Ferran Marcet Date: Wed, 3 Jul 2019 13:12:41 +0200 Subject: [PATCH 0102/1148] FIX: When saving an action it didn't save the label based on the type of event if the label is empty and the type is customized --- htdocs/comm/action/card.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index 470a90c355f..8989807a645 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -7,6 +7,7 @@ * Copyright (C) 2013 Florian Henry * Copyright (C) 2014 Cedric GROSS * Copyright (C) 2015 Alexandre Spangaro + * Copyright (C) 2019 Ferran Marcet * * 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 @@ -246,7 +247,10 @@ if ($action == 'add') { $object->label = $langs->transnoentitiesnoconv("Action".$object->type_code)."\n"; } - else $object->label = $cactioncomm->libelle; + else { + $cactioncomm->fetch($object->type_code); + $object->label = $cactioncomm->label; + } } } $object->fk_project = isset($_POST["projectid"])?$_POST["projectid"]:0; From 135e47892bcd7f62b27c801feec835b02be84692 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:15:20 +0200 Subject: [PATCH 0103/1148] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 04720004492..a7ae00b9ac9 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,7 @@ $langs->load("modulebuilder");
- + From 123cf7ce502d494915c25ba03b1bd71f2faa8169 Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:16:45 +0200 Subject: [PATCH 0104/1148] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index a7ae00b9ac9..5bd161c9893 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,7 @@ $langs->load("modulebuilder"); - + From 3e53a06b2ef93b487dbb4b18ffb3b4c82292ad40 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Wed, 3 Jul 2019 16:17:47 +0200 Subject: [PATCH 0105/1148] minor spelling issues --- htdocs/fourn/commande/dispatch.php | 4 ++-- htdocs/langs/fr_FR/stocks.lang | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 77fd4b1aa69..dd6fd76a46a 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -245,7 +245,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) // We ask to move a qty if (GETPOST($qty) != 0) { if (! (GETPOST($ent, 'int') > 0)) { - dol_syslog('No dispatch for line ' . $key . ' as no warehouse choosed'); + dol_syslog('No dispatch for line ' . $key . ' as no warehouse was chosen.'); $text = $langs->transnoentities('Warehouse') . ', ' . $langs->transnoentities('Line') . ' ' . ($numline); setEventMessages($langs->trans('ErrorFieldRequired', $text), null, 'errors'); $error ++; @@ -282,7 +282,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) // We ask to move a qty if (GETPOST($qty) > 0) { if (! (GETPOST($ent, 'int') > 0)) { - dol_syslog('No dispatch for line ' . $key . ' as no warehouse choosed'); + dol_syslog('No dispatch for line ' . $key . ' as no warehouse was chosen.'); $text = $langs->transnoentities('Warehouse') . ', ' . $langs->transnoentities('Line') . ' ' . ($numline) . '-' . ($reg[1] + 1); setEventMessages($langs->trans('ErrorFieldRequired', $text), null, 'errors'); $error ++; diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang index 5898f7384e5..df9f738f4d8 100644 --- a/htdocs/langs/fr_FR/stocks.lang +++ b/htdocs/langs/fr_FR/stocks.lang @@ -65,7 +65,7 @@ RuleForStockManagementIncrease=Règle de gestion des incrémentations de stock ( DeStockOnBill=Décrémenter les stocks physiques sur validation des factures/avoirs clients DeStockOnValidateOrder=Décrémenterr les stocks physiques sur validation des commandes clients DeStockOnShipment=Décrémenter les stocks physiques sur validation des expéditions -DeStockOnShipmentOnClosing=Décrémenter les stocks phisiques au classement "clôturée" de l'expédition +DeStockOnShipmentOnClosing=Décrémenter les stocks physiques au classement "clôturée" de l'expédition ReStockOnBill=Incrémenter les stocks physiques sur validation des factures/avoirs fournisseurs ReStockOnValidateOrder=Incrémenter les stocks physiques sur approbation des commandes fournisseurs ReStockOnDispatchOrder=Incrémenter les stocks physiques sur ventilation manuelle dans les entrepôts, après réception de la marchandise From 9962243df3b772c64018c782bc15195856a8906f Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:19:51 +0200 Subject: [PATCH 0106/1148] Update admin_extrafields_edit.tpl.php --- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 7ed41af9281..2acdf7e864f 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -243,7 +243,7 @@ else - + From f8a5ae90e3cf8ac89feae9f4eb8d8e616528931e Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:43:47 +0200 Subject: [PATCH 0107/1148] Update admin.lang --- htdocs/langs/en_US/admin.lang | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7480550195a..73d825d8320 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -1924,4 +1926,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? \ No newline at end of file +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? From cd7d4de6ecae99d7723ed55d7e9e1141242c6bbc Mon Sep 17 00:00:00 2001 From: Frans Bosman Date: Wed, 3 Jul 2019 16:53:26 +0200 Subject: [PATCH 0108/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 67d75a62169..0a300476fb5 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5029,7 +5029,7 @@ abstract class CommonObject if (!empty($attrfieldcomputed)) { - if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) + if (!empty($conf->global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { $value = dol_eval($attrfieldcomputed, 1, 0); dol_syslog($langs->trans("Extrafieldcomputed")." sur ".$attributeLabel."(".$value.")", LOG_DEBUG); From 2f5b9ccb22b9bcd3cce64d3a234bdf3e945b6d1e Mon Sep 17 00:00:00 2001 From: atm-greg Date: Wed, 3 Jul 2019 17:00:18 +0200 Subject: [PATCH 0109/1148] fix case objecttmp is an invoice --- htdocs/core/class/html.form.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index fe8a812a8a2..a8d96ed4b34 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5558,7 +5558,8 @@ class Form if ($prefixforautocompletemode == 'societe') $prefixforautocompletemode='company'; $confkeyforautocompletemode=strtoupper($prefixforautocompletemode).'_USE_SEARCH_TO_SELECT'; // For example COMPANY_USE_SEARCH_TO_SELECT - $fieldstoshow='t.ref'; + if (DOL_VERSION < 10 && $objecttmp->element == 'facture') $fieldstoshow = 't.facnumber'; + else $fieldstoshow='t.ref'; if (! empty($objecttmp->fields)) // For object that declare it, it is better to use declared fields ( like societe, contact, ...) { $tmpfieldstoshow=''; From 95b6f03bf52d019b3b978e73b686d441a5bfd169 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 01:58:25 +0200 Subject: [PATCH 0110/1148] Code comment --- htdocs/core/triggers/interface_20_all_Logevents.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php index 1ce13ff2193..92d93eef10f 100644 --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php'; /** - * Class of triggers for security events + * Class of triggers for security audit events */ class InterfaceLogevents extends DolibarrTriggers { @@ -47,7 +47,7 @@ class InterfaceLogevents extends DolibarrTriggers public $version = self::VERSION_DOLIBARR; /** - * Function called when a Dolibarrr business event is done. + * Function called when a Dolibarrr security audit event is done. * All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared) * * @param string $action Event action code From 27ba3408b43b1e990571c16ec6b8e6ab92f4bd49 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 02:01:55 +0200 Subject: [PATCH 0111/1148] Fix code comment --- htdocs/core/class/events.class.php | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/htdocs/core/class/events.class.php b/htdocs/core/class/events.class.php index 50fc116611a..af87e25fad1 100644 --- a/htdocs/core/class/events.class.php +++ b/htdocs/core/class/events.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2007-2019 Laurent Destailleur * Copyright (C) 2005-2009 Regis Houssin * * This program is free software; you can redistribute it and/or modify @@ -20,14 +20,8 @@ * \file htdocs/core/class/events.class.php * \ingroup core * \brief File of class to manage security events. - * \author Laurent Destailleur */ -// Put here all includes required by your class file -//require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; -//require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; -//require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; - /** * Events class @@ -133,7 +127,7 @@ class Events // extends CommonObject */ public function create($user) { - global $conf, $langs; + global $conf; // Clean parameters $this->description=trim($this->description); @@ -185,8 +179,6 @@ class Events // extends CommonObject */ public function update($user = null, $notrigger = 0) { - global $conf, $langs; - // Clean parameters $this->id=trim($this->id); $this->type=trim($this->type); @@ -222,8 +214,6 @@ class Events // extends CommonObject */ public function fetch($id, $user = null) { - global $langs; - $sql = "SELECT"; $sql.= " t.rowid,"; $sql.= " t.tms,"; @@ -273,8 +263,6 @@ class Events // extends CommonObject */ public function delete($user) { - global $conf, $langs; - $sql = "DELETE FROM ".MAIN_DB_PREFIX."events"; $sql.= " WHERE rowid=".$this->id; From 75aa11e5269efcccf6d3b4de08ebfa7f7dc6a217 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 01:58:25 +0200 Subject: [PATCH 0112/1148] Code comment --- htdocs/core/triggers/interface_20_all_Logevents.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php index 1ce13ff2193..92d93eef10f 100644 --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php'; /** - * Class of triggers for security events + * Class of triggers for security audit events */ class InterfaceLogevents extends DolibarrTriggers { @@ -47,7 +47,7 @@ class InterfaceLogevents extends DolibarrTriggers public $version = self::VERSION_DOLIBARR; /** - * Function called when a Dolibarrr business event is done. + * Function called when a Dolibarrr security audit event is done. * All functions "runTrigger" are triggered if file is inside directory htdocs/core/triggers or htdocs/module/code/triggers (and declared) * * @param string $action Event action code From 10e3e37c6c2d560b283263e673ad46d86cc6981a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 10:39:30 +0200 Subject: [PATCH 0113/1148] Update don.class.php --- htdocs/don/class/don.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php index caeb70aca94..638de5580e4 100644 --- a/htdocs/don/class/don.class.php +++ b/htdocs/don/class/don.class.php @@ -396,7 +396,7 @@ class Don extends CommonObject $sql.= ", ".$conf->entity; $sql.= ", ".price2num($this->amount); $sql.= ", ".($this->modepaymentid?$this->modepaymentid:"null"); - $sql.= ", ".($this->socid?$this->socid:"null"); + $sql.= ", ".($this->socid > 0 ? $this->socid : "null"); $sql.= ", '".$this->db->escape($this->firstname)."'"; $sql.= ", '".$this->db->escape($this->lastname)."'"; $sql.= ", '".$this->db->escape($this->societe)."'"; From cf458c77dccb086aae2cb485e72c3f1fbba7be1a Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 4 Jul 2019 11:43:17 +0200 Subject: [PATCH 0114/1148] FIX: hook added on fileupload.class.php to enable modules to override upload options --- htdocs/core/class/fileupload.class.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/htdocs/core/class/fileupload.class.php b/htdocs/core/class/fileupload.class.php index c3a40599877..17444cb5358 100644 --- a/htdocs/core/class/fileupload.class.php +++ b/htdocs/core/class/fileupload.class.php @@ -45,6 +45,8 @@ class FileUpload { global $db, $conf; global $object; + global $hookmanager; + $hookmanager->initHooks(array('fileupload')); $this->fk_element=$fk_element; $this->element=$element; @@ -183,6 +185,18 @@ class FileUpload ) ) ); + + $hookmanager->executeHooks( + 'overrideUploadOptions', + array( + 'options' => &$options, + 'element' => $element + ), + $object, + $action, + $hookmanager + ); + if ($options) { $this->options = array_replace_recursive($this->options, $options); } From b065cbc6f88023a7f6bef9a2c225bd3098c7a5e8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:09:04 +0200 Subject: [PATCH 0115/1148] FIX #11446 --- htdocs/product/class/product.class.php | 39 ++++++++++++++------------ test/phpunit/ProductTest.php | 27 +++++++++++++++++- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 69cd6ba077c..c0038ac17d8 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -3716,7 +3716,7 @@ class Product extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** * Fonction recursive uniquement utilisee par get_arbo_each_prod, recompose l'arborescence des sousproduits - * Define value of this->res + * Define value of this->res * * @param array $prod Products array * @param string $compl_path Directory path of parents to add before @@ -3730,7 +3730,7 @@ class Product extends CommonObject // phpcs:enable global $conf,$langs; - $product = new Product($this->db); + $tmpproduct = null; //var_dump($prod); foreach($prod as $id_product => $desc_pere) // $id_product is 0 (first call starting with root top) or an id of a sub_product { @@ -3746,23 +3746,26 @@ class Product extends CommonObject } //print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n"; - $this->fetch($id); // Load product - $this->load_stock('nobatch,novirtual'); // Load stock to get true this->stock_reel + if (is_null($tmpproduct)) $tmpproduct = new Product($this->db); // So we initialize tmpproduct only once for all loop. + $tmpproduct->fetch($id); // Load product to get ->ref + $tmpproduct->load_stock('nobatch,novirtual'); // Load stock to get true ->stock_reel + //$this->fetch($id); // Load product to get ->ref + //$this->load_stock('nobatch,novirtual'); // Load stock to get true ->stock_reel $this->res[]= array( - 'id'=>$id, // Id product - 'id_parent'=>$id_parent, - 'ref'=>$this->ref, // Ref product - 'nb'=>$nb, // Nb of units that compose parent product - 'nb_total'=>$nb*$multiply, // Nb of units for all nb of product - 'stock'=>$this->stock_reel, // Stock - 'stock_alert'=>$this->seuil_stock_alerte, // Stock alert - 'label'=>$label, - 'fullpath'=>$compl_path.$label, // Label - 'type'=>$type, // Nb of units that compose parent product - 'desiredstock'=>$this->desiredstock, - 'level'=>$level, - 'incdec'=>$incdec, - 'entity'=>$this->entity + 'id'=>$id, // Id product + 'id_parent'=>$id_parent, + 'ref'=>$tmpproduct->ref, // Ref product + 'nb'=>$nb, // Nb of units that compose parent product + 'nb_total'=>$nb*$multiply, // Nb of units for all nb of product + 'stock'=>$tmpproduct->stock_reel, // Stock + 'stock_alert'=>$tmpproduct->seuil_stock_alerte, // Stock alert + 'label'=>$label, + 'fullpath'=>$compl_path.$label, // Label + 'type'=>$type, // Nb of units that compose parent product + 'desiredstock'=>$tmpproduct->desiredstock, + 'level'=>$level, + 'incdec'=>$incdec, + 'entity'=>$tmpproduct->entity ); // Recursive call if there is childs to child diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php index c57ef426d0b..782d5f076e8 100644 --- a/test/phpunit/ProductTest.php +++ b/test/phpunit/ProductTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProductTest extends PHPUnit_Framework_TestCase +class ProductTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; @@ -168,6 +168,31 @@ class ProductTest extends PHPUnit_Framework_TestCase return $localobject; } + /** + * testProductGetArboEachProd + * + * @return void + */ + public function testProductGetArboEachProd() + { + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + /* + $localobject=new Product($db); + $localobject->fetch(208); + $localobject->get_sousproduits_arbo(); + $localobject->get_arbo_each_prod(); + + var_dump($localobject->res); print (json_encode($localobject->res)); exit; + */ + + return; + } + /** * testProductUpdate * From fb69f23bbaaa9270f0f3fd2cd78ca2c281e0ff79 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:10:29 +0200 Subject: [PATCH 0116/1148] Fix phpunit --- test/phpunit/ProductTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php index 782d5f076e8..115475113fa 100644 --- a/test/phpunit/ProductTest.php +++ b/test/phpunit/ProductTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProductTest extends PHPUnit\Framework\TestCase +class ProductTest extends PHPUnit_Framework_TestCase { protected $savconf; protected $savuser; From 63c93be94e0a28be0cb05fb08ecc3c76c2f2e7cc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:20:34 +0200 Subject: [PATCH 0117/1148] Update html.form.class.php --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a8d96ed4b34..a462f40ebdc 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5558,7 +5558,7 @@ class Form if ($prefixforautocompletemode == 'societe') $prefixforautocompletemode='company'; $confkeyforautocompletemode=strtoupper($prefixforautocompletemode).'_USE_SEARCH_TO_SELECT'; // For example COMPANY_USE_SEARCH_TO_SELECT - if (DOL_VERSION < 10 && $objecttmp->element == 'facture') $fieldstoshow = 't.facnumber'; + if (((float) DOL_VERSION) < 10 && $objecttmp->element == 'facture') $fieldstoshow = 't.facnumber'; else $fieldstoshow='t.ref'; if (! empty($objecttmp->fields)) // For object that declare it, it is better to use declared fields ( like societe, contact, ...) { From 657a3ae4c5bfd5d9f7c8d0f561a87922832e979b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 12:43:32 +0200 Subject: [PATCH 0118/1148] FIX permission to delete a draft purchase order --- htdocs/fourn/commande/card.php | 2 +- htdocs/modulebuilder/template/myobject_card.php | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index da2930ed667..3e42552a942 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2516,7 +2516,7 @@ elseif (! empty($object->id)) } // Delete - if ($user->rights->fournisseur->commande->supprimer) + if (! empty($user->rights->fournisseur->commande->supprimer) || ($object->statut == CommandeFournisseur::STATUS_DRAFT && ! empty($user->rights->fournisseur->commande->creer))) { print ''.$langs->trans("Delete").''; } diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index cc2eb5062cb..28c817658f6 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -434,7 +434,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea print '' . $langs->trans('SendMail') . ''."\n"; // Modify - if ($user->rights->mymodule->write) + if (! empty($user->rights->mymodule->write)) { print ''.$langs->trans("Modify").''."\n"; } @@ -444,7 +444,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } // Clone - if ($user->rights->mymodule->write) + if (! empty($user->rights->mymodule->write)) { print ''; } @@ -463,7 +463,8 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea } */ - if ($user->rights->mymodule->delete) + // Delete (need delete permission, or if draft, just need create/modify permission) + if (! empty($user->rights->mymodule->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mymodule->write))) { print ''.$langs->trans('Delete').''."\n"; } From 512b832c77bd1247cd0684f54b7d77e4aca457bc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 13:26:20 +0200 Subject: [PATCH 0119/1148] CSS --- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/md/style.css.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 15b986d4bff..6f4fd4fa660 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -1349,7 +1349,7 @@ img.photorefnoborder { } .trextrafieldseparator td { /* border-bottom: 2px solid rgb() !important; */ - border-bottom: 2px solid rgb() !important; + border-bottom: 2px dashed rgb() !important; } .tdhrthin { diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 6fd50fa42b3..332b4964a94 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1562,6 +1562,10 @@ img.photorefnoborder { .underbanner { border-bottom: px solid rgb(); } + +.trextrafieldseparator td { + border-bottom: 1px solid rgb() !important; +} .tdhrthin { margin: 0; padding-bottom: 0 !important; From bfa7f22209ecc36cb4c12bd2b0ab20b742645974 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 22 May 2019 11:53:36 +0200 Subject: [PATCH 0120/1148] FIX missing "dropdown-icon" replacement --- htdocs/main.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 5456e2ce1eb..4e1a6ecf01d 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1741,7 +1741,7 @@ function top_menu_user(User $user, Translate $langs) $userImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'photouserphoto userphoto', 'small', 0, 1); $userDropDownImage = Form::showphoto('userphoto', $user, 0, 0, 0, 'dropdown-user-image', 'small', 0, 1); } - else{ + else { $nophoto='/public/theme/common/user_anonymous.png'; if ($user->gender == 'man') $nophoto='/public/theme/common/user_man.png'; if ($user->gender == 'woman') $nophoto='/public/theme/common/user_woman.png'; @@ -1755,7 +1755,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'; // login infos - if (!empty($user->admin)) { + if (! empty($user->admin)) { $dropdownBody.= '
' . $langs->trans("Administrator").': '.yn($user->admin); } if (! empty($user->socid)) // Add thirdparty for external users @@ -1808,7 +1808,7 @@ function top_menu_user(User $user, Translate $langs) $profilName = $user->getFullName($langs).' ('.$user->login.')'; - if($user->admin){ + if (! empty($user->admin)) { $profilName = ' '.$profilName; } @@ -1868,6 +1868,8 @@ function top_menu_user(User $user, Translate $langs) if (!$(event.target).closest("#topmenu-login-dropdown").length) { // Hide the menus. $("#topmenu-login-dropdown").removeClass("open"); + $("#dropdown-icon-down").show(); // use show/hide instead toggle for avoid conflict + $("#dropdown-icon-up").hide(); // use show/hide instead toggle for avoid conflict } }); From 64d1ebf59cd6ee27117cca10fc552257d0e17ea4 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 4 Jul 2019 15:06:39 +0200 Subject: [PATCH 0121/1148] FIX: on shipment delete confirm dialog, a new checkbox allows the user to choose if they want their stock re-incremented after the deletion. --- htdocs/expedition/card.php | 24 ++++++++++++++++++-- htdocs/expedition/class/expedition.class.php | 4 ++-- htdocs/langs/fr_FR/sendings.lang | 2 ++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index aa85132b243..ed6b0227f91 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -468,7 +468,8 @@ if (empty($reshook)) else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expedition->supprimer) { - $result = $object->delete(); + $also_update_stock = GETPOST('alsoUpdateStock', 'alpha') ?: 0; + $result = $object->delete($also_update_stock); if ($result > 0) { header("Location: ".DOL_URL_ROOT.'/expedition/index.php'); @@ -1648,7 +1649,26 @@ else if ($id || $ref) // Confirm deleteion if ($action == 'delete') { - $formconfirm=$form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('DeleteSending'),$langs->trans("ConfirmDeleteSending",$object->ref),'confirm_delete','',0,1); + $formquestion = array(); + if ($object->statut == Expedition::STATUS_CLOSED && !empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE)) { + $formquestion = array( + array( + 'label' => $langs->trans('ShipmentIncrementStockOnDelete'), + 'name' => 'alsoUpdateStock', + 'type' => 'checkbox', + 'value' => 0 + ), + ); + } + $formconfirm=$form->formconfirm( + $_SERVER['PHP_SELF'].'?id='.$object->id, + $langs->trans('DeleteSending'), + $langs->trans("ConfirmDeleteSending",$object->ref), + 'confirm_delete', + $formquestion, + 0, + 1 + ); } // Confirmation validation diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 3ab96fed1fa..814d8ccc5a1 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1079,7 +1079,7 @@ class Expedition extends CommonObject * * @return int >0 if OK, 0 if deletion done but failed to delete files, <0 if KO */ - function delete() + function delete($also_update_stock = false) { global $conf, $langs, $user; @@ -1111,7 +1111,7 @@ class Expedition extends CommonObject } // Stock control - if (! $error && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > self::STATUS_DRAFT) + if (! $error && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > self::STATUS_DRAFT && $also_update_stock) { require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php"); diff --git a/htdocs/langs/fr_FR/sendings.lang b/htdocs/langs/fr_FR/sendings.lang index 1071d5f23f9..4f4bfc514e2 100644 --- a/htdocs/langs/fr_FR/sendings.lang +++ b/htdocs/langs/fr_FR/sendings.lang @@ -60,6 +60,8 @@ NoProductToShipFoundIntoStock=Aucun produit à expédier n'a été trouver dans WeightVolShort=Poids/vol. ValidateOrderFirstBeforeShipment=Vous devez d'abord valider la commande pour pouvoir créer une expédition. +ShipmentIncrementStockOnDelete=Remettre en stock les éléments de cette expédition + # Sending methods # ModelDocument DocumentModelTyphon=Modèle de bon de réception/livraison complet (logo…) From f2c1568d0939125d81007dec93f1cced15ac285f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 15:43:05 +0200 Subject: [PATCH 0122/1148] NEW Extrafields separator can be collapsed or not --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 31 ++++++++------- .../core/tpl/admin_extrafields_edit.tpl.php | 39 +++++++++++-------- htdocs/langs/en_US/admin.lang | 1 + 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 04720004492..5d55009737e 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -44,7 +44,7 @@ $langs->load("modulebuilder"); jQuery(document).ready(function() { function init_typeoffields(type) { - console.log("We select a new type = "+type); + console.log("select a new type (add) = "+type); var size = jQuery("#size"); var computed_value = jQuery("#computed_value"); var langfile = jQuery("#langfile"); @@ -68,7 +68,6 @@ $langs->load("modulebuilder"); ?> // Case of computed field - console.log(type); if (type == '' || type == 'varchar' || type == 'int' || type == 'double' || type == 'price') { jQuery("tr.extra_computed_value").show(); } else { @@ -96,18 +95,19 @@ $langs->load("modulebuilder"); else if (type == 'text') { size.val('2000').removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'html') { size.val('2000').removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'varchar') { size.val('255').removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } - else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").show();} + else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helppassword").show();} else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} - else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").show();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").show();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").show();jQuery("#helppassword").hide();} + else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpsellist").show();} + else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpchkbxlst").show();} + else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helplink").show();} else if (type == 'separate') { langfile.val('').prop('disabled',true);size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); - jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide(); + jQuery("#value_choice").show(); + jQuery(".spanforparamtooltip").hide(); jQuery("#helpseparate").show(); } else { // type = string size.val('').prop('disabled', true); @@ -165,11 +165,12 @@ $langs->load("modulebuilder");
'; - $out.= 'ref = dol_string_nospecial(trim($this->ref)); + $this->ref = dol_sanitizeFileName(dol_string_nospecial(trim($this->ref))); $this->label = trim($this->label); $this->price_ttc=price2num($this->price_ttc); $this->price=price2num($this->price); From c45b191330951781f18b5fcee91fae7b5a0755f9 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Mon, 1 Jul 2019 10:18:04 +0200 Subject: [PATCH 0078/1148] FIX: when STOCK_CALCULATE_ON_SHIPMENT_CLOSE is set, deleting a "closed" shipment now increases stock as expected --- htdocs/expedition/class/expedition.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 3ab96fed1fa..dd0d4842276 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1111,7 +1111,9 @@ class Expedition extends CommonObject } // Stock control - if (! $error && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > self::STATUS_DRAFT) + if (! $error && $conf->stock->enabled && + (($conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > self::STATUS_DRAFT) || + ($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE && $this->statut == 2))) { require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php"); From 3e91fdda77a6763a347c2f419aec4e945f3d4053 Mon Sep 17 00:00:00 2001 From: fbosman Date: Mon, 1 Jul 2019 12:34:27 +0200 Subject: [PATCH 0079/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5016d10780d..b065bb27470 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5008,6 +5008,8 @@ abstract class CommonObject $attributeLabel = $extrafields->attributes[$this->table_element]['label'][$attributeKey]; $attributeParam = $extrafields->attributes[$this->table_element]['param'][$attributeKey]; $attributeRequired = $extrafields->attributes[$this->table_element]['required'][$attributeKey]; + $attrfieldcomputed = $extrafields->attributes[$this->table_element]['computed'][$attributeKey]; + if ($attributeRequired) { @@ -5024,6 +5026,12 @@ abstract class CommonObject //dol_syslog("attributeLabel=".$attributeLabel, LOG_DEBUG); //dol_syslog("attributeType=".$attributeType, LOG_DEBUG); + if (!empty($attrfieldcomputed)) + { + $value = dol_eval($attrfieldcomputed, 1, 0); + $new_array_options[$key] = $value; + } + switch ($attributeType) { From 0259cde0daac2dfaa9243a73f6b496e9aa01eef9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 1 Jul 2019 13:26:45 +0200 Subject: [PATCH 0080/1148] Typo --- build/exe/doliwamp/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/exe/doliwamp/README.md b/build/exe/doliwamp/README.md index ca3aaa6aece..8e6f4744438 100644 --- a/build/exe/doliwamp/README.md +++ b/build/exe/doliwamp/README.md @@ -1,7 +1,7 @@ # DOLIWAMP, THE DOLIBARR INSTALLER FOR WINDOWS DoliWamp is a special all in one package installer for Windows (Dolibarr+Mysql+Apache+PHP). -It's a dedicated Dolibarr version for Windows newbies with no technical knowledge. This package will install or upgrade Dolibarr but also and all prerequisites like the web server, and the database in one autoinstall process. +It's a dedicated Dolibarr version for Windows newbies with no technical knowledge. This package will install or upgrade Dolibarr but also all prerequisites like the web server, and the database in one auto-install process. If you have technical knowledge in web administration and plan to share your server instance (Apache, Mysql or PHP) with other projects than Dolibarr or want to use Dolibarr other components (PostgreSQL), you should not use this assistant and make a manual installation of Dolibarr on your existing server by downloading the standard package (.tgz or .zip file). From 3abaecfd77db1839ee851097c0024097ed8ba389 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 1 Jul 2019 13:27:18 +0200 Subject: [PATCH 0081/1148] Prepare 8.0.7 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index fbc1f52cac7..5a71e94c2d4 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION','8.0.6'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (! defined('DOL_VERSION')) define('DOL_VERSION','8.0.7'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO',chr(128)); From 1b1c302e5d6ce37ac9eda855aabcd368572d0718 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 1 Jul 2019 13:32:21 +0200 Subject: [PATCH 0082/1148] Update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a59e3e8d8f3..5d4de0af909 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ ![Downloads per day](https://img.shields.io/sourceforge/dw/dolibarr.svg) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) -|6|7|8|9|develop| +|7|8|9|10|develop| |----------|----------|----------|----------|----------| -|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/6.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/7.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/8.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/9.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/develop.svg)| +|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/7.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/8.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/9.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/10.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/develop.svg)| Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…). From 46f590f0bed6d7a94d9aed39a52ae4c6ce1a47e6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 1 Jul 2019 15:44:34 +0200 Subject: [PATCH 0083/1148] Add column iplastlogin and ippreviouslogin --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 ++ htdocs/install/mysql/tables/llx_user.sql | 2 ++ 2 files changed, 4 insertions(+) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index ca90da80335..b10ab3b9a85 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -46,3 +46,5 @@ ALTER TABLE llx_c_shipment_mode ADD UNIQUE INDEX uk_c_shipment_mode (code, entit ALTER TABLE llx_facture_fourn DROP COLUMN total; +ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); +ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql index a54ed1418ab..c82669df7cc 100644 --- a/htdocs/install/mysql/tables/llx_user.sql +++ b/htdocs/install/mysql/tables/llx_user.sql @@ -82,6 +82,8 @@ create table llx_user model_pdf varchar(255) DEFAULT NULL, datelastlogin datetime, datepreviouslogin datetime, + iplastlogin varchar(250), + ippreviouslogin varchar(250), egroupware_id integer, ldap_sid varchar(255) DEFAULT NULL, openid varchar(255), From 8cdb251ca5038bc2959d68b3f41991926fc18719 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Tue, 2 Jul 2019 10:13:26 +0200 Subject: [PATCH 0084/1148] FIX product_use_units was set to 0 each time a conf in block other was set --- htdocs/product/admin/product.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 334640e87d3..4c58591e987 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -245,12 +245,12 @@ if ($action == 'set') if (! $res > 0) $error++; } -if ($action == 'other') -{ - $value = GETPOST('activate_units', 'alpha'); - $res = dolibarr_set_const($db, "PRODUCT_USE_UNITS", $value, 'chaine', 0, '', $conf->entity); - if (! $res > 0) $error++; -} +//if ($action == 'other') +//{ +// $value = GETPOST('activate_units', 'alpha'); +// $res = dolibarr_set_const($db, "PRODUCT_USE_UNITS", $value, 'chaine', 0, '', $conf->entity); +// if (! $res > 0) $error++; +//} if ($action) { From 6b43c325c74923158dc71a8c8a39f86a0f2adcf5 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Tue, 2 Jul 2019 10:53:47 +0200 Subject: [PATCH 0085/1148] Fix wrong column for filters on invoice template list --- htdocs/compta/facture/invoicetemplate_list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 306106d4889..0e09cb72ab1 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -264,7 +264,7 @@ if ($search_month_date_when > 0) if ($search_year_date_when > 0 && empty($search_day_date_when)) $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($search_year_date_when,$search_month_date_when,false))."' AND '".$db->idate(dol_get_last_day($search_year_date_when,$search_month_date_when,false))."'"; else if ($search_year_date_when > 0 && ! empty($search_day_date_when)) - $sql.= " AND f.date_date_when_reglement BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $search_month_date_when, $search_day_date_when, $search_year_date_when))."' AND '".$db->idate(dol_mktime(23, 59, 59, $search_month_date_when, $search_day_date_when, $search_year_date_when))."'"; + $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $search_month_date_when, $search_day_date_when, $search_year_date_when))."' AND '".$db->idate(dol_mktime(23, 59, 59, $search_month_date_when, $search_day_date_when, $search_year_date_when))."'"; else $sql.= " AND date_format(f.date_when, '%m') = '".$db->escape($search_month_date_when)."'"; } From 1b4507f07d03555724eb3aa6e401b99432c8b0f7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 2 Jul 2019 11:40:05 +0200 Subject: [PATCH 0086/1148] Fix on a hidden option --- htdocs/projet/element.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 08351fc752f..b4d2a8b290f 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -605,6 +605,7 @@ foreach ($listofreferent as $key => $value) if ($key == 'invoice') { if (! empty($element->close_code) && $element->close_code == 'replaced') $qualifiedfortotal=false; // Replacement invoice, do not include into total + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS) && $element->type == Facture::TYPE_DEPOSIT) $qualifiedfortotal=false; // If hidden option to use deposits as payment (deprecated, not recommended to use this), deposits are not included } if ($key == 'propal') { From ab7cb7bb2e3debda6ee7c7ce5a2c8dc2e87a3a5e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 2 Jul 2019 12:01:50 +0200 Subject: [PATCH 0087/1148] FIX Nowrap on amount --- htdocs/compta/facture/list.php | 14 +++++++------- htdocs/don/card.php | 4 ++-- htdocs/don/class/don.class.php | 4 ++-- htdocs/fourn/facture/list.php | 14 +++++++------- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 6c325c865a9..284b747465d 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -1143,7 +1143,7 @@ if ($resql) // Amount HT if (! empty($arrayfields['f.total_ht']['checked'])) { - print ''.price($obj->total_ht)."'.price($obj->total_ht)."'.price($obj->total_vat)."'.price($obj->total_vat)."'.price($obj->total_localtax1)."'.price($obj->total_localtax1)."'.price($obj->total_localtax2)."'.price($obj->total_localtax2)."'.price($obj->total_ttc)."'.price($obj->total_ttc)."'.(! empty($totalpay)?price($totalpay, 0, $langs):' ').''.(! empty($totalpay)?price($totalpay, 0, $langs):' ').''.(! empty($remaintopay)?price($remaintopay, 0, $langs):' ').''.(! empty($remaintopay)?price($remaintopay, 0, $langs):' ').''.price($obj->total_ht)."'.price($obj->total_ht)."'.price($obj->total_vat)."'.price($obj->total_vat)."'.price($obj->total_localtax1)."'.price($obj->total_localtax1)."'.price($obj->total_localtax2)."'.price($obj->total_localtax2)."'.price($obj->total_ttc)."'.price($obj->total_ttc)."'.(! empty($totalpay)?price($totalpay, 0, $langs):' ').''.(! empty($totalpay)?price($totalpay, 0, $langs):' ').''.(! empty($remaintopay)?price($remaintopay, 0, $langs):' ').''.(! empty($remaintopay)?price($remaintopay, 0, $langs):' ').''; if (empty($objp->price_by_qty)) { - print ($objp->price_base_type != 'TTC' ? price($objp->price) : ''); + print price($objp->price); } print "'; if (empty($objp->price_by_qty)) { - print ($objp->price_base_type == 'TTC' ? price($objp->price_ttc) : ''); + print price($objp->price_ttc); } print "'; if (empty($objp->price_by_qty)) { - print ($objp->price_base_type != 'TTC' ? price($objp->price_min) : ''); + print price($objp->price_min); } print ''; if (empty($objp->price_by_qty)) { - print ($objp->price_base_type == 'TTC' ? price($objp->price_min_ttc) : ''); + print price($objp->price_min_ttc); } print '
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning', '', 0, 2, 'tooltipcompute'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
- textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpSeparator"), 1, 0, '', 0, 2, 'helpvalue6')?>
diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 7ed41af9281..119d3db7478 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -43,7 +43,7 @@ $langs->load("modulebuilder"); jQuery(document).ready(function() { function init_typeoffields(type) { - console.log("select new type "+type); + console.log("select a new type (edit) = "+type); var size = jQuery("#size"); var computed_value = jQuery("#computed_value"); var langfile = jQuery("#langfile"); @@ -54,7 +54,7 @@ $langs->load("modulebuilder"); var list = jQuery("#list"); var totalizable = jQuery("#totalizable"); load("modulebuilder"); else if (type == 'text') { size.removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'html') { size.removeAttr('disabled'); unique.prop('disabled', true).removeAttr('checked'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } else if (type == 'varchar') { size.removeAttr('disabled'); unique.removeAttr('disabled'); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide(); } - else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").show();} - else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} - else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide();jQuery("#helpchkbxlst").hide();} - else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").show();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").show();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").show();jQuery("#helplink").hide();jQuery("#helppassword").hide();} - else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").show();jQuery("#helppassword").hide();} - else if (type == 'separate') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show();jQuery("#helpselect").hide();jQuery("#helpsellist").hide();jQuery("#helpchkbxlst").hide();jQuery("#helplink").hide();jQuery("#helppassword").hide();} + else if (type == 'password') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helppassword").show();} + else if (type == 'boolean') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();} + else if (type == 'price') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").hide(); jQuery("#helpchkbxlst").hide();} + else if (type == 'select') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'sellist') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpsellist").show();} + else if (type == 'radio') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'checkbox') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpselect").show();} + else if (type == 'chkbxlst') { size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helpchkbxlst").show();} + else if (type == 'link') { size.val('').prop('disabled', true); unique.removeAttr('disabled'); jQuery("#value_choice").show(); jQuery(".spanforparamtooltip").hide(); jQuery("#helplink").show();} + else if (type == 'separate') { + size.val('').prop('disabled', true); unique.removeAttr('checked').prop('disabled', true); required.val('').prop('disabled', true); default_value.val('').prop('disabled', true); + jQuery("#value_choice").show(); + jQuery(".spanforparamtooltip").hide(); jQuery("#helpseparate").show(); + } else { // type = string size.val('').prop('disabled', true); unique.removeAttr('disabled'); @@ -229,11 +233,12 @@ else - textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> - textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpselect"), 1, 0, '', 0, 2, 'helpvalue1')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpsellist"), 1, 0, '', 0, 2, 'helpvalue2')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpchkbxlst"), 1, 0, '', 0, 2, 'helpvalue3')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelplink"), 1, 0, '', 0, 2, 'helpvalue4')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpPassword"), 1, 0, '', 0, 2, 'helpvalue5')?> + textwithpicto('', $langs->trans("ExtrafieldParamHelpSeparator"), 1, 0, '', 0, 2, 'helpvalue6')?> diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 7480550195a..e3aec89e613 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -429,6 +429,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS From 1de499a320f7ca5bd4726ebe3d4f3eafdab1cfa8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 15:52:03 +0200 Subject: [PATCH 0123/1148] Update card.php --- htdocs/fourn/commande/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index ff1b1020ae6..2c3df524109 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2547,7 +2547,7 @@ elseif (! empty($object->id)) print load_fiche_titre($langs->trans("ToOrder"), '', ''); print ''; //print ''; - print '\n"; - print "'; } // Town - if (! empty($arrayfields['s.town']['checked'])) print ''; + if (! empty($arrayfields['s.town']['checked'])) print ''; // Zip - if (! empty($arrayfields['s.zip']['checked'])) print ''; + if (! empty($arrayfields['s.zip']['checked'])) print ''; // State if (! empty($arrayfields['state.nom']['checked'])) { print ''; } // Country @@ -1004,7 +1004,7 @@ if ($resql) // Town if (! empty($arrayfields['s.town']['checked'])) { - print ''; if (! $i) $totalarray['nbfield']++; @@ -1012,7 +1012,7 @@ if ($resql) // Zip if (! empty($arrayfields['s.zip']['checked'])) { - print ''; if (! $i) $totalarray['nbfield']++; From b691396fceedcda48a57550efd694c3e9724bf44 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:19:24 +0200 Subject: [PATCH 0127/1148] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 5bd161c9893..0db5d6afb68 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,11 @@ $langs->load("modulebuilder"); - +global->STORE_COMPUTED_EXTRAFIELDS)) { > + + + + From f14b0b4fcc79fa01ff5b1fb514ce6bb9c78550f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:20:01 +0200 Subject: [PATCH 0128/1148] Update admin_extrafields_add.tpl.php --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 0db5d6afb68..834462aab5f 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -179,7 +179,7 @@ $langs->load("modulebuilder"); -global->STORE_COMPUTED_EXTRAFIELDS)) { > +global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { > From 0d738a04f9d617b4efe0a6b1d2d24e48feaeab0c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:22:10 +0200 Subject: [PATCH 0129/1148] Update admin_extrafields_edit.tpl.php --- htdocs/core/tpl/admin_extrafields_edit.tpl.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php index 2acdf7e864f..17399b0a824 100644 --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php @@ -243,7 +243,11 @@ else - +global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { ?> + + + + From 4c03aa6547bd927da00d023746ca26a84b2c9f4f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 17:03:36 +0200 Subject: [PATCH 0130/1148] Fix selection of profile for demo --- htdocs/public/demo/index.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php index 0f6e21f0984..62de885eac6 100644 --- a/htdocs/public/demo/index.php +++ b/htdocs/public/demo/index.php @@ -97,7 +97,7 @@ if (empty($reshook)) ), // All demo profile array('default'=>'0', 'key'=>'profdemoall','label'=>'ChooseYourDemoProfilMore', - 'disablemodules'=>'adherent,don,externalsite,mailmanspip', + 'disablemodules'=>'adherent,don,externalsite,mailmanspip,takepos', //'icon'=>DOL_URL_ROOT.'/public/demo/dolibarr_screenshot9.png' 'icon'=>DOL_URL_ROOT.'/public/demo/demo-profile-all.jpg' ) @@ -106,10 +106,10 @@ if (empty($reshook)) // Visible $alwayscheckedmodules=array('barcode','bookmark','categorie','externalrss','fckeditor','geoipmaxmind','gravatar','memcached','syslog','user','webservices'); // Technical module we always want - $alwaysuncheckedmodules=array('dav','dynamicprices','incoterm','loan','multicurrency','paybox','paypal','stripe','google','printing','scanner','skype','takepos','workflow','website'); // Module we dont want by default + $alwaysuncheckedmodules=array('dav','dynamicprices','incoterm','loan','multicurrency','paybox','paypal','stripe','google','printing','scanner','skype','website'); // Module we dont want by default // Not visible $alwayshiddencheckedmodules=array('accounting','api','barcode','blockedlog','bookmark','clicktodial','comptabilite','cron','document','domain','externalrss','externalsite','fckeditor','geoipmaxmind','gravatar','label','ldap', - 'mailmanspip','notification','oauth','syslog','user','webservices', + 'mailmanspip','notification','oauth','syslog','user','webservices','workflow', // Extended modules 'memcached','numberwords','zipautofillfr'); $alwayshiddenuncheckedmodules=array('debugbar','emailcollector','ftp','hrm','modulebuilder','webservicesclient','websites', @@ -392,10 +392,10 @@ foreach ($demoprofiles as $profilearray) //if ($modulo == 0) print ''; print ''; print '
'; - print '
'.$val->getName().'

'; + print '>
'; print '
'; //if ($modulo == ($nbcolsmod - 1)) print ''; $j++; From 01b1b2e4a7879319cc46c81b818f3dda3b6aa9c0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 17:07:26 +0200 Subject: [PATCH 0131/1148] Fix syntax error --- htdocs/core/tpl/admin_extrafields_add.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php index 552d74955b2..360db1e94b0 100644 --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php @@ -180,9 +180,9 @@ $langs->load("modulebuilder"); -global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { > +global->MAIN_STORE_COMPUTED_EXTRAFIELDS)) { ?> - + From c3715646e746bd8b4ebeaee71b4b8b314d4857df Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 21:29:27 +0200 Subject: [PATCH 0132/1148] Missing trans --- htdocs/langs/en_US/companies.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index ae189111c15..616b565496a 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact From 3d076d8bf91d3b0512de2d34588144afcace2757 Mon Sep 17 00:00:00 2001 From: ATM-Nicolas Date: Fri, 5 Jul 2019 11:15:43 +0200 Subject: [PATCH 0133/1148] FIX : We must save code instead of value in database for template invoice modelpdf --- htdocs/compta/facture/fiche-rec.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 8c45012085d..31a4affb95d 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1423,8 +1423,8 @@ else include_once DOL_DOCUMENT_ROOT . '/core/modules/facture/modules_facture.php'; $list = array(); $models = ModelePDFFactures::liste_modeles($db); - foreach ($models as $model) { - $list[] = $model . ':' . $model; + foreach ($models as $k => $model) { + $list[] = $k . ':' . $model; } $select = 'select;'.implode(',', $list); print $form->editfieldval($langs->trans("Model"), 'modelpdf', $object->modelpdf, $object, $user->rights->facture->creer, $select); From e3359c6f0fd861515e3c87b3fff52b1519e19da9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 11:21:04 +0200 Subject: [PATCH 0134/1148] FIX Can't submit a ticket from public interface --- htdocs/core/class/html.formticket.class.php | 2 +- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/public/ticket/create_ticket.php | 35 +++++++++++-------- htdocs/public/ticket/index.php | 8 ++--- htdocs/public/ticket/list.php | 15 ++++---- htdocs/public/ticket/view.php | 14 ++++---- htdocs/theme/eldy/global.inc.php | 3 ++ htdocs/theme/md/style.css.php | 38 +++++++++++---------- 8 files changed, 65 insertions(+), 52 deletions(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 1d681d2672b..6f712fa6c4d 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -419,7 +419,7 @@ class FormTicket if ($withdolfichehead) dol_fiche_end(); - print '
'; + print '
'; print ''; if ($this->withcancel) { diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index c5791e5c89e..9e0c357be05 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -159,7 +159,7 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); // Show html headers - print ''; + print ''; if (! empty($conf->global->TICKET_SHOW_COMPANY_LOGO) || ! empty($conf->global->TICKET_PUBLIC_INTERFACE_TOPIC)) { print '
'; diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php index 42774772eb5..b663aaa43c3 100644 --- a/htdocs/public/ticket/create_ticket.php +++ b/htdocs/public/ticket/create_ticket.php @@ -59,7 +59,7 @@ $extralabels = $extrafields->fetch_name_optionals_label($object->table_element); */ // Add file in email form -if (GETPOST('addfile') && !GETPOST('add_ticket')) { +if (GETPOST('addfile', 'alpha') && ! GETPOST('add', 'alpha')) { ////$res = $object->fetch('','',GETPOST('track_id')); ////if($res > 0) ////{ @@ -77,7 +77,7 @@ if (GETPOST('addfile') && !GETPOST('add_ticket')) { } // Remove file -if (GETPOST('removedfile') && !GETPOST('add_ticket')) { +if (GETPOST('removedfile', 'alpha') && !GETPOST('add', 'alpha')) { include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; @@ -89,7 +89,7 @@ if (GETPOST('removedfile') && !GETPOST('add_ticket')) { dol_remove_file_process($_POST['removedfile'], 0, 0); $action = 'create_ticket'; } -if ($action == 'create_ticket' && GETPOST('add_ticket')) { +if ($action == 'create_ticket' && GETPOST('add', 'alpha')) { $error = 0; $origin_email = GETPOST('email', 'alpha'); if (empty($origin_email)) { @@ -311,7 +311,13 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) { $formmail->remove_attached_files($i); } - setEventMessages($langs->trans('YourTicketSuccessfullySaved'), null, 'mesgs'); + //setEventMessages($langs->trans('YourTicketSuccessfullySaved'), null, 'mesgs'); + + // Make a redirect to avoid to have ticket submitted twice if we make back + setEventMessages($langs->trans('MesgInfosPublicTicketCreatedWithTrackId', '' . $object->track_id . ''), null, 'warnings'); + setEventMessages($langs->trans('PleaseRememberThisId'), null, 'warnings'); + header("Location: index.php"); + exit; } } else { setEventMessages($object->error, $object->errors, 'errors'); @@ -324,21 +330,23 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) { * View */ -$arrayofjs = array(); -$arrayofcss = array('/opensurvey/css/style.css', '/ticket/css/styles.css.php'); - -llxHeaderTicket($langs->trans("CreateTicket"), "", 0, 0, $arrayofjs, $arrayofcss); - $form = new Form($db); $formticket = new FormTicket($db); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { +if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) +{ print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; $db->close(); exit(); } -print '
'; +$arrayofjs = array(); +$arrayofcss = array('/opensurvey/css/style.css', '/ticket/css/styles.css.php'); + +llxHeaderTicket($langs->trans("CreateTicket"), "", 0, 0, $arrayofjs, $arrayofcss); + + +print '
'; if ($action != "infos_success") { $formticket->withfromsocid = isset($socid) ? $socid : $user->societe_id; @@ -361,11 +369,8 @@ if ($action != "infos_success") { print '
' . $langs->trans('TicketPublicInfoCreateTicket') . '
'; $formticket->showForm(); -} else { - print '
' . $langs->trans('MesgInfosPublicTicketCreatedWithTrackId', '' . $object->track_id . ''); - print '
'; - print $langs->trans('PleaseRememberThisId'); } + print '
'; // End of page diff --git a/htdocs/public/ticket/index.php b/htdocs/public/ticket/index.php index a3e4d63a4bc..2e138312102 100644 --- a/htdocs/public/ticket/index.php +++ b/htdocs/public/ticket/index.php @@ -55,18 +55,18 @@ $action = GETPOST('action', 'alpha'); $form = new Form($db); $formticket = new FormTicket($db); -$arrayofjs = array(); -$arrayofcss = array('/ticket/css/styles.css.php'); - if (empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) { print $langs->trans('TicketPublicInterfaceForbidden'); exit; } +$arrayofjs = array(); +$arrayofcss = array('/ticket/css/styles.css.php'); + llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -print '
'; +print '
'; print '

' . ($conf->global->TICKET_PUBLIC_TEXT_HOME ? $conf->global->TICKET_PUBLIC_TEXT_HOME : $langs->trans("TicketPublicDesc")) . '

'; print '
'; print '
' . dol_escape_htmltag($langs->trans("CreateTicket")) . '
'; diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 443af658cb5..9da0a4272e1 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -155,21 +155,23 @@ $user_assign = new User($db); $user_create = new User($db); $formTicket = new FormTicket($db); +if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { + print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; + $db->close(); + exit(); +} + $arrayofjs = array(); $arrayofcss = array('/ticket/css/styles.css.php'); llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { - print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; - $db->close(); - exit(); -} -print '
'; +print '
'; if ($action == "view_ticketlist") { + print '
'; if ($display_ticket_list) { // Filters $search_fk_status = GETPOST("search_fk_status", 'alpha'); @@ -676,6 +678,7 @@ if ($action == "view_ticketlist") } } else { print '

' . $langs->trans("TicketPublicMsgViewLogIn") . '

'; + print '
'; print '
'; print ''; diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index a0311ce1430..4886a0cc3be 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -133,18 +133,18 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | $form = new Form($db); $formticket = new FormTicket($db); +if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { + print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; + $db->close(); + exit(); +} + $arrayofjs = array(); $arrayofcss = array('/ticket/css/styles.css.php'); llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) { - print '
' . $langs->trans('TicketPublicInterfaceForbidden') . '
'; - $db->close(); - exit(); -} - -print '
'; +print '
'; if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close") { if ($display_ticket) { diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 6f4fd4fa660..44c66a979d5 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5248,6 +5248,9 @@ div.tabsElem a.tab { /* Ticket module */ /* ============================================================================== */ +.publicnewticketform { + margin-top: 25px !important; +} #cd-timeline { position: relative; padding: 2em 0; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 332b4964a94..c15bbf26eef 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1936,7 +1936,6 @@ a.tmenuimage:focus { } - /* Login */ .bodylogin @@ -5388,7 +5387,6 @@ border-top-right-radius: 6px; } - /* ============================================================================== */ /* Public */ /* ============================================================================== */ @@ -5402,26 +5400,14 @@ border-top-right-radius: 6px; } - -::-webkit-scrollbar { - width: 12px; -} -::-webkit-scrollbar-button { - background: #aaa -} -::-webkit-scrollbar-track-piece { - background: #fff -} -::-webkit-scrollbar-thumb { - background: #ddd -}​ - - - /* ============================================================================== */ /* Ticket module */ /* ============================================================================== */ +.publicnewticketform { + margin-top: 25px !important; +} + #cd-timeline { position: relative; padding: 2em 0; @@ -5833,6 +5819,22 @@ border-top-right-radius: 6px; +/* This must be at end */ +::-webkit-scrollbar { + width: 12px; +} +::-webkit-scrollbar-button { + background: #aaa; +} +::-webkit-scrollbar-track-piece { + background: #fff; +} +::-webkit-scrollbar-thumb { + background: #ddd; +}​ + + + global->MAIN_DISABLE_FONT_AWESOME_5)) { ?> Date: Fri, 5 Jul 2019 11:45:10 +0200 Subject: [PATCH 0135/1148] Fix css --- htdocs/public/ticket/view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 4886a0cc3be..69a77413b2e 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -298,7 +298,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | print ''; } } else { - print '

' . $langs->trans("TicketPublicMsgViewLogIn") . '

'; + print '

' . $langs->trans("TicketPublicMsgViewLogIn") . '

'; print '
'; print ''; From 5c6684bb734fc963838cda82d9d82f40e7bcee25 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 11:53:33 +0200 Subject: [PATCH 0136/1148] Fix setup of ticket module --- htdocs/admin/ticket_public.php | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/htdocs/admin/ticket_public.php b/htdocs/admin/ticket_public.php index 1bcff705aef..4e6b6d75e85 100644 --- a/htdocs/admin/ticket_public.php +++ b/htdocs/admin/ticket_public.php @@ -185,12 +185,6 @@ if ($action == 'setvarother') { if (!$res > 0) { $error++; } - - $param_auto_assign = GETPOST('TICKET_AUTO_ASSIGN_USER_CREATE', 'alpha'); - $res = dolibarr_set_const($db, 'TICKET_AUTO_ASSIGN_USER_CREATE', $param_auto_assign, 'chaine', 0, '', $conf->entity); - if (!$res > 0) { - $error++; - } } @@ -260,7 +254,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) print ''; // Check if email exists - print '
'; + print ''; print ''; + print ''; print ''; + print ''; print ''; + print ''; print ''; } - // Auto assign ticket at user who created it - print ''; - print ''; - print ''; - print ''; - print '
'.$langs->trans("ToOrder").'
'.$langs->trans("OrderDate").''; + print '
'.$langs->trans("OrderDate").''; $date_com = dol_mktime(GETPOST('rehour', 'int'), GETPOST('remin', 'int'), GETPOST('resec', 'int'), GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int')); if (empty($date_com)) $date_com=dol_now(); print $form->selectDate($date_com, '', 1, 1, '', "commande", 1, 1); From fb8c93a69ded1430d62baedf987707be0cec45a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:00:14 +0200 Subject: [PATCH 0124/1148] FIX Bad sql request --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index f4a25334e00..3e9b2ba8797 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2568,7 +2568,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $accessallowed=1; } $original_file=$conf->fournisseur->facture->dir_output.'/'.$original_file; - $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE facnumber='".$db->escape($refname)."' AND entity=".$conf->entity; + $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } // Wrapping pour les rapport de paiements elseif ($modulepart == 'supplier_payment') From 4e00cfb455d93861e50a770619d5ae2780b6cc9e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:02:04 +0200 Subject: [PATCH 0125/1148] Clean code --- htdocs/core/lib/files.lib.php | 2 +- htdocs/fourn/commande/card.php | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 8fe5f5b0db4..b578a6f5b8a 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2568,7 +2568,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, $accessallowed=1; } $original_file=$conf->fournisseur->facture->dir_output.'/'.$original_file; - $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE facnumber='".$db->escape($refname)."' AND entity=".$conf->entity; + $sqlprotectagainstexternals = "SELECT fk_soc as fk_soc FROM ".MAIN_DB_PREFIX."facture_fourn WHERE ref='".$db->escape($refname)."' AND entity=".$conf->entity; } // Wrapping pour les rapport de paiements elseif ($modulepart == 'supplier_payment') diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index d96ce6cbd17..bae5741d4ea 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2536,11 +2536,11 @@ elseif (! empty($object->id)) - if ($user->rights->fournisseur->commande->commander && $object->statut == 2 && $action == 'makeorder') + if ($user->rights->fournisseur->commande->commander && $object->statut == CommandeFournisseur::STATUS_ACCEPTED && $action == 'makeorder') { // Set status to ordered (action=commande) print ''."\n"; - print '
'; + print ''; print ''; print ''; @@ -2574,9 +2574,7 @@ elseif (! empty($object->id)) { print '
'; - /* - * Documents generes - */ + // Generated documents $comfournref = dol_sanitizeFileName($object->ref); $file = $conf->fournisseur->dir_output . '/commande/' . $comfournref . '/' . $comfournref . '.pdf'; $relativepath = $comfournref.'/'.$comfournref.'.pdf'; @@ -2594,10 +2592,10 @@ elseif (! empty($object->id)) print '
'; - if ($user->rights->fournisseur->commande->receptionner && ($object->statut == 3 || $object->statut == 4)) + if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) { // Set status to received (action=livraison) - print ''."\n"; + print ''."\n"; print ''; print ''; print ''; @@ -2610,7 +2608,7 @@ elseif (! empty($object->id)) print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); print "
".$langs->trans("Delivery")."\n"; + print '
'.$langs->trans("Delivery")."\n"; $liv = array(); $liv[''] = ' '; $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); From ed39849d335252923059502df9f1e857b1d13505 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 4 Jul 2019 16:14:10 +0200 Subject: [PATCH 0126/1148] Fix css --- htdocs/fourn/commande/list.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 80645e2a486..18ba697bc20 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -777,14 +777,14 @@ if ($resql) print ''; - print ''; + print ''; print ''; + print ''; print $obj->town; print ''; + print ''; print $obj->zip; print '
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
trans("DefaultValue").' ('.$langs->trans("Database").')'; ?>
trans("LanguageFile"); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc"), 1, 'help', '', 0, 2, 'tooltipcompute'); ?>
textwithpicto($langs->trans("ComputedFormula"), $langs->trans("ComputedFormulaDesc")).$form->textwithpicto($langs->trans("Computedpersistent"), $langs->trans("ComputedpersistentDesc"), 1, 'warning'); ?>
' . $langs->trans("TicketsEmailMustExist") . '
' . $langs->trans("TicketsEmailMustExist") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_EMAIL_MUST_EXISTS'); @@ -277,7 +271,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) /*if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { // Show logo for module - print '
' . $langs->trans("TicketsShowModuleLogo") . '
' . $langs->trans("TicketsShowModuleLogo") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_SHOW_MODULE_LOGO'); @@ -293,7 +287,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) }*/ // Show logo for company - print '
' . $langs->trans("TicketsShowCompanyLogo") . '
' . $langs->trans("TicketsShowCompanyLogo") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_SHOW_COMPANY_LOGO'); @@ -310,7 +304,7 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) // Also send to main email address if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { - print '
' . $langs->trans("TicketsEmailAlsoSendToMainAddress") . '
' . $langs->trans("TicketsEmailAlsoSendToMainAddress") . ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('TICKET_NOTIFICATION_ALSO_MAIN_ADDRESS'); @@ -330,21 +324,6 @@ if (! empty($conf->global->TICKET_ENABLE_PUBLIC_INTERFACE)) print '
' . $langs->trans("TicketsAutoAssignTicket") . ''; - if ($conf->use_javascript_ajax) { - print ajax_constantonoff('TICKET_AUTO_ASSIGN_USER_CREATE'); - } else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("TICKET_AUTO_ASSIGN_USER_CREATE", $arrval, $conf->global->TICKET_AUTO_ASSIGN_USER_CREATE); - } - print ''; - print $form->textwithpicto('', $langs->trans("TicketsAutoAssignTicketHelp"), 1, 'help'); - print '

'; if (!$conf->use_javascript_ajax) { From 575dce2dffb7cb0e2aee91d4a9b802c3ed0298eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 12:17:36 +0200 Subject: [PATCH 0137/1148] Fix css --- htdocs/compta/bank/bankentries_list.php | 5 +++-- htdocs/user/hierarchy.php | 2 +- htdocs/user/list.php | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 811fe663f8c..5609bb6b598 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -603,12 +603,13 @@ if ($resql) print $langs->trans("EventualyAddCategory").': '; print Form::selectarray('cat', $options, GETPOST('cat'), 1); } - print '
'.$langs->trans("ThenCheckLinesAndConciliate").' '; + print '
'.$langs->trans("ThenCheckLinesAndConciliate").' '; print ''; print ' '.$langs->trans("or").' '; print ''; print ' '.$langs->trans("or").' '; print ''; + print '
'; // Show last bank statements $nbmax=15; // We accept to show last 15 receipts (so we can have more than one year) @@ -617,7 +618,7 @@ if ($resql) $sql.= " WHERE fk_account=".$object->id." AND num_releve IS NOT NULL"; $sql.= $db->order("num_releve", "DESC"); $sql.= $db->plimit($nbmax+1); - print '

'; + print '
'; print $langs->trans("LastAccountStatements").' : '; $resqlr=$db->query($sql); if ($resqlr) diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php index be18cb4051a..ca5e0b1862b 100644 --- a/htdocs/user/hierarchy.php +++ b/htdocs/user/hierarchy.php @@ -150,7 +150,7 @@ if ($canadduser) $newcardbutton.= dolGetButtonTitle($langs->trans('NewUser'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/user/card.php?action=create'.($mode == 'employee' ? '&employee=1': '').'&leftmenu='); } -$morehtmlright.= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-list', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); +$morehtmlright.= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-list paddingleft', DOL_URL_ROOT.'/user/list.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); print load_fiche_titre($title, $morehtmlright.' '.$newcardbutton); diff --git a/htdocs/user/list.php b/htdocs/user/list.php index ad310b0041e..8c780c703f7 100644 --- a/htdocs/user/list.php +++ b/htdocs/user/list.php @@ -304,7 +304,7 @@ print ''; print ''; -$morehtmlright.= dolGetButtonTitle($langs->trans("HierarchicView"), '', 'fa fa-sitemap', DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); +$morehtmlright.= dolGetButtonTitle($langs->trans("HierarchicView"), '', 'fa fa-sitemap paddingleft', DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ?'?search_statut='.$search_statut:'')); print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_generic', 0, $morehtmlright.' '.$newcardbutton, '', $limit); From 675b7b2e3215a950ff47415c449d0483b7d72e1e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 13:11:30 +0200 Subject: [PATCH 0138/1148] Fix link to reconcile --- htdocs/compta/bank/releve.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index ac4d17e4c49..b93f381c555 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -415,7 +415,7 @@ if (empty($numref)) if ($object->canBeConciliated() > 0) { // If not cash account and can be reconciliate if ($user->rights->banque->consolidate) { - print ''.$langs->trans("Conciliate").''; + print ''.$langs->trans("Conciliate").''; } else { print ''.$langs->trans("Conciliate").''; } From 9b327639197692f9eb5cf3ac970d594f6f79107f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 15:25:29 +0200 Subject: [PATCH 0139/1148] Fix label for report n ledger for transitionnal bank account on tranfer --- htdocs/accountancy/journal/bankjournal.php | 32 ++++++++++++++++++---- htdocs/core/lib/accounting.lib.php | 5 ++-- htdocs/langs/en_US/accountancy.lang | 1 + 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index cfe49764c74..d4a9ff0d3f6 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -573,7 +573,14 @@ if (! $error && $action == 'writebookkeeping') { { $reflabel = ''; if (! empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib']) . ($val['soclib']?" - ":""); - $reflabel.= dol_string_nohtmltag($val['soclib']); + if ($tabtype[$key] == 'banktransfert') + { + $reflabel.= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer); + } + else + { + $reflabel.= dol_string_nohtmltag($val['soclib']); + } $bookkeeping = new BookKeeping($db); $bookkeeping->doc_date = $val["date"]; @@ -702,7 +709,7 @@ if (! $error && $action == 'writebookkeeping') { } } } - else { // If thirdparty unkown, output the waiting account + else { // If thirdparty unknown, output the waiting account foreach ($tabbq[$key] as $k => $mt) { if ($mt) { @@ -831,7 +838,6 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! print '"' . $langs->transnoentitiesnoconv("Note") . '"' . $sep; print "\n"; - foreach ($tabpay as $key => $val) { $date = dol_print_date($db->jdate($val["date"]), 'day'); @@ -869,7 +875,14 @@ if ($action == 'exportcsv') { // ISO and not UTF8 ! { $reflabel = ''; if (! empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib']) . ($val['soclib']?" - ":""); - $reflabel.= dol_string_nohtmltag($val['soclib']); + if ($tabtype[$key] == 'banktransfert') + { + $reflabel.= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer); + } + else + { + $reflabel.= dol_string_nohtmltag($val['soclib']); + } print '"' . $key . '"' . $sep; print '"' . $date . '"' . $sep; @@ -1087,7 +1100,14 @@ if (empty($action) || $action == 'view') { { $reflabel = ''; if (! empty($val['lib'])) $reflabel .= $val['lib'] . ($val['soclib']?" - ":""); - $reflabel.= $val['soclib']; + if ($tabtype[$key] == 'banktransfert') + { + $reflabel.= $langs->trans('TransitionalAccount').' '.$account_transfer; + } + else + { + $reflabel.= $val['soclib']; + } print ''; print ''; @@ -1115,7 +1135,7 @@ if (empty($action) || $action == 'view') { } else { - print ''.$langs->trans('UnknownAccountForThirdparty', length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE)).''; // We will a waiting account + print ''.$langs->trans('UnknownAccountForThirdparty', length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE)).''; // We will use a waiting account } } else diff --git a/htdocs/core/lib/accounting.lib.php b/htdocs/core/lib/accounting.lib.php index 9545b6961fd..d6bd38b5030 100644 --- a/htdocs/core/lib/accounting.lib.php +++ b/htdocs/core/lib/accounting.lib.php @@ -175,7 +175,7 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build { global $langs; - print "\n\n\n"; + print "\n\n\n"; if(! is_empty($varlink)) $varlink = '?'.$varlink; @@ -186,6 +186,7 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build $head[$h][2] = 'journal'; print ''; + print ''; dol_fiche_head($head, 'journal'); @@ -240,5 +241,5 @@ function journalHead($nom, $variante, $period, $periodlink, $description, $build print ''; - print "\n\n\n"; + print "\n\n\n"; } diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 3bb0df59812..ece95cfca29 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations From 42576eb27a820cae0a756e932b6a0e02c6beac04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 17:22:13 +0200 Subject: [PATCH 0140/1148] Fix status of email templates not visible for non admin users --- htdocs/admin/mails_templates.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index e2f36f96fe9..b62009c2ba6 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -873,6 +873,7 @@ if ($resql) // Status / Active print ''; if ($canbedisabled) print ''.$actl[$obj->active].''; + else print ''.$actl[$obj->active].''; print ""; // Modify link / Delete link From 93d9f73f1d03c7786d3927c20247cd7bcb630cbc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 17:44:31 +0200 Subject: [PATCH 0141/1148] Trans --- htdocs/langs/en_US/accountancy.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index ece95cfca29..6dfe4fc8c4f 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -301,7 +301,7 @@ ChartofaccountsId=Chart of accounts Id InitAccountancy=Init accountancy InitAccountancyDesc=This page can be used to initialize an accounting account on products and services that does not have accounting account defined for sales and purchases. DefaultBindingDesc=This page can be used to set a default account to use to link transactions record about payment salaries, donation, taxes and vat when no specific accounting account were already set. -DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. +DefaultClosureDesc=This page can be used to set parameters used for accounting closures. Options=Options OptionModeProductSell=Mode sales OptionModeProductSellIntra=Mode sales exported in EEC From 69db6e6aa7e834740eb3eb72ae325058aa2fb299 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 18:45:13 +0200 Subject: [PATCH 0142/1148] Fix look and feel v10 --- htdocs/admin/supplier_proposal.php | 2 +- .../supplier_proposal/admin/supplier_proposal_extrafields.php | 2 +- .../admin/supplier_proposaldet_extrafields.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php index 8b17c860fd4..e627068b692 100644 --- a/htdocs/admin/supplier_proposal.php +++ b/htdocs/admin/supplier_proposal.php @@ -220,7 +220,7 @@ print load_fiche_titre($langs->trans("SupplierProposalSetup"), $linkback, 'title $head = supplier_proposal_admin_prepare_head(); -dol_fiche_head($head, 'general', $langs->trans("CommRequests"), 0, 'supplier_proposal'); +dol_fiche_head($head, 'general', $langs->trans("CommRequests"), -1, 'supplier_proposal'); /* * Module numerotation diff --git a/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php b/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php index 1b5c08119d1..c97ea508448 100644 --- a/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php +++ b/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php @@ -64,7 +64,7 @@ print load_fiche_titre($langs->trans("SupplierProposalSetup"), $linkback, 'title $head = supplier_proposal_admin_prepare_head(); -dol_fiche_head($head, 'attributes', $langs->trans("CommRequests"), 0, 'supplier_proposal'); +dol_fiche_head($head, 'attributes', $langs->trans("CommRequests"), -1, 'supplier_proposal'); print $langs->trans("DefineHereComplementaryAttributes", $textobject).'
'."\n"; diff --git a/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php b/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php index b3b0e482f62..c54e65ad825 100644 --- a/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php +++ b/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php @@ -69,7 +69,7 @@ print load_fiche_titre($langs->trans("SupplierProposalSetup"), $linkback, 'title $head = supplier_proposal_admin_prepare_head(); -dol_fiche_head($head, 'attributeslines', $langs->trans("CommRequests"), 0, 'supplier_proposal'); +dol_fiche_head($head, 'attributeslines', $langs->trans("CommRequests"), -1, 'supplier_proposal'); print $langs->trans("DefineHereComplementaryAttributes", $textobject).'
'."\n"; From 709b738d7579b7ebda9365182b3b9bd31666771c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 18:54:51 +0200 Subject: [PATCH 0143/1148] Fix regression --- htdocs/core/class/conf.class.php | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 6e3fc66f89a..9c403b98104 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -364,6 +364,7 @@ class Conf $this->livraison_bon->enabled=(! empty($this->global->MAIN_SUBMODULE_LIVRAISON)?$this->global->MAIN_SUBMODULE_LIVRAISON:0); // Module fournisseur + // TODO To split into module supplier_invoice and supplier_order if (! empty($this->fournisseur)) { $this->fournisseur->commande=new stdClass(); @@ -376,11 +377,7 @@ class Conf $this->fournisseur->facture->multidir_temp =array($this->entity => $rootfordata."/fournisseur/facture/temp"); $this->fournisseur->facture->dir_output =$rootfordata."/fournisseur/facture"; // For backward compatibility $this->fournisseur->facture->dir_temp =$rootfordata."/fournisseur/facture/temp"; // For backward compatibility - $this->supplierproposal=new stdClass(); - $this->supplierproposal->multidir_output=array($this->entity => $rootfordata."/supplier_proposal"); - $this->supplierproposal->multidir_temp =array($this->entity => $rootfordata."/supplier_proposal/temp"); - $this->supplierproposal->dir_output=$rootfordata."/supplier_proposal"; // For backward compatibility - $this->supplierproposal->dir_temp=$rootfordata."/supplier_proposal/temp"; // For backward compatibility + $this->fournisseur->payment=new stdClass(); $this->fournisseur->payment->multidir_output=array($this->entity => $rootfordata."/fournisseur/payment"); $this->fournisseur->payment->multidir_temp =array($this->entity => $rootfordata."/fournisseur/payment/temp"); @@ -409,15 +406,6 @@ class Conf $this->supplier_invoice->dir_output=$rootfordata."/fournisseur/facture"; // For backward compatibility $this->supplier_invoice->dir_temp=$rootfordata."/fournisseur/facture/temp"; // For backward compatibility } - - if (empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) // This can be set to 1 once modules purchase order and supplier invoice exists - { - $this->supplier_proposal=new stdClass(); - $this->supplier_proposal->multidir_output=array($this->entity => $rootfordata."/supplier_proposal"); - $this->supplier_proposal->multidir_temp =array($this->entity => $rootfordata."/supplier_proposal/temp"); - $this->supplier_proposal->dir_output=$rootfordata."/supplier_proposal"; // For backward compatibility - $this->supplier_proposal->dir_temp=$rootfordata."/supplier_proposal/temp"; // For backward compatibility - } } } From bbb5b43e948367a8428df1ff3e5f95354299f0ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 19:03:16 +0200 Subject: [PATCH 0144/1148] Fix duplicate trans --- htdocs/fourn/commande/card.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index bae5741d4ea..4742774b868 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -392,7 +392,7 @@ if (empty($reshook)) } if ($prod_entry_mode =='free' && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='' && $price_ht_devise === '') // Unit price can be 0 but not '' { - setEventMessages($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), null, 'errors'); + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice')), null, 'errors'); $error++; } if ($prod_entry_mode =='free' && ! GETPOST('dp_desc')) @@ -2281,14 +2281,13 @@ elseif (! empty($object->id)) print ''; // Add free products/services form - global $forceall, $senderissupplier, $dateSelector; - $forceall=1; $dateSelector=0; + global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=0; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty and disable autofill qty with minimum. //if (! empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) $senderissupplier=2; if (! empty($conf->global->SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; // Show object lines - $inputalsopricewithtax=0; if (! empty($object->lines)) $ret = $object->printObjectLines($action, $societe, $mysoc, $lineid, 1); From d3b4a91f41b763ff07551b94383d3accf1031bdb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 20:24:22 +0200 Subject: [PATCH 0145/1148] NEW Can enter price tax incl on vendor proposal and purchase orders --- htdocs/fourn/commande/card.php | 39 ++++---- htdocs/fourn/facture/card.php | 4 +- htdocs/supplier_proposal/card.php | 96 ++++++++++++++----- .../class/supplier_proposal.class.php | 20 +++- 4 files changed, 106 insertions(+), 53 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 4742774b868..ff33a42e2a9 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -114,6 +114,7 @@ elseif (! empty($socid) && $socid > 0) $permissionnote=$user->rights->fournisseur->commande->creer; // Used by the include of actions_setnotes.inc.php $permissiondellink=$user->rights->fournisseur->commande->creer; // Used by the include of actions_dellink.inc.php $permissiontoedit=$user->rights->fournisseur->commande->creer; // Used by the include of actions_lineupdown.inc.php +$permissiontoadd=$user->rights->fournisseur->commande->creer; // Used by the include of actions_addupdatedelete.inc.php /* @@ -432,7 +433,7 @@ if (empty($reshook)) if (preg_match('/^idprod_([0-9]+)$/', GETPOST('idprodfournprice', 'alpha'), $reg)) { $idprod=$reg[1]; - $res=$productsupplier->fetch($idprod); // Load product from its ID + $res=$productsupplier->fetch($idprod); // Load product from its id // Call to init some price properties of $productsupplier // So if a supplier price already exists for another thirdparty (first one found), we use it as reference price if (! empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) @@ -494,7 +495,7 @@ if (empty($reshook)) 0, // We already have the $idprod always defined $ref_supplier, $remise_percent, - 'HT', + $price_base_type, $pu_ttc, $type, $tva_npr, @@ -511,7 +512,7 @@ if (empty($reshook)) // Product not selected $error++; $langs->load("errors"); - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")).' '.$langs->trans("or").' '.$langs->trans("NoPriceDefinedForThisSupplier"), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService")), null, 'errors'); } if ($idprod == -1) { @@ -523,8 +524,6 @@ if (empty($reshook)) } elseif (empty($error)) // $price_ht is already set { - $pu_ht = price2num($price_ht, 'MU'); - $pu_ttc = price2num(GETPOST('price_ttc'), 'MU'); $tva_npr = (preg_match('/\*/', $tva_tx) ? 1 : 0); $tva_tx = str_replace('*', '', $tva_tx); $label = (GETPOST('product_label') ? GETPOST('product_label') : ''); @@ -552,7 +551,7 @@ if (empty($reshook)) $price_base_type = 'HT'; $pu_ht_devise = price2num($price_ht_devise, 'MU'); - $result=$object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, '', '', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise); + $result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, '', '', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise); } //print "xx".$tva_tx; exit; @@ -652,28 +651,28 @@ if (empty($reshook)) if (preg_match('/\*/', $vat_rate)) $info_bits |= 0x01; - // Define vat_rate + // Define vat_rate $vat_rate = str_replace('*', '', $vat_rate); $localtax1_rate = get_localtax($vat_rate, 1, $mysoc, $object->thirdparty); $localtax2_rate = get_localtax($vat_rate, 2, $mysoc, $object->thirdparty); if (GETPOST('price_ht') != '') { - $price_base_type = 'HT'; - $ht = price2num(GETPOST('price_ht')); + $price_base_type = 'HT'; + $ht = price2num(GETPOST('price_ht')); } else { - $vatratecleaned = $vat_rate; - if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) // If vat is "xx (yy)" - { - $vatratecleaned = trim($reg[1]); - $vatratecode = $reg[2]; - } + $vatratecleaned = $vat_rate; + if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) // If vat is "xx (yy)" + { + $vatratecleaned = trim($reg[1]); + $vatratecode = $reg[2]; + } - $ttc = price2num(GETPOST('price_ttc')); - $ht = $ttc / (1 + ($vatratecleaned / 100)); - $price_base_type = 'HT'; + $ttc = price2num(GETPOST('price_ttc')); + $ht = $ttc / (1 + ($vatratecleaned / 100)); + $price_base_type = 'HT'; } $pu_ht_devise = GETPOST('multicurrency_subprice'); @@ -689,7 +688,7 @@ if (empty($reshook)) } } -$result = $object->updateline( + $result = $object->updateline( $lineid, $_POST['product_desc'], $ht, @@ -2282,7 +2281,7 @@ elseif (! empty($object->id)) // Add free products/services form global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; - $forceall=1; $dateSelector=0; $inputalsopricewithtax=0; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=1; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty and disable autofill qty with minimum. //if (! empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) $senderissupplier=2; if (! empty($conf->global->SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index a0a966e7210..ae042b4c4b8 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1175,7 +1175,7 @@ if (empty($reshook)) } if ($prod_entry_mode =='free' && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='' && $price_ht_devise==='') // Unit price can be 0 but not '' { - setEventMessages($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), null, 'errors'); + setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice')), null, 'errors'); $error++; } if ($prod_entry_mode =='free' && ! GETPOST('dp_desc')) @@ -1332,7 +1332,7 @@ if (empty($reshook)) $price_base_type = 'HT'; $pu_ht_devise = price2num($price_ht_devise, 'MU'); - $result=$object->addline($product_desc, $pu_ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit, 0, $pu_ht_devise, $ref_supplier); + $result = $object->addline($product_desc, $pu_ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit, 0, $pu_ht_devise, $ref_supplier); } //print "xx".$tva_tx; exit; diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 56473959a39..60034cc7bc0 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -77,6 +77,9 @@ $NBLINES = 4; if (! empty($user->societe_id)) $socid = $user->societe_id; $result = restrictedArea($user, 'supplier_proposal', $id); +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('supplier_proposalcard','globalcard')); + $object = new SupplierProposal($db); $extrafields = new ExtraFields($db); @@ -92,9 +95,6 @@ if ($id > 0 || ! empty($ref)) { dol_print_error('', $object->error); } -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('supplier_proposalcard','globalcard')); - $permissionnote = $user->rights->supplier_proposal->creer; // Used by the include of actions_setnotes.inc.php $permissiondellink=$user->rights->supplier_proposal->creer; // Used by the include of actions_dellink.inc.php $permissiontoedit=$user->rights->supplier_proposal->creer; // Used by the include of actions_lineupdown.inc.php @@ -565,9 +565,9 @@ if (empty($reshook)) $error ++; } - if ($prod_entry_mode == 'free' && empty($idprod) && $price_ht == '') // Unit price can be 0 but not ''. Also price can be negative for proposal. + if ($prod_entry_mode == 'free' && empty($idprod) && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='' && $price_ht_devise === '') // Unit price can be 0 but not ''. Also price can be negative for proposal. { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPriceHT")), null, 'errors'); + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UnitPrice")), null, 'errors'); $error ++; } if ($prod_entry_mode == 'free' && empty($idprod) && empty($product_desc)) { @@ -585,7 +585,7 @@ if (empty($reshook)) // Ecrase $pu par celui du produit // Ecrase $desc par celui du produit // Ecrase $txtva par celui du produit - if ($prod_entry_mode != 'free' && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or '' + if (($prod_entry_mode != 'free') && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or '' { $productsupplier = new ProductFournisseur($db); @@ -595,7 +595,7 @@ if (empty($reshook)) if (preg_match('/^idprod_([0-9]+)$/', GETPOST('idprodfournprice', 'alpha'), $reg)) { $idprod=$reg[1]; - $res=$productsupplier->fetch($idprod); + $res=$productsupplier->fetch($idprod); // Load product from its ID // Call to init some price properties of $productsupplier // So if a supplier price already exists for another thirdparty (first one found), we use it as reference price if (! empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) @@ -632,23 +632,21 @@ if (empty($reshook)) if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc, '', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION)); - $pu_ht = $productsupplier->fourn_pu; - $type = $productsupplier->type; $price_base_type = ($productsupplier->fourn_price_base_type?$productsupplier->fourn_price_base_type:'HT'); $ref_supplier = $productsupplier->ref_supplier; - $fk_unit = $productsupplier->fk_unit; - $tva_tx = get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice', 'alpha')); $tva_npr = get_default_npr($object->thirdparty, $mysoc, $productsupplier->id, GETPOST('idprodfournprice', 'alpha')); - if (empty($tva_tx)) $tva_npr=0; $localtax1_tx= get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr); $localtax2_tx= get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr); - $result=$object->addline( + $pu_ht = $productsupplier->fourn_pu; + if (empty($pu_ht)) $pu_ht = 0; // If pu is '' or null, we force to have a numeric value + + $result=$object->addline( $desc, $pu_ht, $qty, @@ -669,7 +667,7 @@ if (empty($reshook)) $label, $array_options, $ref_supplier, - $fk_unit, + $productsupplier->fk_unit, '', 0, $productsupplier->fourn_multicurrency_unitprice @@ -730,6 +728,8 @@ if (empty($reshook)) { $db->commit(); + $ret=$object->fetch($object->id); // Reload to get new records + // Define output language if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { @@ -798,32 +798,52 @@ if (empty($reshook)) // Mise a jour d'une ligne dans la demande de prix elseif ($action == 'updateline' && $user->rights->supplier_proposal->creer && GETPOST('save') == $langs->trans("Save")) { + $vat_rate=(GETPOST('tva_tx')?GETPOST('tva_tx'):0); + // Define info_bits $info_bits = 0; - if (preg_match('/\*/', GETPOST('tva_tx'))) + if (preg_match('/\*/', $vat_rate)) $info_bits |= 0x01; - // Clean parameters + // Clean parameters $description = dol_htmlcleanlastbr(GETPOST('product_desc', 'none')); // Define vat_rate - $vat_rate = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0); $vat_rate = str_replace('*', '', $vat_rate); - $localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty); - $localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty); - $pu_ht = GETPOST('price_ht') ? GETPOST('price_ht') : 0; + $localtax1_rate = get_localtax($vat_rate, 1, $mysoc, $object->thirdparty); + $localtax2_rate = get_localtax($vat_rate, 2, $mysoc, $object->thirdparty); + + if (GETPOST('price_ht') != '') + { + $price_base_type = 'HT'; + $ht = price2num(GETPOST('price_ht')); + } + else + { + $vatratecleaned = $vat_rate; + if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) // If vat is "xx (yy)" + { + $vatratecleaned = trim($reg[1]); + $vatratecode = $reg[2]; + } + + $ttc = price2num(GETPOST('price_ttc')); + $ht = $ttc / (1 + ($vatratecleaned / 100)); + $price_base_type = 'HT'; + } + + $pu_ht_devise = GETPOST('multicurrency_subprice'); // Add buying price $fournprice = (GETPOST('fournprice') ? GETPOST('fournprice') : ''); $buyingprice = (GETPOST('buying_price') != '' ? GETPOST('buying_price') : ''); // If buying_price is '0', we muste keep this value - // Extrafields + // Extrafields Lines $extrafieldsline = new ExtraFields($db); $extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line); $array_options = $extrafieldsline->getOptionalsFromPost($object->table_element_line); - // Unset extrafield + // Unset extrafield POST Data if (is_array($extralabelsline)) { - // Get extra fields foreach ($extralabelsline as $key => $value) { unset($_POST["options_" . $key]); } @@ -869,9 +889,33 @@ if (empty($reshook)) if (! $error) { $db->begin(); + $ref_supplier = GETPOST('fourn_ref', 'alpha'); $fk_unit = GETPOST('units'); - $result = $object->updateline(GETPOST('lineid'), $pu_ht, GETPOST('qty'), GETPOST('remise_percent'), $vat_rate, $localtax1_rate, $localtax2_rate, $description, 'HT', $info_bits, $special_code, GETPOST('fk_parent_line'), 0, $fournprice, $buyingprice, $label, $type, $array_options, $ref_supplier, $fk_unit); + + $result = $object->updateline( + GETPOST('lineid'), + $ht, + GETPOST('qty'), + GETPOST('remise_percent'), + $vat_rate, + $localtax1_rate, + $localtax2_rate, + $description, + $price_base_type, + $info_bits, + $special_code, + GETPOST('fk_parent_line'), + 0, + $fournprice, + $buyingprice, + $label, + $type, + $array_options, + $ref_supplier, + $fk_unit, + $pu_ht_devise + ); if ($result >= 0) { $db->commit(); @@ -1705,8 +1749,8 @@ if ($action == 'create') print '
'; // Add free products/services form - global $forceall, $senderissupplier, $dateSelector; - $forceall=1; $dateSelector=0; + global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=1; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty. if (! empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 74073c0d7e4..2725cd18190 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -655,9 +655,10 @@ class SupplierProposal extends CommonObject * @param array $array_option extrafields array * @param string $ref_supplier Supplier price reference * @param int $fk_unit Id of the unit to use. + * @param double $pu_ht_devise Unit price in currency * @return int 0 if OK, <0 if KO */ - public function updateline($rowid, $pu, $qty, $remise_percent, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $desc = '', $price_base_type = 'HT', $info_bits = 0, $special_code = 0, $fk_parent_line = 0, $skip_update_total = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $type = 0, $array_option = 0, $ref_supplier = '', $fk_unit = '') + public function updateline($rowid, $pu, $qty, $remise_percent, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $desc = '', $price_base_type = 'HT', $info_bits = 0, $special_code = 0, $fk_parent_line = 0, $skip_update_total = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $type = 0, $array_option = 0, $ref_supplier = '', $fk_unit = '', $pu_ht_devise = 0) { global $conf,$user,$langs, $mysoc; @@ -684,10 +685,17 @@ class SupplierProposal extends CommonObject // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva. - $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $this->thirdparty, $mysoc); - $txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate. + $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $mysoc, $this->thirdparty); - $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx); + // Clean vat code + $vat_src_code=''; + if (preg_match('/\((.*)\)/', $txtva, $reg)) + { + $vat_src_code = $reg[1]; + $txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate. + } + + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; $total_ttc = $tabprice[2]; @@ -726,7 +734,9 @@ class SupplierProposal extends CommonObject $this->line->label = $label; $this->line->desc = $desc; $this->line->qty = $qty; - $this->line->product_type = $type; + $this->line->product_type = $type; + + $this->line->vat_src_code = $vat_src_code; $this->line->tva_tx = $txtva; $this->line->localtax1_tx = $txlocaltax1; $this->line->localtax2_tx = $txlocaltax2; From ac9282667dfbc908d52e976f80be87e0cf49272e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:09:21 +0200 Subject: [PATCH 0146/1148] Try new phpunit syntax --- test/phpunit/ActionCommTest.php | 2 +- test/phpunit/AdherentTest.php | 2 +- test/phpunit/AdminLibTest.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/phpunit/ActionCommTest.php b/test/phpunit/ActionCommTest.php index f9c0928bad2..921d0e6d70d 100644 --- a/test/phpunit/ActionCommTest.php +++ b/test/phpunit/ActionCommTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ActionCommTest extends PHPUnit_Framework_TestCase +class ActionCommTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/AdherentTest.php b/test/phpunit/AdherentTest.php index bd5ae5571cc..c83df4da0d2 100644 --- a/test/phpunit/AdherentTest.php +++ b/test/phpunit/AdherentTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class AdherentTest extends PHPUnit_Framework_TestCase +class AdherentTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/AdminLibTest.php b/test/phpunit/AdminLibTest.php index bbf5ae2da00..21133d21072 100644 --- a/test/phpunit/AdminLibTest.php +++ b/test/phpunit/AdminLibTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class AdminLibTest extends PHPUnit_Framework_TestCase +class AdminLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; From 3af4ad7fc36f4861f54f104f01d321e0eff933c1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:28:27 +0200 Subject: [PATCH 0147/1148] Compatibility with phpunit v6 --- test/phpunit/BOMTest.php | 2 +- test/phpunit/BankAccountTest.php | 2 +- test/phpunit/BonPrelevementTest.php | 2 +- test/phpunit/BuildDocTest.php | 2 +- test/phpunit/CMailFileTest.php | 2 +- test/phpunit/CategorieTest.php | 2 +- test/phpunit/ChargeSocialesTest.php | 2 +- test/phpunit/CodingPhpTest.php | 2 +- test/phpunit/CommandeFournisseurTest.php | 2 +- test/phpunit/CommandeTest.php | 2 +- test/phpunit/CommonObjectTest.php | 2 +- test/phpunit/CompanyBankAccountTest.php | 2 +- test/phpunit/CompanyLibTest.php | 2 +- test/phpunit/ContactTest.php | 2 +- test/phpunit/ContratTest.php | 2 +- test/phpunit/CoreTest.php | 2 +- test/phpunit/DateLibTest.php | 2 +- test/phpunit/DateLibTzFranceTest.php | 2 +- test/phpunit/DiscountTest.php | 2 +- test/phpunit/EntrepotTest.php | 2 +- test/phpunit/ExpenseReportTest.php | 2 +- test/phpunit/ExportTest.php | 2 +- test/phpunit/FactureFournisseurTest.php | 2 +- test/phpunit/FactureRecTest.php | 2 +- test/phpunit/FactureTest.php | 2 +- test/phpunit/FactureTestRounding.php | 2 +- test/phpunit/FichinterTest.php | 2 +- test/phpunit/FilesLibTest.php | 2 +- test/phpunit/FormAdminTest.php | 2 +- test/phpunit/Functions2LibTest.php | 2 +- test/phpunit/HolidayTest.php | 2 +- test/phpunit/ImagesLibTest.php | 2 +- test/phpunit/ImportTest.php | 2 +- test/phpunit/JsonLibTest.php | 2 +- test/phpunit/LangTest.php | 2 +- test/phpunit/LoanTest.php | 2 +- test/phpunit/MarginsLibTest.php | 2 +- test/phpunit/ModulesTest.php | 2 +- test/phpunit/MouvementStockTest.php | 2 +- test/phpunit/NumberingModulesTest.php | 2 +- test/phpunit/PaypalTest.php | 2 +- test/phpunit/PdfDocTest.php | 2 +- test/phpunit/PgsqlTest.php | 2 +- test/phpunit/PricesTest.php | 2 +- test/phpunit/ProductTest.php | 2 +- test/phpunit/ProjectTest.php | 2 +- test/phpunit/PropalTest.php | 2 +- test/phpunit/RestAPIDocumentTest.php | 2 +- test/phpunit/RestAPIUserTest.php | 2 +- test/phpunit/ScriptsTest.php | 2 +- test/phpunit/SecurityTest.php | 2 +- test/phpunit/SocieteTest.php | 2 +- test/phpunit/SupplierProposalTest.php | 2 +- test/phpunit/TicketTest.php | 2 +- test/phpunit/UserGroupTest.php | 2 +- test/phpunit/UserTest.php | 2 +- test/phpunit/UtilsTest.php | 2 +- test/phpunit/WebservicesInvoicesTest.php | 2 +- test/phpunit/WebservicesOrdersTest.php | 2 +- test/phpunit/WebservicesOtherTest.php | 2 +- test/phpunit/WebservicesProductsTest.php | 2 +- test/phpunit/WebservicesThirdpartyTest.php | 2 +- test/phpunit/WebservicesUserTest.php | 2 +- test/phpunit/XCalLibTest.php | 2 +- 64 files changed, 64 insertions(+), 64 deletions(-) diff --git a/test/phpunit/BOMTest.php b/test/phpunit/BOMTest.php index ace04f7ba71..1179b35e6e1 100644 --- a/test/phpunit/BOMTest.php +++ b/test/phpunit/BOMTest.php @@ -28,7 +28,7 @@ namespace test\unit; * Class BillOfMaterialsTest * @package Testbillofmaterials */ -class BOMTest extends \PHPUnit_Framework_TestCase +class BOMTest extends \PHPUnit\Framework\TestCase { /** * Global test setup diff --git a/test/phpunit/BankAccountTest.php b/test/phpunit/BankAccountTest.php index fa150742c4b..94149bd0ad5 100644 --- a/test/phpunit/BankAccountTest.php +++ b/test/phpunit/BankAccountTest.php @@ -46,7 +46,7 @@ $langs->load("main"); * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class BankAccountTest extends PHPUnit_Framework_TestCase +class BankAccountTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/BonPrelevementTest.php b/test/phpunit/BonPrelevementTest.php index 4ba05b2c0b6..d65d2066c2a 100644 --- a/test/phpunit/BonPrelevementTest.php +++ b/test/phpunit/BonPrelevementTest.php @@ -47,7 +47,7 @@ $langs->load("main"); * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class BonPrelevementTest extends PHPUnit_Framework_TestCase +class BonPrelevementTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/BuildDocTest.php b/test/phpunit/BuildDocTest.php index e8fa72a8f40..442b76091ff 100644 --- a/test/phpunit/BuildDocTest.php +++ b/test/phpunit/BuildDocTest.php @@ -74,7 +74,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class BuildDocTest extends PHPUnit_Framework_TestCase +class BuildDocTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CMailFileTest.php b/test/phpunit/CMailFileTest.php index b664b345c26..9941eaa67da 100755 --- a/test/phpunit/CMailFileTest.php +++ b/test/phpunit/CMailFileTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CMailFileTest extends PHPUnit_Framework_TestCase +class CMailFileTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CategorieTest.php b/test/phpunit/CategorieTest.php index 80761a6e594..46d8dbe875b 100644 --- a/test/phpunit/CategorieTest.php +++ b/test/phpunit/CategorieTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CategorieTest extends PHPUnit_Framework_TestCase +class CategorieTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ChargeSocialesTest.php b/test/phpunit/ChargeSocialesTest.php index b037e50752d..9eabbf20fa0 100644 --- a/test/phpunit/ChargeSocialesTest.php +++ b/test/phpunit/ChargeSocialesTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ChargeSocialesTest extends PHPUnit_Framework_TestCase +class ChargeSocialesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CodingPhpTest.php b/test/phpunit/CodingPhpTest.php index db6b3299bd5..b7636a5c934 100644 --- a/test/phpunit/CodingPhpTest.php +++ b/test/phpunit/CodingPhpTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CodingPhpTest extends PHPUnit_Framework_TestCase +class CodingPhpTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CommandeFournisseurTest.php b/test/phpunit/CommandeFournisseurTest.php index 277328339ee..c249c47bd91 100644 --- a/test/phpunit/CommandeFournisseurTest.php +++ b/test/phpunit/CommandeFournisseurTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CommandeFournisseurTest extends PHPUnit_Framework_TestCase +class CommandeFournisseurTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CommandeTest.php b/test/phpunit/CommandeTest.php index 00a0a4983c9..570165f3382 100644 --- a/test/phpunit/CommandeTest.php +++ b/test/phpunit/CommandeTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CommandeTest extends PHPUnit_Framework_TestCase +class CommandeTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CommonObjectTest.php b/test/phpunit/CommonObjectTest.php index 549540bb0d0..e4bd0f73518 100644 --- a/test/phpunit/CommonObjectTest.php +++ b/test/phpunit/CommonObjectTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CommonObjectTest extends PHPUnit_Framework_TestCase +class CommonObjectTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CompanyBankAccountTest.php b/test/phpunit/CompanyBankAccountTest.php index 58eebfd0207..08749d12619 100644 --- a/test/phpunit/CompanyBankAccountTest.php +++ b/test/phpunit/CompanyBankAccountTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CompanyBankAccountTest extends PHPUnit_Framework_TestCase +class CompanyBankAccountTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CompanyLibTest.php b/test/phpunit/CompanyLibTest.php index 0fb1722aee9..9e211441103 100644 --- a/test/phpunit/CompanyLibTest.php +++ b/test/phpunit/CompanyLibTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CompanyLibTest extends PHPUnit_Framework_TestCase +class CompanyLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ContactTest.php b/test/phpunit/ContactTest.php index ef43bd06311..c0ed8d7843f 100755 --- a/test/phpunit/ContactTest.php +++ b/test/phpunit/ContactTest.php @@ -53,7 +53,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ContactTest extends PHPUnit_Framework_TestCase +class ContactTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ContratTest.php b/test/phpunit/ContratTest.php index c5342865979..c763a976172 100644 --- a/test/phpunit/ContratTest.php +++ b/test/phpunit/ContratTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ContratTest extends PHPUnit_Framework_TestCase +class ContratTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/CoreTest.php b/test/phpunit/CoreTest.php index 51a0f54698f..4720df9014c 100644 --- a/test/phpunit/CoreTest.php +++ b/test/phpunit/CoreTest.php @@ -47,7 +47,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class CoreTest extends PHPUnit_Framework_TestCase +class CoreTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/DateLibTest.php b/test/phpunit/DateLibTest.php index 6424cb4d8df..cc4f50705e0 100644 --- a/test/phpunit/DateLibTest.php +++ b/test/phpunit/DateLibTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class DateLibTest extends PHPUnit_Framework_TestCase +class DateLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/DateLibTzFranceTest.php b/test/phpunit/DateLibTzFranceTest.php index fa7aef2bed8..8913c56a77d 100644 --- a/test/phpunit/DateLibTzFranceTest.php +++ b/test/phpunit/DateLibTzFranceTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class DateLibTzFranceTest extends PHPUnit_Framework_TestCase +class DateLibTzFranceTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/DiscountTest.php b/test/phpunit/DiscountTest.php index cd73a7ad173..8c461aba88a 100644 --- a/test/phpunit/DiscountTest.php +++ b/test/phpunit/DiscountTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class DiscountTest extends PHPUnit_Framework_TestCase +class DiscountTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/EntrepotTest.php b/test/phpunit/EntrepotTest.php index a2c0e78ee96..61bb5fe1b49 100644 --- a/test/phpunit/EntrepotTest.php +++ b/test/phpunit/EntrepotTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class EntrepotTest extends PHPUnit_Framework_TestCase +class EntrepotTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ExpenseReportTest.php b/test/phpunit/ExpenseReportTest.php index c4b3e2a707a..570afd8bb18 100644 --- a/test/phpunit/ExpenseReportTest.php +++ b/test/phpunit/ExpenseReportTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ExpenseReportTest extends PHPUnit_Framework_TestCase +class ExpenseReportTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ExportTest.php b/test/phpunit/ExportTest.php index 7403cba3ddf..5497f88cd67 100644 --- a/test/phpunit/ExportTest.php +++ b/test/phpunit/ExportTest.php @@ -49,7 +49,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ExportTest extends PHPUnit_Framework_TestCase +class ExportTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureFournisseurTest.php b/test/phpunit/FactureFournisseurTest.php index 33d503825ac..4d7df1f0ed7 100644 --- a/test/phpunit/FactureFournisseurTest.php +++ b/test/phpunit/FactureFournisseurTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureFournisseurTest extends PHPUnit_Framework_TestCase +class FactureFournisseurTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureRecTest.php b/test/phpunit/FactureRecTest.php index de1bb164451..5d9021032a2 100644 --- a/test/phpunit/FactureRecTest.php +++ b/test/phpunit/FactureRecTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureRecTest extends PHPUnit_Framework_TestCase +class FactureRecTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureTest.php b/test/phpunit/FactureTest.php index 4f680ba32db..3c066380b09 100644 --- a/test/phpunit/FactureTest.php +++ b/test/phpunit/FactureTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureTest extends PHPUnit_Framework_TestCase +class FactureTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FactureTestRounding.php b/test/phpunit/FactureTestRounding.php index a0df47cd97f..1716bd51153 100644 --- a/test/phpunit/FactureTestRounding.php +++ b/test/phpunit/FactureTestRounding.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FactureTestRounding extends PHPUnit_Framework_TestCase +class FactureTestRounding extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FichinterTest.php b/test/phpunit/FichinterTest.php index 35680559581..c81e1c99e1a 100644 --- a/test/phpunit/FichinterTest.php +++ b/test/phpunit/FichinterTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FichinterTest extends PHPUnit_Framework_TestCase +class FichinterTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index 2411c5c9cf3..cbe6ad948d8 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FilesLibTest extends PHPUnit_Framework_TestCase +class FilesLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/FormAdminTest.php b/test/phpunit/FormAdminTest.php index 8532d6ac283..20c22a76cd8 100644 --- a/test/phpunit/FormAdminTest.php +++ b/test/phpunit/FormAdminTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class FormAdminTest extends PHPUnit_Framework_TestCase +class FormAdminTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/Functions2LibTest.php b/test/phpunit/Functions2LibTest.php index 50efabf9403..a83ba0f4859 100644 --- a/test/phpunit/Functions2LibTest.php +++ b/test/phpunit/Functions2LibTest.php @@ -48,7 +48,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class Functions2LibTest extends PHPUnit_Framework_TestCase +class Functions2LibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/HolidayTest.php b/test/phpunit/HolidayTest.php index a352a1722b9..7e3fc6a8069 100644 --- a/test/phpunit/HolidayTest.php +++ b/test/phpunit/HolidayTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class HolidayTest extends PHPUnit_Framework_TestCase +class HolidayTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ImagesLibTest.php b/test/phpunit/ImagesLibTest.php index 4ecaab49d39..445fe572b61 100644 --- a/test/phpunit/ImagesLibTest.php +++ b/test/phpunit/ImagesLibTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ImagesLibTest extends PHPUnit_Framework_TestCase +class ImagesLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ImportTest.php b/test/phpunit/ImportTest.php index 10d906f2ede..5a11a770842 100644 --- a/test/phpunit/ImportTest.php +++ b/test/phpunit/ImportTest.php @@ -47,7 +47,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ImportTest extends PHPUnit_Framework_TestCase +class ImportTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/JsonLibTest.php b/test/phpunit/JsonLibTest.php index a84a78a7c75..c123f2e6ff6 100644 --- a/test/phpunit/JsonLibTest.php +++ b/test/phpunit/JsonLibTest.php @@ -47,7 +47,7 @@ if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page i * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class JsonLibTest extends PHPUnit_Framework_TestCase +class JsonLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/LangTest.php b/test/phpunit/LangTest.php index 228cde51901..71d467b78d3 100644 --- a/test/phpunit/LangTest.php +++ b/test/phpunit/LangTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class LangTest extends PHPUnit_Framework_TestCase +class LangTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/LoanTest.php b/test/phpunit/LoanTest.php index b0ecd583514..e0cc1f5b5ff 100644 --- a/test/phpunit/LoanTest.php +++ b/test/phpunit/LoanTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class LoanTest extends PHPUnit_Framework_TestCase +class LoanTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/MarginsLibTest.php b/test/phpunit/MarginsLibTest.php index 81f4a512e4f..84fb59c81ec 100644 --- a/test/phpunit/MarginsLibTest.php +++ b/test/phpunit/MarginsLibTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class MarginsLibTest extends PHPUnit_Framework_TestCase +class MarginsLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ModulesTest.php b/test/phpunit/ModulesTest.php index ea16813d873..38a630b46e0 100755 --- a/test/phpunit/ModulesTest.php +++ b/test/phpunit/ModulesTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ModulesTest extends PHPUnit_Framework_TestCase +class ModulesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/MouvementStockTest.php b/test/phpunit/MouvementStockTest.php index cac49f34a7a..ba7b093596f 100644 --- a/test/phpunit/MouvementStockTest.php +++ b/test/phpunit/MouvementStockTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class MouvementStockTest extends PHPUnit_Framework_TestCase +class MouvementStockTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/NumberingModulesTest.php b/test/phpunit/NumberingModulesTest.php index 66c4c670128..57c376b702b 100644 --- a/test/phpunit/NumberingModulesTest.php +++ b/test/phpunit/NumberingModulesTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class NumberingModulesTest extends PHPUnit_Framework_TestCase +class NumberingModulesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PaypalTest.php b/test/phpunit/PaypalTest.php index 98300a6a86a..54913b1e5f9 100644 --- a/test/phpunit/PaypalTest.php +++ b/test/phpunit/PaypalTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PaypalTest extends PHPUnit_Framework_TestCase +class PaypalTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PdfDocTest.php b/test/phpunit/PdfDocTest.php index 634a931da56..bece387b93f 100644 --- a/test/phpunit/PdfDocTest.php +++ b/test/phpunit/PdfDocTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PdfDocTest extends PHPUnit_Framework_TestCase +class PdfDocTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PgsqlTest.php b/test/phpunit/PgsqlTest.php index a1fcc180528..743328abb71 100644 --- a/test/phpunit/PgsqlTest.php +++ b/test/phpunit/PgsqlTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PgsqlTest extends PHPUnit_Framework_TestCase +class PgsqlTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PricesTest.php b/test/phpunit/PricesTest.php index 0203a1d4275..32babae209c 100755 --- a/test/phpunit/PricesTest.php +++ b/test/phpunit/PricesTest.php @@ -52,7 +52,7 @@ if (! empty($conf->global->MAIN_ROUNDING_RULE_TOT)) * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PricesTest extends PHPUnit_Framework_TestCase +class PricesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ProductTest.php b/test/phpunit/ProductTest.php index 115475113fa..782d5f076e8 100644 --- a/test/phpunit/ProductTest.php +++ b/test/phpunit/ProductTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProductTest extends PHPUnit_Framework_TestCase +class ProductTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ProjectTest.php b/test/phpunit/ProjectTest.php index faa533e2c00..886463be104 100644 --- a/test/phpunit/ProjectTest.php +++ b/test/phpunit/ProjectTest.php @@ -46,7 +46,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ProjectTest extends PHPUnit_Framework_TestCase +class ProjectTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/PropalTest.php b/test/phpunit/PropalTest.php index 6a3d17d7806..b0331a5575f 100644 --- a/test/phpunit/PropalTest.php +++ b/test/phpunit/PropalTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class PropalTest extends PHPUnit_Framework_TestCase +class PropalTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/RestAPIDocumentTest.php b/test/phpunit/RestAPIDocumentTest.php index f0d3efe34e6..08ea79352d3 100644 --- a/test/phpunit/RestAPIDocumentTest.php +++ b/test/phpunit/RestAPIDocumentTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_UMASK = '0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class RestAPIDocumentTest extends PHPUnit_Framework_TestCase +class RestAPIDocumentTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/RestAPIUserTest.php b/test/phpunit/RestAPIUserTest.php index 39f924e7e04..b44fb7aaccc 100644 --- a/test/phpunit/RestAPIUserTest.php +++ b/test/phpunit/RestAPIUserTest.php @@ -47,7 +47,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class RestAPIUserTest extends PHPUnit_Framework_TestCase +class RestAPIUserTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/ScriptsTest.php b/test/phpunit/ScriptsTest.php index 4e43a036c7e..e4a2263e849 100644 --- a/test/phpunit/ScriptsTest.php +++ b/test/phpunit/ScriptsTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class ScriptsTest extends PHPUnit_Framework_TestCase +class ScriptsTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/SecurityTest.php b/test/phpunit/SecurityTest.php index 636fa923bc0..b457c4c0fa7 100644 --- a/test/phpunit/SecurityTest.php +++ b/test/phpunit/SecurityTest.php @@ -57,7 +57,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class SecurityTest extends PHPUnit_Framework_TestCase +class SecurityTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/SocieteTest.php b/test/phpunit/SocieteTest.php index 11eb6711862..f823d8a4803 100755 --- a/test/phpunit/SocieteTest.php +++ b/test/phpunit/SocieteTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class SocieteTest extends PHPUnit_Framework_TestCase +class SocieteTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/SupplierProposalTest.php b/test/phpunit/SupplierProposalTest.php index 14a63776444..ee95e882572 100644 --- a/test/phpunit/SupplierProposalTest.php +++ b/test/phpunit/SupplierProposalTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class SupplierProposalTest extends PHPUnit_Framework_TestCase +class SupplierProposalTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/TicketTest.php b/test/phpunit/TicketTest.php index e5367d03fbe..4d7ce3363ed 100644 --- a/test/phpunit/TicketTest.php +++ b/test/phpunit/TicketTest.php @@ -45,7 +45,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class TicketTest extends PHPUnit_Framework_TestCase +class TicketTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/UserGroupTest.php b/test/phpunit/UserGroupTest.php index e524b989172..be230655fe1 100644 --- a/test/phpunit/UserGroupTest.php +++ b/test/phpunit/UserGroupTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class UserGroupTest extends PHPUnit_Framework_TestCase +class UserGroupTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/UserTest.php b/test/phpunit/UserTest.php index b87dfd84494..e993ed981a6 100644 --- a/test/phpunit/UserTest.php +++ b/test/phpunit/UserTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class UserTest extends PHPUnit_Framework_TestCase +class UserTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/UtilsTest.php b/test/phpunit/UtilsTest.php index 58074af1c1f..5a913977ccc 100644 --- a/test/phpunit/UtilsTest.php +++ b/test/phpunit/UtilsTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class UtilsTest extends PHPUnit_Framework_TestCase +class UtilsTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesInvoicesTest.php b/test/phpunit/WebservicesInvoicesTest.php index fb8e36af6a1..77ad0902ec2 100644 --- a/test/phpunit/WebservicesInvoicesTest.php +++ b/test/phpunit/WebservicesInvoicesTest.php @@ -49,7 +49,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesInvoicesTest extends PHPUnit_Framework_TestCase +class WebservicesInvoicesTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesOrdersTest.php b/test/phpunit/WebservicesOrdersTest.php index 8b989df273f..8e6312ac039 100644 --- a/test/phpunit/WebservicesOrdersTest.php +++ b/test/phpunit/WebservicesOrdersTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesOrdersTest extends PHPUnit_Framework_TestCase +class WebservicesOrdersTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesOtherTest.php b/test/phpunit/WebservicesOtherTest.php index bdc3a15b2b9..5c19414966b 100644 --- a/test/phpunit/WebservicesOtherTest.php +++ b/test/phpunit/WebservicesOtherTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesOtherTest extends PHPUnit_Framework_TestCase +class WebservicesOtherTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesProductsTest.php b/test/phpunit/WebservicesProductsTest.php index 90147a429a4..ff78d9d91bb 100644 --- a/test/phpunit/WebservicesProductsTest.php +++ b/test/phpunit/WebservicesProductsTest.php @@ -55,7 +55,7 @@ if (empty($conf->service->enabled)) * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesProductsTest extends PHPUnit_Framework_TestCase +class WebservicesProductsTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesThirdpartyTest.php b/test/phpunit/WebservicesThirdpartyTest.php index cb1f26d1980..4effe555d2f 100644 --- a/test/phpunit/WebservicesThirdpartyTest.php +++ b/test/phpunit/WebservicesThirdpartyTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesThirdpartyTest extends PHPUnit_Framework_TestCase +class WebservicesThirdpartyTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/WebservicesUserTest.php b/test/phpunit/WebservicesUserTest.php index 7ca0d9e8ee8..d7df632e413 100644 --- a/test/phpunit/WebservicesUserTest.php +++ b/test/phpunit/WebservicesUserTest.php @@ -48,7 +48,7 @@ $conf->global->MAIN_UMASK='0666'; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class WebservicesUserTest extends PHPUnit_Framework_TestCase +class WebservicesUserTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; diff --git a/test/phpunit/XCalLibTest.php b/test/phpunit/XCalLibTest.php index 4783bf4bc8f..602ec11e46d 100644 --- a/test/phpunit/XCalLibTest.php +++ b/test/phpunit/XCalLibTest.php @@ -44,7 +44,7 @@ $conf->global->MAIN_DISABLE_ALL_MAILS=1; * @backupStaticAttributes enabled * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. */ -class XCalLibTest extends PHPUnit_Framework_TestCase +class XCalLibTest extends PHPUnit\Framework\TestCase { protected $savconf; protected $savuser; From 0a7d70829f566b63eb1c1d1b3674c3462ec6f20f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:37:25 +0200 Subject: [PATCH 0148/1148] Translation of some comments --- htdocs/adherents/type.php | 2 +- htdocs/admin/tools/listevents.php | 2 +- htdocs/comm/propal/list.php | 2 +- htdocs/commande/customer.php | 2 +- htdocs/commande/orderstoinvoice.php | 2 +- htdocs/compta/clients.php | 2 +- htdocs/compta/paiement/cheque/list.php | 2 +- htdocs/expedition/list.php | 2 +- htdocs/fourn/commande/list.php | 2 +- htdocs/fourn/commande/orderstoinvoice.php | 2 +- htdocs/fourn/product/list.php | 2 +- htdocs/product/reassort.php | 2 +- htdocs/product/reassortlot.php | 2 +- htdocs/product/stock/list.php | 2 +- htdocs/product/stock/movement_card.php | 2 +- htdocs/product/stock/movement_list.php | 2 +- htdocs/product/stock/replenish.php | 2 +- htdocs/reception/list.php | 2 +- htdocs/supplier_proposal/list.php | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 19790159c22..2c8c108b3d5 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -603,7 +603,7 @@ if ($rowid > 0) print '
'; print '
'."\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '\n"; From 65e9d8f239048afcfea1d73a96917363090e245f Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Thu, 25 Jul 2019 11:14:59 +0200 Subject: [PATCH 0323/1148] FIX: tk9877 - PDF rouget requires product.lib.php (otherwise measuring_units_string() is not defined) --- htdocs/core/modules/expedition/doc/pdf_rouget.modules.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index fc242e47e52..087b4a373aa 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -29,6 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php'; /** From efd89588e56999ba34b3bf9ea48660a8aec74f81 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Thu, 25 Jul 2019 12:21:28 +0200 Subject: [PATCH 0324/1148] fix trans --- htdocs/langs/en_US/products.lang | 3 ++- htdocs/langs/fr_FR/products.lang | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 36ca0ede002..d9cf127b40d 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -340,4 +340,5 @@ ErrorCopyProductCombinations=There was an error while copying the product varian ErrorDestinationProductNotFound=Destination product not found ErrorProductCombinationNotFound=Product variant not found ActionAvailableOnVariantProductOnly=Action only available on the variant of product -ProductsPricePerCustomer=Product prices per customers \ No newline at end of file +ProductsPricePerCustomer=Product prices per customers +GlobalSearchOnExtrafield=Global search : apply on extrafields too (Warning : date format is YYYY-MM-DD) diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index b759a023bf3..7ab9f7a0f03 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -339,5 +339,4 @@ ErrorCopyProductCombinations=Une erreur s'est produite lors de la copie des vari ErrorDestinationProductNotFound=Produit destination non trouvé ErrorProductCombinationNotFound=Variante du produit non trouvé ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit -ProductsPricePerCustomer=Prix produit par clients -GlobalSearchOnExtrafield=Recherche globale : Appliquer la recherche sur les extrafields (Attention : les dates sont au format YYYY-MM-DD) +ProductsPricePerCustomer=Prix produit par clients \ No newline at end of file From 0bb92ff10ddd87c6a0179dddbb9efc0eabc0dbdc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 13:48:13 +0200 Subject: [PATCH 0325/1148] NEW Add method getStructuredDataForBlogPost for website --- htdocs/core/lib/website.lib.php | 58 ++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 29a2ab27d8f..532ae51da97 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -397,7 +397,7 @@ function redirectToContainer($containerref, $containeraliasalt = '', $containeri */ function includeContainer($containerref) { - global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running inluded containers. + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running included containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; @@ -434,7 +434,63 @@ function includeContainer($containerref) $includehtmlcontentopened--; } +/** + * Return HTML content to add structured data for an article, news or Blog Post. + * + * @param WebsitePage $websitepage Website page object + * @return string HTML content + */ +function getStructuredDataForBlogPost(WebsitePage $websitepage) +{ + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. + global $includehtmlcontentopened; + global $websitekey, $websitepagefile; + if ($websitepage->fk_user_creat > 0) + { + include_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; + $tmpuser = new User($db); + $restmpuser = $tmpuser->fetch($websitepage->fk_user_creat); + + if ($restmpuser > 0) + { + $ret = ''."\n"; + $ret .= ''."\n"; + } + } + + return $ret; +} /** * Download all images found into page content $tmp. From d1aa15004e1adcf8a2ab18fb54e2c4912ed5b4eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 13:48:13 +0200 Subject: [PATCH 0326/1148] NEW Add method getStructuredData for website --- htdocs/core/lib/website.lib.php | 62 ++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 29a2ab27d8f..7b1f8756252 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -397,7 +397,7 @@ function redirectToContainer($containerref, $containeraliasalt = '', $containeri */ function includeContainer($containerref) { - global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running inluded containers. + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running included containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; @@ -434,7 +434,67 @@ function includeContainer($containerref) $includehtmlcontentopened--; } +/** + * Return HTML content to add structured data for an article, news or Blog Post. + * + * @param string $type 'blogpost', 'product', ... + * @param WebsitePage $websitepage Website page object + * @return string HTML content + */ +function getStructuredData($type='blogpost', WebsitePage $websitepage) +{ + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. + global $includehtmlcontentopened; + global $websitekey, $websitepagefile; + if ($type == 'blogpost') + { + if ($websitepage->fk_user_creat > 0) + { + include_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; + $tmpuser = new User($db); + $restmpuser = $tmpuser->fetch($websitepage->fk_user_creat); + + if ($restmpuser > 0) + { + $ret = ''."\n"; + $ret .= ''."\n"; + } + } + } + + return $ret; +} /** * Download all images found into page content $tmp. From e29023f155df4d69d24b725689e96f017b375935 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:12:22 +0200 Subject: [PATCH 0327/1148] Fix --- htdocs/core/lib/website.lib.php | 4 ++-- htdocs/website/class/websitepage.class.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 3d74e981e10..735d730e579 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -464,11 +464,11 @@ function getStructuredData($type, WebsitePage $websitepage) "@type": "NewsArticle", "mainEntityOfPage": { "@type": "WebPage", - "@id": "'.'/'.$websitepage->pageurl.'" + "@id": "'.$websitepage->pageurl.'" }, "headline": "'.$websitepage->title.'", "image": [ - "'."/".$websitepage->image.'", + "'.$websitepage->image.'" ], "datePublished": "'.dol_print_date($websitepage->date_creation, 'dayhourrfc').'", "dateModified": "'.dol_print_date($websitepage->date_modification, 'dayhourrfc').'", diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 8814756284c..417a1bfc305 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -99,7 +99,7 @@ class WebsitePage extends CommonObject 'type_container' =>array('type'=>'varchar(16)', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'index'=>0, 'position'=>12, 'comment'=>'Type of container'), 'title' =>array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1), 'description' =>array('type'=>'varchar(255)', 'label'=>'Description', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'searchall'=>1), - 'image' =>array('type'=>'varchar(255)', 'label'=>'Image', 'enabled'=>1, 'visible'=>1, 'position'=>32, 'searchall'=>0, 'help'=>'Relative path of media. Used if Type is "blog_post"'), + 'image' =>array('type'=>'varchar(255)', 'label'=>'Image', 'enabled'=>1, 'visible'=>1, 'position'=>32, 'searchall'=>0, 'help'=>'Relative path of media. Used if Type is "blogpost"'), 'keywords' =>array('type'=>'varchar(255)', 'label'=>'Keywords', 'enabled'=>1, 'visible'=>1, 'position'=>45, 'searchall'=>0), 'lang' =>array('type'=>'varchar(6)', 'label'=>'Lang', 'enabled'=>1, 'visible'=>1, 'position'=>45, 'searchall'=>0), //'status' =>array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'index'=>true, 'position'=>1000), From 1978ffb370e5cca90246125b34a603d0291fd1e5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:21:39 +0200 Subject: [PATCH 0328/1148] Fix --- htdocs/core/lib/website.lib.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 735d730e579..bacd62960d0 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -476,17 +476,17 @@ function getStructuredData($type, WebsitePage $websitepage) "@type": "Person", "name": "'.$tmpuser->getFullName($weblangs).'" }, + "publisher": { + "@type": "Organization", + "name": "'.$mysoc->name.'" + }, "description": "'.$websitepage->description.'" }'."\n"; /* - "publisher": { - "@type": "Organization", - "name": "Google", - "logo": { - "@type": "ImageObject", - "url": "https://google.com/logo.jpg" - } - }, + "logo": { + "@type": "ImageObject", + "url": "https://google.com/logo.jpg" + } */ $ret .= ''."\n"; } From 6674b8975b58f71b30a7dd170eb532fdc062d8af Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:26:48 +0200 Subject: [PATCH 0329/1148] Fix logo of organization --- htdocs/core/lib/website.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index bacd62960d0..79864f3879d 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -479,14 +479,14 @@ function getStructuredData($type, WebsitePage $websitepage) "publisher": { "@type": "Organization", "name": "'.$mysoc->name.'" + "logo": { + "@type": "ImageObject", + "url": "/viewimage.php?modulepart=mycompany&file=logos%2F'.urlencode($mysoc->logo).'" + } }, "description": "'.$websitepage->description.'" }'."\n"; /* - "logo": { - "@type": "ImageObject", - "url": "https://google.com/logo.jpg" - } */ $ret .= ''."\n"; } From fb2a9e371c81286176cbb84d79fb493ff4b807b6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:27:53 +0200 Subject: [PATCH 0330/1148] Fix syntax --- htdocs/core/lib/website.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 79864f3879d..10ba1707bf1 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -477,12 +477,12 @@ function getStructuredData($type, WebsitePage $websitepage) "name": "'.$tmpuser->getFullName($weblangs).'" }, "publisher": { - "@type": "Organization", - "name": "'.$mysoc->name.'" - "logo": { + "@type": "Organization", + "name": "'.$mysoc->name.'", + "logo": { "@type": "ImageObject", "url": "/viewimage.php?modulepart=mycompany&file=logos%2F'.urlencode($mysoc->logo).'" - } + } }, "description": "'.$websitepage->description.'" }'."\n"; From 351b877c05ceb7f7d5227b0f79736bd19e220a9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 14:39:22 +0200 Subject: [PATCH 0331/1148] Add structured data product --- htdocs/core/lib/website.lib.php | 70 ++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 10ba1707bf1..08ccdb05246 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -437,17 +437,41 @@ function includeContainer($containerref) /** * Return HTML content to add structured data for an article, news or Blog Post. * - * @param string $type 'blogpost', 'product', ... + * @param string $type 'blogpost', 'product', 'software'... * @param WebsitePage $websitepage Website page object + * @param array $data Array of data parameters for structured data * @return string HTML content */ -function getStructuredData($type, WebsitePage $websitepage) +function getStructuredData($type, WebsitePage $websitepage, $data = array()) { global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; - if ($type == 'blogpost') + if ($type == 'software') + { + $ret = ''."\n"; + $ret .= ''."\n"; + } + elseif ($type == 'blogpost') { if ($websitepage->fk_user_creat > 0) { @@ -486,13 +510,47 @@ function getStructuredData($type, WebsitePage $websitepage) }, "description": "'.$websitepage->description.'" }'."\n"; - /* - */ $ret .= ''."\n"; } } } - + elseif ($type == 'product') + { + $ret = ''."\n"; + $ret.= ''."\n"; + } return $ret; } From fe22f11f10854e2d53f9d142d99e320734939d35 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 15:07:00 +0200 Subject: [PATCH 0332/1148] More generic code --- htdocs/core/lib/website.lib.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 08ccdb05246..a4c187f2ffa 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -438,13 +438,12 @@ function includeContainer($containerref) * Return HTML content to add structured data for an article, news or Blog Post. * * @param string $type 'blogpost', 'product', 'software'... - * @param WebsitePage $websitepage Website page object * @param array $data Array of data parameters for structured data * @return string HTML content */ -function getStructuredData($type, WebsitePage $websitepage, $data = array()) +function getStructuredData($type, $data = array()) { - global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $weblangs; // Very important. Required to have var available when running inluded containers. + global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs; // Very important. Required to have var available when running inluded containers. global $includehtmlcontentopened; global $websitekey, $websitepagefile; From e88ca8ae89c1fa2e6c39a9bd6c352e0f1d43198d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 15:07:24 +0200 Subject: [PATCH 0333/1148] Fix migration --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index 6484fe572df..eb66c37bb4f 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -398,3 +398,6 @@ insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) v insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (113, 'supplier_proposal', 'external', 'SERVICE', 'Contact fournisseur prestation', 1); ALTER TABLE llx_ticket_extrafields ADD INDEX idx_ticket_extrafields (fk_object); + +UPDATE llx_website_page set fk_user_creat = fk_user_modif WHERE fk_user_creat IS NULL and fk_user_modif IS NOT NULL; + From 1d7885bc0cb0a142095f908137ea10429dbdbfc2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 16:58:24 +0200 Subject: [PATCH 0334/1148] FIX We should remove property comments only for project and task api. --- htdocs/api/class/api.class.php | 1 - htdocs/projet/class/api_projects.class.php | 2 ++ htdocs/projet/class/api_tasks.class.php | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php index de5a1e75d0a..0d9971b0929 100644 --- a/htdocs/api/class/api.class.php +++ b/htdocs/api/class/api.class.php @@ -145,7 +145,6 @@ class DolibarrApi unset($object->picto); unset($object->fieldsforcombobox); - unset($object->comments); unset($object->skip_update_total); unset($object->context); diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php index 9680cd66591..93da94184a3 100644 --- a/htdocs/projet/class/api_projects.class.php +++ b/htdocs/projet/class/api_projects.class.php @@ -582,6 +582,8 @@ class Projects extends DolibarrApi unset($object->total_localtax2); unset($object->total_ttc); + unset($object->comments); + return $object; } diff --git a/htdocs/projet/class/api_tasks.class.php b/htdocs/projet/class/api_tasks.class.php index 9fafcb98343..337cef3ccb5 100644 --- a/htdocs/projet/class/api_tasks.class.php +++ b/htdocs/projet/class/api_tasks.class.php @@ -592,6 +592,8 @@ class Tasks extends DolibarrApi unset($object->total_localtax2); unset($object->total_ttc); + unset($object->comments); + return $object; } From 6e3fad8f8380e2c722b7c8e73d740f54f2ee7aba Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 17:42:44 +0200 Subject: [PATCH 0335/1148] Fix phpcs --- .../accountancy/class/bookkeeping.class.php | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 0034723ec4c..faad238d7e4 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -324,8 +324,8 @@ class BookKeeping extends CommonObject $sql .= ", piece_num"; $sql .= ', entity'; $sql .= ") VALUES ("; - $sql .= "'" . $this->db->idate($this->doc_date) . "'"; - $sql .= ", ".(! isset($this->date_lim_reglement) || dol_strlen($this->date_lim_reglement) == 0 ? 'NULL' : "'" . $this->db->idate($this->date_lim_reglement) . "'"); + $sql .= "'".$this->db->idate($this->doc_date)."'"; + $sql .= ", ".(! isset($this->date_lim_reglement) || dol_strlen($this->date_lim_reglement) == 0 ? 'NULL' : "'".$this->db->idate($this->date_lim_reglement)."'"); $sql .= ",'" . $this->db->escape($this->doc_type) . "'"; $sql .= ",'" . $this->db->escape($this->doc_ref) . "'"; $sql .= "," . $this->fk_doc; @@ -341,7 +341,7 @@ class BookKeeping extends CommonObject $sql .= "," . $this->montant; $sql .= ",'" . $this->db->escape($this->sens) . "'"; $sql .= ",'" . $this->db->escape($this->fk_user_author) . "'"; - $sql .= ",'" . $this->db->idate($now). "'"; + $sql .= ",'".$this->db->idate($now)."'"; $sql .= ",'" . $this->db->escape($this->code_journal) . "'"; $sql .= ",'" . $this->db->escape($this->journal_label) . "'"; $sql .= "," . $this->db->escape($this->piece_num); @@ -573,7 +573,7 @@ class BookKeeping extends CommonObject $sql .= 'piece_num,'; $sql .= 'entity'; $sql .= ') VALUES ('; - $sql .= ' ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : "'" . $this->db->idate($this->doc_date) . "'") . ','; + $sql .= ' ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) == 0 ? 'NULL' : "'".$this->db->idate($this->doc_date)."'") . ','; $sql .= ' ' . (! isset($this->date_lim_reglement) || dol_strlen($this->date_lim_reglement) == 0 ? 'NULL' : "'" . $this->db->idate($this->date_lim_reglement) . "'") . ','; $sql .= ' ' . (! isset($this->doc_type) ? 'NULL' : "'" . $this->db->escape($this->doc_type) . "'") . ','; $sql .= ' ' . (! isset($this->doc_ref) ? 'NULL' : "'" . $this->db->escape($this->doc_ref) . "'") . ','; @@ -590,7 +590,7 @@ class BookKeeping extends CommonObject $sql .= ' ' . (! isset($this->montant) ? 'NULL' : $this->montant ). ','; $sql .= ' ' . (! isset($this->sens) ? 'NULL' : "'" . $this->db->escape($this->sens) . "'") . ','; $sql .= ' ' . $user->id . ','; - $sql .= ' ' . "'" . $this->db->idate($now) . "',"; + $sql .= ' ' . "'".$this->db->idate($now)."',"; $sql .= ' ' . (empty($this->code_journal) ? 'NULL' : "'" . $this->db->escape($this->code_journal) . "'") . ','; $sql .= ' ' . (empty($this->journal_label) ? 'NULL' : "'" . $this->db->escape($this->journal_label) . "'") . ','; $sql .= ' ' . (empty($this->piece_num) ? 'NULL' : $this->db->escape($this->piece_num)).','; @@ -1163,7 +1163,7 @@ class BookKeeping extends CommonObject // Update request $sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . $mode.' SET'; - $sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'" . $this->db->idate($this->doc_date) . "'" : 'null') . ','; + $sql .= ' doc_date = ' . (! isset($this->doc_date) || dol_strlen($this->doc_date) != 0 ? "'".$this->db->idate($this->doc_date)."'" : 'null') . ','; $sql .= ' doc_type = ' . (isset($this->doc_type) ? "'" . $this->db->escape($this->doc_type) . "'" : "null") . ','; $sql .= ' doc_ref = ' . (isset($this->doc_ref) ? "'" . $this->db->escape($this->doc_ref) . "'" : "null") . ','; $sql .= ' fk_doc = ' . (isset($this->fk_doc) ? $this->fk_doc : "null") . ','; @@ -1687,7 +1687,7 @@ class BookKeeping extends CommonObject * @param string $piece_num Piece num * @return int int <0 if KO, >0 if OK */ - public function transformTransaction($direction=0,$piece_num='') + public function transformTransaction($direction = 0, $piece_num = '') { $error = 0; @@ -1708,15 +1708,15 @@ class BookKeeping extends CommonObject $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, ' . $next_piecenum . ', "' . $this->db->idate($now) . '"'; - $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, ' . $next_piecenum . ", '".$this->db->idate($now)."'"; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $this->db->escape($piece_num); $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $this->db->escape($piece_num); $resql = $this->db->query($sql); if (! $resql) { $error ++; From 111c0dcadd03fdfd9faa29e16d17cb8f26505501 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 17:46:48 +0200 Subject: [PATCH 0336/1148] Comment --- htdocs/core/class/html.formcompany.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php index d1366cb8511..dfd0bd6a065 100644 --- a/htdocs/core/class/html.formcompany.class.php +++ b/htdocs/core/class/html.formcompany.class.php @@ -391,7 +391,7 @@ class FormCompany /** * Return combo list with people title * - * @param string $selected Title preselected + * @param string $selected Civility/Title code preselected * @param string $htmlname Name of HTML select combo field * @param string $morecss Add more css on SELECT element * @return string String with HTML select From 9a0e0fbdd2a03e3fc9ebf80cdbcb6303be719157 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 18:01:16 +0200 Subject: [PATCH 0337/1148] Update product.php --- htdocs/product/admin/product.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index ed0bcb88e74..ae911c04b81 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -147,8 +147,8 @@ if ($action == 'other') $value = GETPOST('activate_useProdFournDesc', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value, 'chaine', 0, '', $conf->entity); - $value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); - $res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); + //$value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); + //$res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); if ($value) { $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1"; @@ -679,12 +679,12 @@ if (! empty($conf->fournisseur->enabled)) print ''; } -print ''; +/*print ''; print ''; print ''; -print ''; +print '';*/ if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { From 0c6499f1935d4ed030dbd5379ab376ebe815a25c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 18:01:47 +0200 Subject: [PATCH 0338/1148] Update product.php --- htdocs/product/admin/product.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index ae911c04b81..464ab169456 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -552,7 +552,7 @@ print ''."\n"; * Other parameters */ -$rowspan = 5; +$rowspan = 4; if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) $rowspan++; if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) $rowspan++; if (! empty($conf->global->MAIN_MULTILANGS)) $rowspan++; From 0b69bf995760d52e08606fe24edd213909e8cf2d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 25 Jul 2019 18:17:17 +0200 Subject: [PATCH 0339/1148] FIX #11553 --- .../core/modules/commande/doc/pdf_einstein.modules.php | 10 ++++++++-- .../modules/commande/doc/pdf_eratosthene.modules.php | 10 ++++++++-- .../core/modules/commande/doc/pdf_proforma.modules.php | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 5975da49fbe..1c1fa12c665 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1217,6 +1217,8 @@ class pdf_einstein extends ModelePDFCommandes } } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -1227,8 +1229,9 @@ class pdf_einstein extends ModelePDFCommandes * @param string $titlekey Translation key to show as title of document * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") { + // phpcs:enable global $conf,$langs,$hookmanager; // Load traductions files requiredby by page @@ -1429,6 +1432,8 @@ class pdf_einstein extends ModelePDFCommandes return $top_shift; } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show footer of page. Need this->emetteur object * @@ -1438,8 +1443,9 @@ class pdf_einstein extends ModelePDFCommandes * @param int $hidefreetext 1=Hide free text * @return int Return height of bottom margin including footer text */ - private function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) + protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { + // phpcs:enable global $conf; $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; return pdf_pagefoot($pdf, $outputlangs, 'ORDER_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext); diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php index 1abc6c95e20..51e36b53476 100644 --- a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php @@ -1352,6 +1352,8 @@ class pdf_eratosthene extends ModelePDFCommandes } } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -1362,8 +1364,9 @@ class pdf_eratosthene extends ModelePDFCommandes * @param string $titlekey Translation key to show as title of document * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "PdfOrderTitle") { + // phpcs:enable global $conf,$langs,$hookmanager; // Translations @@ -1564,6 +1567,8 @@ class pdf_eratosthene extends ModelePDFCommandes return $top_shift; } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show footer of page. Need this->emetteur object * @@ -1573,8 +1578,9 @@ class pdf_eratosthene extends ModelePDFCommandes * @param int $hidefreetext 1=Hide free text * @return int Return height of bottom margin including footer text */ - private function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) + protected function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { + // phpcs:enable global $conf; $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS; return pdf_pagefoot($pdf, $outputlangs, 'ORDER_FREE_TEXT', $this->emetteur, $this->marge_basse, $this->marge_gauche, $this->page_hauteur, $object, $showdetails, $hidefreetext); diff --git a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php index f10f858544f..f1e591d73a8 100644 --- a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php @@ -57,6 +57,8 @@ class pdf_proforma extends pdf_einstein } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Show top header of page. * @@ -67,8 +69,9 @@ class pdf_proforma extends pdf_einstein * @param string $titlekey Translation key to show as title of document * @return void */ - private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "InvoiceProForma") + protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey = "InvoiceProForma") { + // phpcs:enable global $conf,$langs,$hookmanager; parent::_pagehead($pdf, $object, $showaddress, $outputlangs, $titlekey); From 2c29f041a08fcead8bae178f4e82099bb5226751 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 25 Jul 2019 18:28:52 +0200 Subject: [PATCH 0340/1148] FIX move sql request in INNER JOIN --- htdocs/contact/consumption.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index e2123e8307e..9cde6e2df4e 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -173,7 +173,7 @@ if ($type_element == 'fichinter') $sql_select = 'SELECT f.rowid as doc_id, f.ref as doc_number, \'1\' as doc_type, f.datec as dateprint, f.fk_statut as status, tc.libelle, '; $tables_from = MAIN_DB_PREFIX.'fichinterdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'fichinter as f ON d.fk_fichinter=f.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='fichinter' and tc.source='external' and tc.active=1)"; $where = ' WHERE f.entity IN ('.getEntity('ficheinter').')'; $dateprint = 'f.datec'; @@ -187,7 +187,7 @@ elseif ($type_element == 'invoice') $tables_from = MAIN_DB_PREFIX.'facturedet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture as f ON d.fk_facture=f.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='facture' and tc.source='external' and tc.active=1)"; $where = " WHERE f.entity IN (".getEntity('invoice').")"; $dateprint = 'f.datef'; @@ -202,7 +202,7 @@ elseif ($type_element == 'propal') $tables_from = MAIN_DB_PREFIX.'propaldet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'propal as c ON d.fk_propal=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='propal' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity('propal').')'; $datePrint = 'c.datep'; @@ -217,7 +217,7 @@ elseif ($type_element == 'order') $tables_from = MAIN_DB_PREFIX.'commandedet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commande as c ON d.fk_commande=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='commande' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity('order').')'; $dateprint = 'c.date_commande'; @@ -232,7 +232,7 @@ elseif ($type_element == 'supplier_invoice') $tables_from = MAIN_DB_PREFIX.'facture_fourn_det d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture_fourn as f ON d.fk_facture_fourn=f.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=f.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='invoice_supplier' and tc.source='external' and tc.active=1)"; $where = ' WHERE f.entity IN ('.getEntity($documentstatic->element).')'; $dateprint = 'f.datef'; @@ -260,7 +260,7 @@ elseif ($type_element == 'supplier_order') $tables_from = MAIN_DB_PREFIX.'commande_fournisseurdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'commande_fournisseur as c ON d.fk_commande=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='order_supplier' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity($documentstatic->element).')'; $dateprint = 'c.date_valid'; @@ -276,7 +276,7 @@ elseif ($type_element == 'contract') $tables_from = MAIN_DB_PREFIX.'contratdet d'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'contrat as c ON d.fk_contrat=c.rowid'; $tables_from.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product p ON d.fk_product=p.rowid'; - $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid'; + $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact ec ON ec.element_id=c.rowid AND ec.fk_socpeople='.$object->id; $tables_from.= ' INNER JOIN '.MAIN_DB_PREFIX."c_type_contact tc ON (ec.fk_c_type_contact=tc.rowid and tc.element='contrat' and tc.source='external' and tc.active=1)"; $where = ' WHERE c.entity IN ('.getEntity('contrat').')'; $dateprint = 'c.date_valid'; @@ -300,7 +300,6 @@ if (!empty($sql_select)) $sql.= " FROM "/*.MAIN_DB_PREFIX."societe as s, "*/.$tables_from; // if ($type_element != 'fichinter') $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON d.fk_product = p.rowid '; $sql.= $where; - $sql.= ' AND ec.fk_socpeople = '.$object->id; if ($month > 0) { if ($year > 0) { $start = dol_mktime(0, 0, 0, $month, 1, $year); From 1f7cd1a3f8043e0a804dc949168fec5aa25a2535 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 26 Jul 2019 11:05:16 +0200 Subject: [PATCH 0341/1148] FIX name was able to be in field but went back to new line --- htdocs/core/modules/cheque/doc/pdf_blochet.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php index 32d35edb70a..32d5100c0f7 100644 --- a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php +++ b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php @@ -247,7 +247,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts $pdf->MultiCell(22,2,$outputlangs->transnoentities("Owner"),0,'L'); $pdf->SetFont('','', $default_font_size); $pdf->SetXY(32,26); - $pdf->MultiCell(60,2,$outputlangs->convToOutputCharset($this->account->proprio),0,'L'); + $pdf->MultiCell(80,2,$outputlangs->convToOutputCharset($this->account->proprio),0,'L'); $pdf->SetFont('','', $default_font_size); $pdf->SetXY(10,32); From f7c739bba94e8d57524ec3fbc821e6a7b8efc4fe Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 26 Jul 2019 12:12:08 +0200 Subject: [PATCH 0342/1148] FIX wrong path sociales/index.php doesnt exist anymore --- htdocs/compta/charges/index.php | 2 +- htdocs/compta/sociales/card.php | 2 +- htdocs/compta/sociales/list.php | 4 ++-- htdocs/compta/sociales/payments.php | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index f0188c5ed94..2f5802da185 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -183,7 +183,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print $socialcontrib->getNomUrl(1,'20'); print ''; // Type - print ''; + print ''; // Expected to pay print ''; // Ref payment diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 6a0d53d6987..672b9003805 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -121,7 +121,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') $result=$object->delete($user); if ($result > 0) { - header("Location: index.php"); + header("Location: list.php"); exit; } else diff --git a/htdocs/compta/sociales/list.php b/htdocs/compta/sociales/list.php index be3e7ea5791..9b7dcbbe120 100644 --- a/htdocs/compta/sociales/list.php +++ b/htdocs/compta/sociales/list.php @@ -168,7 +168,7 @@ if ($resql) if ($year) { - $center=($year?"".img_previous()." ".$langs->trans("Year")." $year ".img_next()."":""); + $center=($year?"".img_previous()." ".$langs->trans("Year")." $year ".img_next()."":""); print_barre_liste($langs->trans("SocialContributions"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $center, $num, $totalnboflines, 'title_accountancy.png', 0, $newcardbutton, '', $limit); } else @@ -258,7 +258,7 @@ if ($resql) print ''; // Type - print ''; + print ''; // Date $date=$obj->periode; if (empty($date)) $date=$obj->date_ech; From 38bb046abb1baa28ddfea03912505783a2e01d9f Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 26 Jul 2019 12:38:49 +0200 Subject: [PATCH 0343/1148] NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order --- htdocs/fourn/commande/dispatch.php | 58 +++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 48599a5bbf2..6e1bd41ea24 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2016 Laurent Destailleur * Copyright (C) 2005 Eric Seigne * Copyright (C) 2005-2009 Regis Houssin - * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2010-2019 Juanjo Menent * Copyright (C) 2014 Cedric Gross * Copyright (C) 2016 Florian Henry * Copyright (C) 2017 Ferran Marcet @@ -239,6 +239,16 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) $pu = "pu_" . $reg[1] . '_' . $reg[2]; // This is unit price including discount $fk_commandefourndet = "fk_commandefourndet_" . $reg[1] . '_' . $reg[2]; + if (! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT )) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + $dto = GETPOST("dto_" . $reg[1] . '_' . $reg[2]); + if (! empty($dto)) { + $unit_price = price2num(GETPOST("pu_" . $reg[1]) * (100 - $dto) / 100, 'MU'); + } + $saveprice = "saveprice_" . $reg[1] . '_' . $reg[2]; + } + } + // We ask to move a qty if (GETPOST($qty) != 0) { if (! (GETPOST($ent, 'int') > 0)) { @@ -254,6 +264,24 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner) setEventMessages($object->error, $object->errors, 'errors'); $error ++; } + + if (! $error && ! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT)) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + $dto = GETPOST("dto_" . $reg[1] . '_' . $reg[2]); + //update supplier price + if (isset($_POST[$saveprice])) { + // TODO Use class + $sql = "UPDATE " . MAIN_DB_PREFIX . "product_fournisseur_price"; + $sql .= " SET unitprice='" . GETPOST($pu) . "'"; + $sql .= ", price=" . GETPOST($pu) . "*quantity"; + $sql .= ", remise_percent='" . $dto . "'"; + $sql .= " WHERE fk_soc=" . $object->socid; + $sql .= " AND fk_product=" . GETPOST($prod, 'int'); + + $resql = $db->query($sql); + } + } + } } } } @@ -552,6 +580,15 @@ if ($id > 0 || ! empty($ref)) { print ''; print ''; print ''; + + if (! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT )) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + print ''; + print ''; + print ''; + } + } + print ''; // Enable hooks to append additional columns @@ -760,6 +797,25 @@ if ($id > 0 || ! empty($ref)) { print ''; + if (! empty($conf->global->SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT)) { + if (empty($conf->multicurrency->enabled) && empty($conf->dynamicprices->enabled)) { + // Price + print ''; + + // Discount + print ''; + + // Save price + print ''; + } + } + // Warehouse print ''; } -/*print ''; -print ''; -print ''; -print '';*/ if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { diff --git a/htdocs/product/list.php b/htdocs/product/list.php index a3dac45dcab..460e9d5ee45 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -136,10 +136,6 @@ $fieldstosearchall = array( 'p.label'=>"ProductLabel", 'p.description'=>"Description", "p.note"=>"Note", - "p.note_public"=>"NotePublic", - "p.url"=>"PublicUrl", - "p.accountancy_code_sell"=>"AccountancyCodeSell", - "p.accountancy_code_buy"=>"AccountancyCodeBuy", ); // multilang @@ -153,23 +149,8 @@ if (! empty($conf->barcode->enabled)) { $fieldstosearchall['p.barcode']='Gencod'; $fieldstosearchall['pfp.barcode']='GencodBuyPrice'; } - -//global search on extrafields -if(!empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD) && !empty($extralabels)) { - foreach($extralabels as $codeExtra => $labelExtra) { - $TExtraTypeNotHandled=array( - 'boolean', - 'select', - 'sellist', - 'radio', - 'checkbox', - 'chkbxlst', - 'link', - 'separate', - ); - if(!in_array($extrafields->attribute_type[$codeExtra], $TExtraTypeNotHandled)) $fieldstosearchall['ef.' . $codeExtra] = $labelExtra; - } -} +// Personalized search criterias. Example: $conf->global->PRODUCT_QUICKSEARCH_ON_FIELDS = 'p.ref=ProductRef;p.label=ProductLabel' +if (! empty($conf->global->PRODUCT_QUICKSEARCH_ON_FIELDS)) $fieldstosearchall=dolExplodeIntoArray($conf->global->PRODUCT_QUICKSEARCH_ON_FIELDS); if (empty($conf->global->PRODUIT_MULTIPRICES)) { From 97c950badb48efd7b7aaab1efc9815062268f444 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 16:30:16 +0200 Subject: [PATCH 0349/1148] FIX Attachment was lost when we validate an expense report --- .../class/expensereport.class.php | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 0041974d4e9..bffe8d146d5 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1132,17 +1132,51 @@ class ExpenseReport extends CommonObject $resql=$this->db->query($sql); if ($resql) { - if (!$notrigger) + if (! $error && ! $notrigger) { // Call trigger $result=$this->call_trigger('EXPENSE_REPORT_VALIDATE', $fuser); - if ($result < 0) { $error++; } // End call triggers } + if (! $error) + { + $this->oldref = $this->ref; + + // Rename directory if dir was a temporary ref + if (preg_match('/^[\(]?PROV/i', $this->ref)) + { + // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) + // in order not to lose the attachments + $oldref = dol_sanitizeFileName($this->ref); + $newref = dol_sanitizeFileName($num); + $dirsource = $conf->expensereport->dir_output.'/'.$oldref; + $dirdest = $conf->expensereport->dir_output.'/'.$newref; + if (file_exists($dirsource)) + { + dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); + + if (@rename($dirsource, $dirdest)) + { + dol_syslog("Rename ok"); + // Rename docs starting with $oldref with $newref + $listoffiles=dol_dir_list($conf->expensereport->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); + foreach($listoffiles as $fileentry) + { + $dirsource=$fileentry['name']; + $dirdest=preg_replace('/^'.preg_quote($oldref, '/').'/', $newref, $dirsource); + $dirsource=$fileentry['path'].'/'.$dirsource; + $dirdest=$fileentry['path'].'/'.$dirdest; + @rename($dirsource, $dirdest); + } + } + } + } + } + if (! $error) { $this->oldref = $this->ref; From 471a947e8abe8789fc49da2ed99c679cedd4349d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 16:30:16 +0200 Subject: [PATCH 0350/1148] FIX Attachment was lost when we validate an expense report Conflicts: htdocs/expensereport/class/expensereport.class.php --- htdocs/expensereport/class/expensereport.class.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index dd2818f28bf..aec06b7972b 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1120,11 +1120,10 @@ class ExpenseReport extends CommonObject $resql=$this->db->query($sql); if ($resql) { - if (!$notrigger) + if (! $error && ! $notrigger) { // Call trigger - $result=$this->call_trigger('EXPENSE_REPORT_VALIDATE',$fuser); - + $result=$this->call_trigger('EXPENSE_REPORT_VALIDATE', $fuser); if ($result < 0) { $error++; } @@ -1148,7 +1147,7 @@ class ExpenseReport extends CommonObject $dirdest = $conf->expensereport->dir_output.'/'.$newref; if (file_exists($dirsource)) { - dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); + dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) { From 4ed7571a3f5b0d3de7f62dd2ace23a367c3e2716 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 16:36:39 +0200 Subject: [PATCH 0351/1148] Merge --- .../class/expensereport.class.php | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 684786f7e27..3bdd026e62f 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1142,41 +1142,6 @@ class ExpenseReport extends CommonObject // End call triggers } - if (! $error) - { - $this->oldref = $this->ref; - - // Rename directory if dir was a temporary ref - if (preg_match('/^[\(]?PROV/i', $this->ref)) - { - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments - $oldref = dol_sanitizeFileName($this->ref); - $newref = dol_sanitizeFileName($num); - $dirsource = $conf->expensereport->dir_output.'/'.$oldref; - $dirdest = $conf->expensereport->dir_output.'/'.$newref; - if (file_exists($dirsource)) - { - dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); - - if (@rename($dirsource, $dirdest)) - { - dol_syslog("Rename ok"); - // Rename docs starting with $oldref with $newref - $listoffiles=dol_dir_list($conf->expensereport->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref, '/')); - foreach($listoffiles as $fileentry) - { - $dirsource=$fileentry['name']; - $dirdest=preg_replace('/^'.preg_quote($oldref, '/').'/', $newref, $dirsource); - $dirsource=$fileentry['path'].'/'.$dirsource; - $dirdest=$fileentry['path'].'/'.$dirdest; - @rename($dirsource, $dirdest); - } - } - } - } - } - if (! $error) { $this->oldref = $this->ref; From a412a99263439fd7822a6564f6c3a5102b86a928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josep=20Llu=C3=ADs?= Date: Fri, 26 Jul 2019 17:51:54 +0200 Subject: [PATCH 0352/1148] FIX: move doActions hook before standard actions Move doActions hook before standard actions in element resources --- htdocs/resource/element_resource.php | 115 ++++++++++++++------------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php index 2e4085200a2..2e8ca43cd0e 100644 --- a/htdocs/resource/element_resource.php +++ b/htdocs/resource/element_resource.php @@ -1,6 +1,7 @@ * Copyright (C) 2016 Gilles Poirier + * Copyright (C) 2019 Josep Lluís Amador * * 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 @@ -80,47 +81,71 @@ if ($socid > 0) // Special for thirdparty * Actions */ -if ($action == 'add_element_resource' && ! $cancel) -{ - $res = 0; - if (! ($resource_id > 0)) - { - $error++; - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Resource")), null, 'errors'); - $action=''; - } - else - { - $objstat = fetchObjectByElement($element_id, $element, $element_ref); - $objstat->element = $element; // For externals module, we need to keep @xx - $res = $objstat->add_element_resource($resource_id, $resource_type, $busy, $mandatory); - } - if (! $error && $res > 0) - { - setEventMessages($langs->trans('ResourceLinkedWithSuccess'), null, 'mesgs'); - header("Location: ".$_SERVER['PHP_SELF'].'?element='.$element.'&element_id='.$objstat->id); - exit; - } - elseif ($objstat) - { - setEventMessages($objstat->error, $objstat->errors, 'errors'); - } -} +$parameters = array('resource_id' => $resource_id); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); -// Update ressource -if ($action == 'update_linked_resource' && $user->rights->resource->write && !GETPOST('cancel', 'alpha') ) +if (empty($reshook)) { - $res = $object->fetch_element_resource($lineid); - if($res) + if ($action == 'add_element_resource' && ! $cancel) { - $object->busy = $busy; - $object->mandatory = $mandatory; + $res = 0; + if (! ($resource_id > 0)) + { + $error++; + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Resource")), null, 'errors'); + $action=''; + } + else + { + $objstat = fetchObjectByElement($element_id, $element, $element_ref); + $objstat->element = $element; // For externals module, we need to keep @xx + $res = $objstat->add_element_resource($resource_id, $resource_type, $busy, $mandatory); + } + if (! $error && $res > 0) + { + setEventMessages($langs->trans('ResourceLinkedWithSuccess'), null, 'mesgs'); + header("Location: ".$_SERVER['PHP_SELF'].'?element='.$element.'&element_id='.$objstat->id); + exit; + } + elseif ($objstat) + { + setEventMessages($objstat->error, $objstat->errors, 'errors'); + } + } - $result = $object->update_element_resource($user); + // Update ressource + if ($action == 'update_linked_resource' && $user->rights->resource->write && !GETPOST('cancel', 'alpha') ) + { + $res = $object->fetch_element_resource($lineid); + if($res) + { + $object->busy = $busy; + $object->mandatory = $mandatory; + + $result = $object->update_element_resource($user); + + if ($result >= 0) + { + setEventMessages($langs->trans('RessourceLineSuccessfullyUpdated'), null, 'mesgs'); + header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id); + exit; + } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } + } + } + + // Delete a resource linked to an element + if ($action == 'confirm_delete_linked_resource' && $user->rights->resource->delete && $confirm === 'yes') + { + $result = $object->delete_resource($lineid, $element); if ($result >= 0) { - setEventMessages($langs->trans('RessourceLineSuccessfullyUpdated'), null, 'mesgs'); + setEventMessages($langs->trans('RessourceLineSuccessfullyDeleted'), null, 'mesgs'); header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id); exit; } @@ -131,28 +156,6 @@ if ($action == 'update_linked_resource' && $user->rights->resource->write && !GE } } -// Delete a resource linked to an element -if ($action == 'confirm_delete_linked_resource' && $user->rights->resource->delete && $confirm === 'yes') -{ - $result = $object->delete_resource($lineid, $element); - - if ($result >= 0) - { - setEventMessages($langs->trans('RessourceLineSuccessfullyDeleted'), null, 'mesgs'); - header("Location: ".$_SERVER['PHP_SELF']."?element=".$element."&element_id=".$element_id); - exit; - } - else - { - setEventMessages($object->error, $object->errors, 'errors'); - } -} - -$parameters=array('resource_id'=>$resource_id); -$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks -if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); - - $parameters=array('resource_id'=>$resource_id); $reshook=$hookmanager->executeHooks('getElementResources', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); From 2867e31a6379740723fa1021fc157392435bd4b1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 27 Jul 2019 01:13:39 +0200 Subject: [PATCH 0353/1148] Fix CSS --- htdocs/comm/card.php | 14 +++++++------- htdocs/fourn/card.php | 8 ++++---- htdocs/margin/tabs/thirdpartyMargins.php | 4 ++-- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/ticket/list.php | 4 +++- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php index 721aba20de8..285ed03e7c3 100644 --- a/htdocs/comm/card.php +++ b/htdocs/comm/card.php @@ -694,7 +694,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'; diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php index d508afe63d2..39ed6162f0f 100644 --- a/htdocs/admin/tools/listevents.php +++ b/htdocs/admin/tools/listevents.php @@ -233,7 +233,7 @@ if ($result) print '
'; print ''; - // Lignes des champs de filtres + // Fields title search print ''; print ''; diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index 555e89e7a61..241f22cfe38 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -446,7 +446,7 @@ if ($resql) $newcardbutton.= dolGetButtonTitle($langs->trans('NewPropal'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/propal/card.php?action=create'); } - // Lignes des champs de filtre + // Fields title search print ''; if ($optioncss != '') print ''; print ''; diff --git a/htdocs/commande/customer.php b/htdocs/commande/customer.php index 8b7fef878ed..3fa3f90774f 100644 --- a/htdocs/commande/customer.php +++ b/htdocs/commande/customer.php @@ -133,7 +133,7 @@ if ($resql) print_liste_field_titre("DateCreation", $_SERVER["PHP_SELF"], "datec", $addu, "", 'class="right"', $sortfield, $sortorder); print "\n"; - // Lignes des champs de filtre + // Fields title search print ''; print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; diff --git a/htdocs/compta/clients.php b/htdocs/compta/clients.php index 36cc40c851c..58631937955 100644 --- a/htdocs/compta/clients.php +++ b/htdocs/compta/clients.php @@ -151,7 +151,7 @@ if ($resql) print_liste_field_titre("DateCreation", $_SERVER["PHP_SELF"], "datec", $addu, "", '', $sortfield, $sortorder, 'right '); print "\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '
'.$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0).'
'; diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index 0d0b202a8c3..33acc2b4969 100644 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -615,7 +615,7 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error) print_liste_field_titre('GenerateBill', '', '', '', '', 'align="center"'); print '
'; diff --git a/htdocs/compta/paiement/cheque/list.php b/htdocs/compta/paiement/cheque/list.php index 11de8aa48a2..64ae1dea1f2 100644 --- a/htdocs/compta/paiement/cheque/list.php +++ b/htdocs/compta/paiement/cheque/list.php @@ -157,7 +157,7 @@ if ($resql) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; @@ -924,8 +924,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; } @@ -1021,8 +1021,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; $total += $obj->total_ht; @@ -1034,8 +1034,8 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print ''; print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; } From f45175cc9bd10fa284d6a80b2ae506a94fd112ef Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 24 Jul 2019 09:28:11 +0200 Subject: [PATCH 0313/1148] FIX missing filter by current contact --- htdocs/contact/consumption.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/htdocs/contact/consumption.php b/htdocs/contact/consumption.php index 3f0d0313ee0..e2123e8307e 100644 --- a/htdocs/contact/consumption.php +++ b/htdocs/contact/consumption.php @@ -38,7 +38,7 @@ $id = GETPOST('id', 'int'); $result = restrictedArea($user, 'contact', $id, 'socpeople&societe'); $object = new Contact($db); if ($id > 0) $object->fetch($id); -if(empty($object->thirdparty)) $object->fetch_thirdparty(); +if (empty($object->thirdparty)) $object->fetch_thirdparty(); $socid = $object->thirdparty->id; // Sort & Order fields @@ -69,7 +69,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' } // Customer or supplier selected in drop box $thirdTypeSelect = GETPOST("third_select_id"); -$type_element = GETPOST('type_element')?GETPOST('type_element'):''; +$type_element = GETPOSTISSET('type_element')?GETPOST('type_element'):''; // Load translation files required by the page $langs->loadLangs(array("companies", "bills", "orders", "suppliers", "propal", "interventions", "contracts", "products")); @@ -179,7 +179,7 @@ if ($type_element == 'fichinter') $dateprint = 'f.datec'; $doc_number='f.ref'; } -if ($type_element == 'invoice') +elseif ($type_element == 'invoice') { // Customer : show products from invoices require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $documentstatic=new Facture($db); @@ -194,7 +194,7 @@ if ($type_element == 'invoice') $doc_number='f.ref'; $thirdTypeSelect='customer'; } -if ($type_element == 'propal') +elseif ($type_element == 'propal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $documentstatic=new Propal($db); @@ -209,7 +209,7 @@ if ($type_element == 'propal') $doc_number='c.ref'; $thirdTypeSelect='customer'; } -if ($type_element == 'order') +elseif ($type_element == 'order') { require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $documentstatic=new Commande($db); @@ -224,7 +224,7 @@ if ($type_element == 'order') $doc_number='c.ref'; $thirdTypeSelect='customer'; } -if ($type_element == 'supplier_invoice') +elseif ($type_element == 'supplier_invoice') { // Supplier : Show products from invoices. require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $documentstatic=new FactureFournisseur($db); @@ -239,7 +239,7 @@ if ($type_element == 'supplier_invoice') $doc_number='f.ref'; $thirdTypeSelect='supplier'; } -//if ($type_element == 'supplier_proposal') +//elseif ($type_element == 'supplier_proposal') //{ // require_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; // $documentstatic=new SupplierProposal($db); @@ -252,7 +252,7 @@ if ($type_element == 'supplier_invoice') // $doc_number='c.ref'; // $thirdTypeSelect='supplier'; //} -if ($type_element == 'supplier_order') +elseif ($type_element == 'supplier_order') { // Supplier : Show products from orders. require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; $documentstatic=new CommandeFournisseur($db); @@ -267,7 +267,7 @@ if ($type_element == 'supplier_order') $doc_number='c.ref'; $thirdTypeSelect='supplier'; } -if ($type_element == 'contract') +elseif ($type_element == 'contract') { // Order require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $documentstatic=new Contrat($db); @@ -300,6 +300,7 @@ if (!empty($sql_select)) $sql.= " FROM "/*.MAIN_DB_PREFIX."societe as s, "*/.$tables_from; // if ($type_element != 'fichinter') $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON d.fk_product = p.rowid '; $sql.= $where; + $sql.= ' AND ec.fk_socpeople = '.$object->id; if ($month > 0) { if ($year > 0) { $start = dol_mktime(0, 0, 0, $month, 1, $year); From 5a385bf1ccd2731090975ac75d7bd9c734404fc4 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Thu, 18 Jul 2019 11:53:36 +0200 Subject: [PATCH 0314/1148] ADD extrafields on global search --- htdocs/langs/fr_FR/products.lang | 1 + htdocs/product/admin/product.php | 11 +++++++++++ htdocs/product/list.php | 16 ++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index d4135c2273e..b759a023bf3 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -340,3 +340,4 @@ ErrorDestinationProductNotFound=Produit destination non trouvé ErrorProductCombinationNotFound=Variante du produit non trouvé ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit ProductsPricePerCustomer=Prix produit par clients +GlobalSearchOnExtrafield=Recherche globale : Appliquer la recherche sur les extrafields (Attention : les dates sont au format YYYY-MM-DD) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index a7e45d488e1..1fb2ac73fcf 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -146,6 +146,10 @@ if ($action == 'other') $value = GETPOST('activate_useProdFournDesc', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value, 'chaine', 0, '', $conf->entity); + + $value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); + $res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); + if ($value) { $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1"; $resql = $db->query($sql_test); @@ -675,6 +679,13 @@ if (! empty($conf->fournisseur->enabled)) print ''; } +print ''; +print ''; +print ''; +print ''; + if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { // Add canvas feature diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 1a9b5fa1f6f..54a60d8e9bf 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -148,6 +148,22 @@ if (! empty($conf->barcode->enabled)) { $fieldstosearchall['p.barcode']='Gencod'; $fieldstosearchall['pfp.barcode']='GencodBuyPrice'; } +//global search on extrafields +if(!empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD) && !empty($extralabels)) { + foreach($extralabels as $codeExtra => $labelExtra) { + $TExtraTypeNotHandled=array( + 'boolean', + 'select', + 'sellist', + 'radio', + 'checkbox', + 'chkbxlst', + 'link', + 'separate', + ); + if(!in_array($extrafields->attribute_type[$codeExtra], $TExtraTypeNotHandled)) $fieldstosearchall['ef.' . $codeExtra] = $labelExtra; + } +} if (empty($conf->global->PRODUIT_MULTIPRICES)) { From 03ed4eb14191aa33170abbc6aa8f18da7de5a17c Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 19 Jul 2019 14:39:30 +0200 Subject: [PATCH 0315/1148] modif rowspan --- htdocs/product/admin/product.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 1fb2ac73fcf..ed0bcb88e74 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -552,7 +552,7 @@ print ''."\n"; * Other parameters */ -$rowspan = 4; +$rowspan = 5; if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) $rowspan++; if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) $rowspan++; if (! empty($conf->global->MAIN_MULTILANGS)) $rowspan++; From 0ff121e7f1d51aba44675e532d2368d9644d4ff5 Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Tue, 23 Jul 2019 16:51:08 +0200 Subject: [PATCH 0316/1148] add some new field on global search --- htdocs/product/list.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 54a60d8e9bf..a3dac45dcab 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -136,6 +136,11 @@ $fieldstosearchall = array( 'p.label'=>"ProductLabel", 'p.description'=>"Description", "p.note"=>"Note", + "p.note_public"=>"NotePublic", + "p.url"=>"PublicUrl", + "p.accountancy_code_sell"=>"AccountancyCodeSell", + "p.accountancy_code_buy"=>"AccountancyCodeBuy", + ); // multilang if (! empty($conf->global->MAIN_MULTILANGS)) @@ -148,6 +153,7 @@ if (! empty($conf->barcode->enabled)) { $fieldstosearchall['p.barcode']='Gencod'; $fieldstosearchall['pfp.barcode']='GencodBuyPrice'; } + //global search on extrafields if(!empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD) && !empty($extralabels)) { foreach($extralabels as $codeExtra => $labelExtra) { From 323d2df21086510932a8f5840732e78b85d1657f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 10:42:00 +0200 Subject: [PATCH 0317/1148] Presentation nowrap on amount --- htdocs/product/index.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/htdocs/product/index.php b/htdocs/product/index.php index 950f4d47b5f..caeb5e5d873 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -357,7 +357,7 @@ if ($result) $objp->price = $price_result; } } - print ''; @@ -442,6 +442,7 @@ function activitytrim($product_type) if ($num > 0 ) { + print '
'; print '
'; print ''; diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php index f5c111f2268..8bd8c702d03 100644 --- a/htdocs/expedition/list.php +++ b/htdocs/expedition/list.php @@ -318,7 +318,7 @@ if ($resql) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; // Ref if (! empty($arrayfields['e.ref']['checked'])) diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php index 18ba697bc20..475d42f66dc 100644 --- a/htdocs/fourn/commande/list.php +++ b/htdocs/fourn/commande/list.php @@ -635,7 +635,7 @@ if ($resql) $newcardbutton.= dolGetButtonTitle($langs->trans('NewOrder'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/fourn/commande/card.php?action=create'); } - // Lignes des champs de filtre + // Fields title search print ''; if ($optioncss != '') print ''; print ''; diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php index 093e0fd331b..6775e9f9b65 100644 --- a/htdocs/fourn/commande/orderstoinvoice.php +++ b/htdocs/fourn/commande/orderstoinvoice.php @@ -509,7 +509,7 @@ if (($action != 'create' && $action != 'add') && !$error) { print_liste_field_titre('GenerateBill', '', '', '', '', '', '', '', 'center '); print "\n"; - // Lignes des champs de filtre + // Fields title search print ''; print '
'; // REF diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 7b319490815..8fd7b809587 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -228,7 +228,7 @@ if ($resql) print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; print '
'; print ''; diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index 476fec36c2a..f75ba10a03c 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -274,7 +274,7 @@ if ($resql) print '
'; print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; // Title - print ''; + print ''; // Url print ''; diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php index d1b56d51cee..1790eaf5aee 100644 --- a/htdocs/admin/menus/index.php +++ b/htdocs/admin/menus/index.php @@ -244,13 +244,13 @@ print "
\n"; // Confirmation for remove menu entry if ($action == 'delete') { - $sql = "SELECT m.titre"; + $sql = "SELECT m.titre as title"; $sql.= " FROM ".MAIN_DB_PREFIX."menu as m"; $sql.= " WHERE m.rowid = ".GETPOST('menuId', 'int'); $result = $db->query($sql); $obj = $db->fetch_object($result); - print $form->formconfirm("index.php?menu_handler=".$menu_handler."&menuId=".GETPOST('menuId', 'int'), $langs->trans("DeleteMenu"), $langs->trans("ConfirmDeleteMenu", $obj->titre), "confirm_delete"); + print $form->formconfirm("index.php?menu_handler=".$menu_handler."&menuId=".GETPOST('menuId', 'int'), $langs->trans("DeleteMenu"), $langs->trans("ConfirmDeleteMenu", $obj->title), "confirm_delete"); } $newcardbutton=''; diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 968469ff1e0..2f017b485d6 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -2773,7 +2773,7 @@ if ($action == 'create') $note_public = $invoice_predefined->note_public; $note_private = $invoice_predefined->note_private; - $sql = 'SELECT r.rowid, r.titre, r.total_ttc'; + $sql = 'SELECT r.rowid, r.titre as title, r.total_ttc'; $sql .= ' FROM ' . MAIN_DB_PREFIX . 'facture_rec as r'; $sql .= ' WHERE r.fk_soc = ' . $invoice_predefined->socid; @@ -2797,7 +2797,7 @@ if ($action == 'create') print ' selected'; $exampletemplateinvoice->fetch(GETPOST('fac_rec')); } - print '>' . $objp->titre . ' (' . price($objp->total_ttc) . ' ' . $langs->trans("TTC") . ')'; + print '>' . $objp->title . ' (' . price($objp->total_ttc) . ' ' . $langs->trans("TTC") . ')'; $i ++; } print ''; diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php index f6b148d308c..37a031198bc 100644 --- a/htdocs/compta/facture/class/facture-rec.class.php +++ b/htdocs/compta/facture/class/facture-rec.class.php @@ -123,7 +123,8 @@ class FactureRec extends CommonInvoice $now=dol_now(); // Clean parameters - $this->titre=trim($this->titre); + $this->titre=trim($this->titre); // deprecated + $this->title=trim($this->title); $this->usenewprice=empty($this->usenewprice)?0:$this->usenewprice; if (empty($this->suspended)) $this->suspended=0; @@ -180,7 +181,7 @@ class FactureRec extends CommonInvoice $sql.= ", multicurrency_tx"; $sql.= ", suspended"; $sql.= ") VALUES ("; - $sql.= "'".$this->db->escape($this->titre)."'"; + $sql.= "'".$this->db->escape($this->titre ? $this->titre : $this->title)."'"; $sql.= ", ".$facsrc->socid; $sql.= ", ".$conf->entity; $sql.= ", '".$this->db->idate($now)."'"; @@ -376,7 +377,7 @@ class FactureRec extends CommonInvoice */ public function fetch($rowid, $ref = '', $ref_ext = '', $ref_int = '') { - $sql = 'SELECT f.rowid, f.entity, f.titre, f.suspended, f.fk_soc, f.amount, f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc'; + $sql = 'SELECT f.rowid, f.entity, f.titre as title, f.suspended, f.fk_soc, f.amount, f.tva, f.localtax1, f.localtax2, f.total, f.total_ttc'; $sql.= ', f.remise_percent, f.remise_absolue, f.remise'; $sql.= ', f.date_lim_reglement as dlr'; $sql.= ', f.note_private, f.note_public, f.fk_user_author'; @@ -410,8 +411,9 @@ class FactureRec extends CommonInvoice $this->id = $obj->rowid; $this->entity = $obj->entity; - $this->titre = $obj->titre; - $this->ref = $obj->titre; + $this->titre = $obj->title; // deprecated + $this->title = $obj->title; + $this->ref = $obj->title; $this->ref_client = $obj->ref_client; $this->suspended = $obj->suspended; $this->type = $obj->type; diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index dd4a2af11ee..39f913fbf76 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -187,7 +187,8 @@ if (empty($reshook)) if (! $error) { - $object->titre = GETPOST('titre', 'alpha'); + $object->titre = GETPOST('titre', 'alpha'); // deprecated + $object->title = GETPOST('titre', 'alpha'); $object->note_private = GETPOST('note_private', 'none'); $object->note_public = GETPOST('note_public', 'none'); $object->modelpdf = GETPOST('modelpdf', 'alpha'); @@ -295,8 +296,9 @@ if (empty($reshook)) $result=$object->setValueFrom('titre', GETPOST('ref', 'alpha'), '', null, 'text', '', $user, 'BILLREC_MODIFY'); if ($result > 0) { - $object->titre = GETPOST('ref', 'alpha'); - $object->ref = $object->titre; + $object->titre = GETPOST('ref', 'alpha'); // deprecated + $object->title = GETPOST('ref', 'alpha'); + $object->ref = $object->title; } else dol_print_error($db, $object->error, $object->errors); } diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php index 5da37d46fd5..1226f7c8a79 100644 --- a/htdocs/compta/facture/invoicetemplate_list.php +++ b/htdocs/compta/facture/invoicetemplate_list.php @@ -213,7 +213,7 @@ $today = dol_mktime(23, 59, 59, $tmparray['mon'], $tmparray['mday'], $tmparray[' /* * List mode */ -$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,"; +$sql = "SELECT s.nom as name, s.rowid as socid, f.rowid as facid, f.titre as title, f.total, f.tva as total_vat, f.total_ttc, f.frequency, f.unit_frequency,"; $sql.= " f.nb_gen_done, f.nb_gen_max, f.date_last_gen, f.date_when, f.suspended,"; $sql.= " f.datec, f.tms,"; $sql.= " f.fk_cond_reglement, f.fk_mode_reglement"; @@ -514,7 +514,7 @@ if ($resql) $invoicerectmp->unit_frequency=$objp->unit_frequency; $invoicerectmp->nb_gen_max=$objp->nb_gen_max; $invoicerectmp->nb_gen_done=$objp->nb_gen_done; - $invoicerectmp->ref=$objp->titre; + $invoicerectmp->ref=$objp->title; print ''; diff --git a/htdocs/core/class/menubase.class.php b/htdocs/core/class/menubase.class.php index d1d7534af23..26f96b93ec5 100644 --- a/htdocs/core/class/menubase.class.php +++ b/htdocs/core/class/menubase.class.php @@ -422,7 +422,8 @@ class Menubase $this->position=''; $this->url='http://dummy'; $this->target=''; - $this->titre='Specimen menu'; + $this->titre='Specimen menu'; // deprecated + $this->title='Specimen menu'; $this->langs=''; $this->level=''; $this->leftmenu=''; diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index 4a8135800ae..16d3969652d 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -1938,7 +1938,8 @@ class DolibarrModules // Can not be abstract, because we need to instantiate it $menu->type=$this->menu[$key]['type']; $menu->mainmenu=isset($this->menu[$key]['mainmenu'])?$this->menu[$key]['mainmenu']:(isset($menu->fk_mainmenu)?$menu->fk_mainmenu:''); $menu->leftmenu=isset($this->menu[$key]['leftmenu'])?$this->menu[$key]['leftmenu']:''; - $menu->titre=$this->menu[$key]['titre']; + $menu->titre=$this->menu[$key]['titre']; // deprecated + $menu->title=$this->menu[$key]['titre']; $menu->url=$this->menu[$key]['url']; $menu->langs=$this->menu[$key]['langs']; $menu->position=$this->menu[$key]['position']; diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php index 6ee445d68a1..63183c73d1d 100644 --- a/htdocs/fichinter/card-rec.php +++ b/htdocs/fichinter/card-rec.php @@ -129,7 +129,7 @@ if ($action == 'add') { if (! $error) { $object->id_origin = $id; - $object->titre = GETPOST('titre', 'alpha'); + $object->title = GETPOST('titre', 'alpha'); $object->description = GETPOST('description', 'alpha'); $object->socid = GETPOST('socid', 'alpha'); $object->fk_project = GETPOST('projectid', 'int'); @@ -773,7 +773,7 @@ $date_next_execution = (GETPOST('remonth') ? dol_mktime( /* * List mode */ - $sql = "SELECT f.rowid as fich_rec, s.nom as name, s.rowid as socid, f.rowid as facid, f.titre,"; + $sql = "SELECT f.rowid as fich_rec, s.nom as name, s.rowid as socid, f.rowid as facid, f.titre as title,"; $sql.= " f.duree, f.fk_contrat, f.fk_projet as fk_project, f.frequency, f.nb_gen_done, f.nb_gen_max,"; $sql.= " f.date_last_gen, f.date_when, f.datec"; @@ -844,7 +844,7 @@ $date_next_execution = (GETPOST('remonth') ? dol_mktime( print ''; print '\n"; if ($objp->socid) { $companystatic->id=$objp->socid; diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php index 48ae3cbf337..b6f9acbf4b5 100644 --- a/htdocs/projet/class/api_projects.class.php +++ b/htdocs/projet/class/api_projects.class.php @@ -546,7 +546,6 @@ class Projects extends DolibarrApi // phpcs:enable $object = parent::_cleanObjectDatas($object); - unset($object->titre); unset($object->datec); unset($object->datem); unset($object->barcode_type); diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index 9a651ec4a0a..0c7495efa7e 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -74,12 +74,9 @@ class Project extends CommonObject /** * @var string - * @deprecated - * @see $title */ - public $titre; - public $title; + public $date_start; public $date_end; public $date_close; @@ -465,7 +462,6 @@ class Project extends CommonObject $this->id = $obj->rowid; $this->ref = $obj->ref; $this->title = $obj->title; - $this->titre = $obj->title; // TODO deprecated $this->description = $obj->description; $this->date_c = $this->db->jdate($obj->datec); $this->datec = $this->db->jdate($obj->datec); // TODO deprecated From 1f308915ee8d9e5638f86d7017b82b7c78376ebb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:23:17 +0200 Subject: [PATCH 0239/1148] Fix trans --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index a05eb631e13..a1d042a07a1 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1698,7 +1698,7 @@ ExpenseReportNumberingModules=Expense reports numbering module NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only. YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for EMail notifications by enabling and configuring the module "Notification". ListOfNotificationsPerUser=List of notifications per user* -ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact** +ListOfNotificationsPerUserOrContact=List of possible notifications per user* or per contact** ListOfFixedNotifications=List of fixed notifications GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses From fea810fb3b0a2c3c6e671149bbd7df4d58ae2537 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:44:30 +0200 Subject: [PATCH 0240/1148] Trans --- htdocs/langs/en_US/admin.lang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 38096f37827..895b725a858 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -574,7 +574,7 @@ Module510Name=Salaries Module510Desc=Record and track employee payments Module520Name=Loans Module520Desc=Management of loans -Module600Name=Notifications +Module600Name=Notifications on business event Module600Desc=Send email notifications triggered by a business event: per user (setup defined on each user), per third-party contacts (setup defined on each third party) or by specific emails Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders for agenda events, go into the setup of module Agenda. Module610Name=Product Variants @@ -1735,9 +1735,9 @@ ExpenseReportsRulesSetup=Setup of module Expense Reports - Rules ExpenseReportNumberingModules=Expense reports numbering module NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only. YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for email notifications by enabling and configuring the module "Notification". -ListOfNotificationsPerUser=List of notifications per user* -ListOfNotificationsPerUserOrContact=List of possible notifications (type of events) available per user* or per contact** -ListOfFixedNotifications=List of fixed notifications +ListOfNotificationsPerUser=List of automatic notifications per user* +ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** +ListOfFixedNotifications=List of automatic fixed notifications GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses Threshold=Threshold From cd7d3f1a368a4d2c84906c3ba1110961a72cdc3e Mon Sep 17 00:00:00 2001 From: gauthier Date: Fri, 19 Jul 2019 15:41:44 +0200 Subject: [PATCH 0241/1148] FIX : search by phone pro --- htdocs/contact/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 5aacbc2f16f..f786e73d17a 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -290,7 +290,7 @@ if ($search_firstname) $sql.= natural_search('p.firstname', $search if ($search_societe) $sql.= natural_search('s.nom', $search_societe); if (strlen($search_poste)) $sql.= natural_search('p.poste', $search_poste); if (strlen($search_phone_perso)) $sql.= natural_search('p.phone_perso', $search_phone_perso); -if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone); +if (strlen($search_phone_pro)) $sql.= natural_search('p.phone', $search_phone_pro); if (strlen($search_phone_mobile)) $sql.= natural_search('p.phone_mobile', $search_phone_mobile); if (strlen($search_fax)) $sql.= natural_search('p.fax', $search_fax); if (strlen($search_skype)) $sql.= natural_search('p.skype', $search_skype); From b95395909ca6c4971c52130c1ac7af7c43063109 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Fri, 19 Jul 2019 16:11:44 +0200 Subject: [PATCH 0242/1148] FIX Delete a category to a contact in API --- htdocs/societe/class/api_contacts.class.php | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/htdocs/societe/class/api_contacts.class.php b/htdocs/societe/class/api_contacts.class.php index f94e182b010..fc90f37e5bf 100644 --- a/htdocs/societe/class/api_contacts.class.php +++ b/htdocs/societe/class/api_contacts.class.php @@ -421,6 +421,48 @@ class Contacts extends DolibarrApi return $this->_cleanObjectDatas($this->contact); } + /** + * Remove the link between a category and a contact + * + * @url DELETE {id}/categories/{category_id} + * + * @param int $id Id of contact + * @param int $category_id Id of category + * @return mixed + * + * @throws 401 RestException Insufficient rights + * @throws 401 RestException Access not allowed for login + * @throws 404 RestException Category not found + * @throws 404 RestException Contact not found + */ + public function deleteCategory($id, $category_id) + { + if(! DolibarrApiAccess::$user->rights->societe->contact->creer) { + throw new RestException(401, 'Insufficient rights'); + } + + $result = $this->contact->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Contact not found'); + } + $category = new Categorie($this->db); + $result = $category->fetch($category_id); + if( ! $result ) { + throw new RestException(404, 'category not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('contact', $this->contact->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + if( ! DolibarrApi::_checkAccessToResource('category', $category->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $category->del_type($this->contact, 'contact'); + + return $this->_cleanObjectDatas($this->contact); + } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Clean sensible object datas From 73af3542d1d6bf7a02d8e5346695a580899c503b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 16:18:14 +0200 Subject: [PATCH 0243/1148] FIX the feature to bill time spent was not enabled. --- htdocs/core/class/conf.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 62c7f0f9e24..e3b6ac4e524 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -490,7 +490,10 @@ class Conf if (empty($this->global->ACCOUNTING_MODE)) $this->global->ACCOUNTING_MODE='RECETTES-DEPENSES'; // By default. Can be 'RECETTES-DEPENSES' ou 'CREANCES-DETTES' // By default, suppliers objects can be linked to all projects - $this->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS = 1; + if (! isset($this->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS)) $this->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS = 1; + + // By default we enable feature to bill time spent + if (! isset($this->global->PROJECT_BILL_TIME_SPENT)) $this->global->PROJECT_BILL_TIME_SPENT = 1; // MAIN_HTML_TITLE if (! isset($this->global->MAIN_HTML_TITLE)) $this->global->MAIN_HTML_TITLE='noapp,thirdpartynameonly,contactnameonly,projectnameonly'; From 1053a9d9555939a8a409e69f41490e74e8201c92 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 16:49:12 +0200 Subject: [PATCH 0244/1148] Trans --- htdocs/accountancy/customer/list.php | 10 +++++----- htdocs/accountancy/supplier/list.php | 2 +- htdocs/langs/en_US/products.lang | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php index 192585ccedd..b738933c89c 100644 --- a/htdocs/accountancy/customer/list.php +++ b/htdocs/accountancy/customer/list.php @@ -319,8 +319,8 @@ if ($result) { $arrayofselected=is_array($toselect)?$toselect:array(); $param=''; - if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; - if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage); + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit); if ($search_lineid) $param.='&search_lineid='.urlencode($search_lineid); if ($search_day) $param.='&search_day='.urlencode($search_day); if ($search_month) $param.='&search_month='.urlencode($search_month); @@ -330,8 +330,8 @@ if ($result) { if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_amount) $param.='&search_amount='.urlencode($search_amount); if ($search_vat) $param.='&search_vat='.urlencode($search_vat); - if ($search_country) $param .= "&search_country=" . urlencode($search_country); - if ($search_tvaintra) $param .= "&search_tvaintra=" . urlencode($search_tvaintra); + if ($search_country) $param.= "&search_country=".urlencode($search_country); + if ($search_tvaintra) $param.= "&search_tvaintra=".urlencode($search_tvaintra); $arrayofmassactions = array( 'ventil'=>$langs->trans("Ventilate") @@ -403,7 +403,7 @@ if ($result) { print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, l.rowid", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder); //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php index b3a426bbf5e..9ce49b23e6a 100644 --- a/htdocs/accountancy/supplier/list.php +++ b/htdocs/accountancy/supplier/list.php @@ -405,7 +405,7 @@ if ($result) { print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "f.datef, f.ref, l.rowid", "", $param, '', $sortfield, $sortorder, 'center '); print_liste_field_titre("ProductRef", $_SERVER["PHP_SELF"], "p.ref", "", $param, '', $sortfield, $sortorder); //print_liste_field_titre("ProductLabel", $_SERVER["PHP_SELF"], "p.label", "", $param, '', $sortfield, $sortorder); - print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("ProductDescription", $_SERVER["PHP_SELF"], "l.description", "", $param, '', $sortfield, $sortorder); print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "l.total_ht", "", $param, '', $sortfield, $sortorder, 'right maxwidth50 '); print_liste_field_titre("VATRate", $_SERVER["PHP_SELF"], "l.tva_tx", "", $param, '', $sortfield, $sortorder, 'right '); print_liste_field_titre("Country", $_SERVER["PHP_SELF"], "co.label", "", $param, '', $sortfield, $sortorder); diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index 46555a84528..36ca0ede002 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -2,6 +2,7 @@ ProductRef=Product ref. ProductLabel=Product label ProductLabelTranslated=Translated product label +ProductDescription=Product description ProductDescriptionTranslated=Translated product description ProductNoteTranslated=Translated product note ProductServiceCard=Products/Services card From df733450463f4891c859c5e83654429c5e3385ff Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 19 Jul 2019 17:07:55 +0200 Subject: [PATCH 0245/1148] NEW Accountancy Add export model LDCompta V9 & higher --- .../class/accountancyexport.class.php | 93 ++++++++++++++++++- htdocs/langs/en_US/accountancy.lang | 1 + 2 files changed, 90 insertions(+), 4 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 3169d3737d9..1b477a57ae9 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -5,7 +5,7 @@ * Copyright (C) 2015 Florian Henry * Copyright (C) 2015 Raphaël Doursenaud * Copyright (C) 2016 Pierre-Henry Favre - * Copyright (C) 2016-2018 Alexandre Spangaro + * Copyright (C) 2016-2019 Alexandre Spangaro * Copyright (C) 2013-2017 Olivier Geffroy * Copyright (C) 2017 Elarifr. Ari Elbaz * Copyright (C) 2017-2019 Frédéric France @@ -50,6 +50,7 @@ class AccountancyExport public static $EXPORT_TYPE_SAGE50_SWISS = 45; public static $EXPORT_TYPE_QUADRATUS = 60; public static $EXPORT_TYPE_OPENCONCERTO = 100; + public static $EXPORT_TYPE_LDCOMPTA = 110; public static $EXPORT_TYPE_FEC = 1000; @@ -105,6 +106,7 @@ class AccountancyExport self::$EXPORT_TYPE_AGIRIS => $langs->trans('Modelcsv_agiris'), self::$EXPORT_TYPE_OPENCONCERTO => $langs->trans('Modelcsv_openconcerto'), self::$EXPORT_TYPE_SAGE50_SWISS => $langs->trans('Modelcsv_Sage50_Swiss'), + self::$EXPORT_TYPE_LDCOMPTA => $langs->trans('Modelcsv_LDCompta'), self::$EXPORT_TYPE_FEC => $langs->trans('Modelcsv_FEC'), ); @@ -133,6 +135,7 @@ class AccountancyExport self::$EXPORT_TYPE_AGIRIS => 'agiris', self::$EXPORT_TYPE_OPENCONCERTO => 'openconcerto', self::$EXPORT_TYPE_SAGE50_SWISS => 'sage50ch', + self::$EXPORT_TYPE_LDCOMPTA => 'ldcompta', self::$EXPORT_TYPE_FEC => 'fec', ); @@ -191,6 +194,10 @@ class AccountancyExport 'label' => $langs->trans('Modelcsv_Sage50_Swiss'), 'ACCOUNTING_EXPORT_FORMAT' => 'csv', ), + self::$EXPORT_TYPE_LDCOMPTA => array( + 'label' => $langs->trans('Modelcsv_LDCompta'), + 'ACCOUNTING_EXPORT_FORMAT' => 'csv', + ), self::$EXPORT_TYPE_FEC => array( 'label' => $langs->trans('Modelcsv_FEC'), 'ACCOUNTING_EXPORT_FORMAT' => 'txt', @@ -257,12 +264,15 @@ class AccountancyExport case self::$EXPORT_TYPE_OPENCONCERTO : $this->exportOpenConcerto($TData); break; - case self::$EXPORT_TYPE_FEC : - $this->exportFEC($TData); - break; case self::$EXPORT_TYPE_SAGE50_SWISS : $this->exportSAGE50SWISS($TData); break; + case self::$EXPORT_TYPE_LDCOMPTA : + $this->exportLDCompta($TData); + break; + case self::$EXPORT_TYPE_FEC : + $this->exportFEC($TData); + break; default: $this->errors[] = $langs->trans('accountancy_error_modelnotfound'); break; @@ -909,6 +919,81 @@ class AccountancyExport } } + /** + * Export format : LD Compta version 9 & higher + * http://www.ldsysteme.fr/fileadmin/telechargement/np/ldcompta/Documentation/IntCptW10.pdf + * + * @param array $objectLines data + * + * @return void + */ + public function exportLDCompta($objectLines) + { + + $separator = ';'; + $end_line = "\n"; + + foreach ($objectLines as $line) { + + $date_document = dol_print_date($line->doc_date, '%Y%m%d'); + $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); + + if ($line->doc_type == 'supplier_invoice') { + $type_enregistrement = 'F'; + } elseif ($line->doc_type == 'customer_invoice') { + $type_enregistrement = 'C'; + } else { + $type_enregistrement = 'E'; + } + print $type_enregistrement . $separator; + print $line->code_journal . $separator; + print $line->id . $separator; + print $line->piece_num . $separator; + print $date_document . $separator; + print $line->label_operation . $separator; + print $separator; + + if ($line->doc_type == 'supplier_invoice') { + if ($line->montant < 0) { + $nature_piece = 'AF'; + } else { + $nature_piece = 'FF'; + } + } elseif ($line->doc_type == 'customer_invoice') { + if ($line->montant < 0) { + $nature_piece = 'AC'; + } else { + $nature_piece = 'FC'; + } + } else { + $nature_piece = ''; + } + print $nature_piece . $separator; + if (! empty($line->subledger_account)) { + print $line->numero_compte . $separator; + } + print price(abs($line->montant)) . $separator; + print $line->sens . $separator; + print length_accountg($line->numero_compte) . $separator; + print $date_creation . $separator; + print $line->lettering_code . $separator; + print $line->date_lettering . $separator; + + if (! empty($line->subledger_account)) { + print length_accounta($line->subledger_account) . $separator; + } + + if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { + print 'F' . $separator; + } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { + print 'C' . $separator; + } else { + print $separator; + } + print $end_line; + } + } + /** * trunc * diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 4b22f512826..8e44c378ba6 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -291,6 +291,7 @@ Modelcsv_quadratus=Export for Quadratus QuadraCompta Modelcsv_ebp=Export for EBP Modelcsv_cogilog=Export for Cogilog Modelcsv_agiris=Export for Agiris +Modelcsv_LDCompta=Export for LD Compta (v9 & higher) (Test) Modelcsv_openconcerto=Export for OpenConcerto (Test) Modelcsv_configurable=Export CSV Configurable Modelcsv_FEC=Export FEC From a55da8f8f889fd259093a5d97faa18d0884b4393 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 17:20:33 +0200 Subject: [PATCH 0246/1148] Fix migration --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index f8cc3062bde..1b9f52ffaed 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -28,6 +28,10 @@ -- Note: fields with type BLOB/TEXT can't have default value. +-- Missing in v10 +ALTER TABLE llx_account_bookkeeping ADD COLUMN date_export datetime DEFAULT NULL; + + create table llx_entrepot_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, @@ -50,3 +54,4 @@ ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); ALTER TABLE llx_events ADD COLUMN prefix_session varchar(255) NULL; + From 361fc53685fec9e9bb31f8bdc81e59f2956dcb43 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 17:47:54 +0200 Subject: [PATCH 0247/1148] FIX div not balanced --- htdocs/commande/card.php | 4 ++-- htdocs/ticket/card.php | 22 ++++++-------------- htdocs/ticket/class/actions_ticket.class.php | 9 +++++++- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index eae593bef40..6bb47f12a12 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2116,7 +2116,7 @@ if ($action == 'create' && $user->rights->commande->creer) print '
'; print '
'; - print '
'; print ''; diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index faf91184dd1..d0803f40b95 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -271,7 +271,7 @@ if ($resql) print '
'; print ''; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; print ''; @@ -1816,6 +1812,11 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) dol_fiche_end(); print '
'; + print '
'; + print ' '; + print $langs->trans('ForceUpdateChildPriceSoc'); + print "
"; + print ''; print '     '; print ''; @@ -2162,7 +2163,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) // Action if ($user->rights->produit->supprimer || $user->rights->service->supprimer) { - print '
' . $line->product_label . '' . $line->product_label . 'special_code == "4") { $htmlforlines.= ' order'; } $htmlforlines.= '" id="' . $line->id . '">'; From a03bb00254b979b9027092b7b0f1585d51efbb16 Mon Sep 17 00:00:00 2001 From: atm-ph Date: Fri, 19 Jul 2019 11:26:21 +0200 Subject: [PATCH 0233/1148] Fix missing hook --- htdocs/compta/prelevement/card.php | 118 +++++++++++++++-------------- 1 file changed, 63 insertions(+), 55 deletions(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index 60e471d712d..d6c752330fe 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -63,78 +63,86 @@ $object = new BonPrelevement($db,""); // Load object include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals +$hookmanager->initHooks(array('directdebitprevcard','globalcard')); /* * Actions */ -if ( $action == 'confirm_delete' ) +$parameters = array('socid' => $socid); +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) { - $res=$object->delete($user); - if ($res > 0) - { - header("Location: index.php"); - exit; - } -} + if ( $action == 'confirm_delete' ) + { + $res=$object->delete($user); + if ($res > 0) + { + header("Location: index.php"); + exit; + } + } -// Seems to no be used and replaced with $action == 'infocredit -if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes') -{ - $res=$object->set_credite(); - if ($res >= 0) - { - header("Location: card.php?id=".$id); - exit; - } -} + // Seems to no be used and replaced with $action == 'infocredit + if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes') + { + $res=$object->set_credite(); + if ($res >= 0) + { + header("Location: card.php?id=".$id); + exit; + } + } -if ($action == 'infotrans' && $user->rights->prelevement->bons->send) -{ - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + if ($action == 'infotrans' && $user->rights->prelevement->bons->send) + { + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); + $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); - /* - if ($_FILES['userfile']['name'] && basename($_FILES['userfile']['name'],".ps") == $object->ref) - { - $dir = $conf->prelevement->dir_output.'/receipts'; + /* + if ($_FILES['userfile']['name'] && basename($_FILES['userfile']['name'],".ps") == $object->ref) + { + $dir = $conf->prelevement->dir_output.'/receipts'; - if (dol_move_uploaded_file($_FILES['userfile']['tmp_name'], $dir . "/" . dol_unescapefile($_FILES['userfile']['name']),1) > 0) - { - $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); - } + if (dol_move_uploaded_file($_FILES['userfile']['tmp_name'], $dir . "/" . dol_unescapefile($_FILES['userfile']['name']),1) > 0) + { + $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); + } - header("Location: card.php?id=".$id); - exit; - } - else - { - dol_syslog("Fichier invalide",LOG_WARNING); - $mesg='BadFile'; - }*/ + header("Location: card.php?id=".$id); + exit; + } + else + { + dol_syslog("Fichier invalide",LOG_WARNING); + $mesg='BadFile'; + }*/ - $error = $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); + $error = $object->set_infotrans($user, $dt, GETPOST('methode','alpha')); - if ($error) - { - header("Location: card.php?id=".$id."&error=$error"); - exit; - } -} + if ($error) + { + header("Location: card.php?id=".$id."&error=$error"); + exit; + } + } -// Set direct debit order to credited, create payment and close invoices -if ($action == 'infocredit' && $user->rights->prelevement->bons->credit) -{ - $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); + // Set direct debit order to credited, create payment and close invoices + if ($action == 'infocredit' && $user->rights->prelevement->bons->credit) + { + $dt = dol_mktime(12,0,0,GETPOST('remonth','int'),GETPOST('reday','int'),GETPOST('reyear','int')); - $error = $object->set_infocredit($user, $dt); + $error = $object->set_infocredit($user, $dt); - if ($error) - { - header("Location: card.php?id=".$id."&error=$error"); - exit; - } + if ($error) + { + header("Location: card.php?id=".$id."&error=$error"); + exit; + } + } } From b100cdb9db97e20eb2b5a9a13951eb9e74c64902 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Fri, 19 Jul 2019 11:58:21 +0200 Subject: [PATCH 0234/1148] FIX: extrafield loading bug due to assumption that an object is a third party while it may be a contact if MAIN_USE_COMPANY_NAME_OF_CONTACT is set. --- .../expedition/doc/doc_generic_shipment_odt.modules.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php index 9c45c135ac3..a1be784f249 100644 --- a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php +++ b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php @@ -393,7 +393,11 @@ class doc_generic_shipment_odt extends ModelePdfExpedition } } // Make substitutions into odt of thirdparty - $tmparray=$this->get_substitutionarray_thirdparty($socobject,$outputlangs); + if ($socobject->element == 'contact') { + $tmparray = $this->get_substitutionarray_contact($socobject, $outputlangs); + } else { + $tmparray = $this->get_substitutionarray_thirdparty($socobject, $outputlangs); + } foreach($tmparray as $key=>$value) { try { From b88d19e8e4c83066cd224d687080ab210518a801 Mon Sep 17 00:00:00 2001 From: BadPixxel Date: Fri, 19 Jul 2019 12:24:53 +0200 Subject: [PATCH 0235/1148] FIX: Units Scale Missing in Object CRUD --- htdocs/core/class/cunits.class.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/htdocs/core/class/cunits.class.php b/htdocs/core/class/cunits.class.php index 861d7f737bb..922338999df 100644 --- a/htdocs/core/class/cunits.class.php +++ b/htdocs/core/class/cunits.class.php @@ -92,6 +92,7 @@ class CUnits // extends CommonObject if (isset($this->short_label)) $this->libelle=trim($this->short_label); if (isset($this->unit_type)) $this->active=trim($this->unit_type); if (isset($this->active)) $this->active=trim($this->active); + if (isset($this->scale)) $this->scale=trim($this->scale); // Check parameters // Put here code to add control on parameters values @@ -103,12 +104,14 @@ class CUnits // extends CommonObject $sql.= "label,"; $sql.= "short_label,"; $sql.= "unit_type"; + $sql.= "scale"; $sql.= ") VALUES ("; $sql.= " ".(! isset($this->id)?'NULL':"'".$this->db->escape($this->id)."'").","; $sql.= " ".(! isset($this->code)?'NULL':"'".$this->db->escape($this->code)."'").","; $sql.= " ".(! isset($this->label)?'NULL':"'".$this->db->escape($this->label)."'").","; $sql.= " ".(! isset($this->short_label)?'NULL':"'".$this->db->escape($this->short_label)."'").","; $sql.= " ".(! isset($this->unit_type)?'NULL':"'".$this->db->escape($this->unit_type)."'"); + $sql.= " ".(! isset($this->scale)?'NULL':"'".$this->db->escape($this->scale)."'"); $sql.= ")"; $this->db->begin(); @@ -173,6 +176,7 @@ class CUnits // extends CommonObject $sql.= " t.label,"; $sql.= " t.short_label,"; $sql.= " t.unit_type,"; + $sql.= " t.scale,"; $sql.= " t.active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_units as t"; $sql_where=array(); @@ -196,6 +200,7 @@ class CUnits // extends CommonObject $this->label = $obj->label; $this->short_label = $obj->short_label; $this->unit_type = $obj->unit_type; + $this->scale = $obj->scale; $this->active = $obj->active; } $this->db->free($resql); @@ -235,6 +240,7 @@ class CUnits // extends CommonObject $sql.= " t.label,"; $sql.= " t.short_label,"; $sql.= " t.unit_type,"; + $sql.= " t.scale,"; $sql.= " t.active"; $sql .= ' FROM ' . MAIN_DB_PREFIX . 'c_units as t'; // Manage filter @@ -279,6 +285,7 @@ class CUnits // extends CommonObject $record->label = $obj->label; $record->short_label = $obj->short_label; $record->unit_type = $obj->unit_type; + $record->scale = $obj->scale; $record->active = $obj->active; $this->records[$record->id] = $record; } @@ -312,6 +319,7 @@ class CUnits // extends CommonObject if (isset($this->label)) $this->libelle=trim($this->label); if (isset($this->short_label)) $this->libelle=trim($this->short_label); if (isset($this->unit_type)) $this->libelle=trim($this->unit_type); + if (isset($this->scale)) $this->scale=trim($this->scale); if (isset($this->active)) $this->active=trim($this->active); // Check parameters @@ -323,6 +331,7 @@ class CUnits // extends CommonObject $sql.= " label=".(isset($this->label)?"'".$this->db->escape($this->label)."'":"null").","; $sql.= " short_label=".(isset($this->short_label)?"'".$this->db->escape($this->short_label)."'":"null").","; $sql.= " unit_type=".(isset($this->unit_type)?"'".$this->db->escape($this->unit_type)."'":"null").","; + $sql.= " scale=".(isset($this->scale)?"'".$this->db->escape($this->scale)."'":"null").","; $sql.= " active=".(isset($this->active)?$this->active:"null"); $sql.= " WHERE rowid=".$this->id; From 278c2d7152cfc5aef5bfb7e489eef304ba2b47a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 12:58:21 +0200 Subject: [PATCH 0236/1148] Enhance the perf page --- htdocs/admin/system/perf.php | 20 ++++++++++++++++---- htdocs/langs/en_US/admin.lang | 6 +++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php index 66148fb01ab..fbf6fa3bb14 100644 --- a/htdocs/admin/system/perf.php +++ b/htdocs/admin/system/perf.php @@ -70,6 +70,18 @@ else } print '
'; +// Module log +print '
'; +print ''.$langs->trans("Syslog").': '; +$test=empty($conf->syslog->enabled); +if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled"); +else +{ + print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("Syslog")); + //print ' '.$langs->trans("MoreInformation").' XDebug admin page'; +} +print '
'; + // Module debugbar print '
'; print ''.$langs->trans("DebugBar").': '; @@ -77,7 +89,7 @@ $test=empty($conf->debugbar->enabled); if ($test) print img_picto('', 'tick.png').' '.$langs->trans("NotInstalled"); else { - print img_picto('', 'warning').' '.$langs->trans("DebugBarModuleActivated"); + print img_picto('', 'warning').' '.$langs->trans("ModuleActivated", $langs->transnoentities("DebugBar")); //print ' '.$langs->trans("MoreInformation").' XDebug admin page'; } print '
'; @@ -110,20 +122,20 @@ $test=function_exists('xcache_info'); if (! $foundcache && $test) { $foundcache++; - print img_picto('', 'tick.png').' '.$langs->trans("XCacheInstalled"); + print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "XCache"); print ' '.$langs->trans("MoreInformation").' Xcache admin page'; } $test=function_exists('eaccelerator_info'); if (! $foundcache && $test) { $foundcache++; - print img_picto('', 'tick.png').' '.$langs->trans("EAcceleratorInstalled"); + print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "Eaccelerator"); } $test=function_exists('opcache_get_status'); if (! $foundcache && $test) { $foundcache++; - print img_picto('', 'tick.png').' '.$langs->trans("ZendOPCacheInstalled"); // Should be by default starting with PHP 5.5 + print img_picto('', 'tick.png').' '.$langs->trans("PHPModuleLoaded", "ZendOPCache"); // Should be by default starting with PHP 5.5 //$tmp=opcache_get_status(); //var_dump($tmp); } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 1765a7c6440..3b73cdb0bd6 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1226,8 +1226,8 @@ YouHaveXObjectUseSearchOptim=You have %s %s in the database. You should add the YouHaveXObjectAndSearchOptimOn=You have %s %s in the database and constant %s is set to 1 in Home-Setup-Other. BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance. BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari. -XDebugInstalled=XDebug is loaded. -XCacheInstalled=XCache is loaded. +PHPModuleLoaded=PHP component %s is loaded +PreloadOPCode=Preloaded OPCode is used AddRefInList=Display Customer/Vendor ref. info list (select list or combobox) and most of hyperlink.
Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp". AddAdressInList=Display Customer/Vendor adress info list (select list or combobox)
Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties. @@ -1912,7 +1912,7 @@ LogsLinesNumber=Number of lines to show on logs tab UseDebugBar=Use the debug bar DEBUGBAR_LOGS_LINES_NUMBER=Number of last log lines to keep in console WarningValueHigherSlowsDramaticalyOutput=Warning, higher values slows dramaticaly output -DebugBarModuleActivated=Module debugbar is activated and slows dramaticaly the interface +ModuleActivated=Module %s is activated and slows the interface EXPORTS_SHARE_MODELS=Export models are share with everybody ExportSetup=Setup of module Export InstanceUniqueID=Unique ID of the instance From cd1a2d24eee0f0556ca1952df638f8519f7c9f72 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:07:07 +0200 Subject: [PATCH 0237/1148] Removed not used file --- htdocs/societe/notify/index.html | 0 htdocs/societe/notify/index.php | 109 ------------------------------- 2 files changed, 109 deletions(-) create mode 100644 htdocs/societe/notify/index.html delete mode 100644 htdocs/societe/notify/index.php diff --git a/htdocs/societe/notify/index.html b/htdocs/societe/notify/index.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/htdocs/societe/notify/index.php b/htdocs/societe/notify/index.php deleted file mode 100644 index f4e5bd8554b..00000000000 --- a/htdocs/societe/notify/index.php +++ /dev/null @@ -1,109 +0,0 @@ - - * Copyright (C) 2004-2006 Laurent Destailleur - * - * 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 . - */ - -/** - * \file htdocs/societe/notify/index.php - * \ingroup notification - * \brief List of done notifications - */ - -require '../../main.inc.php'; -$langs->loadLangs(array("companies", "banks")); - -// S�curit� acc�s client -if ($user->societe_id > 0) -{ - $action = ''; - $socid = $user->societe_id; -} - -if ($sortorder == "") -{ - $sortorder="ASC"; -} -if ($sortfield == "") -{ - $sortfield="s.nom"; -} - -if (empty($page) || $page == -1) { $page = 0 ; } - -$offset = $conf->liste_limit * $page ; -$pageprev = $page - 1; -$pagenext = $page + 1; - - - -/* - * View - */ - -llxHeader(); - -$sql = "SELECT s.nom as name, s.rowid as socid, c.lastname, c.firstname, a.label, n.rowid"; -$sql.= " FROM ".MAIN_DB_PREFIX."socpeople as c,"; -$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,"; -$sql.= " ".MAIN_DB_PREFIX."notify_def as n,"; -$sql.= " ".MAIN_DB_PREFIX."societe as s"; -$sql.= " WHERE n.fk_contact = c.rowid"; -$sql.= " AND a.rowid = n.fk_action"; -$sql.= " AND n.fk_soc = s.rowid"; -$sql.= " AND s.entity IN (".getEntity('societe').")"; -if ($socid > 0) $sql.= " AND s.rowid = " . $user->societe_id; - -$sql.= $db->order($sortfield, $sortorder); -$sql.= $db->plimit($conf->liste_limit, $offset); - -$result = $db->query($sql); -if ($result) -{ - $num = $db->num_rows($result); - $i = 0; - - $paramlist=''; - print_barre_liste($langs->trans("ListOfNotificationsDone"), $page, $_SERVER["PHP_SELF"], $paramlist, $sortfield, $sortorder, '', $num); - - print '
'; print ''; diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php index 8178df6b03c..8e19242d1c1 100644 --- a/htdocs/product/stock/list.php +++ b/htdocs/product/stock/list.php @@ -187,7 +187,7 @@ if ($result) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; print ''; print ''; @@ -4158,8 +4158,9 @@ abstract class CommonObject { print ''; } - print ''; - + print ''; + print ''; + print ''; $var = true; $i = 0; @@ -4200,7 +4201,7 @@ abstract class CommonObject */ public function printOriginLine($line, $var, $restrictlist = '', $defaulttpldir = '/core/tpl') { - global $langs, $conf; + global $langs, $conf, $selectedLines; //var_dump($line); if (!empty($line->date_start)) @@ -4222,6 +4223,8 @@ abstract class CommonObject if ($line->date_fin_reel) $date_end=$line->date_fin_reel; } + $this->tpl['id'] = $line->id; + $this->tpl['label'] = ''; if (! empty($line->fk_parent_line)) $this->tpl['label'].= img_picto('', 'rightarrow'); diff --git a/htdocs/core/tpl/originproductline.tpl.php b/htdocs/core/tpl/originproductline.tpl.php index 2f0accd6306..e29ea678282 100644 --- a/htdocs/core/tpl/originproductline.tpl.php +++ b/htdocs/core/tpl/originproductline.tpl.php @@ -40,6 +40,10 @@ if($conf->global->PRODUCT_USE_UNITS) print ''; print ''; + +$selected=1; +if (!empty($selectedLines) && !in_array($this->tpl['id'], $selectedLines)) $selected=0; +print ''; print ''."\n"; ?> From e5d34de877fe194c096fa83b5cb62f5b10aded42 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 9 Jul 2019 00:14:01 +0200 Subject: [PATCH 0153/1148] FIX compatibility mysql 8. rank is reserved FIX Permission for BOM menu --- htdocs/bom/class/bom.class.php | 6 +++--- htdocs/core/class/commonobject.class.php | 4 ++-- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 ++- htdocs/install/mysql/tables/llx_bom_bomline.sql | 2 +- htdocs/modulebuilder/template/class/myobject.class.php | 4 ++-- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 73682c7698c..10601303a61 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -889,7 +889,7 @@ class BOM extends CommonObject $this->lines=array(); $objectline = new BOMLine($this->db); - $result = $objectline->fetchAll('ASC', 'rank', 0, 0, array('customsql'=>'fk_bom = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_bom = '.$this->id)); if (is_numeric($result)) { @@ -1044,7 +1044,7 @@ class BOMLine extends CommonObject 'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,), 'qty' => array('type'=>'double(24,8)', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'position'=>100, 'notnull'=>1, 'isameasure'=>'1',), 'efficiency' => array('type'=>'double(8,4)', 'label'=>'ManufacturingEfficiency', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>110, 'notnull'=>1, 'css'=>'maxwidth50imp', 'help'=>'ValueOfMeansLoss'), - 'rank' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'position'=>200, 'notnull'=>1,), + 'position' => array('type'=>'integer', 'label'=>'Rank', 'enabled'=>1, 'visible'=>0, 'position'=>200, 'notnull'=>1,), 'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,), ); public $rowid; @@ -1053,7 +1053,7 @@ class BOMLine extends CommonObject public $description; public $qty; public $efficiency; - public $rank; + public $position; public $import_key; // END MODULEBUILDER PROPERTIES diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index c966f39680b..b6fa5e419b1 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2443,9 +2443,9 @@ abstract class CommonObject */ public function updateRangOfLine($rowid, $rang) { - $fieldposition = 'rang'; // @TODO Rename 'rang' and 'position' into 'rank' + $fieldposition = 'rang'; // @TODO Rename 'rang' into 'position' if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position'; - if (in_array($this->table_element_line, array('bom_bomline'))) $fieldposition = 'rank'; + if (in_array($this->table_element_line, array('bom_bomline'))) $fieldposition = 'position'; $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang; $sql.= ' WHERE rowid = '.$rowid; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 7518093bf77..88595cd366a 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1579,7 +1579,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM { $langs->load("mrp"); - $newmenu->add("", $langs->trans("MenuBOM"), 0, $user->rights->service->lire, '', $mainmenu, 'service'); + $newmenu->add("", $langs->trans("MenuBOM"), 0, $user->rights->bom->read, '', $mainmenu, 'bom'); $newmenu->add("/bom/bom_card.php?leftmenu=bom&action=create", $langs->trans("NewBOM"), 1, $user->rights->bom->write); $newmenu->add("/bom/bom_list.php?leftmenu=bom", $langs->trans("List"), 1, $user->rights->bom->read); } diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index bf08e794a65..c2d4809f958 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -252,12 +252,13 @@ CREATE TABLE llx_bom_bomline( import_key varchar(14), qty double(24,8) NOT NULL, efficiency double(8,4) NOT NULL DEFAULT 1, - rank integer NOT NULL + position integer NOT NULL -- END MODULEBUILDER FIELDS ) ENGINE=innodb; ALTER TABLE llx_bom_bomline ADD COLUMN efficiency double(8,4) DEFAULT 1; ALTER TABLE llx_bom_bomline ADD COLUMN fk_bom_child integer NULL; +ALTER TABLE llx_bom_bomline ADD COLUMN position integer NOT NULL; create table llx_bom_bomline_extrafields ( diff --git a/htdocs/install/mysql/tables/llx_bom_bomline.sql b/htdocs/install/mysql/tables/llx_bom_bomline.sql index bafaaf73694..4b0aa515950 100644 --- a/htdocs/install/mysql/tables/llx_bom_bomline.sql +++ b/htdocs/install/mysql/tables/llx_bom_bomline.sql @@ -23,6 +23,6 @@ CREATE TABLE llx_bom_bomline( import_key varchar(14), qty double(24,8) NOT NULL, efficiency double(8,4) NOT NULL DEFAULT 1, - rank integer NOT NULL + position integer NOT NULL -- END MODULEBUILDER FIELDS ) ENGINE=innodb; diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php index 13157b2c18f..f6020882502 100644 --- a/htdocs/modulebuilder/template/class/myobject.class.php +++ b/htdocs/modulebuilder/template/class/myobject.class.php @@ -696,7 +696,7 @@ class MyObject extends CommonObject $this->lines=array(); $objectline = new MyObjectLine($this->db); - $result = $objectline->fetchAll('ASC', 'rank', 0, 0, array('customsql'=>'fk_myobject = '.$this->id)); + $result = $objectline->fetchAll('ASC', 'position', 0, 0, array('customsql'=>'fk_myobject = '.$this->id)); if (is_numeric($result)) { @@ -781,5 +781,5 @@ class MyObject extends CommonObject class MyObjectLine { // To complete with content of an object MyObjectLine - // We should have a field rowid, fk_myobject and rank + // We should have a field rowid, fk_myobject and position } From 61c83117fe3a98d473239a9dda5af68aae130d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 9 Jul 2019 15:18:51 +0200 Subject: [PATCH 0154/1148] Update ihm.php --- htdocs/admin/ihm.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php index 8a065190373..509a04494d2 100644 --- a/htdocs/admin/ihm.php +++ b/htdocs/admin/ihm.php @@ -60,6 +60,7 @@ if (GETPOST('cancel', 'alpha')) if ($action == 'removebackgroundlogin' && ! empty($conf->global->MAIN_LOGIN_BACKGROUND)) { + dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV+1, 'chaine', 0, '', $conf->entity); require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $logofile=$conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_LOGIN_BACKGROUND; @@ -81,6 +82,7 @@ if ($action == 'removebackgroundlogin' && ! empty($conf->global->MAIN_LOGIN_BACK if ($action == 'update') { dolibarr_set_const($db, "MAIN_LANG_DEFAULT", $_POST["MAIN_LANG_DEFAULT"], 'chaine', 0, '', $conf->entity); + dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV+1, 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_MULTILANGS", $_POST["MAIN_MULTILANGS"], 'chaine', 0, '', $conf->entity); dolibarr_set_const($db, "MAIN_THEME", $_POST["main_theme"], 'chaine', 0, '', $conf->entity); From 96723db86f284f2ddb09bf10158cdc7584a1f34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 9 Jul 2019 15:20:43 +0200 Subject: [PATCH 0155/1148] Update main.inc.php --- htdocs/main.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 458e6649d8a..ee2b14fdf11 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1200,7 +1200,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr if (! is_object($hookmanager)) $hookmanager = new HookManager($db); $hookmanager->initHooks(array("main")); - $ext='layout='.$conf->browser->layout.'&version='.urlencode(DOL_VERSION); + $ext='layout='.$conf->browser->layout.'&version='.urlencode(DOL_VERSION); print "\n"; @@ -1246,7 +1246,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr if (GETPOST('version', 'int')) $ext='version='.GETPOST('version', 'int'); // usefull to force no cache on css/js $themeparam='?lang='.$langs->defaultlang.'&theme='.$conf->theme.(GETPOST('optioncss', 'aZ09')?'&optioncss='.GETPOST('optioncss', 'aZ09', 1):'').'&userid='.$user->id.'&entity='.$conf->entity; - $themeparam.=($ext?'&'.$ext:''); + $themeparam.=($ext?'&'.$ext:'').'&revision='.$conf->global->MAIN_IHM_PARAMS_REV; if (! empty($_SESSION['dol_resetcache'])) $themeparam.='&dol_resetcache='.$_SESSION['dol_resetcache']; if (GETPOST('dol_hide_topmenu', 'int')) { $themeparam.='&dol_hide_topmenu='.GETPOST('dol_hide_topmenu', 'int'); } if (GETPOST('dol_hide_leftmenu', 'int')) { $themeparam.='&dol_hide_leftmenu='.GETPOST('dol_hide_leftmenu', 'int'); } From 0aa42fefae40fabaff529fde7a082e4ff20da613 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Tue, 9 Jul 2019 18:13:06 +0200 Subject: [PATCH 0156/1148] Fix : use RUM if defined in bank account --- htdocs/compta/prelevement/class/bonprelevement.class.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 2187b99eaf3..89aa09523e7 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1349,7 +1349,7 @@ class BonPrelevement extends CommonObject $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,"; $sql.= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; - $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum"; + $sql.= " f.facnumber as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum"; $sql.= " FROM"; $sql.= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql.= " ".MAIN_DB_PREFIX."facture as f,"; @@ -1375,7 +1375,7 @@ class BonPrelevement extends CommonObject while ($i < $num) { $obj = $this->db->fetch_object($resql); - $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $this->db->jdate($obj->datec), $obj->drum); + $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $this->db->jdate($obj->datec), $obj->drum, $obj->rum); $this->total = $this->total + $obj->somme; $i++; } @@ -1586,9 +1586,10 @@ class BonPrelevement extends CommonObject * @param string $row_bic rib.bic AS bic, * @param string $row_datec rib.datec, * @param string $row_drum rib.rowid used to generate rum + * @param string $row_rum rib.rum Rum defined on company bank account * @return string Return string with SEPA part DrctDbtTxInf */ - function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum) + function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum, $row_rum) { // phpcs:enable global $conf; @@ -1597,7 +1598,7 @@ class BonPrelevement extends CommonObject // Define value for RUM // Example: RUMCustomerCode-CustomerBankAccountId-01424448606 (note: Date is date of creation of CustomerBankAccountId) - $Rum = $this->buildRumNumber($row_code_client, $row_datec, $row_drum); + $Rum = empty($row_rum) ? $this->buildRumNumber($row_code_client, $row_datec, $row_drum) : $row_rum; // Define date of RUM signature $DtOfSgntr = dol_print_date($row_datec, '%Y-%m-%d'); From 41b004c2b837806eaaa29ffa4b63204e3c7a230e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 10 Jul 2019 12:16:32 +0200 Subject: [PATCH 0157/1148] FIX better compatibility with multicompany transverse mode --- htdocs/core/class/html.formother.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php index 1883ffd0304..28683d23771 100644 --- a/htdocs/core/class/html.formother.class.php +++ b/htdocs/core/class/html.formother.class.php @@ -421,7 +421,7 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('user')."))"; + $sql_usr.= " WHERE EXISTS (SELECT ug.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug WHERE u.rowid = ug.fk_user AND ug.entity IN (".getEntity('usergroup')."))"; $sql_usr.= " OR u.entity = 0"; // Show always superadmin } } @@ -444,7 +444,7 @@ class FormOther if (! empty($user->admin) && empty($user->entity) && $conf->entity == 1) { $sql_usr.= " WHERE u2.entity IS NOT NULL"; // Show all users } else { - $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('user')."))"; + $sql_usr.= " WHERE EXISTS (SELECT ug2.fk_user FROM ".MAIN_DB_PREFIX."usergroup_user as ug2 WHERE u2.rowid = ug2.fk_user AND ug2.entity IN (".getEntity('usergroup')."))"; } } else From cebf81a5146a6d02b4c9f1ebd736e6298e29b769 Mon Sep 17 00:00:00 2001 From: atm-lena Date: Wed, 10 Jul 2019 15:18:25 +0200 Subject: [PATCH 0158/1148] FIX helpp text --- htdocs/core/tpl/commonfields_edit.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php index ce41cff24d0..d23b9f09c2a 100644 --- a/htdocs/core/tpl/commonfields_edit.tpl.php +++ b/htdocs/core/tpl/commonfields_edit.tpl.php @@ -47,7 +47,7 @@ foreach($object->fields as $key => $val) if ($val['notnull'] > 0) print ' fieldrequired'; if ($val['type'] == 'text' || $val['type'] == 'html') print ' tdtop'; print '">'; - if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $val['help']); + if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help'])); else print $langs->trans($val['label']); print ''; print ''; print ''; print ''; if (! $i) $totalarray['nbfield']++; From 332abd2a9f845ab0cfe969698ac0dbf38759853c Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 13 Jul 2019 11:02:45 +0200 Subject: [PATCH 0165/1148] FIX __INFOS__ tag not exists --- htdocs/install/mysql/data/llx_c_email_templates.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/data/llx_c_email_templates.sql b/htdocs/install/mysql/data/llx_c_email_templates.sql index 0c64fcf7d0d..87741d1054b 100644 --- a/htdocs/install/mysql/data/llx_c_email_templates.sql +++ b/htdocs/install/mysql/data/llx_c_email_templates.sql @@ -24,7 +24,7 @@ INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_u INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,enabled,active,topic,content,content_lines,joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnAutoSubscription)' ,10,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipRequestWasReceived)__','__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourMembershipRequestWasReceived)__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); -INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,enabled,active,topic,content,content_lines,joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourMembershipWasValidated)__
__INFOS__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); +INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,enabled,active,topic,content,content_lines,joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnMemberValidation)' ,20,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasValidated)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourMembershipWasValidated)__
__(FirstName)__ : __MEMBER_FIRSTNAME__
__(LastName)__ : __MEMBER_LASTNAME__
__(ID)__ : __MEMBER_ID__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,enabled,active,topic,content,content_lines,joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnNewSubscription)' ,30,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourSubscriptionWasRecorded)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfYourSubscriptionWasRecorded)__
\n\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 1); INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,enabled,active,topic,content,content_lines,joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingReminderForExpiredSubscription)',40,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(SubscriptionReminderEmail)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(ThisIsContentOfSubscriptionReminderEmail)__
\n
__ONLINE_PAYMENT_TEXT_AND_URL__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); INSERT INTO llx_c_email_templates (entity,module,type_template,lang,private,fk_user,datec,label,position,enabled,active,topic,content,content_lines,joinfiles) VALUES (0,'adherent','member','',0,null,null,'(SendingEmailOnCancelation)' ,50,'$conf->adherent->enabled',1,'[__[MAIN_INFO_SOCIETE_NOM]__] __(YourMembershipWasCanceled)__', '__(Hello)__ __MEMBER_FULLNAME__,

\n\n__(YourMembershipWasCanceled)__
\n

\n__(Sincerely)__
__USER_SIGNATURE__',null, 0); From b7df4a2cd04b6b8c13f78162e85a3ee660355dc6 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 13 Jul 2019 11:21:07 +0200 Subject: [PATCH 0166/1148] FIX this function can not be private --- htdocs/adherents/class/adherent.class.php | 2 +- htdocs/contact/class/contact.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 115d1fb8ab4..2001959240d 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2447,7 +2447,7 @@ class Adherent extends CommonObject * 2=Return key only (uid=qqq) * @return string DN */ - private function _load_ldap_dn($info, $mode = 0) + public function _load_ldap_dn($info, $mode = 0) { // phpcs:enable global $conf; diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index de9494fca8b..74ff7bf5fb4 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -507,7 +507,7 @@ class Contact extends CommonObject * 2=Return key only (uid=qqq) * @return string DN */ - private function _load_ldap_dn($info, $mode = 0) + public function _load_ldap_dn($info, $mode = 0) { // phpcs:enable global $conf; From 4dab57b4947a4d965f253a824582db656239fd24 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 13 Jul 2019 11:24:25 +0200 Subject: [PATCH 0167/1148] FIX phpcs --- htdocs/adherents/class/adherent.class.php | 1 + htdocs/contact/class/contact.class.php | 1 + 2 files changed, 2 insertions(+) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 2001959240d..d20fc34ec9d 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2438,6 +2438,7 @@ class Adherent extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Retourne chaine DN complete dans l'annuaire LDAP pour l'objet * diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 74ff7bf5fb4..d6053a46b35 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -498,6 +498,7 @@ class Contact extends CommonObject // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** * Retourne chaine DN complete dans l'annuaire LDAP pour l'objet * From f041110a7ef88cd8057d515bce96946c0242bf3f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 13 Jul 2019 22:29:50 +0200 Subject: [PATCH 0168/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 43f78b571de..579deec88e3 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2615,7 +2615,7 @@ abstract class CommonObject $MODULE = ""; if ($this->element == 'propal') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL"; - elseif ($this->element == 'commande') + elseif ($this->element == 'commande' || $this->element == 'order') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER"; elseif ($this->element == 'facture') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE"; From b6571d9fc3a27f147ace6d6794f6d58a9690a749 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 13 Jul 2019 22:39:25 +0200 Subject: [PATCH 0169/1148] Update byratecountry.php --- htdocs/compta/stats/byratecountry.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index cd41649cc89..045f5e6429c 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class. // Load translation files required by the page $langs->loadLangs(array("other","compta","banks","bills","companies","product","trips","admin","accountancy")); -$modecompta = $conf->global->ACCOUNTING_MODE; +$modecompta = (GETPOST('modecompta', 'alpha') ? GETPOST('modecompta', 'alpha') : $conf->global->ACCOUNTING_MODE); // Date range $year=GETPOST("year",'int'); From 8090a8abb66619753ea5cca54d04ce92d71eae1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:07:27 +0200 Subject: [PATCH 0170/1148] Fix param [] -> null --- htdocs/adherents/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 0fbee667522..f0d8df454cf 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -646,7 +646,7 @@ if (empty($reshook)) if (empty($labeltouse) || (int) $labeltouse === -1) { //fallback on the old configuration. - setEventMessages('WarningMandatorySetupNotComplete', [], 'errors'); + setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); $error++; } else { From b66ad24d85577a95b2280285c6dc946fecffe0c1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:10:15 +0200 Subject: [PATCH 0171/1148] Fix save of doc template for recuring invoices. --- htdocs/compta/facture/fiche-rec.php | 2 +- htdocs/core/class/html.form.class.php | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 31a4affb95d..f195ab84324 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1424,7 +1424,7 @@ else $list = array(); $models = ModelePDFFactures::liste_modeles($db); foreach ($models as $k => $model) { - $list[] = $k . ':' . $model; + $list[] = str_replace(':', '|', $k) . ':' . $model; } $select = 'select;'.implode(',', $list); print $form->editfieldval($langs->trans("Model"), 'modelpdf', $object->modelpdf, $object, $user->rights->facture->creer, $select); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a462f40ebdc..d2130e24291 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -152,7 +152,7 @@ class Form * @param string $value Value to show/edit * @param object $object Object * @param boolean $perm Permission to allow button to edit parameter - * @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols%', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datepickerhour', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select:xxx'...) + * @param string $typeofdata Type of data ('string' by default, 'email', 'amount:99', 'numeric:99', 'text' or 'textarea:rows:cols%', 'datepicker' ('day' do not work, don't know why), 'dayhour' or 'datepickerhour', 'ckeditor:dolibarr_zzz:width:height:savemethod:toolbarstartexpanded:rows:cols', 'select;xkey:xval,ykey:yval,...') * @param string $editvalue When in edit mode, use this value as $value instead of value (for example, you can provide here a formated price instead of value). Use '' to use same than $value * @param object $extObject External object * @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage') @@ -172,7 +172,7 @@ class Form if (empty($typeofdata)) return 'ErrorBadParameter'; // When option to edit inline is activated - if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE) && ! preg_match('/^select;|datehourpicker/',$typeofdata)) // TODO add jquery timepicker + if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE) && ! preg_match('/^select;|datehourpicker/',$typeofdata)) // TODO add jquery timepicker and support select { $ret.=$this->editInPlace($object, $value, $htmlname, $perm, $typeofdata, $editvalue, $extObject, $custommsg); } @@ -229,7 +229,8 @@ class Form foreach($arraydata as $val) { $tmp=explode(':',$val); - $arraylist[$tmp[0]]=$tmp[1]; + $tmpkey=str_replace('|', ':', $tmp[0]); + $arraylist[$tmpkey]=$tmp[1]; } $ret.=$this->selectarray($htmlname,$arraylist,$value); } @@ -298,7 +299,7 @@ class Form * @param string $value Value to show/edit * @param string $htmlname DIV ID (field name) * @param int $condition Condition to edit - * @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:xxx') + * @param string $inputType Type of input ('string', 'numeric', 'datepicker' ('day' do not work, don't know why), 'textarea:rows:cols', 'ckeditor:dolibarr_zzz:width:height:?:1:rows:cols', 'select:loadmethod:savemethod:buttononly') * @param string $editvalue When in edit mode, use this value as $value instead of value * @param object $extObject External object * @param mixed $custommsg String or Array of custom messages : eg array('success' => 'MyMessage', 'error' => 'MyMessage') From 2a05164bb119520e8a68c43aea99c399d10a8e43 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:31:28 +0200 Subject: [PATCH 0172/1148] FIX Better PHP compatibility --- htdocs/adherents/card.php | 2 +- .../class/DataCollector/DolLogsCollector.php | 6 +++--- htdocs/public/stripe/confirm_payment.php | 20 ++++++++++--------- .../societe/class/api_thirdparties.class.php | 16 +++++++-------- htdocs/societe/paymentmodes.php | 2 +- htdocs/stripe/class/stripe.class.php | 2 +- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 1e777d003d9..373e8b953f6 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -734,7 +734,7 @@ if (empty($reshook)) if (empty($labeltouse) || (int) $labeltouse === -1) { //fallback on the old configuration. - setEventMessages('WarningMandatorySetupNotComplete', [], 'errors'); + setEventMessages('WarningMandatorySetupNotComplete', null, 'errors'); $error++; } else { diff --git a/htdocs/debugbar/class/DataCollector/DolLogsCollector.php b/htdocs/debugbar/class/DataCollector/DolLogsCollector.php index 8e39c68b6b7..dd6fabd508f 100644 --- a/htdocs/debugbar/class/DataCollector/DolLogsCollector.php +++ b/htdocs/debugbar/class/DataCollector/DolLogsCollector.php @@ -144,7 +144,7 @@ class DolLogsCollector extends MessagesCollector $linecounter = $lines; $pos = -2; $beginning = false; - $text = []; + $text = array(); while ($linecounter > 0) { $t = " "; while ($t != "\n") { @@ -179,12 +179,12 @@ class DolLogsCollector extends MessagesCollector $pattern = "/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*/"; $log_levels = $this->getLevels(); preg_match_all($pattern, $file, $matches); - $log = []; + $log = array(); foreach ($matches as $lines) { foreach ($lines as $line) { foreach ($log_levels as $level_key => $level) { if (strpos(strtolower($line), strtolower($level_key)) == 20) { - $log[] = ['level' => $level, 'line' => $line]; + $log[] = array('level' => $level, 'line' => $line); } } } diff --git a/htdocs/public/stripe/confirm_payment.php b/htdocs/public/stripe/confirm_payment.php index ea59b13dcb9..9ff9662ff84 100644 --- a/htdocs/public/stripe/confirm_payment.php +++ b/htdocs/public/stripe/confirm_payment.php @@ -15,6 +15,8 @@ * along with this program. If not, see . */ +// TODO Do we really need this page. We alread have a ipn.php page ! + define("NOLOGIN", 1); // This means this output page does not require to be logged. define("NOCSRFCHECK", 1); // We accept to go on this page from external web site. @@ -105,13 +107,13 @@ $intent = null; try { if (isset($json_obj->payment_method_id)) { // Create the PaymentIntent - $intent = \Stripe\PaymentIntent::create([ + $intent = \Stripe\PaymentIntent::create(array( 'payment_method' => $json_obj->payment_method_id, 'amount' => 1099, 'currency' => 'eur', 'confirmation_method' => 'manual', 'confirm' => true, - ]); + )); } if (isset($json_obj->payment_intent_id)) { $intent = \Stripe\PaymentIntent::retrieve( @@ -122,9 +124,9 @@ try { generatePaymentResponse($intent); } catch (\Stripe\Error\Base $e) { // Display error on client - echo json_encode([ + echo json_encode(array( 'error' => $e->getMessage() - ]); + )); } /* @@ -138,22 +140,22 @@ function generatePaymentResponse($intent) if ($intent->status == 'requires_source_action' && $intent->next_action->type == 'use_stripe_sdk') { // Tell the client to handle the action - echo json_encode([ + echo json_encode(array( 'requires_action' => true, 'payment_intent_client_secret' => $intent->client_secret - ]); + )); } elseif ($intent->status == 'succeeded') { // The payment didn’t need any additional actions and completed! // Handle post-payment fulfillment // TODO - echo json_encode([ + echo json_encode(array( "success" => true - ]); + )); } else { // Invalid status http_response_code(500); - echo json_encode(['error' => 'Invalid PaymentIntent status']); + echo json_encode(array('error' => 'Invalid PaymentIntent status')); } } diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index adae31e7677..95aad3a003b 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -1041,7 +1041,7 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( $i=0; - $accounts =[]; + $accounts = array(); if ($result) { @@ -1061,12 +1061,12 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( } - $fields = ['socid', 'default_rib', 'frstrecur', '1000110000001', 'datec', 'datem', 'label', 'bank', 'bic', 'iban', 'id', 'rum']; + $fields = array('socid', 'default_rib', 'frstrecur', '1000110000001', 'datec', 'datem', 'label', 'bank', 'bic', 'iban', 'id', 'rum'); - $returnAccounts = []; + $returnAccounts = array(); foreach($accounts as $account){ - $object= []; + $object= array(); foreach($account as $key => $value) if(in_array($key, $fields)){ $object[$key] = $value; @@ -1308,7 +1308,7 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( $i=0; - $accounts =[]; + $accounts = array(); $num = $db->num_rows($result); while ($i < $num) @@ -1322,12 +1322,12 @@ $reshook = $hookmanager->executeHooks('replaceThirdparty', array( $i++; } - $fields = ['id', 'fk_soc', 'key_account', 'site', 'date_creation', 'tms']; + $fields = array('id', 'fk_soc', 'key_account', 'site', 'date_creation', 'tms'); - $returnAccounts = []; + $returnAccounts = array(); foreach($accounts as $account){ - $object= []; + $object= array(); foreach($account as $key => $value) if(in_array($key, $fields)){ $object[$key] = $value; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 0e41e11cbaa..51a7ccb24bb 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -639,7 +639,7 @@ if (empty($reshook)) try { if (preg_match('/pm_/', $source)) { - $payment_method = \Stripe\PaymentMethod::retrieve($source, ["stripe_account" => $stripeacc]); + $payment_method = \Stripe\PaymentMethod::retrieve($source, array("stripe_account" => $stripeacc)); if ($payment_method) { $payment_method->detach(); diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index d8d0c656dab..6b910236e96 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -389,7 +389,7 @@ class Stripe extends CommonObject "confirmation_method" => $mode, "amount" => $stripeamount, "currency" => $currency_code, - "payment_method_types" => ["card"], + "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) //"save_payment_method" => true, From e1d49177040c197c6027e53bd302e031ee46ab12 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 14 Jul 2019 00:39:42 +0200 Subject: [PATCH 0173/1148] FIX Missing field "Conciliated" into bank transaction export --- htdocs/core/modules/modBanque.class.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/modBanque.class.php b/htdocs/core/modules/modBanque.class.php index fb2c818043e..21c33d35170 100644 --- a/htdocs/core/modules/modBanque.class.php +++ b/htdocs/core/modules/modBanque.class.php @@ -150,14 +150,15 @@ class modBanque extends DolibarrModules $this->export_fields_array[$r]=array( 'b.rowid'=>'IdTransaction','ba.ref'=>'AccountRef','ba.label'=>'AccountLabel','b.datev'=>'DateValue','b.dateo'=>'DateOperation','b.label'=>'Label', 'b.num_chq'=>'ChequeOrTransferNumber','b.fk_bordereau'=>'ChequeBordereau','-b.amount'=>'Debit','b.amount'=>'Credit', - 'b.num_releve'=>'AccountStatement','b.datec'=>"DateCreation","bu.url_id"=>"IdThirdParty","s.nom"=>"ThirdParty", - "s.code_compta"=>"CustomerAccountancyCode","s.code_compta_fournisseur"=>"SupplierAccountancyCode" + 'b.num_releve'=>'AccountStatement','b.rappro'=>'Conciliated','b.datec'=>"DateCreation","bu.url_id"=>"IdThirdParty", + "s.nom"=>"ThirdParty","s.code_compta"=>"CustomerAccountancyCode","s.code_compta_fournisseur"=>"SupplierAccountancyCode" ); - $this->export_TypeFields_array[$r]=array('ba.ref'=>'Text','ba.label'=>'Text','b.datev'=>'Date','b.dateo'=>'Date','b.label'=>'Text','b.num_chq'=>'Text','b.fk_bordereau'=>'Text','-b.amount'=>'Numeric','b.amount'=>'Numeric','b.num_releve'=>'Text','b.datec'=>"Date","bu.url_id"=>"Text","s.nom"=>"Text","s.code_compta"=>"Text","s.code_compta_fournisseur"=>"Text"); + $this->export_TypeFields_array[$r]=array('ba.ref'=>'Text','ba.label'=>'Text','b.datev'=>'Date','b.dateo'=>'Date','b.label'=>'Text','b.num_chq'=>'Text','b.fk_bordereau'=>'Text','-b.amount'=>'Numeric','b.amount'=>'Numeric','b.num_releve'=>'Text','b.rappro'=>'Boolean','b.datec'=>"Date","bu.url_id"=>"Text","s.nom"=>"Text","s.code_compta"=>"Text","s.code_compta_fournisseur"=>"Text"); $this->export_entities_array[$r]=array( 'b.rowid'=>'account','ba.ref'=>'account','ba.label'=>'account','b.datev'=>'account','b.dateo'=>'account','b.label'=>'account', - 'b.num_chq'=>'account','b.fk_bordereau'=>'account','-b.amount'=>'account','b.amount'=>'account','b.num_releve'=>'account', - 'b.datec'=>"account","bu.url_id"=>"company","s.nom"=>"company","s.code_compta"=>"company","s.code_compta_fournisseur"=>"company" + 'b.num_chq'=>'account','b.fk_bordereau'=>'account','-b.amount'=>'account','b.amount'=>'account', + 'b.num_releve'=>'account','b.rappro'=>'account','b.datec'=>"account","bu.url_id"=>"company", + "s.nom"=>"company","s.code_compta"=>"company","s.code_compta_fournisseur"=>"company" ); $this->export_special_array[$r]=array('-b.amount'=>'NULLIFNEG','b.amount'=>'NULLIFNEG'); if (empty($conf->fournisseur->enabled)) From 294bc5dcb5e0fedca685b6976e4d7e042fa03067 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 15 Jul 2019 10:19:06 +0200 Subject: [PATCH 0174/1148] FIX avoid conflict with "$classname" in card.php --- htdocs/commande/card.php | 4 ++-- htdocs/core/tpl/object_discounts.tpl.php | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 10629ec3452..96ea54c5c84 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1436,11 +1436,11 @@ if ($action == 'create' && $user->rights->commande->creer) if ($element == 'order' || $element == 'commande') { $element = $subelement = 'commande'; } - if ($element == 'propal') { + elseif ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } - if ($element == 'contract') { + elseif ($element == 'contract') { $element = $subelement = 'contrat'; } diff --git a/htdocs/core/tpl/object_discounts.tpl.php b/htdocs/core/tpl/object_discounts.tpl.php index 70698bfa7eb..3d02d3c5a73 100644 --- a/htdocs/core/tpl/object_discounts.tpl.php +++ b/htdocs/core/tpl/object_discounts.tpl.php @@ -24,7 +24,7 @@ * $backtopage URL to come back to from discount modification pages */ -$classname = get_class($object); +$objclassname = get_class($object); $isInvoice = in_array($object->element, array('facture', 'invoice', 'facture_fourn', 'invoice_supplier')); $isNewObject = empty($object->id) && empty($object->rowid); @@ -53,11 +53,11 @@ if($isNewObject) print ' ('.$addrelativediscount.')'; // Is there is commercial discount or down payment available ? if ($absolute_discount > 0) { - if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut > $classname::STATUS_DRAFT || $object->type == $classname::TYPE_CREDIT_NOTE || $object->type == $classname::TYPE_DEPOSIT) { + if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut > $objclassname::STATUS_DRAFT || $object->type == $objclassname::TYPE_CREDIT_NOTE || $object->type == $objclassname::TYPE_DEPOSIT) { $translationKey = ! empty($discount_type) ? 'HasAbsoluteDiscountFromSupplier' : 'CompanyHasAbsoluteDiscount'; $text = $langs->trans($translationKey, price($absolute_discount), $langs->transnoentities("Currency" . $conf->currency)).'.'; - if ($isInvoice && ! $isNewObject && $object->statut > $classname::STATUS_DRAFT && $object->type != $classname::TYPE_CREDIT_NOTE && $object->type != $classname::TYPE_DEPOSIT) { + if ($isInvoice && ! $isNewObject && $object->statut > $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_CREDIT_NOTE && $object->type != $objclassname::TYPE_DEPOSIT) { $text = $form->textwithpicto($text, $langs->trans('AbsoluteDiscountUse')); } @@ -77,11 +77,11 @@ if ($absolute_discount > 0) { if ($absolute_creditnote > 0) { // If validated, we show link "add credit note to payment" - if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut != $classname::STATUS_VALIDATED || $object->type == $classname::TYPE_CREDIT_NOTE) { + if ($cannotApplyDiscount || ! $isInvoice || $isNewObject || $object->statut != $objclassname::STATUS_VALIDATED || $object->type == $objclassname::TYPE_CREDIT_NOTE) { $translationKey = ! empty($discount_type) ? 'HasCreditNoteFromSupplier' : 'CompanyHasCreditNote'; $text = $langs->trans($translationKey, price($absolute_creditnote), $langs->transnoentities("Currency" . $conf->currency)) . '.'; - if ($isInvoice && ! $isNewObject && $object->statut == $classname::STATUS_DRAFT && $object->type != $classname::TYPE_DEPOSIT) { + if ($isInvoice && ! $isNewObject && $object->statut == $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_DEPOSIT) { $text = $form->textwithpicto($text, $langs->trans('CreditNoteDepositUse')); } @@ -101,7 +101,7 @@ if($absolute_discount <= 0 && $absolute_creditnote <= 0) { $translationKey = ! empty($discount_type) ? 'HasNoAbsoluteDiscountFromSupplier' : 'CompanyHasNoAbsoluteDiscount'; print '
'.$langs->trans($translationKey).'.'; - if ($isInvoice && $object->statut == $classname::STATUS_DRAFT && $object->type != $classname::TYPE_CREDIT_NOTE && $object->type != $classname::TYPE_DEPOSIT) { + if ($isInvoice && $object->statut == $objclassname::STATUS_DRAFT && $object->type != $objclassname::TYPE_CREDIT_NOTE && $object->type != $objclassname::TYPE_DEPOSIT) { print ' (' . $addabsolutediscount . ')'; } } From ae540cb25e5b6b671258f2c4ae71b2c5bca5d4ee Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Tue, 9 Jul 2019 18:00:54 +0200 Subject: [PATCH 0175/1148] FIX: add missing hook calls --- htdocs/fourn/product/list.php | 57 ++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 16ed559814d..90ff76231d1 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -75,7 +75,12 @@ if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; } if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; } $parameters=array(); -$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks +$reshook=$hookmanager->executeHooks( + 'doActions', + $parameters, + $object, + $action +); if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); if (empty($reshook)) @@ -128,6 +133,17 @@ $massactionbutton=$form->selectMassAction('', $arrayofmassactions); $sql = "SELECT p.rowid, p.label, p.ref, p.fk_product_type, p.entity,"; $sql.= " ppf.fk_soc, ppf.ref_fourn, ppf.price as price, ppf.quantity as qty, ppf.unitprice,"; $sql.= " s.rowid as socid, s.nom as name"; + +// Add fields to SELECT from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks( + 'printFieldListSelect', + $parameters, + $object, + $action +); +$sql .= $hookmanager->resPrint; + $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; if ($catid) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie_product as cp ON cp.fk_product = p.rowid"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as ppf ON p.rowid = ppf.fk_product"; @@ -158,6 +174,14 @@ if ($fourn_id > 0) $sql .= " AND ppf.fk_soc = ".$fourn_id; } +// Add WHERE filters from hooks +$parameters = array(); +$reshook = $hookmanager->executeHooks( + 'printFieldListWhere', + $parameters +); +$sql .= $hookmanager->resPrint; + $sql .= $db->order($sortfield,$sortorder); // Count total nb of records without orderby and limit @@ -242,6 +266,17 @@ if ($resql) print '
'; print ''; print ''; + + // add filters from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldPreListTitle', + $parameters, + $object, + $action + ); + if (!empty($reshook)) print $hookmanager->resPrint; + print '\n"; @@ -292,6 +337,16 @@ if ($resql) print ''; + // add additional columns from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $objp, + $action + ); + if (!empty($reshook)) print $hookmanager->resPrint; + print ''; print "\n"; From 8aa147a4e518f7b1a4ba203c7825bcc8e82b2d79 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Wed, 10 Jul 2019 19:00:20 +0200 Subject: [PATCH 0176/1148] # missing hooks from dispatch.php and list.php --- htdocs/fourn/commande/dispatch.php | 83 ++++++++++++++++++++++++++++++ htdocs/fourn/product/list.php | 11 ++-- 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 4b15f04faa0..af2a2218410 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -491,11 +491,35 @@ if ($id > 0 || ! empty($ref)) { $sql = "SELECT l.rowid, l.fk_product, l.subprice, l.remise_percent, l.ref AS sref, SUM(l.qty) as qty,"; $sql .= " p.ref, p.label, p.tobatch, p.fk_default_warehouse"; + + // Enable hooks to alter the SQL query (SELECT) + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListSelect', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + $sql .= $hookmanager->resPrint; + $sql .= " FROM " . MAIN_DB_PREFIX . "commande_fournisseurdet as l"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON l.fk_product=p.rowid"; $sql .= " WHERE l.fk_commande = " . $object->id; if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) $sql .= " AND l.product_type = 0"; + + // Enable hooks to alter the SQL query (WHERE) + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListWhere', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + $sql .= $hookmanager->resPrint; + $sql .= " GROUP BY p.ref, p.label, p.tobatch, l.rowid, l.fk_product, l.subprice, l.remise_percent, p.fk_default_warehouse"; // Calculation of amount dispatched is done per fk_product so we must group by fk_product $sql .= " ORDER BY p.ref, p.label"; @@ -526,6 +550,18 @@ if ($id > 0 || ! empty($ref)) { print ''; print ''; print ''; + + // Enable hooks to append additional columns + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListTitle', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print "\n"; } @@ -608,6 +644,23 @@ if ($id > 0 || ! empty($ref)) { //print img_picto($langs->trans('AddDispatchBatchLine'), 'split.png', 'onClick="addDispatchLine(' . $i . ',\'' . $type . '\')"'); print ''; // Dispatch column print ''; // Warehouse column + + // Enable hooks to append additional columns + $parameters = array( + 'is_information_row' => true, // allows hook to distinguish between the + // rows with information and the rows with + // dispatch form input + 'objp' => $objp + ); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print ''; print ''; @@ -648,6 +701,23 @@ if ($id > 0 || ! empty($ref)) { //print img_picto($langs->trans('AddStockLocationLine'), 'split.png', 'onClick="addDispatchLine(' . $i . ',\'' . $type . '\')"'); print ''; // Dispatch column print ''; // Warehouse column + + // Enable hooks to append additional columns + $parameters = array( + 'is_information_row' => true, // allows hook to distinguish between the + // rows with information and the rows with + // dispatch form input + 'objp' => $objp + ); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print ''; print ''; @@ -699,6 +769,19 @@ if ($id > 0 || ! empty($ref)) { } print "\n"; + // Enable hooks to append additional columns + $parameters = array( + 'is_information_row' => false // this is a dispatch form row + ); + $reshook = $hookmanager->executeHooks( + 'printFieldListValue', + $parameters, + $object, + $action + ); + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; + print "\n"; } } diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 90ff76231d1..acfeb87fca9 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -142,6 +142,7 @@ $reshook = $hookmanager->executeHooks( $object, $action ); +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); $sql .= $hookmanager->resPrint; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; @@ -180,6 +181,7 @@ $reshook = $hookmanager->executeHooks( 'printFieldListWhere', $parameters ); +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); $sql .= $hookmanager->resPrint; $sql .= $db->order($sortfield,$sortorder); @@ -275,7 +277,8 @@ if ($resql) $object, $action ); - if (!empty($reshook)) print $hookmanager->resPrint; + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; print '\n"; @@ -345,7 +349,8 @@ if ($resql) $objp, $action ); - if (!empty($reshook)) print $hookmanager->resPrint; + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; print ''; From 75ae611f9e49fead3aa825249b55734a5088cab4 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Wed, 10 Jul 2019 17:53:14 +0200 Subject: [PATCH 0177/1148] FIX: calculation of $products_dispatched After the DB retrieval method was changed from fetch_row to fetch_object, the indices used became wrong. --- htdocs/fourn/commande/dispatch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 4b15f04faa0..e6fa2937e0b 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -482,7 +482,7 @@ if ($id > 0 || ! empty($ref)) { if ($num) { while ( $i < $num ) { $objd = $db->fetch_object($resql); - $products_dispatched[$objd->rowid] = price2num($objd->qty, 5); + $products_dispatched[$objd->fk_product] = price2num($objd->qty, 5); $i++; } } @@ -540,7 +540,7 @@ if ($id > 0 || ! empty($ref)) { if (! $objp->fk_product > 0) { $nbfreeproduct++; } else { - $remaintodispatch = price2num($objp->qty - (( float ) $products_dispatched[$objp->rowid]), 5); // Calculation of dispatched + $remaintodispatch = price2num($objp->qty - (( float ) $products_dispatched[$objp->fk_product]), 5); // Calculation of dispatched if ($remaintodispatch < 0) $remaintodispatch = 0; From b155fdc014caaeea15848605ae75e82823819c1f Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Fri, 12 Jul 2019 15:04:47 +0200 Subject: [PATCH 0178/1148] FIX: wrong display (and hidden input) for already dispatched quantity --- htdocs/fourn/commande/dispatch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index e6fa2937e0b..966be778773 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -556,7 +556,7 @@ if ($id > 0 || ! empty($ref)) { print '' . "\n"; // hidden fields for js function print ''; - print ''; + print ''; print ''; $linktoprod = '' . img_object($langs->trans("ShowProduct"), 'product') . ' ' . $objp->ref . ''; @@ -598,7 +598,7 @@ if ($id > 0 || ! empty($ref)) { print ''; // Already dispatched - print ''; + print ''; if (! empty($conf->productbatch->enabled) && $objp->tobatch == 1) { $type = 'batch'; From b0d46d492fdd738cab5b15202abb4414da373828 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 18:40:42 +0200 Subject: [PATCH 0179/1148] FIX #11509 --- htdocs/adherents/subscription/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/subscription/list.php b/htdocs/adherents/subscription/list.php index e3eb9b595ee..e7967aa4782 100644 --- a/htdocs/adherents/subscription/list.php +++ b/htdocs/adherents/subscription/list.php @@ -229,7 +229,7 @@ if ($search_type) $param.="&search_type=".urlencode($search_type); if ($date_select) $param.="&date_select=".urlencode($date_select); if ($search_lastname) $param.="&search_lastname=".urlencode($search_lastname); if ($search_login) $param.="&search_login=".urlencode($search_login); -if ($search_acount) $param.="&search_account=".urlencode($search_account); +if ($search_account) $param.="&search_account=".urlencode($search_account); if ($search_amount) $param.="&search_amount=".urlencode($search_amount); if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss); // Add $param from extra fields From 5778a02ee1f195ad457a07de6b4f986d6e4cb49a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 18:44:33 +0200 Subject: [PATCH 0180/1148] FIX #11505 --- htdocs/accountancy/journal/bankjournal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index d4a9ff0d3f6..8003cf1c523 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -964,7 +964,7 @@ if (empty($action) || $action == 'view') { $varlink = 'id_journal=' . $id_journal; - journalHead($nom, $nomlink, $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink); + journalHead($nom, '', $period, $periodlink, $description, $builddate, $exportlink, array('action' => ''), '', $varlink); // Test that setup is complete From e3968241335b6dea66c1b5b2e7ed0d7768c40ae1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 19:08:57 +0200 Subject: [PATCH 0181/1148] FIX #11507 --- htdocs/accountancy/admin/productaccount.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index 562dfd1505b..1c72ea61abd 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -462,7 +462,7 @@ if ($result) // print ''; // TODO: we shoul set a user defined value to adjust user square / wide screen size $trunclengh = empty($conf->global->ACCOUNTING_LENGTH_DESCRIPTION) ? 32 : $conf->global->ACCOUNTING_LENGTH_DESCRIPTION; - print ''; + print ''; } if ($accounting_product_mode == 'ACCOUNTANCY_SELL' || $accounting_product_mode == 'ACCOUNTANCY_SELL_INTRA' || $accounting_product_mode == 'ACCOUNTANCY_SELL_EXPORT') From 6c23154a91f683f300bac2b114acce2aa4c2d201 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 22:59:18 +0200 Subject: [PATCH 0182/1148] FIX #11506 --- htdocs/accountancy/admin/journals_list.php | 20 +++++++++----------- htdocs/langs/en_US/accountancy.lang | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php index cac81bfbcae..78cd92f90e0 100644 --- a/htdocs/accountancy/admin/journals_list.php +++ b/htdocs/accountancy/admin/journals_list.php @@ -162,7 +162,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha')) { if ($fieldnamekey == 'libelle' || ($fieldnamekey == 'label')) $fieldnamekey='Label'; if ($fieldnamekey == 'code') $fieldnamekey = 'Code'; - if ($fieldnamekey == 'nature') $fieldnamekey = 'Nature'; + if ($fieldnamekey == 'nature') $fieldnamekey = 'NatureOfJournal'; } // Other checks if (isset($_POST["code"])) @@ -437,7 +437,7 @@ if ($id) $valuetoshow=$langs->trans("Label"); } if ($fieldlist[$field]=='nature') { - $valuetoshow=$langs->trans("Nature"); + $valuetoshow=$langs->trans("NatureOfJournal"); } if ($valuetoshow != '') { @@ -516,7 +516,7 @@ if ($id) } // Title line with search boxes - print ''; + /*print ''; print ''; print ''; print ''; @@ -524,16 +524,14 @@ if ($id) print ''; print ''; print ''; print ''; - + */ + // Title of lines - print ''; + print ''; foreach ($fieldlist as $field => $value) { // Determine le nom du champ par rapport aux noms possibles @@ -558,7 +556,7 @@ if ($id) $valuetoshow=$langs->trans("Label"); } if ($fieldlist[$field]=='nature') { - $valuetoshow=$langs->trans("Nature"); + $valuetoshow=$langs->trans("NatureOfJournal"); } // Affiche nom du champ diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang index 6dfe4fc8c4f..4b22f512826 100644 --- a/htdocs/langs/en_US/accountancy.lang +++ b/htdocs/langs/en_US/accountancy.lang @@ -265,7 +265,7 @@ AccountingJournals=Accounting journals AccountingJournal=Accounting journal NewAccountingJournal=New accounting journal ShowAccoutingJournal=Show accounting journal -Nature=Nature +NatureOfJournal=Nature of Journal AccountingJournalType1=Miscellaneous operations AccountingJournalType2=Sales AccountingJournalType3=Purchases From ea349de0818dddff6859aaca349d0878d9a57cf3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 23:25:42 +0200 Subject: [PATCH 0183/1148] FIX #11498 --- dev/dolibarr_changes.txt | 9 +++++++++ htdocs/includes/mike42/escpos-php/Escpos.php | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dev/dolibarr_changes.txt b/dev/dolibarr_changes.txt index 5bad55fd4d2..e87b082dd06 100644 --- a/dev/dolibarr_changes.txt +++ b/dev/dolibarr_changes.txt @@ -27,6 +27,15 @@ With +ESCPOS: +------- +Replace + private $connector; +With + protected $connector; + + + NUSOAP: ------- * In file nusoap.php, to avoid a warning, diff --git a/htdocs/includes/mike42/escpos-php/Escpos.php b/htdocs/includes/mike42/escpos-php/Escpos.php index 57e7eb2c8ac..b8568260738 100644 --- a/htdocs/includes/mike42/escpos-php/Escpos.php +++ b/htdocs/includes/mike42/escpos-php/Escpos.php @@ -144,9 +144,11 @@ class Escpos { /** * @var PrintConnector + * @CHANGE */ - private $connector; - + protected $connector; + // private $connector; + /** * @var AbstractCapabilityProfile */ From d694360c66bea525997c471f535948864574ece4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 23:46:54 +0200 Subject: [PATCH 0184/1148] Fix warning --- htdocs/core/modules/modAgenda.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modAgenda.class.php b/htdocs/core/modules/modAgenda.class.php index 3b7c05c5ad1..f84ad6cbcfa 100644 --- a/htdocs/core/modules/modAgenda.class.php +++ b/htdocs/core/modules/modAgenda.class.php @@ -418,6 +418,6 @@ class modAgenda extends DolibarrModules $this->export_sql_end[$r] .=' WHERE ac.entity IN ('.getEntity('agenda').')'; if (empty($user->rights->societe->client->voir)) $this->export_sql_end[$r] .=' AND (sc.fk_user = '.(empty($user)?0:$user->id).' OR ac.fk_soc IS NULL)'; if (empty($user->rights->agenda->allactions->read)) $this->export_sql_end[$r] .=' AND acr.fk_element = '.(empty($user)?0:$user->id); - $this->export_sql_order[$r] .=' ORDER BY ac.datep'; + $this->export_sql_order[$r] =' ORDER BY ac.datep'; } } From fb5af65f4d1bdb6925e95bca0f1ddb02f01355a7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 15 Jul 2019 23:56:05 +0200 Subject: [PATCH 0185/1148] FIX #11466 --- htdocs/product/price.php | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/htdocs/product/price.php b/htdocs/product/price.php index 26970f1dd13..6bc7033ec23 100644 --- a/htdocs/product/price.php +++ b/htdocs/product/price.php @@ -1711,20 +1711,18 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) } print ''; - // Update all child soc - print ''; - print ''; - print ''; - print '
'; diff --git a/htdocs/product/stock/movement_card.php b/htdocs/product/stock/movement_card.php index b75042c7cca..85065e8ec2b 100644 --- a/htdocs/product/stock/movement_card.php +++ b/htdocs/product/stock/movement_card.php @@ -766,7 +766,7 @@ if ($resql) print '
'; print ''."\n"; - // Lignes des champs de filtre + // Fields title search print ''; if (! empty($arrayfields['m.rowid']['checked'])) { diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index 836bb97e50c..efcbc534c08 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -742,7 +742,7 @@ if ($resql) print '
'; print '
'."\n"; - // Lignes des champs de filtre + // Fields title search print ''; if (! empty($arrayfields['m.rowid']['checked'])) { diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php index 069be8aca96..b9799865e20 100644 --- a/htdocs/product/stock/replenish.php +++ b/htdocs/product/stock/replenish.php @@ -551,7 +551,7 @@ print '' ''. ''; -// Lignes des champs de filtre +// Fields title search print ''; print ''; print ''; diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index e40be9f0d10..17518df8ab6 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -628,7 +628,7 @@ if ($resql) print '
'; print '
 
'."\n"; - // Lignes des champs de filtre + // Fields title search print ''; // Ref if (! empty($arrayfields['e.ref']['checked'])) diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php index fe010c95e9c..dabf49215fd 100644 --- a/htdocs/supplier_proposal/list.php +++ b/htdocs/supplier_proposal/list.php @@ -391,7 +391,7 @@ if ($resql) $newcardbutton.= dolGetButtonTitle($langs->trans('NewAskPrice'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/supplier_proposal/card.php?action=create'); } - // Lignes des champs de filtre + // Fields title search print ''; if ($optioncss != '') print ''; print ''; From f5cc29417d8f550c1265844de8c9f543a20b9f00 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:50:35 +0200 Subject: [PATCH 0149/1148] Translation lignes -> lines --- htdocs/compta/facture/card.php | 4 ++-- .../class/ligneprelevement.class.php | 2 +- htdocs/contrat/class/contrat.class.php | 2 +- .../commande/doc/pdf_einstein.modules.php | 2 +- .../expensereport/doc/pdf_standard.modules.php | 4 ++-- .../modules/facture/doc/pdf_crabe.modules.php | 2 +- .../modules/facture/doc/pdf_sponge.modules.php | 2 +- htdocs/core/modules/modFournisseur.class.php | 4 ++-- .../product/doc/pdf_standard.modules.php | 2 +- .../reception/doc/pdf_squille.modules.php | 2 +- .../modules/stock/doc/pdf_standard.modules.php | 2 +- htdocs/expedition/contact.php | 2 +- htdocs/fichinter/class/fichinter.class.php | 2 +- htdocs/fourn/product/list.php | 2 +- .../tables/llx_commande_fournisseurdet.sql | 2 +- .../mysql/tables/llx_expensereport_det.sql | 2 +- .../mysql/tables/llx_facture_fourn_det.sql | 2 +- .../mysql/tables/llx_facturedet_rec.sql | 2 +- htdocs/install/step2.php | 2 +- htdocs/install/upgrade2.php | 18 +++++++++--------- htdocs/livraison/class/livraison.class.php | 4 +--- .../product/actions_card_product.class.php | 2 +- .../canvas/product/tpl/card_view.tpl.php | 2 +- .../service/actions_card_service.class.php | 2 +- .../canvas/service/tpl/card_view.tpl.php | 2 +- htdocs/product/reassort.php | 2 +- htdocs/product/reassortlot.php | 2 +- htdocs/reception/contact.php | 2 +- 28 files changed, 39 insertions(+), 41 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index 0adfb4e7ac2..968469ff1e0 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -638,7 +638,7 @@ if (empty($reshook)) $resteapayer = $object->total_ttc - $totalpaye; - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + // We check that invlice lines are transferred into accountancy $ventilExportCompta = $object->getVentilExportCompta(); // On verifie si aucun paiement n'a ete effectue @@ -4616,7 +4616,7 @@ elseif ($id > 0 || ! empty($ref)) // Editer une facture deja validee, sans paiement effectue et pas exporte en compta if ($object->statut == Facture::STATUS_VALIDATED) { - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + // We check that invlice lines are transferred into accountancy $ventilExportCompta = $object->getVentilExportCompta(); if ($ventilExportCompta == 0) diff --git a/htdocs/compta/prelevement/class/ligneprelevement.class.php b/htdocs/compta/prelevement/class/ligneprelevement.class.php index e76cc9d184d..c0e6921c95d 100644 --- a/htdocs/compta/prelevement/class/ligneprelevement.class.php +++ b/htdocs/compta/prelevement/class/ligneprelevement.class.php @@ -22,7 +22,7 @@ /** * \file htdocs/compta/prelevement/class/ligneprelevement.class.php * \ingroup prelevement - * \brief Fichier de la classe des lignes de prelevements + * \brief File of class to manage lines of Direct Debit orders */ diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 7273ffc3a8e..e7461e2a053 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -862,7 +862,7 @@ class Contrat extends CommonObject } else { - dol_syslog(get_class($this)."::Fetch Erreur lecture des lignes de contrats liees aux produits"); + dol_syslog(get_class($this)."::Fetch Error when reading lines of contracts linked to products"); return -3; } diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 0e064991444..0d95646c441 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -549,7 +549,7 @@ class pdf_einstein extends ModelePDFCommandes $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index 99d2ab322e0..e322ef1aa84 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -414,8 +414,8 @@ class pdf_standard extends ModeleExpenseReport // $nblineFollowComment = max($nbLineCommentNeed, $nbLineTypeNeed); // } - //$nexY+=$nblineFollowComment*($pdf->getFontSize()*1.3); // Passe espace entre les lignes - $nexY += ($pdf->getFontSize()*1.3); // Passe espace entre les lignes + //$nexY+=$nblineFollowComment*($pdf->getFontSize()*1.3); // Add space between lines + $nexY += ($pdf->getFontSize()*1.3); // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 4536add16bb..53929f28e75 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -318,7 +318,7 @@ class pdf_crabe extends ModelePDFFactures global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php index 422060ab30b..b5529c78d8e 100644 --- a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php @@ -329,7 +329,7 @@ class pdf_sponge extends ModelePDFFactures global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $nbpayments = count($object->getListOfPayments()); diff --git a/htdocs/core/modules/modFournisseur.class.php b/htdocs/core/modules/modFournisseur.class.php index a545ce1378b..8ba2f173ffd 100644 --- a/htdocs/core/modules/modFournisseur.class.php +++ b/htdocs/core/modules/modFournisseur.class.php @@ -276,7 +276,7 @@ class modFournisseur extends DolibarrModules $r++; $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='Factures fournisseurs et lignes de facture'; + $this->export_label[$r]='Vendor invoices and lines of invoices'; $this->export_icon[$r]='bill'; $this->export_permission[$r]=array(array("fournisseur","facture","export")); $this->export_fields_array[$r]=array( @@ -484,7 +484,7 @@ class modFournisseur extends DolibarrModules // Order $r++; $this->export_code[$r]=$this->rights_class.'_'.$r; - $this->export_label[$r]='Commandes fournisseurs et lignes de commandes'; + $this->export_label[$r]='Purchase Orders and lines of purchase orders'; $this->export_icon[$r]='order'; $this->export_permission[$r]=array(array("fournisseur","commande","export")); $this->export_fields_array[$r]=array( diff --git a/htdocs/core/modules/product/doc/pdf_standard.modules.php b/htdocs/core/modules/product/doc/pdf_standard.modules.php index 6089a9fe66e..a9bc06f1021 100644 --- a/htdocs/core/modules/product/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/product/doc/pdf_standard.modules.php @@ -493,7 +493,7 @@ class pdf_standard extends ModelePDFProduct $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index 10be4430aea..71e78368d9c 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -216,7 +216,7 @@ class pdf_squille extends ModelePdfReception global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); diff --git a/htdocs/core/modules/stock/doc/pdf_standard.modules.php b/htdocs/core/modules/stock/doc/pdf_standard.modules.php index 4be99b07c11..6c222f96dca 100644 --- a/htdocs/core/modules/stock/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/stock/doc/pdf_standard.modules.php @@ -461,7 +461,7 @@ class pdf_standard extends ModelePDFStock $pdf->SetLineStyle(array('dash'=>0)); } - $nexY+=2; // Passe espace entre les lignes + $nexY+=2; // Add space between lines // Detect if some page were added automatically and output _tableau for past pages while ($pagenb < $pageposafter) diff --git a/htdocs/expedition/contact.php b/htdocs/expedition/contact.php index 4acb2fce932..9310df52ddf 100644 --- a/htdocs/expedition/contact.php +++ b/htdocs/expedition/contact.php @@ -255,7 +255,7 @@ if ($id > 0 || ! empty($ref)) dol_fiche_end(); - // Lignes de contacts + // Lines of contacts echo '
'; // Contacts lines (modules that overwrite templates must declare this into descriptor) diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 807b547a4bc..d9e01a6579f 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -1386,7 +1386,7 @@ class Fichinter extends CommonObject } /** - * Classe permettant la gestion des lignes d'intervention + * Class to manage intervention lines */ class FichinterLigne extends CommonObjectLine { diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php index 8fd7b809587..bd5c0f1fd1e 100644 --- a/htdocs/fourn/product/list.php +++ b/htdocs/fourn/product/list.php @@ -249,7 +249,7 @@ if ($resql) print ''; print '
'; - // Lignes des titres + // Line for title print ''; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("RefSupplierShort", $_SERVER["PHP_SELF"], "ppf.ref_fourn", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql b/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql index dfbf4e261eb..f107e348bbe 100644 --- a/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql +++ b/htdocs/install/mysql/tables/llx_commande_fournisseurdet.sql @@ -47,7 +47,7 @@ create table llx_commande_fournisseurdet date_start datetime DEFAULT NULL, -- date debut si service date_end datetime DEFAULT NULL, -- date fin si service info_bits integer DEFAULT 0, -- TVA NPR ou non - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines rang integer DEFAULT 0, import_key varchar(14), fk_unit integer DEFAULT NULL, diff --git a/htdocs/install/mysql/tables/llx_expensereport_det.sql b/htdocs/install/mysql/tables/llx_expensereport_det.sql index 75d503ac181..ee583852deb 100644 --- a/htdocs/install/mysql/tables/llx_expensereport_det.sql +++ b/htdocs/install/mysql/tables/llx_expensereport_det.sql @@ -43,7 +43,7 @@ CREATE TABLE llx_expensereport_det total_ttc double(24,8) DEFAULT 0 NOT NULL, date date NOT NULL, info_bits integer DEFAULT 0, -- TVA NPR ou non - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines fk_multicurrency integer, multicurrency_code varchar(255), multicurrency_subprice double(24,8) DEFAULT 0, diff --git a/htdocs/install/mysql/tables/llx_facture_fourn_det.sql b/htdocs/install/mysql/tables/llx_facture_fourn_det.sql index 2f75f9ff54e..57097f600c0 100644 --- a/htdocs/install/mysql/tables/llx_facture_fourn_det.sql +++ b/htdocs/install/mysql/tables/llx_facture_fourn_det.sql @@ -47,7 +47,7 @@ create table llx_facture_fourn_det date_end datetime DEFAULT NULL, -- date fin si service info_bits integer DEFAULT 0, -- TVA NPR ou non fk_code_ventilation integer DEFAULT 0 NOT NULL, - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines rang integer DEFAULT 0, import_key varchar(14), fk_unit integer DEFAULT NULL, diff --git a/htdocs/install/mysql/tables/llx_facturedet_rec.sql b/htdocs/install/mysql/tables/llx_facturedet_rec.sql index 267abcd5053..8bb0c06e8f8 100644 --- a/htdocs/install/mysql/tables/llx_facturedet_rec.sql +++ b/htdocs/install/mysql/tables/llx_facturedet_rec.sql @@ -52,7 +52,7 @@ create table llx_facturedet_rec buy_price_ht double(24,8) DEFAULT 0, -- buying price. Note: this value is saved as an always positive value, even on credit notes (it is price we bought the product before selling it). fk_product_fournisseur_price integer DEFAULT NULL, -- reference of supplier price when line was added (may be used to update buy_price_ht current price when future invoice will be created) - special_code integer UNSIGNED DEFAULT 0, -- code pour les lignes speciales + special_code integer UNSIGNED DEFAULT 0, -- code for special lines rang integer DEFAULT 0, -- ordre d'affichage fk_contract_line integer NULL, -- id of contract line when template invoice comes from contract lines fk_unit integer DEFAULT NULL, diff --git a/htdocs/install/step2.php b/htdocs/install/step2.php index 1a8a4108827..4e645bb6934 100644 --- a/htdocs/install/step2.php +++ b/htdocs/install/step2.php @@ -311,7 +311,7 @@ if ($action == "set") { $buf = fgets($fp, 4096); - // Cas special de lignes autorisees pour certaines versions uniquement + // Special case of lines allowed for some version only if ($choix == 1 && preg_match('/^--\sV([0-9\.]+)/i', $buf, $reg)) { $versioncommande=explode('.', $reg[1]); diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index c932b2631e8..11bfe9ff99f 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -1432,7 +1432,7 @@ function migrate_paiementfourn_facturefourn($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de facture + * Update total of invoice lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1453,7 +1453,7 @@ function migrate_price_facture($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationInvoice')."
\n"; - // Liste des lignes facture non a jour + // List of invoice lines not up to date $sql = "SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,"; $sql.= " f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f"; $sql.= " FROM ".MAIN_DB_PREFIX."facturedet as fd, ".MAIN_DB_PREFIX."facture as f"; @@ -1551,7 +1551,7 @@ function migrate_price_facture($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de propal + * Update total of proposal lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1570,7 +1570,7 @@ function migrate_price_propal($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationProposal')."
\n"; - // Liste des lignes propal non a jour + // List of proposal lines not up to date $sql = "SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,"; $sql.= " p.rowid as propalid, p.remise_percent as remise_percent_global"; $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pd, ".MAIN_DB_PREFIX."propal as p"; @@ -1679,7 +1679,7 @@ function migrate_price_contrat($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationContract')."
\n"; - // Liste des lignes contrat non a jour + // List of contract lines not up to date $sql = "SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,"; $sql.= " c.rowid as contratid"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."contrat as c"; @@ -1748,7 +1748,7 @@ function migrate_price_contrat($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de commande + * Update total of sales order lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1767,7 +1767,7 @@ function migrate_price_commande($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationOrder')."
\n"; - // Liste des lignes commande non a jour + // List of sales orders lines not up to date $sql = "SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,"; $sql.= " c.rowid as commandeid, c.remise_percent as remise_percent_global"; $sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd, ".MAIN_DB_PREFIX."commande as c"; @@ -1865,7 +1865,7 @@ function migrate_price_commande($db, $langs, $conf) } /** - * Mise a jour des totaux lignes de commande fournisseur + * Update total of purchase order lines * * @param DoliDB $db Database handler * @param Translate $langs Object langs @@ -1884,7 +1884,7 @@ function migrate_price_commande_fournisseur($db, $langs, $conf) print '
'; print ''.$langs->trans('MigrationSupplierOrder')."
\n"; - // Liste des lignes commande non a jour + // List of purchase order lines not up to date $sql = "SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,"; $sql.= " c.rowid as commandeid, c.remise_percent as remise_percent_global"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cd, ".MAIN_DB_PREFIX."commande_fournisseur as c"; diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 5d01dffa886..9021faf7542 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -322,9 +322,7 @@ class Livraison extends CommonObject // fetch optionals attributes and labels $this->fetch_optionals(); - /* - * Lignes - */ + // Load lines $result=$this->fetch_lines(); if ($result < 0) { diff --git a/htdocs/product/canvas/product/actions_card_product.class.php b/htdocs/product/canvas/product/actions_card_product.class.php index db7ad4d2b70..6247d84b045 100644 --- a/htdocs/product/canvas/product/actions_card_product.class.php +++ b/htdocs/product/canvas/product/actions_card_product.class.php @@ -199,7 +199,7 @@ class ActionsCardProduct if ($action == 'view') { // Photo - $this->tpl['nblignes'] = 4; + $this->tpl['nblines'] = 4; if ($this->object->is_photo_available($conf->product->multidir_output[$this->object->entity])) { $this->tpl['photos'] = $this->object->show_photos('product', $conf->product->multidir_output[$this->object->entity], 1, 1, 0, 0, 0, 80); diff --git a/htdocs/product/canvas/product/tpl/card_view.tpl.php b/htdocs/product/canvas/product/tpl/card_view.tpl.php index 06d9faf05b7..1f330257073 100644 --- a/htdocs/product/canvas/product/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/product/tpl/card_view.tpl.php @@ -56,7 +56,7 @@ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); photos) { ?> - diff --git a/htdocs/product/canvas/service/actions_card_service.class.php b/htdocs/product/canvas/service/actions_card_service.class.php index fab5794c82a..85b1feb6795 100644 --- a/htdocs/product/canvas/service/actions_card_service.class.php +++ b/htdocs/product/canvas/service/actions_card_service.class.php @@ -195,7 +195,7 @@ class ActionsCardService if ($action == 'view') { // Photo - $this->tpl['nblignes'] = 4; + $this->tpl['nblines'] = 4; if ($this->object->is_photo_available($conf->service->multidir_output[$this->object->entity])) { $this->tpl['photos'] = $this->object->show_photos('product', $conf->service->multidir_output[$this->object->entity], 1, 1, 0, 0, 0, 80); diff --git a/htdocs/product/canvas/service/tpl/card_view.tpl.php b/htdocs/product/canvas/service/tpl/card_view.tpl.php index 8d2409ba5e2..29a0e18a8b7 100644 --- a/htdocs/product/canvas/service/tpl/card_view.tpl.php +++ b/htdocs/product/canvas/service/tpl/card_view.tpl.php @@ -56,7 +56,7 @@ dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref'); photos) { ?> - diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index f75ba10a03c..1ecb136d817 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -303,7 +303,7 @@ if ($resql) print ''; print ''; - // Lignes des titres + //Line for column titles print ""; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "p.label", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index d0803f40b95..5d569fc41be 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -299,7 +299,7 @@ if ($resql) print ''; print ''; - // Lignes des titres + //Line for column titles print ""; print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", $param, "", "", $sortfield, $sortorder); print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "p.label", $param, "", "", $sortfield, $sortorder); diff --git a/htdocs/reception/contact.php b/htdocs/reception/contact.php index d51062ef7ef..c3deb28c4bc 100644 --- a/htdocs/reception/contact.php +++ b/htdocs/reception/contact.php @@ -257,7 +257,7 @@ if ($id > 0 || ! empty($ref)) dol_fiche_end(); - // Lignes de contacts + // Lines of contacts echo '
'; // Contacts lines (modules that overwrite templates must declare this into descriptor) From 4387d40b9a5f243ecc48cbc70885201d1ab3ad9b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 5 Jul 2019 21:55:08 +0200 Subject: [PATCH 0150/1148] Translation lignes -> lines --- htdocs/core/class/commonstickergenerator.class.php | 2 +- htdocs/core/modules/expedition/doc/pdf_espadon.modules.php | 2 +- htdocs/core/modules/expedition/doc/pdf_rouget.modules.php | 2 +- htdocs/core/modules/expensereport/doc/pdf_standard.modules.php | 2 +- htdocs/install/mysql/migration/3.7.0-3.8.0.sql | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/commonstickergenerator.class.php b/htdocs/core/class/commonstickergenerator.class.php index 18bcfcee8d5..a1d0d7f8728 100644 --- a/htdocs/core/class/commonstickergenerator.class.php +++ b/htdocs/core/class/commonstickergenerator.class.php @@ -267,7 +267,7 @@ abstract class CommonStickerGenerator protected function _Get_Height_Chars($pt) { // phpcs:enable - // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes + // Array for link between height of characters and space between lines $_Table_Hauteur_Chars = array(6=>2, 7=>2.5, 8=>3, 9=>3.5, 10=>4, 11=>6, 12=>7, 13=>8, 14=>9, 15=>10); if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { return $_Table_Hauteur_Chars[$pt]; diff --git a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php index 745c09c8130..5bcd6d153d0 100644 --- a/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_espadon.modules.php @@ -253,7 +253,7 @@ class pdf_espadon extends ModelePdfExpedition global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index d255c4486fd..44d0e3a5dda 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -282,7 +282,7 @@ class pdf_rouget extends ModelePdfExpedition global $action; $reshook=$hookmanager->executeHooks('beforePDFCreation', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks - // Set nblignes with the new facture lines content after hook + // Set nblines with the new facture lines content after hook $nblines = count($object->lines); $pdf=pdf_getInstance($this->format); diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php index e322ef1aa84..b85ca573188 100644 --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php @@ -400,7 +400,7 @@ class pdf_standard extends ModeleExpenseReport $pdf->setPageOrientation('', 1, 0); // The only function to edit the bottom margin of current page to set it. //$nblineFollowComment = 1; - // Cherche nombre de lignes a venir pour savoir si place suffisante + // Search number of lines coming to know if there is enough room // if ($i < ($nblines - 1)) // If it's not last line // { // //Fetch current description to know on which line the next one should be placed diff --git a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql index ebcca580870..ca677fc5224 100755 --- a/htdocs/install/mysql/migration/3.7.0-3.8.0.sql +++ b/htdocs/install/mysql/migration/3.7.0-3.8.0.sql @@ -284,7 +284,7 @@ CREATE TABLE llx_expensereport_det total_ttc double(24,8) DEFAULT 0 NOT NULL, date date NOT NULL, info_bits integer DEFAULT 0, -- TVA NPR ou non - special_code integer DEFAULT 0, -- code pour les lignes speciales + special_code integer DEFAULT 0, -- code for special lines rang integer DEFAULT 0, -- position of line import_key varchar(14) ) ENGINE=innodb; From 266ed86194b0ac6be2f19d72f7613597b3cda876 Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Mon, 8 Jul 2019 12:37:24 +0200 Subject: [PATCH 0151/1148] NEW Add a category to a contact in API --- htdocs/societe/class/api_contacts.class.php | 42 +++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/htdocs/societe/class/api_contacts.class.php b/htdocs/societe/class/api_contacts.class.php index 772d8d3fe10..f94e182b010 100644 --- a/htdocs/societe/class/api_contacts.class.php +++ b/htdocs/societe/class/api_contacts.class.php @@ -378,6 +378,48 @@ class Contacts extends DolibarrApi return $result; } + /** + * Add a category to a contact + * + * @url POST {id}/categories/{category_id} + * + * @param int $id Id of contact + * @param int $category_id Id of category + * + * @return mixed + * + * @throws 401 RestException Insufficient rights + * @throws 401 RestException Access not allowed for login + * @throws 404 RestException Category not found + * @throws 404 RestException Contact not found + */ + public function addCategory($id, $category_id) + { + if(! DolibarrApiAccess::$user->rights->societe->contact->creer) { + throw new RestException(401, 'Insufficient rights'); + } + + $result = $this->contact->fetch($id); + if (! $result) { + throw new RestException(404, 'Contact not found'); + } + $category = new Categorie($this->db); + $result = $category->fetch($category_id); + if (! $result) { + throw new RestException(404, 'category not found'); + } + + if (! DolibarrApi::_checkAccessToResource('contact', $this->contact->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + if (! DolibarrApi::_checkAccessToResource('category', $category->id)) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $category->add_type($this->contact, 'contact'); + + return $this->_cleanObjectDatas($this->contact); + } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore /** From 9c47cb6f916ed057d17ed9242139b9bd4e9e2336 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Mon, 8 Jul 2019 23:16:32 +0200 Subject: [PATCH 0152/1148] NEW : can choose lines while creating order from origin --- htdocs/commande/card.php | 7 +++++-- htdocs/core/class/commonobject.class.php | 11 +++++++---- htdocs/core/tpl/originproductline.tpl.php | 4 ++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 7362f30e5a8..f9fd3a716f5 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -232,6 +232,7 @@ if (empty($reshook)) { $datecommande = dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')); $datelivraison = dol_mktime(12, 0, 0, GETPOST('liv_month'), GETPOST('liv_day'), GETPOST('liv_year')); + $selectedLines = GETPOST('toselect'); if ($datecommande == '') { setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentities('Date')), null, 'errors'); @@ -338,6 +339,8 @@ if (empty($reshook)) for($i = 0; $i < $num; $i ++) { + if(!in_array($lines[$i]->id, $selectedLines)) continue; // Skip unselected lines + $label = (! empty($lines[$i]->label) ? $lines[$i]->label : ''); $desc = (! empty($lines[$i]->desc) ? $lines[$i]->desc : ''); $product_type = (! empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0); @@ -1870,8 +1873,6 @@ if ($action == 'create' && $user->rights->commande->creer) print ''; print ''; - print ''; - // Show origin lines if (! empty($origin) && ! empty($originid) && is_object($objectsrc)) { $title = $langs->trans('ProductsAndServices'); @@ -1883,6 +1884,8 @@ if ($action == 'create' && $user->rights->commande->creer) print '
label; ?> + photos; ?> label; ?> + photos; ?>
'; } + + print ''; } else { // Mode view $now = dol_now(); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 0a300476fb5..f3832ff2782 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4145,7 +4145,7 @@ abstract class CommonObject */ public function printOriginLinesList($restrictlist = '') { - global $langs, $hookmanager, $conf; + global $langs, $hookmanager, $conf, $form; print '
'.$langs->trans('Ref').''.$langs->trans('Unit').''.$langs->trans('ReductionShort').'
'.$langs->trans('ReductionShort').''.$form->showCheckAddButtons('checkforselect', 1).'
'.$langs->trans($this->tpl['unit']).''.$this->tpl['remise_percent'].'
'; From a3f5397988c7437e34d1435ff86feec19104e0e6 Mon Sep 17 00:00:00 2001 From: atm-lena Date: Wed, 10 Jul 2019 15:55:50 +0200 Subject: [PATCH 0159/1148] FIX help text 2 --- htdocs/core/tpl/commonfields_view.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/commonfields_view.tpl.php b/htdocs/core/tpl/commonfields_view.tpl.php index b6b2e572e49..86a58d346fe 100644 --- a/htdocs/core/tpl/commonfields_view.tpl.php +++ b/htdocs/core/tpl/commonfields_view.tpl.php @@ -52,7 +52,7 @@ foreach($object->fields as $key => $val) if ($val['notnull'] > 0) print ' fieldrequired'; if ($val['type'] == 'text' || $val['type'] == 'html') print ' tdtop'; print '">'; - if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $val['help']); + if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help'])); else print $langs->trans($val['label']); print ''; @@ -91,7 +91,7 @@ foreach($object->fields as $key => $val) if ($val['notnull'] > 0) print ' fieldrequired'; if ($val['type'] == 'text' || $val['type'] == 'html') print ' tdtop'; print '">'; - if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $val['help']); + if (! empty($val['help'])) print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help'])); else print $langs->trans($val['label']); print ''; From cce8f98afc7638becb92e2a4e9344c7de40c2b21 Mon Sep 17 00:00:00 2001 From: gauthier Date: Wed, 10 Jul 2019 16:33:03 +0200 Subject: [PATCH 0160/1148] FIX : accounting mode must be taken from global conf, because there's no way to choose a mode with interface --- htdocs/compta/stats/byratecountry.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php index 2c43db42d13..cd41649cc89 100644 --- a/htdocs/compta/stats/byratecountry.php +++ b/htdocs/compta/stats/byratecountry.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/expensereport/class/paymentexpensereport.class. // Load translation files required by the page $langs->loadLangs(array("other","compta","banks","bills","companies","product","trips","admin","accountancy")); -$modecompta = GETPOST('modecompta','alpha'); +$modecompta = $conf->global->ACCOUNTING_MODE; // Date range $year=GETPOST("year",'int'); From abd0abf11531b196fe07e8bac545ea95071b95ef Mon Sep 17 00:00:00 2001 From: Nicolas ZABOURI Date: Wed, 10 Jul 2019 18:36:12 +0200 Subject: [PATCH 0161/1148] FIX element name in update_price --- htdocs/core/class/commonobject.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index f0fe7bf437c..43f78b571de 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -12,7 +12,7 @@ * Copyright (C) 2015 Alexandre Spangaro * Copyright (C) 2016 Bahfir abbes * Copyright (C) 2017 ATM Consulting - * Copyright (C) 2017 Nicolas ZABOURI + * Copyright (C) 2017-2019 Nicolas ZABOURI * Copyright (C) 2017 Rui Strecht * Copyright (C) 2018 Frederic France * @@ -2615,7 +2615,7 @@ abstract class CommonObject $MODULE = ""; if ($this->element == 'propal') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_PROPOSAL"; - elseif ($this->element == 'order') + elseif ($this->element == 'commande') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_ORDER"; elseif ($this->element == 'facture') $MODULE = "MODULE_DISALLOW_UPDATE_PRICE_INVOICE"; From 4f0316580672122e1154c148935d5e17264ad433 Mon Sep 17 00:00:00 2001 From: "atm-florian.m" Date: Thu, 11 Jul 2019 12:28:24 +0200 Subject: [PATCH 0162/1148] FIX: outdated phpdoc --- htdocs/expedition/class/expedition.class.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index a8d9acc7b48..ea6e003d326 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -1073,12 +1073,14 @@ class Expedition extends CommonObject } } - /** - * Delete shipment. - * Warning, do not delete a shipment if a delivery is linked to (with table llx_element_element) - * - * @return int >0 if OK, 0 if deletion done but failed to delete files, <0 if KO - */ + /** + * Delete shipment. + * Warning, do not delete a shipment if a delivery is linked to (with table llx_element_element) + * + * @param bool $also_update_stock true if the stock should be increased back (false by default) + * @return int >0 if OK, 0 if deletion done but failed to delete files, <0 if KO + * @throws Exception + */ function delete($also_update_stock = false) { global $conf, $langs, $user; From 694be619b26adfa705b2fd92675a4599da1f3fe7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 11 Jul 2019 22:16:32 +0200 Subject: [PATCH 0163/1148] Fix doxygen --- htdocs/product/class/product.class.php | 30 +++++++++++++++----------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index fc966f7f19a..9c515d619c6 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -272,13 +272,26 @@ class Product extends CommonObject public $accountancy_code_buy; /** - * Main barcode - * barcode value + * Main Barcode value * * @var string */ public $barcode; + /** + * Main Barcode type ID + * + * @var int + */ + public $barcode_type; + + /** + * Main Barcode type code + * + * @var string + */ + public $barcode_type_code; + /** * Additional barcodes (Some products have different barcodes according to the country of origin of manufacture) * @@ -294,7 +307,7 @@ class Product extends CommonObject public $multilangs=array(); - //! Taille de l'image + //! Size of image public $imgWidth; public $imgHeight; @@ -348,16 +361,7 @@ class Product extends CommonObject public $fields = array( - 'rowid' => array( - 'type'=>'integer', - 'label'=>'TechnicalID', - 'enabled'=>1, - 'visible'=>-2, - 'notnull'=>1, - 'index'=>1, - 'position'=>1, - 'comment'=>'Id', - ), + 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), 'ref' =>array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'), 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'default'=>1, 'notnull'=>1, 'index'=>1, 'position'=>20), 'note_public' =>array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>1, 'visible'=>0, 'position'=>61), From b1e21ed5fc302ebef8fe6b63dc336074ec997233 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 11 Jul 2019 22:18:44 +0200 Subject: [PATCH 0164/1148] FIX Computed field were not calculated into lists. --- htdocs/core/class/extrafields.class.php | 2 ++ .../core/tpl/extrafields_list_print_fields.tpl.php | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index eeb653aec8a..9e83a1d836b 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1627,6 +1627,8 @@ class ExtraFields if ($hidden) return ''; // This is a protection. If field is hidden, we should just not call this method. + //if ($computed) $value = // $value is already calculated into $value before calling this method + $showsize=0; if ($type == 'date') { diff --git a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php index 1dad8a6739d..35aefb9f719 100644 --- a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php +++ b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php @@ -40,7 +40,17 @@ if (! empty($extrafieldsobjectkey)) // $extrafieldsobject is the $object->table_ { $value = $obj->$tmpkey; } - + // If field is a computed field, we make computation to get value + if ($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]) + { + //global $obj, $object; + //var_dump($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]); + //var_dump($obj); + //var_dump($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key]); + $value = dol_eval($extrafields->attributes[$extrafieldsobjectkey]['computed'][$key], 1); + //var_dump($value); + } + print $extrafields->showOutputField($key, $value, '', $extrafieldsobjectkey); print ''; $searchpicto=$form->showFilterButtons(); print $searchpicto; @@ -257,6 +292,16 @@ if ($resql) print_liste_field_titre("BuyingPrice",$_SERVER["PHP_SELF"], "ppf.price",$param,"",'align="right"',$sortfield,$sortorder); print_liste_field_titre("QtyMin",$_SERVER["PHP_SELF"], "ppf.quantity",$param,"",'align="right"',$sortfield,$sortorder); print_liste_field_titre("UnitPrice",$_SERVER["PHP_SELF"], "ppf.unitprice",$param,"",'align="right"',$sortfield,$sortorder); + + // add header cells from hooks + $parameters = array(); + $reshook = $hookmanager->executeHooks( + 'printFieldListTitle', + $parameters, + $object, + $action + ); + if (!empty($reshook)) print $hookmanager->resPrint; print_liste_field_titre('',$_SERVER["PHP_SELF"]); print "
'.(isset($objp->unitprice) ? price($objp->unitprice) : '').'
' . $langs->trans("QtyToDispatchShort") . '' . $langs->trans("Warehouse") . '
'; $searchpicto=$form->showFilterButtons(); @@ -301,7 +304,8 @@ if ($resql) $object, $action ); - if (!empty($reshook)) print $hookmanager->resPrint; + if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + print $hookmanager->resPrint; print_liste_field_titre('',$_SERVER["PHP_SELF"]); print "
' . $objp->qty . '' . $products_dispatched[$objp->rowid] . '' . (float) $products_dispatched[$objp->fk_product] . '' . $obj->description . '' . nl2br(dol_trunc($obj->description, $trunclengh)) . '' . nl2br(dol_trunc($obj->description, $trunclengh)) . '
'; - if ($filterfound) - { - $searchpicto=$form->showFilterAndCheckAddButtons(0); - print $searchpicto; - } + $searchpicto=$form->showFilterButtons(); + print $searchpicto; print '
'; - print $langs->trans('ForceUpdateChildPriceSoc'); - print ''; - print ''; - print '
'; dol_fiche_end(); print '
'; + + // Update all child soc + print '
'; + print ' '; + print $langs->trans('ForceUpdateChildPriceSoc'); + print '
'; + print ''; print '     '; print ''; @@ -1804,10 +1802,8 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) // Update all child soc print '
'; - print $langs->trans('ForceUpdateChildPriceSoc'); print ''; - print ''; print '
'; + print ''; print 'id . '&socid=' . $line->fk_soc . '">'; print img_info($langs->trans('PriceByCustomerLog')); print ''; From f826e9631cafe5e54cc6918714b81445713d4ea0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Jul 2019 00:12:22 +0200 Subject: [PATCH 0186/1148] FIX #11463 --- htdocs/societe/agenda.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index 13838812d9d..53a1ee5d7ed 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; -$langs->load(array("companies", "bills", "propal", "orders")); +$langs->loadLangs(array("companies", "bills", "propal", "orders")); if (GETPOST('actioncode', 'array')) { From 70ff806fdffdd50435afb1e043ea59f5011bbe90 Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 16 Jul 2019 10:41:01 +0200 Subject: [PATCH 0187/1148] fix fourn code preload --- htdocs/societe/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index a8991614301..2a86465d4f2 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -949,12 +949,13 @@ else if(empty($duplicate_code_error)) { $object->code_client = GETPOST('customer_code', 'alpha'); $object->fournisseur = GETPOST('fournisseur')?GETPOST('fournisseur'):$object->fournisseur; + $object->code_fournisseur = GETPOST('supplier_code', 'alpha'); } else { setEventMessages($langs->trans('NewCustomerSupplierCodeProposed'),'', 'warnings'); } - $object->code_fournisseur = GETPOST('supplier_code', 'alpha'); + $object->address = GETPOST('address', 'alpha'); $object->zip = GETPOST('zipcode', 'alpha'); $object->town = GETPOST('town', 'alpha'); From c9fe91138d42963e6343923b0b812bfcb893051b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 16 Jul 2019 12:39:43 +0200 Subject: [PATCH 0188/1148] FIX better compatibility with Multicompany --- htdocs/opensurvey/index.php | 16 +++------------- htdocs/ticket/index.php | 4 ++-- htdocs/ticket/list.php | 3 +-- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php index 4c60a807445..1ddfc47d99a 100644 --- a/htdocs/opensurvey/index.php +++ b/htdocs/opensurvey/index.php @@ -37,18 +37,6 @@ $langs->load("opensurvey"); llxHeader(); -$nbsondages=0; -$sql='SELECT COUNT(*) as nb FROM '.MAIN_DB_PREFIX.'opensurvey_sondage'; -$resql=$db->query($sql); -if ($resql) -{ - $obj=$db->fetch_object($resql); - $nbsondages=$obj->nb; -} -else dol_print_error($db,''); - - - print load_fiche_titre($langs->trans("OpenSurveyArea")); @@ -56,7 +44,9 @@ print '
'; $nbsondages=0; -$sql='SELECT COUNT(*) as nb FROM '.MAIN_DB_PREFIX.'opensurvey_sondage'; +$sql = 'SELECT COUNT(*) as nb'; +$sql.= ' FROM '.MAIN_DB_PREFIX.'opensurvey_sondage'; +$sql.= ' WHERE entity IN ('.getEntity('survey').')'; $resql=$db->query($sql); if ($resql) { diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php index 086ea63bc0e..59a2bae5f46 100644 --- a/htdocs/ticket/index.php +++ b/htdocs/ticket/index.php @@ -127,7 +127,7 @@ if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", " . MAIN_DB_PREFIX . "societe_commerciaux as sc"; } -$sql .= ' WHERE t.entity IN (' . getEntity('ticket', 1) . ')'; +$sql .= ' WHERE t.entity IN (' . getEntity('ticket') . ')'; $sql .= " AND t.fk_statut IS NOT NULL"; $sql .= " AND date_format(datec,'%Y') = '" . $endyear . "'"; if (!$user->rights->societe->client->voir && !$socid) { @@ -271,7 +271,7 @@ if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", " . MAIN_DB_PREFIX . "societe_commerciaux as sc"; } -$sql .= ' WHERE t.entity IN (' . getEntity('ticket', 1) . ')'; +$sql .= ' WHERE t.entity IN (' . getEntity('ticket') . ')'; $sql .= " AND t.fk_statut=0"; if (!$user->rights->societe->client->voir && !$socid) { $sql .= " AND t.fk_soc = sc.fk_soc AND sc.fk_user = " . $user->id; diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 64ec859cc0c..965677ded0e 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -209,8 +209,7 @@ $sql.=$hookmanager->resPrint; $sql=preg_replace('/, $/','', $sql); $sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; -if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; -else $sql.=" WHERE 1 = 1"; +$sql.= " WHERE t.entity IN (".getEntity($object->element).")"; foreach($search as $key => $val) { if ($key == 'fk_statut' && $search[$key] == -1) continue; From 464bda996c5a846e3fea7d0df8d729285c6e2630 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Tue, 16 Jul 2019 13:59:00 +0200 Subject: [PATCH 0189/1148] FIX: propal createFrom hook: undefined parameter attached --- htdocs/comm/propal/class/propal.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 647be1d0233..082281af1da 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1316,9 +1316,9 @@ class Propal extends CommonObject // Hook of thirdparty module if (is_object($hookmanager)) { - $parameters=array('objFrom'=>$this,'clonedObj'=>$clonedObj); + $parameters=array('objFrom'=>$this,'clonedObj'=>$object); $action=''; - $reshook=$hookmanager->executeHooks('createFrom',$parameters,$clonedObj,$action); // Note that $action and $object may have been modified by some hooks + $reshook=$hookmanager->executeHooks('createFrom',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks if ($reshook < 0) $error++; } } From c72a59ad36641ab13dbe382c8d52fb36d68b0461 Mon Sep 17 00:00:00 2001 From: gauthier Date: Tue, 16 Jul 2019 14:55:19 +0200 Subject: [PATCH 0190/1148] FIX : we need to be able to add freeline with qty between 0 & 1 in supplierorder line --- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 9198cf3ac22..f32d9d24c01 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1485,7 +1485,7 @@ class CommandeFournisseur extends CommonOrder $desc=trim($desc); // Check parameters - if ($qty < 1 && ! $fk_product) + if ($qty < 0 && ! $fk_product) { $this->error=$langs->trans("ErrorFieldRequired",$langs->trans("Product")); return -1; From b9771db13116b9a685b8d7536c1ed25a0791909c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 16 Jul 2019 17:16:49 +0300 Subject: [PATCH 0191/1148] Fix phpcs --- htdocs/compta/tva/quadri_detail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index 0f359dd9721..c48bc385c53 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -118,7 +118,7 @@ foreach ($listofparams as $param) } $title = $langs->trans("VATReport") . " " . dol_print_date($date_start) . " -> " . dol_print_date($date_end); -llxHeader('',$title,'','',0,0,'','',$morequerystring); +llxHeader('', $title, '', '', 0, 0, '', '', $morequerystring); //print load_fiche_titre($langs->trans("VAT"),""); From aab23a15317a62e44f551eb71d43058e8f96b24e Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Tue, 16 Jul 2019 17:50:43 +0200 Subject: [PATCH 0192/1148] FIX : do not return formatted prices in json string --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a68f09e5ee1..64c5063e8a2 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2594,7 +2594,7 @@ class Form } $opt.= "\n"; - $optJson = array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit); + $optJson = array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>price2num($outprice_ht), 'price_ttc'=>price2num($outprice_ttc), 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps From 61a574701ba43a9a64eef9ed7ceb6e13ee3879b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Jul 2019 01:11:10 +0200 Subject: [PATCH 0193/1148] New Add field prefix_session in llx_events --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 ++ htdocs/install/mysql/tables/llx_events.sql | 1 + 2 files changed, 3 insertions(+) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index b10ab3b9a85..4ec9fbdaffb 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -48,3 +48,5 @@ ALTER TABLE llx_facture_fourn DROP COLUMN total; ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); + +ALTER TABLE llx_events ADD COLUMN prefix_session varchar(250) NULL; diff --git a/htdocs/install/mysql/tables/llx_events.sql b/htdocs/install/mysql/tables/llx_events.sql index f906cf0fcbd..c9f8f034a34 100644 --- a/htdocs/install/mysql/tables/llx_events.sql +++ b/htdocs/install/mysql/tables/llx_events.sql @@ -27,6 +27,7 @@ create table llx_events tms timestamp, -- date creation/modification type varchar(32) NOT NULL, -- action type entity integer DEFAULT 1 NOT NULL, -- multi company id + prefix_session varchar(255) NULL, -- prefix of session, obtained with dol_getprefix dateevent datetime, -- date event fk_user integer, -- id user description varchar(250) NOT NULL, -- full description of action From fed598236c185406f59a504ed57181464c26b1b9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 17 Jul 2019 01:12:48 +0200 Subject: [PATCH 0194/1148] Add field --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 4ec9fbdaffb..f8cc3062bde 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -49,4 +49,4 @@ ALTER TABLE llx_facture_fourn DROP COLUMN total; ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); -ALTER TABLE llx_events ADD COLUMN prefix_session varchar(250) NULL; +ALTER TABLE llx_events ADD COLUMN prefix_session varchar(255) NULL; From 79d8351dda16bf83a7aece6683238cc6d056ccb5 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 17 Jul 2019 14:09:25 +0200 Subject: [PATCH 0195/1148] NEW Extrafields on salaries --- htdocs/admin/salaries_extrafields.php | 117 ++++++++++++++++++ htdocs/core/lib/salaries.lib.php | 78 ++++++++---- htdocs/core/modules/modSalaries.class.php | 5 +- .../llx_payment_salary_extrafields.key.sql | 23 ++++ .../tables/llx_payment_salary_extrafields.sql | 27 ++++ 5 files changed, 225 insertions(+), 25 deletions(-) create mode 100644 htdocs/admin/salaries_extrafields.php create mode 100644 htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql create mode 100644 htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql diff --git a/htdocs/admin/salaries_extrafields.php b/htdocs/admin/salaries_extrafields.php new file mode 100644 index 00000000000..180e695407f --- /dev/null +++ b/htdocs/admin/salaries_extrafields.php @@ -0,0 +1,117 @@ + + * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2019 Alexandre Spangaro + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * 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 . + */ + +/** + * \file htdocs/admin/salaries_extrafields.php + * \ingroup member + * \brief Page to setup extra fields of salaries + */ + +require '../../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; + +// Load translation files required by the page +$langs->loadLangs(array("admin","salaries")); + +$extrafields = new ExtraFields($db); +$form = new Form($db); + +// List of supported format +$tmptype2label=ExtraFields::$type2label; +$type2label=array(''); +foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentitiesnoconv($val); + +$action=GETPOST('action', 'alpha'); +$attrname=GETPOST('attrname', 'alpha'); +$elementtype='adherent'; //Must be the $table_element of the class that manage extrafield + +if (!$user->admin) accessforbidden(); + + +/* + * Actions + */ + +require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; + + + +/* + * View + */ + +$textobject = $langs->transnoentitiesnoconv("Members"); + +$help_url='EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; +llxHeader('', $langs->trans("MembersSetup"), $help_url); + + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("MembersSetup"), $linkback, 'title_setup'); + + +$head = member_admin_prepare_head(); + +dol_fiche_head($head, 'attributes', $langs->trans("Members"), -1, 'user'); + +require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; + +dol_fiche_end(); + + +// Buttons +if ($action != 'create' && $action != 'edit') +{ + print '
'; + print ''; + print "
"; +} + + +/* ************************************************************************** */ +/* */ +/* Creation of an optional field */ +/* */ +/* ************************************************************************** */ + +if ($action == 'create') +{ + print '

'; + print load_fiche_titre($langs->trans('NewAttribute')); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php'; +} + +/* ************************************************************************** */ +/* */ +/* Edition of an optional field */ +/* */ +/* ************************************************************************** */ +if ($action == 'edit' && ! empty($attrname)) +{ + print '

'; + print load_fiche_titre($langs->trans("FieldEdition", $attrname)); + + require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php'; +} + +// End of page +llxFooter(); +$db->close(); diff --git a/htdocs/core/lib/salaries.lib.php b/htdocs/core/lib/salaries.lib.php index 126063dce4d..418bc8bfaa4 100644 --- a/htdocs/core/lib/salaries.lib.php +++ b/htdocs/core/lib/salaries.lib.php @@ -1,6 +1,7 @@ + * Copyright (C) 2015 Charlie BENKE + * Copyright (C) 2019 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,15 +28,15 @@ function salaries_prepare_head($object) { - global $db, $langs, $conf; + global $db, $langs, $conf; - $h = 0; - $head = array(); + $h = 0; + $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$object->id; - $head[$h][1] = $langs->trans("Card"); - $head[$h][2] = 'card'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$object->id; + $head[$h][1] = $langs->trans("Card"); + $head[$h][2] = 'card'; + $h++; // Show more tabs from modules // Entries must be declared in modules descriptor with line @@ -43,23 +44,56 @@ function salaries_prepare_head($object) // $this->tabs = array('entity:-tabname); to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'salaries'); - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->salaries->dir_output . "/" . dol_sanitizeFileName($object->ref); - $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); + $upload_dir = $conf->salaries->dir_output . "/" . dol_sanitizeFileName($object->ref); + $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/document.php?id='.$object->id; - $head[$h][1] = $langs->trans('Documents'); - if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; - $head[$h][2] = 'documents'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/document.php?id='.$object->id; + $head[$h][1] = $langs->trans('Documents'); + if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; + $head[$h][2] = 'documents'; + $h++; - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/info.php?id='.$object->id; - $head[$h][1] = $langs->trans("Info"); - $head[$h][2] = 'info'; - $h++; + $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/info.php?id='.$object->id; + $head[$h][1] = $langs->trans("Info"); + $head[$h][2] = 'info'; + $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'salaries', 'remove'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'salaries', 'remove'); - return $head; + return $head; +} + +/** + * Return array head with list of tabs to view object informations + * + * @return array head + */ +function salaries_admin_prepare_head() +{ + global $langs, $conf, $user; + + $h = 0; + $head = array(); + + $head[$h][0] = DOL_URL_ROOT.'/admin/salaries.php'; + $head[$h][1] = $langs->trans("Miscellaneous"); + $head[$h][2] = 'general'; + $h++; + + // Show more tabs from modules + // Entries must be declared in modules descriptor with line + // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab + // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab + complete_head_from_modules($conf, $langs, '', $head, $h, 'salaries_admin'); + + $head[$h][0] = DOL_URL_ROOT.'/admin/salaries_extrafields.php'; + $head[$h][1] = $langs->trans("ExtraFieldsSalaries"); + $head[$h][2] = 'attributes'; + $h++; + + complete_head_from_modules($conf, $langs, '', $head, $h, 'salaries_admin', 'remove'); + + return $head; } diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index ed3aec4a48b..d68c6a36308 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -5,7 +5,7 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2014 Juanjo Menent - * Copyright (C) 2014 Alexandre Spangaro + * Copyright (C) 2014-2019 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -68,8 +68,7 @@ class modSalaries extends DolibarrModules $this->dirs = array("/salaries/temp"); // Config pages - //$this->config_page_url = array('salaries.php'); - $this->config_page_url = array(); + $this->config_page_url = array('salaries.php'); // Dependencies $this->hidden = false; // A condition to hide module diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql new file mode 100644 index 00000000000..6989d271ccc --- /dev/null +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql @@ -0,0 +1,23 @@ +-- =================================================================== +-- Copyright (C) 2002-2003 Rodolphe Quiedeville +-- Copyright (C) 2002-2003 Jean-Louis Bergamo +-- Copyright (C) 2009 Regis Houssin +-- Copyright (C) 2011 Laurent Destailleur +-- +-- 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 . +-- +-- =================================================================== + + +ALTER TABLE llx_adherent_extrafields ADD INDEX idx_adherent_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql new file mode 100644 index 00000000000..3ad91052c24 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql @@ -0,0 +1,27 @@ +-- =================================================================== +-- Copyright (C) 2002-2003 Rodolphe Quiedeville +-- Copyright (C) 2002-2003 Jean-Louis Bergamo +-- Copyright (C) 2009 Regis Houssin +-- +-- 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 . +-- +-- =================================================================== + +create table llx_adherent_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, -- member id + import_key varchar(14) -- import key +)ENGINE=innodb; From b5d348356dbc590b50ec97b25fceae111e7ac91a Mon Sep 17 00:00:00 2001 From: John Botella Date: Wed, 17 Jul 2019 16:49:41 +0200 Subject: [PATCH 0196/1148] Fix socpeople assigned list in action com list --- htdocs/comm/action/list.php | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 2d8be09ee7a..aae2d48e9cf 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -524,6 +524,7 @@ if ($resql) require_once DOL_DOCUMENT_ROOT.'/comm/action/class/cactioncomm.class.php'; $caction=new CActionComm($db); $arraylist=$caction->liste_array(1, 'code', '', (empty($conf->global->AGENDA_USE_EVENT_TYPE)?1:0), '', 1); + $contactListCache = array(); while ($i < min($num,$limit)) { @@ -634,7 +635,34 @@ if ($resql) // Contact if (! empty($arrayfields['a.fk_contact']['checked'])) { print '
'; - if ($obj->fk_contact > 0) + + + $actionstatic->fetchResources(); + if(!empty($actionstatic->socpeopleassigned)) + { + $contactList = array(); + foreach ($actionstatic->socpeopleassigned as $socpeopleId => $socpeopleassigned) + { + if(!isset($contactListCache[$socpeopleassigned['id']])) + { + // if no cache found we fetch it + $contact = new Contact($db); + if($contact->fetch($socpeopleassigned['id'])>0) + { + $contactListCache[$socpeopleassigned['id']] = $contact->getNomUrl(1,'',28); + $contactList[] = $contact->getNomUrl(1,'',28); + } + } + else{ + // use cache + $contactList[] = $contactListCache[$socpeopleassigned['id']]; + } + } + if(!empty($contactList)){ + print implode(', ', $contactList); + } + } + elseif ($obj->fk_contact > 0) //keep for retrocompatibility with faraway event { $contactstatic->id=$obj->fk_contact; $contactstatic->email=$obj->email; From 27a0c046dfc2e69ff700468e685f0f99ff55a52c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 18 Jul 2019 09:58:26 +0200 Subject: [PATCH 0197/1148] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 6b910236e96..b5db41a424e 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -392,14 +392,14 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - //"save_payment_method" => true, + "setup_future_usage" => "off_session", "metadata" => $metadata ); if (! is_null($customer)) $dataforintent["customer"]=$customer; // payment_method = // payment_method_types = array('card') //var_dump($dataforintent); - + if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { $dataforintent["application_fee"] = $stripefee; From 8a5aad34337723af0fa479c0f67487efbe0f97e3 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 18 Jul 2019 10:00:57 +0200 Subject: [PATCH 0198/1148] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index b5db41a424e..e4b021167e0 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -399,7 +399,7 @@ class Stripe extends CommonObject // payment_method = // payment_method_types = array('card') //var_dump($dataforintent); - + if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { $dataforintent["application_fee"] = $stripefee; From 4235f0b3523694c1ef7d3587e3539dae3dd75fd1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 18 Jul 2019 10:05:54 +0200 Subject: [PATCH 0199/1148] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index e4b021167e0..993fe6a07dd 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -392,7 +392,7 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - "setup_future_usage" => "off_session", + "setup_future_usage" => "on_session", "metadata" => $metadata ); if (! is_null($customer)) $dataforintent["customer"]=$customer; From 32bc8a5fafb51d4070014f29f84456b4690b1762 Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Thu, 18 Jul 2019 11:05:51 +0200 Subject: [PATCH 0200/1148] FIX fournrprice log for insert --- htdocs/fourn/class/fournisseur.product.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php index fc74890f150..49a7b1935cb 100644 --- a/htdocs/fourn/class/fournisseur.product.class.php +++ b/htdocs/fourn/class/fournisseur.product.class.php @@ -439,7 +439,7 @@ class ProductFournisseur extends Product $resql = $this->db->query($sql); if ($resql) { - $idinserted = $this->db->last_insert_id(MAIN_DB_PREFIX . "product_fournisseur_price"); + $this->product_fourn_price_id = $this->db->last_insert_id(MAIN_DB_PREFIX . "product_fournisseur_price"); } else { $error++; @@ -462,7 +462,7 @@ class ProductFournisseur extends Product if (empty($error)) { $this->db->commit(); - return $idinserted; + return $this->product_fourn_price_id; } else { $this->db->rollback(); return -1; From a23bae6c9664fdd845b9594f57504cb011c9a387 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 18 Jul 2019 11:10:09 +0200 Subject: [PATCH 0201/1148] Work to mke the page perf.php public by default. --- htdocs/admin/system/perf.php | 51 ++++++++++++++++++++++++++++++++--- htdocs/langs/en_US/admin.lang | 5 ++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php index 67f75c911aa..66148fb01ab 100644 --- a/htdocs/admin/system/perf.php +++ b/htdocs/admin/system/perf.php @@ -144,6 +144,21 @@ if (! $foundcache && $test) if (! $foundcache) print $langs->trans("NoOPCodeCacheFound"); print '
'; +// Use of preload bootstrap +if (ini_get('opcache.preload')) +{ + print '
'; + print ''.$langs->trans("PreloadOPCode").': '; + print ini_get('opcache.preload'); +} +else +{ + print '
'; + print ''.$langs->trans("PreloadOPCode").': '; + print $langs->trans("No"); +} +print '
'; + // HTTPCacheStaticResources print ' - Date: Thu, 18 Jul 2019 18:53:51 +0200 Subject: [PATCH 0223/1148] Fix phpcs --- htdocs/comm/action/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index 6e46aee2435..1fbae964dff 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -660,8 +660,8 @@ if ($resql) $contact = new Contact($db); if($contact->fetch($socpeopleassigned['id'])>0) { - $contactListCache[$socpeopleassigned['id']] = $contact->getNomUrl(1,'',28); - $contactList[] = $contact->getNomUrl(1,'',28); + $contactListCache[$socpeopleassigned['id']] = $contact->getNomUrl(1, '', 28); + $contactList[] = $contact->getNomUrl(1, '', 28); } } else{ From 6c3a30e872501863d63936d194f48045c24d10eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:05:55 +0200 Subject: [PATCH 0224/1148] Fix log --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 198f91a4446..29a2ab27d8f 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -185,7 +185,7 @@ function dolWebsiteOutput($content) global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." (USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); From 8857d0acf5404dfc5f966cbd771386ba2d07bc36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:18:53 +0200 Subject: [PATCH 0225/1148] Keep save_payment_method to true. Keep it to true because i see no reason to not save the credit card on Stripe side. --- htdocs/stripe/class/stripe.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 993fe6a07dd..319ff08d2cd 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -392,7 +392,8 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - "setup_future_usage" => "on_session", + "save_payment_method" => true, + "setup_future_usage" => "on_session", "metadata" => $metadata ); if (! is_null($customer)) $dataforintent["customer"]=$customer; From 03aa8c4b83baa9361c8e0cee89c693787cc15055 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:22:52 +0200 Subject: [PATCH 0226/1148] Better log --- htdocs/public/payment/newpayment.php | 7 ++++++- htdocs/stripe/class/stripe.class.php | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index b36e115deea..deda54bf996 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -21,6 +21,11 @@ * For Paypal test: https://developer.paypal.com/ * For Paybox test: ??? * For Stripe test: Use credit card 4242424242424242 .More example on https://stripe.com/docs/testing + * + * Variants: + * - When option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION is on, we use the new checkout API + * - When option STRIPE_USE_NEW_CHECKOUT is on, we use the new checkout API + * - If no option set, we use old APIS (charge) */ /** @@ -2099,7 +2104,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment else { ?> - // Code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off + // Old code for payment with option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION off and STRIPE_USE_NEW_CHECKOUT off // Create a Stripe client. var stripe = Stripe(''); diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 6b910236e96..d9e6a077b96 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -286,9 +286,11 @@ class Stripe extends CommonObject /** * Get the Stripe payment intent. Create it with confirm=false * Warning. If a payment was tried and failed, a payment intent was created. - * But if we change someting on object to pay (amount or other), reusing same payment intent is not allowed. + * But if we change something on object to pay (amount or other), reusing same payment intent is not allowed. * Recommanded solution is to recreate a new payment intent each time we need one (old one will be automatically closed after a delay), * that's why i comment the part of code to retreive a payment intent with object id (never mind if we cumulate payment intent with old ones that will not be used) + * Note: This is used when option STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION is on when making a payment from the public/payment/newpayment.php page + * but not when using the STRIPE_USE_NEW_CHECKOUT. * * @param double $amount Amount * @param string $currency_code Currency code @@ -307,7 +309,7 @@ class Stripe extends CommonObject { global $conf; - dol_syslog("getPaymentIntent"); + dol_syslog("getPaymentIntent", LOG_INFO, 1); $error = 0; @@ -479,7 +481,7 @@ class Stripe extends CommonObject } } - dol_syslog("getPaymentIntent return error=".$error); + dol_syslog("getPaymentIntent return error=".$error, LOG_INFO, -1); if (! $error) { From efe27d335b31b8a3241448ffb8bf6f55171cc168 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 03:53:34 +0200 Subject: [PATCH 0227/1148] Fix param --- htdocs/stripe/class/stripe.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index cb71c686ebf..92c6335cd29 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -394,7 +394,6 @@ class Stripe extends CommonObject "payment_method_types" => array("card"), "description" => $description, "statement_descriptor" => dol_trunc($tag, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - "save_payment_method" => true, "setup_future_usage" => "on_session", "metadata" => $metadata ); From 2afefada40ca52d431792429cdbb6d983c6644b5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 04:02:42 +0200 Subject: [PATCH 0228/1148] Fix: Avoid deletion of system entries in dictionary --- htdocs/admin/dict.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 11cd105137c..87e072b8d7e 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1622,7 +1622,11 @@ if ($id) elseif ($obj->code == 'RECEP') { $iserasable = 0; $canbedisabled = 0; } elseif ($obj->code == 'EF0') { $iserasable = 0; $canbedisabled = 0; } } - + if ($id == 25 && in_array($obj->code, array('banner', 'blogpost', 'other', 'page'))) + { + $iserasable = 0; $canbedisabled = 0; + if (in_array($obj->code, array('banner'))) $canbedisabled = 1; + } if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) { $iserasable=0; } if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO')) || in_array($obj->type, array('systemauto'))) { $canbedisabled=0; $canbedisabled = 0; } $canbemodified=$iserasable; From fe89e158fe384bf103db7d653c83dca2256be7e4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 04:02:42 +0200 Subject: [PATCH 0229/1148] Fix: Avoid deletion of system entries in dictionary --- htdocs/admin/dict.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 11cd105137c..87e072b8d7e 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -1622,7 +1622,11 @@ if ($id) elseif ($obj->code == 'RECEP') { $iserasable = 0; $canbedisabled = 0; } elseif ($obj->code == 'EF0') { $iserasable = 0; $canbedisabled = 0; } } - + if ($id == 25 && in_array($obj->code, array('banner', 'blogpost', 'other', 'page'))) + { + $iserasable = 0; $canbedisabled = 0; + if (in_array($obj->code, array('banner'))) $canbedisabled = 1; + } if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) { $iserasable=0; } if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO')) || in_array($obj->type, array('systemauto'))) { $canbedisabled=0; $canbedisabled = 0; } $canbemodified=$iserasable; From e5801c0b6872059d9e08516f70f9d569fd90d92f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 04:06:22 +0200 Subject: [PATCH 0230/1148] Update bonprelevement.class.php --- .../class/bonprelevement.class.php | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 1574fc3eb60..7a5a190c465 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1133,24 +1133,24 @@ class BonPrelevement extends CommonObject /** - * Get object and lines from database + * Get object and lines from database * * @param User $user Object user that delete - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * @return int >0 if OK, <0 if KO + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * @return int >0 if OK, <0 if KO */ - function delete($user=null, $notrigger = 0) + function delete($user = null, $notrigger = 0) { $this->db->begin(); - $error = 0; - if (! $notrigger) - { - // Call trigger - $result=$this->call_trigger('BON_PRELEVEMENT_DELETE', $user); - if ($result < 0) $error++; - // End call triggers - } + $error = 0; + if (! $notrigger) + { + // Call trigger + $result=$this->call_trigger('BON_PRELEVEMENT_DELETE', $user); + if ($result < 0) $error++; + // End call triggers + } $sql = "DELETE FROM ".MAIN_DB_PREFIX."prelevement_facture WHERE fk_prelevement_lignes IN (SELECT rowid FROM ".MAIN_DB_PREFIX."prelevement_lignes WHERE fk_prelevement_bons = ".$this->id.")"; $resql1=$this->db->query($sql); From 7ffc46e1da538cac9b848c4702f645842e7cafce Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 19 Jul 2019 09:47:05 +0200 Subject: [PATCH 0231/1148] FIX When we are in update mode, so we use $this->entity --- htdocs/core/lib/functions.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index db32cc787e5..6e52660206f 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -5,7 +5,7 @@ * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2004 Christophe Combelles - * Copyright (C) 2005-2017 Regis Houssin + * Copyright (C) 2005-2019 Regis Houssin * Copyright (C) 2008 Raphael Bertrand (Resultic) * Copyright (C) 2010-2018 Juanjo Menent * Copyright (C) 2013 Cédric Salvador @@ -111,7 +111,7 @@ function setEntity($currentobject) } else { - return $conf->entity; + return ((is_object($currentobject) && $currentobject->id > 0 && $currentobject->entity > 0) ? $currentobject->entity : $conf->entity); } } From f82e1f1155ec7b475810025ac79a1fa1daad1527 Mon Sep 17 00:00:00 2001 From: jcp Date: Fri, 19 Jul 2019 10:44:12 +0200 Subject: [PATCH 0232/1148] Fix: Use special_code=4 for Takepos --- htdocs/takepos/invoice.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 510b949b92b..79c7eee3d56 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -306,14 +306,14 @@ if ($action == "order" and $placeid != 0) $catsprinter2 = explode(';', $conf->global->TAKEPOS_PRINTED_CATEGORIES_2); foreach($invoice->lines as $line) { - if ($line->special_code == "3") { continue; + if ($line->special_code == "4") { continue; } $c = new Categorie($db); $existing = $c->containing($line->fk_product, Categorie::TYPE_PRODUCT, 'id'); $result = array_intersect($catsprinter1, $existing); $count = count($result); if ($count > 0) { - $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='3' where rowid=$line->rowid"; + $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='4' where rowid=$line->rowid"; $db->query($sql); $order_receipt_printer1.= '
' . $line->qty; if (!empty($line->array_options['options_order_notes'])) $order_receipt_printer1.="
(".$line->array_options['options_order_notes'].")"; @@ -323,14 +323,14 @@ if ($action == "order" and $placeid != 0) foreach($invoice->lines as $line) { - if ($line->special_code == "3") { continue; + if ($line->special_code == "4") { continue; } $c = new Categorie($db); $existing = $c->containing($line->fk_product, Categorie::TYPE_PRODUCT, 'id'); $result = array_intersect($catsprinter2, $existing); $count = count($result); if ($count > 0) { - $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='3' where rowid=$line->rowid"; + $sql = "UPDATE " . MAIN_DB_PREFIX . "facturedet set special_code='4' where rowid=$line->rowid"; $db->query($sql); $order_receipt_printer2.= '
' . $line->qty; if (!empty($line->array_options['options_order_notes'])) $order_receipt_printer2.="
(".$line->array_options['options_order_notes'].")"; @@ -512,7 +512,7 @@ if ($placeid > 0) $htmlforlines = ''; $htmlforlines.= '
'; - print ''; - print_liste_field_titre("Company", $_SERVER["PHP_SELF"], "s.nom", "", "", 'valign="center"', $sortfield, $sortorder); - print_liste_field_titre("Contact", $_SERVER["PHP_SELF"], "c.lastname", "", "", 'valign="center"', $sortfield, $sortorder); - print_liste_field_titre("Action", $_SERVER["PHP_SELF"], "a.titre", "", "", 'valign="center"', $sortfield, $sortorder); - print "\n"; - - while ($i < $num) - { - $obj = $db->fetch_object($result); - - print ''; - print "\n"; - print "\n"; - print "\n"; - print "\n"; - $i++; - } - print "
socid."\">".$obj->name."".dolGetFirstLastname($obj->firstname, $obj->lastname)."".$obj->titre."
"; - $db->free(); -} -else -{ - dol_print_error($db); -} - -// End of page -llxFooter(); -$db->close(); From f745d01bf34f9e9d04abf9ded88f3ce3ed71d0c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 13:22:54 +0200 Subject: [PATCH 0238/1148] Prepare change of properties "titre" into "title" --- htdocs/admin/menus/edit.php | 8 +++++--- htdocs/admin/menus/index.php | 4 ++-- htdocs/compta/facture/card.php | 4 ++-- htdocs/compta/facture/class/facture-rec.class.php | 12 +++++++----- htdocs/compta/facture/fiche-rec.php | 8 +++++--- htdocs/compta/facture/invoicetemplate_list.php | 4 ++-- htdocs/core/class/menubase.class.php | 3 ++- htdocs/core/modules/DolibarrModules.class.php | 3 ++- htdocs/fichinter/card-rec.php | 6 +++--- htdocs/projet/class/api_projects.class.php | 1 - htdocs/projet/class/project.class.php | 6 +----- 11 files changed, 31 insertions(+), 28 deletions(-) diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php index cf42f294d03..6bacc97e92f 100644 --- a/htdocs/admin/menus/edit.php +++ b/htdocs/admin/menus/edit.php @@ -87,7 +87,8 @@ if ($action == 'update') $result=$menu->fetch(GETPOST('menuId', 'int')); if ($result > 0) { - $menu->titre=GETPOST('titre', 'alpha'); + $menu->titre=GETPOST('titre', 'alpha'); // deprecated + $menu->title=GETPOST('titre', 'alpha'); $menu->leftmenu=GETPOST('leftmenu', 'aZ09'); $menu->url=GETPOST('url', 'alpha'); $menu->langs=GETPOST('langs', 'alpha'); @@ -205,7 +206,8 @@ if ($action == 'add') $menu = new Menubase($db); $menu->menu_handler=preg_replace('/_menu$/', '', GETPOST('menu_handler', 'aZ09')); $menu->type=GETPOST('type', 'alpha'); - $menu->titre=GETPOST('titre', 'alpha'); + $menu->titre=GETPOST('titre', 'alpha'); // deprecated + $menu->title=GETPOST('titre', 'alpha'); $menu->url=GETPOST('url', 'alpha'); $menu->langs=GETPOST('langs', 'alpha'); $menu->position=GETPOST('position', 'int'); @@ -494,7 +496,7 @@ elseif ($action == 'edit') //print '
'.$langs->trans('Level').''.$menu->level.''.$langs->trans('DetailLevel').'
'.$langs->trans('Title').''.$langs->trans('DetailTitre').'
'.$langs->trans('Title').''.$langs->trans('DetailTitre').'
'.$langs->trans('URL').''.$langs->trans('DetailUrl').'
'; - print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->titre; + print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->title; print "
'; + print '
'; if ($soc->outstanding_limit) { @@ -2454,7 +2454,7 @@ if ($action == 'create' && $user->rights->commande->creer) print ''; print ''; - print ''; + print ''; // Close fichecenter print '

'; diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index 94c0aec8d90..af65fbd2715 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -824,9 +824,11 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd dol_banner_tab($object, 'ref', $linkback, ($user->societe_id ? 0 : 1), 'ref', 'ref', $morehtmlref); - print '
'; + print '
'; + print '
'; print '
'; - print '
'; + + print '
'; // Track ID print ''; // Group print ''; // Severity print ''; } print '
' . $langs->trans("TicketTrackId") . ''; @@ -956,7 +958,6 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // View Original message $actionobject->viewTicketOriginalMessage($user, $action, $object); - // Classification of ticket print '
'; print ''; @@ -1011,29 +1012,20 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // Type print '
' . $langs->trans("Type") . ''; print $langs->getLabelFromKey($db, $object->type_code, 'c_ticket_type', 'code', 'label'); - /*if ($user->admin && !$noadmininfo) { - print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - }*/ print '
' . $langs->trans("TicketGroup") . ''; print $langs->getLabelFromKey($db, $object->category_code, 'c_ticket_category', 'code', 'label'); - /*if ($user->admin && !$noadmininfo) { - print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - }*/ print '
' . $langs->trans("TicketSeverity") . ''; print $langs->getLabelFromKey($db, $object->severity_code, 'c_ticket_severity', 'code', 'label'); - /*if ($user->admin && !$noadmininfo) { - print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1); - }*/ print '
'; // End table actions + print '
'; print ''; - print ''; // Display navbar with links to change ticket status print ''; @@ -1225,9 +1217,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd $formactions = new FormActions($db); $somethingshown = $formactions->showactions($object, 'ticket', $socid, 1); - print ''; - print ''; - print '
'; + print ''; } else { diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index b10f8ebe7da..912b6cb298c 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -280,7 +280,7 @@ class ActionsTicket //print '
' . $object->message . '
'; } - if ($user->rights->ticket->manage && $action == 'edit_message_init') { + if (!empty($user->rights->ticket->manage) && $action == 'edit_message_init') { print '
'; print ' '; print ' '; @@ -289,7 +289,14 @@ class ActionsTicket print '
'; + print ''; + + if (!empty($user->rights->ticket->manage) && $action == 'edit_message_init') { + // MESSAGE + print ''; + } } + /** * View html list of message for ticket * From bd193b26f6e6b7518c64ee8850679f0dd61f6a26 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:02:39 +0200 Subject: [PATCH 0248/1148] FIX Block to link with tickets --- htdocs/ticket/tpl/linkedobjectblock.tpl.php | 83 ++++++++++++++------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/htdocs/ticket/tpl/linkedobjectblock.tpl.php b/htdocs/ticket/tpl/linkedobjectblock.tpl.php index 3391437dbb1..3a5cc46600a 100644 --- a/htdocs/ticket/tpl/linkedobjectblock.tpl.php +++ b/htdocs/ticket/tpl/linkedobjectblock.tpl.php @@ -13,8 +13,7 @@ * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * along with this program. If not, see . */ // Protection to avoid direct call of template if (empty($conf) || ! is_object($conf)) @@ -28,37 +27,65 @@ if (empty($conf) || ! is_object($conf)) load('ticket'); $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; -echo '
'; -print load_fiche_titre($langs->trans('RelatedTickets')); + +// Load translation files required by the page +$langs->load('ticket'); + +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); + +$total=0; $ilink=0; +foreach($linkedObjectBlock as $key => $objectlink) +{ + $ilink++; + + $trclass='oddeven'; + if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; ?> - - - - - - + + + + + + socid = $objectlink->fk_soc; + //$objectlink->fetch_thirdparty(); + ?> + + + - - - +} +if (count($linkedObjectBlock) > 1) +{ + ?> + + + + + + + + + socid = $object->fk_soc; - $object->fetch_thirdparty(); - ?> - - - - -
trans("Subject"); ?>trans("DateCreation"); ?>trans("Customer"); ?>trans("Status"); ?>
trans("Ticket"); ?> + global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' + getNomUrl(1); ?>ref_client; ?>datec, 'day'); ?>thirdparty->getNomUrl(1); ?>getLibStatut(3); ?> + element != 'shipping') { + ?> + ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> + +
- subject) ? ' '.$object->subject : ''); ?> - - datec, 'day'); ?>
trans("Total"); ?>
thirdparty->getNomUrl(1); ?>getLibstatut(2); ?>
+} +?> From e5c3945ec304796f12e6bc26a79a8ddd0757c0fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:10:45 +0200 Subject: [PATCH 0249/1148] FIX delete of links between objects --- htdocs/comm/propal/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/commande/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/compta/facture/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/fichinter/tpl/linkedobjectblock.tpl.php | 2 ++ htdocs/ticket/tpl/linkedobjectblock.tpl.php | 4 ++-- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index 61d79e4abbb..910772d87ca 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -43,7 +43,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("propal"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php index 1f8b440749f..74a2243d633 100644 --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php @@ -39,7 +39,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("orders"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index a9fbb5da2eb..bef705a21ab 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -38,7 +38,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("bills"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) diff --git a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php index 9f481b6b648..cc2bf4cea26 100644 --- a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php +++ b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php @@ -35,6 +35,8 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("interventions"); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); + $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { diff --git a/htdocs/ticket/tpl/linkedobjectblock.tpl.php b/htdocs/ticket/tpl/linkedobjectblock.tpl.php index 3a5cc46600a..8aed516e4fc 100644 --- a/htdocs/ticket/tpl/linkedobjectblock.tpl.php +++ b/htdocs/ticket/tpl/linkedobjectblock.tpl.php @@ -36,13 +36,13 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load('ticket'); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc'); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'datec', 'desc', 0, 0, 1); $total=0; $ilink=0; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; - + $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; ?> From 48b4aa4c8dbf81ffdd922cadd2d022326ca6110a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:29:33 +0200 Subject: [PATCH 0250/1148] Fix link to ticket --- htdocs/core/class/html.form.class.php | 3 ++- htdocs/langs/en_US/main.lang | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 64c5063e8a2..68c4bec4690 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6661,7 +6661,8 @@ class Form 'fichinter'=>array('enabled'=>$conf->ficheinter->enabled, 'perms'=>1, 'label'=>'LinkToIntervention', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."fichinter as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('intervention').')'), 'supplier_proposal'=>array('enabled'=>$conf->supplier_proposal->enabled , 'perms'=>1, 'label'=>'LinkToSupplierProposal', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, '' as ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."supplier_proposal as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('supplier_proposal').')'), 'order_supplier'=>array('enabled'=>$conf->supplier_order->enabled , 'perms'=>1, 'label'=>'LinkToSupplierOrder', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."commande_fournisseur as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('commande_fournisseur').')'), - 'invoice_supplier'=>array('enabled'=>$conf->supplier_invoice->enabled , 'perms'=>1, 'label'=>'LinkToSupplierInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('facture_fourn').')') + 'invoice_supplier'=>array('enabled'=>$conf->supplier_invoice->enabled , 'perms'=>1, 'label'=>'LinkToSupplierInvoice', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_supplier, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."facture_fourn as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('facture_fourn').')'), + 'ticket'=>array('enabled'=>$conf->ticket->enabled , 'perms'=>1, 'label'=>'LinkToTicket', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.track_id, '0' as total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."ticket as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('ticket').')') ); } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 6efbe942032..5e55597c306 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -759,6 +759,7 @@ LinkToSupplierProposal=Link to vendor proposal LinkToSupplierInvoice=Link to vendor invoice LinkToContract=Link to contract LinkToIntervention=Link to intervention +LinkToTicket=Link to ticket CreateDraft=Create draft SetToDraft=Back to draft ClickToEdit=Click to edit From fafb7956dec2c55172bae5928f9766e09463361b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 18:52:44 +0200 Subject: [PATCH 0251/1148] Fix position of triggers --- htdocs/install/mysql/data/llx_c_action_trigger.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/install/mysql/data/llx_c_action_trigger.sql b/htdocs/install/mysql/data/llx_c_action_trigger.sql index 3bc705c7a19..aaa96e3136a 100644 --- a/htdocs/install/mysql/data/llx_c_action_trigger.sql +++ b/htdocs/install/mysql/data/llx_c_action_trigger.sql @@ -102,9 +102,9 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_PAYED','Expense report billed','Executed when an expense report is set as billed','expensereport',204); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',205); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',211); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',212); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',143); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161); @@ -116,7 +116,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value -- actions not enabled by default (no constant created for that) when we enable module agenda insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',41); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',23); -insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modified','Executed when a intervention is modified','ficheinter',31); +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modified','Executed when a intervention is modified','ficheinter',19); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_CREATE','Project creation','Executed when a project is created','project',140); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_MODIFY','Project modified','Executed when a project is modified','project',142); insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_CREATE','Task created','Executed when a project task is created','project',150); From 327e5ebe780e42cc96e8bccb38bdb0d139e6de60 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 19:09:38 +0200 Subject: [PATCH 0252/1148] FIX Show list of events on tickets --- htdocs/admin/agenda.php | 5 +- htdocs/public/ticket/view.php | 10 +-- htdocs/ticket/class/actions_ticket.class.php | 86 ++++---------------- htdocs/ticket/class/ticket.class.php | 13 ++- 4 files changed, 26 insertions(+), 88 deletions(-) diff --git a/htdocs/admin/agenda.php b/htdocs/admin/agenda.php index 649bfab3d97..4c5c02d0b3d 100644 --- a/htdocs/admin/agenda.php +++ b/htdocs/admin/agenda.php @@ -40,7 +40,7 @@ $cancel = GETPOST('cancel', 'alpha'); $search_event = GETPOST('search_event', 'alpha'); // Get list of triggers available -$sql = "SELECT a.rowid, a.code, a.label, a.elementtype"; +$sql = "SELECT a.rowid, a.code, a.label, a.elementtype, a.rang as position"; $sql.= " FROM ".MAIN_DB_PREFIX."c_action_trigger as a"; $sql.= " ORDER BY a.rang ASC"; $resql=$db->query($sql); @@ -55,6 +55,7 @@ if ($resql) $triggers[$i]['code'] = $obj->code; $triggers[$i]['element'] = $obj->elementtype; $triggers[$i]['label'] = ($langs->trans("Notify_".$obj->code)!="Notify_".$obj->code?$langs->trans("Notify_".$obj->code):$obj->label); + $triggers[$i]['position'] = $obj->position; $i++; } @@ -65,6 +66,8 @@ else dol_print_error($db); } +//$triggers = dol_sort_array($triggers, 'code', 'asc', 0, 0, 1); + /* * Actions diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 69a77413b2e..2c23ba1bc71 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -150,7 +150,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if ($display_ticket) { // Confirmation close if ($action == 'close') { - print $form->form_confirm($_SERVER["PHP_SELF"] . "?track_id=" . $track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_public_close", '', '', 1); + print $form->formconfirm($_SERVER["PHP_SELF"] . "?track_id=" . $track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_public_close", '', '', 1); } print '
'; @@ -287,13 +287,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | // Message list print load_fiche_titre($langs->trans('TicketMessagesList'), '', 'messages@ticket'); - $object->viewTicketMessages(false); - - print '
'; - - // Logs list - print load_fiche_titre($langs->trans('TicketHistory'), '', 'history@ticket'); - $object->viewTicketLogs(false); + $object->viewTicketMessages(false, true, $object->dao); } else { print ''; } diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php index 912b6cb298c..3e9daabec75 100644 --- a/htdocs/ticket/class/actions_ticket.class.php +++ b/htdocs/ticket/class/actions_ticket.class.php @@ -167,72 +167,12 @@ class ActionsTicket } } - /** - * View html list of logs - * - * @param boolean $show_user Show user who make action - * @return void - */ - public function viewTicketLogs($show_user = true) - { - global $conf, $langs; - - // Load logs in cache - $ret = $this->dao->loadCacheLogsTicket(); - - if (is_array($this->dao->cache_logs_ticket) && count($this->dao->cache_logs_ticket) > 0) { - print ''; - - print ''; - - print ''; - - if ($show_user) { - print ''; - } - - foreach ($this->dao->cache_logs_ticket as $id => $arraylogs) { - print ''; - print ''; - - if ($show_user) { - print ''; - } - print ''; - print ''; - print ''; - print ''; - } - - print '
'; - print $langs->trans('DateCreation'); - print ''; - print $langs->trans('User'); - print '
'; - print dol_print_date($arraylogs['datec'], 'dayhour'); - print ''; - if ($arraylogs['fk_user_create'] > 0) { - $userstat = new User($this->db); - $res = $userstat->fetch($arraylogs['fk_user_create']); - if ($res) { - print $userstat->getNomUrl(1); - } - } - print '
'; - print dol_nl2br($arraylogs['message']); - - print '
'; - } else { - print '
' . $langs->trans('NoLogForThisTicket') . '
'; - } - } - /** * Show ticket original message * * @param User $user User wich display * @param string $action Action mode - * @param Ticket $object Object ticket + * @param Ticket $object Object ticket * @return void */ public function viewTicketOriginalMessage($user, $action, $object) @@ -300,29 +240,31 @@ class ActionsTicket /** * View html list of message for ticket * - * @param boolean $show_private Show private messages - * @param boolean $show_user Show user who make action - * @return void + * @param boolean $show_private Show private messages + * @param boolean $show_user Show user who make action + * @param Ticket $object Object ticket + * @return void */ - public function viewTicketMessages($show_private, $show_user = true) + public function viewTicketMessages($show_private, $show_user, $object) { global $conf, $langs, $user; // Load logs in cache $ret = $this->dao->loadCacheMsgsTicket(); - $action = GETPOST('action'); + if ($ret < 0) dol_print_error($this->dao->db); - $this->viewTicketOriginalMessage($user, $action); + $action = GETPOST('action', 'alpha'); - if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) { - print load_fiche_titre($langs->trans('TicketMailExchanges')); + $this->viewTicketOriginalMessage($user, $action, $object); + if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) + { print ''; print ''; print ''; if ($show_user) { @@ -342,9 +284,9 @@ class ActionsTicket print ''; if ($show_user) { print ''; print ''; // Description From 9ab07344153bea1ef843f71eb462077432a63884 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 19 Jul 2019 23:08:24 +0200 Subject: [PATCH 0257/1148] NEW Extrafields on salaries --- ChangeLog | 2 +- htdocs/.gitignore | 1 + htdocs/accountancy/journal/bankjournal.php | 2 +- htdocs/compta/accounting-files.php | 2 +- htdocs/compta/bank/bankentries_list.php | 2 +- htdocs/compta/bank/ligne.php | 2 +- htdocs/compta/bank/releve.php | 2 +- htdocs/compta/charges/index.php | 2 +- htdocs/compta/resultat/clientfourn.php | 2 +- htdocs/compta/sociales/payments.php | 2 +- htdocs/core/lib/salaries.lib.php | 10 ++-- htdocs/core/menus/init_menu_auguria.sql | 8 +-- htdocs/core/menus/standard/eldy.lib.php | 8 +-- htdocs/core/modules/modSalaries.class.php | 2 +- .../install/mysql/migration/10.0.0-11.0.0.sql | 12 +++++ .../llx_payment_salary_extrafields.key.sql | 7 +-- .../tables/llx_payment_salary_extrafields.sql | 8 ++- htdocs/langs/en_US/admin.lang | 1 + htdocs/projet/element.php | 4 +- htdocs/{ => salaries}/admin/salaries.php | 23 ++++---- .../admin/salaries_extrafields.php | 14 ++--- htdocs/{compta => }/salaries/card.php | 53 +++++++++++-------- htdocs/{compta => }/salaries/class/index.html | 0 .../salaries/class/paymentsalary.class.php | 50 +++++++++++++++-- .../salaries/class/salariesstats.class.php | 4 +- htdocs/{compta => }/salaries/document.php | 10 ++-- htdocs/{compta => }/salaries/info.php | 10 ++-- htdocs/{compta => }/salaries/list.php | 10 ++-- htdocs/{compta => }/salaries/stats/index.php | 6 +-- htdocs/user/bank.php | 4 +- 30 files changed, 164 insertions(+), 99 deletions(-) rename htdocs/{ => salaries}/admin/salaries.php (83%) rename htdocs/{ => salaries}/admin/salaries_extrafields.php (87%) rename htdocs/{compta => }/salaries/card.php (89%) rename htdocs/{compta => }/salaries/class/index.html (100%) rename htdocs/{compta => }/salaries/class/paymentsalary.class.php (93%) rename htdocs/{compta => }/salaries/class/salariesstats.class.php (97%) rename htdocs/{compta => }/salaries/document.php (91%) rename htdocs/{compta => }/salaries/info.php (84%) rename htdocs/{compta => }/salaries/list.php (96%) rename htdocs/{compta => }/salaries/stats/index.php (97%) diff --git a/ChangeLog b/ChangeLog index 472c3ffba81..21f01e805bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -414,7 +414,7 @@ NEW: add option PROPOSAL_AUTO_ADD_AUTHOR_AS_CONTACT NEW: Add option to display thirdparty adress in combolist NEW: Add option to swap sender/recipient address on PDF NEW: Add option to display thirdparty adress in combolist -NEW: Add project on pament of salaries +NEW: Add project on payment of salaries NEW: Add SHIPPING_PDF_HIDE_WEIGHT_AND_VOLUME and NEW: Add somes hooks in bank planned entries NEW: Add supplier ref in item reception page diff --git a/htdocs/.gitignore b/htdocs/.gitignore index ac35d8fab2f..d51eaffd235 100644 --- a/htdocs/.gitignore +++ b/htdocs/.gitignore @@ -28,3 +28,4 @@ /nomenclature* /of/ /workstation/ +/oblyon* diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index cb56a4179b8..1bf1d8617db 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -45,7 +45,7 @@ require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT . '/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT . '/don/class/paymentdonation.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php'; -require_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT . '/fourn/class/paiementfourn.class.php'; require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php'; diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 9069045c8b3..e3bff713960 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -26,7 +26,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 5609bb6b598..37e44ac9768 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -43,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php'; require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; diff --git a/htdocs/compta/bank/ligne.php b/htdocs/compta/bank/ligne.php index 40906bfd455..4eb8a03ac64 100644 --- a/htdocs/compta/bank/ligne.php +++ b/htdocs/compta/bank/ligne.php @@ -386,7 +386,7 @@ if ($result) print ''; } elseif ($links[$key]['type']=='payment_salary') { - print ''; + print ''; print img_object($langs->trans('ShowPaymentSalary'), 'payment').' '; print $langs->trans("SalaryPayment"); print ''; diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index b93f381c555..b6b4d3e2106 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -662,7 +662,7 @@ else } elseif ($links[$key]['type']=='payment_salary') { - print ''; + print ''; print ' '.img_object($langs->trans('ShowPayment'), 'payment').' '; print $langs->trans("Payment"); print ''; diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 4b62a98b80b..5ba7232dc95 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -31,7 +31,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index f0a01d1ae04..2182375ff1a 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -773,7 +773,7 @@ else print ''; - print "\n"; + print "\n"; if ($modecompta == 'CREANCES-DETTES') print ''; print ''; diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index 384601ca989..9bf94a16b34 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -30,7 +30,7 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; // Load translation files required by the page diff --git a/htdocs/core/lib/salaries.lib.php b/htdocs/core/lib/salaries.lib.php index 418bc8bfaa4..cb632ab2bfd 100644 --- a/htdocs/core/lib/salaries.lib.php +++ b/htdocs/core/lib/salaries.lib.php @@ -33,7 +33,7 @@ function salaries_prepare_head($object) $h = 0; $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/salaries/card.php?id='.$object->id; $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'card'; $h++; @@ -49,13 +49,13 @@ function salaries_prepare_head($object) $upload_dir = $conf->salaries->dir_output . "/" . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/document.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/salaries/document.php?id='.$object->id; $head[$h][1] = $langs->trans('Documents'); if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' '.($nbFiles+$nbLinks).''; $head[$h][2] = 'documents'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/compta/salaries/info.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/salaries/info.php?id='.$object->id; $head[$h][1] = $langs->trans("Info"); $head[$h][2] = 'info'; $h++; @@ -77,7 +77,7 @@ function salaries_admin_prepare_head() $h = 0; $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/admin/salaries.php'; + $head[$h][0] = DOL_URL_ROOT.'/salaries/admin/salaries.php'; $head[$h][1] = $langs->trans("Miscellaneous"); $head[$h][2] = 'general'; $h++; @@ -88,7 +88,7 @@ function salaries_admin_prepare_head() // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab complete_head_from_modules($conf, $langs, '', $head, $h, 'salaries_admin'); - $head[$h][0] = DOL_URL_ROOT.'/admin/salaries_extrafields.php'; + $head[$h][0] = DOL_URL_ROOT.'/salaries/admin/salaries_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFieldsSalaries"); $head[$h][2] = 'attributes'; $h++; diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index c7b2c8a69a7..dcd874bdf3d 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -218,10 +218,10 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left -- insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->don->enabled && $leftmenu=="donations"', __HANDLER__, 'left', 2003__+MAX_llx_menu__, 'billing', '', 2000__+MAX_llx_menu__, '/don/stats/index.php?mainmenu=billing&leftmenu=donations', 'Statistics', 1, 'donations', '$user->rights->don->lire', '', 2, 2, __ENTITY__); -- Special expenses insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled || $conf->salaries->enabled || $conf->loan->enabled || $conf->banque->enabled', __HANDLER__, 'left', 2200__+MAX_llx_menu__, 'billing', 'tax', 6__+MAX_llx_menu__, '/compta/charges/index.php?mainmenu=billing&leftmenu=tax', 'MenuSpecialExpenses', 0, 'compta', '(! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) || (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) || (! empty($conf->loan->enabled) && $user->rights->loan->read) || (! empty($conf->banque->enabled) && $user->rights->banque->lire)', '', 0, 6, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled', __HANDLER__, 'left', 2210__+MAX_llx_menu__, 'billing', 'tax_sal', 2200__+MAX_llx_menu__, '/compta/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Salaries', 1, 'salaries', '$user->rights->salaries->read', '', 0, 1, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2211__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/card.php?mainmenu=billing&leftmenu=tax_salary&action=create', 'NewPayment', 2, 'companies', '$user->rights->salaries->write', '', 0, 2, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2212__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Payments', 2, 'companies', '$user->rights->salaries->read', '', 0, 3, __ENTITY__); -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2213__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/stats/index.php?mainmenu=billing&leftmenu=tax_salary', 'Statistics', 2, 'companies', '$user->rights->salaries->read', '', 0, 4, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled', __HANDLER__, 'left', 2210__+MAX_llx_menu__, 'billing', 'tax_sal', 2200__+MAX_llx_menu__, '/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Salaries', 1, 'salaries', '$user->rights->salaries->read', '', 0, 1, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2211__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/salaries/card.php?mainmenu=billing&leftmenu=tax_salary&action=create', 'NewPayment', 2, 'companies', '$user->rights->salaries->write', '', 0, 2, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2212__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/salaries/list.php?mainmenu=billing&leftmenu=tax_salary', 'Payments', 2, 'companies', '$user->rights->salaries->read', '', 0, 3, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2213__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/salaries/stats/index.php?mainmenu=billing&leftmenu=tax_salary', 'Statistics', 2, 'companies', '$user->rights->salaries->read', '', 0, 4, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled', __HANDLER__, 'left', 2220__+MAX_llx_menu__, 'billing', 'tax_loan', 2200__+MAX_llx_menu__, '/loan/list.php?mainmenu=billing&leftmenu=tax_loan', 'Loans', 1, 'loan', '$user->rights->loan->read', '', 0, 1, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan"', __HANDLER__, 'left', 2221__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/card.php?mainmenu=billing&leftmenu=tax_loan&action=create', 'NewLoan', 2, 'loan', '$user->rights->loan->write', '', 0, 2, __ENTITY__); --insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan"', __HANDLER__, 'left', 2222__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/payment/list.php?mainmenu=billing&leftmenu=tax_loan', 'Payments', 2, 'companies', '$user->rights->loan->read', '', 0, 3, __ENTITY__); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 88595cd366a..bf886986ce2 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1108,11 +1108,11 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM if (! empty($conf->salaries->enabled)) { $langs->load("salaries"); - $newmenu->add("/compta/salaries/list.php?leftmenu=tax_salary&mainmenu=billing", $langs->trans("Salaries"), 1, $user->rights->salaries->read, '', $mainmenu, 'tax_salary'); + $newmenu->add("/salaries/list.php?leftmenu=tax_salary&mainmenu=billing", $langs->trans("Salaries"), 1, $user->rights->salaries->read, '', $mainmenu, 'tax_salary'); if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i', $leftmenu)) { - $newmenu->add("/compta/salaries/card.php?leftmenu=tax_salary&action=create", $langs->trans("NewPayment"), 2, $user->rights->salaries->write); - $newmenu->add("/compta/salaries/list.php?leftmenu=tax_salary", $langs->trans("Payments"), 2, $user->rights->salaries->read); - $newmenu->add("/compta/salaries/stats/index.php?leftmenu=tax_salary", $langs->trans("Statistics"), 2, $user->rights->salaries->read); + $newmenu->add("/salaries/card.php?leftmenu=tax_salary&action=create", $langs->trans("NewPayment"), 2, $user->rights->salaries->write); + $newmenu->add("/salaries/list.php?leftmenu=tax_salary", $langs->trans("Payments"), 2, $user->rights->salaries->read); + $newmenu->add("/salaries/stats/index.php?leftmenu=tax_salary", $langs->trans("Statistics"), 2, $user->rights->salaries->read); } } diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php index d68c6a36308..71aff3a11a6 100644 --- a/htdocs/core/modules/modSalaries.class.php +++ b/htdocs/core/modules/modSalaries.class.php @@ -68,7 +68,7 @@ class modSalaries extends DolibarrModules $this->dirs = array("/salaries/temp"); // Config pages - $this->config_page_url = array('salaries.php'); + $this->config_page_url = array('salaries.php@salaries'); // Dependencies $this->hidden = false; // A condition to hide module diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index f8cc3062bde..7a768c24a89 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -50,3 +50,15 @@ ALTER TABLE llx_user ADD COLUMN iplastlogin varchar(250); ALTER TABLE llx_user ADD COLUMN ippreviouslogin varchar(250); ALTER TABLE llx_events ADD COLUMN prefix_session varchar(255) NULL; + +create table llx_payment_salary_extrafields +( + rowid integer AUTO_INCREMENT PRIMARY KEY, + tms timestamp, + fk_object integer NOT NULL, -- salary payment id + import_key varchar(14) -- import key +)ENGINE=innodb; + +ALTER TABLE llx_payment_salary_extrafields ADD INDEX idx_payment_salary_extrafields (fk_object); + +UPDATE llx_bank_url set url = REPLACE( url, 'compta/salaries/', 'salaries/'); diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql index 6989d271ccc..c038f1337d0 100644 --- a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.key.sql @@ -1,8 +1,5 @@ -- =================================================================== --- Copyright (C) 2002-2003 Rodolphe Quiedeville --- Copyright (C) 2002-2003 Jean-Louis Bergamo --- Copyright (C) 2009 Regis Houssin --- Copyright (C) 2011 Laurent Destailleur +-- Copyright (C) 2019 Alexandre Spangaro -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -20,4 +17,4 @@ -- =================================================================== -ALTER TABLE llx_adherent_extrafields ADD INDEX idx_adherent_extrafields (fk_object); +ALTER TABLE llx_payment_salary_extrafields ADD INDEX idx_payment_salary_extrafields (fk_object); diff --git a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql index 3ad91052c24..fc87cd8146d 100644 --- a/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql +++ b/htdocs/install/mysql/tables/llx_payment_salary_extrafields.sql @@ -1,7 +1,5 @@ -- =================================================================== --- Copyright (C) 2002-2003 Rodolphe Quiedeville --- Copyright (C) 2002-2003 Jean-Louis Bergamo --- Copyright (C) 2009 Regis Houssin +-- Copyright (C) 2019 Alexandre Spangaro -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by @@ -18,10 +16,10 @@ -- -- =================================================================== -create table llx_adherent_extrafields +create table llx_payment_salary_extrafields ( rowid integer AUTO_INCREMENT PRIMARY KEY, tms timestamp, - fk_object integer NOT NULL, -- member id + fk_object integer NOT NULL, -- salary payment id import_key varchar(14) -- import key )ENGINE=innodb; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index e14e15033d6..50cd7fe9bcb 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1193,6 +1193,7 @@ ExtraFieldsSupplierOrders=Complementary attributes (orders) ExtraFieldsSupplierInvoices=Complementary attributes (invoices) ExtraFieldsProject=Complementary attributes (projects) ExtraFieldsProjectTask=Complementary attributes (tasks) +ExtraFieldsSalaries=Complementary attributes (salaries) ExtraFieldHasWrongValue=Attribute %s has a wrong value. AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters without space SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba). diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index b4d2a8b290f..debdc33fdd3 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -52,7 +52,7 @@ if (! empty($conf->loan->enabled)) require_once DOL_DOCUMENT_ROOT.'/loan/class if (! empty($conf->stock->enabled)) require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php'; if (! empty($conf->tax->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; if (! empty($conf->banque->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php'; -if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; // Load translation files required by the page $langs->loadLangs(array('projects', 'companies', 'suppliers', 'compta')); @@ -457,7 +457,7 @@ $listofreferent=array( 'datefieldname'=>'datev', 'margin'=>'minus', 'disableamount'=>0, - 'urlnew'=>DOL_URL_ROOT.'/compta/salaries/card.php?action=create&projectid='.$id, + 'urlnew'=>DOL_URL_ROOT.'/salaries/card.php?action=create&projectid='.$id, 'lang'=>'salaries', 'buttonnew'=>'AddSalaryPayment', 'testnew'=>$user->rights->salaries->write, diff --git a/htdocs/admin/salaries.php b/htdocs/salaries/admin/salaries.php similarity index 83% rename from htdocs/admin/salaries.php rename to htdocs/salaries/admin/salaries.php index 324ae1b0a17..c3a4e849852 100644 --- a/htdocs/admin/salaries.php +++ b/htdocs/salaries/admin/salaries.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2014-2019 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,10 +22,11 @@ * \brief Setup page to configure salaries module */ -require '../main.inc.php'; +require '../../main.inc.php'; // Class require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php'; // Load translation files required by the page @@ -39,7 +40,7 @@ $action = GETPOST('action', 'alpha'); // Other parameters SALARIES_* $list = array ( - 'SALARIES_XXX', + 'SALARIES_ACCOUNTING_ACCOUNT_PAYMENT', ); /* @@ -80,29 +81,33 @@ if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($d $linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans('SalariesSetup'), $linkback, 'title_setup'); +$head = salaries_admin_prepare_head(); + +dol_fiche_head($head, 'general', $langs->trans("Salaries"), -1, 'payment'); + +// Document templates +print load_fiche_titre($langs->trans("Options"), '', ''); + print ''; print ''; print ''; -//dol_fiche_head(null, '', '', -1); - /* * Params */ print '
'; - print $langs->trans('DateCreation'); + print $langs->trans('TicketMessagesList'); print ''; - if ($arraymsgs['fk_user_action'] > 0) { + if ($arraymsgs['fk_user_author'] > 0) { $userstat = new User($this->db); - $res = $userstat->fetch($arraymsgs['fk_user_action']); + $res = $userstat->fetch($arraymsgs['fk_user_author']); if ($res) { print $userstat->getNomUrl(0); } diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 132cce1e52b..7ab32f20851 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -1660,20 +1660,19 @@ class Ticket extends CommonObject } /** - * Charge la liste des messages sur le ticket + * Load the list of event on ticket into ->cache_msgs_ticket * - * @return int Nb lignes chargees, 0 si deja chargees, <0 si ko + * @return int Nb of lines loaded, 0 if already loaded, <0 if KO */ public function loadCacheMsgsTicket() { - global $langs; - if (is_array($this->cache_msgs_ticket) && count($this->cache_msgs_ticket)) { return 0; } - // Cache deja charge - $sql = "SELECT rowid, fk_user_author, datec, label, message, visibility"; + // Cache already loaded + + $sql = "SELECT id as rowid, fk_user_author, datec, label, note as message, visibility"; $sql .= " FROM " . MAIN_DB_PREFIX . "actioncomm"; $sql .= " WHERE fk_element = " . (int) $this->id; $sql .= " AND elementtype = 'ticket'"; @@ -1687,7 +1686,7 @@ class Ticket extends CommonObject while ($i < $num) { $obj = $this->db->fetch_object($resql); $this->cache_msgs_ticket[$i]['id'] = $obj->rowid; - $this->cache_msgs_ticket[$i]['fk_user_action'] = $obj->fk_user_action; + $this->cache_msgs_ticket[$i]['fk_user_author'] = $obj->fk_user_author; $this->cache_msgs_ticket[$i]['datec'] = $this->db->jdate($obj->datec); $this->cache_msgs_ticket[$i]['subject'] = $obj->label; $this->cache_msgs_ticket[$i]['message'] = $obj->message; From 934d8bd2d1ba83a57689a9ecddd12561cd59a29b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 19:13:51 +0200 Subject: [PATCH 0253/1148] Update doc --- .github/CONTRIBUTING.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 578bd592a75..6f61c24ae04 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -113,13 +113,11 @@ Also, some code changes need a prior approbation: * if you add a new table, you must first create a page on http://wiki.dolibarr.org/index.php/Category:Table_SQL (copy an existing page changing its name to see it into this index page). Than ask the project manager (@eldy) if the new data model you plan to add can be accepted as you suggest. -Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow -every developer discuss about the PR. +Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow every developer discuss about the PR. If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. -If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR. +If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. -Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio in Open Source world, don't expect the core team -to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. +Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio of answered PR in Open Source world, don't expect the core team to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. ### Resources From db61dfdb9c87b62086808b535fa0acd58dcd39a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 19:24:41 +0200 Subject: [PATCH 0254/1148] Update doc --- .github/CONTRIBUTING.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6f61c24ae04..a13037402f8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -114,9 +114,12 @@ Also, some code changes need a prior approbation: * if you add a new table, you must first create a page on http://wiki.dolibarr.org/index.php/Category:Table_SQL (copy an existing page changing its name to see it into this index page). Than ask the project manager (@eldy) if the new data model you plan to add can be accepted as you suggest. Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow every developer discuss about the PR. -If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. -If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. -By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. + +If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. Don't expect anything on your PR if you have such errors, you MUST first fix the Continuous Integration error to have it taken into consideration. + +If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. +In most cases, it give you information of things you have to do to have the PR taken into consideration (for example a change is requested, a conflict is expected to be solved, some questions were asked). If you have a yellow, red flag of purple flag, don't expect to have your PR validated. You must first provide the answer the flag ask you. The majority of PR are waiting a developer action. + Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio of answered PR in Open Source world, don't expect the core team to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. From e742c3eb20e209d026653636b6a7b48776668c2a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 20:06:02 +0200 Subject: [PATCH 0255/1148] Debug module ticket --- htdocs/public/ticket/create_ticket.php | 2 +- htdocs/public/ticket/list.php | 3 +- htdocs/public/ticket/view.php | 70 ++++++++++++++++++-------- htdocs/ticket/class/ticket.class.php | 2 +- 4 files changed, 53 insertions(+), 24 deletions(-) diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php index b663aaa43c3..b7d17244c2a 100644 --- a/htdocs/public/ticket/create_ticket.php +++ b/htdocs/public/ticket/create_ticket.php @@ -17,7 +17,7 @@ */ /** - * \file htdocs/public/ticket/index.php + * \file htdocs/public/ticket/create_ticket.php * \ingroup ticket * \brief Display public form to add new ticket */ diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 9da0a4272e1..39736c6d857 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -210,7 +210,8 @@ if ($action == "view_ticketlist") 't.date_read' => array('label' => $langs->trans("TicketReadOn"), 'checked' => 0), 't.date_close' => array('label' => $langs->trans("TicketCloseOn"), 'checked' => 0), 't.ref' => array('label' => $langs->trans("Ref"), 'checked' => 1), - 't.fk_statut' => array('label' => $langs->trans("Statut"), 'checked' => 1), + //'t.track_id' => array('label' => $langs->trans("IDTracking"), 'checked' => 0), + 't.fk_statut' => array('label' => $langs->trans("Statut"), 'checked' => 1), 't.subject' => array('label' => $langs->trans("Subject"), 'checked' => 1), 'type.code' => array('label' => $langs->trans("Type"), 'checked' => 1), 'category.code' => array('label' => $langs->trans("Category"), 'checked' => 1), diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 2c23ba1bc71..be77e50ea28 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -17,7 +17,7 @@ */ /** - * \file htdocs/public/ticket/index.php + * \file htdocs/public/ticket/view.php * \ingroup ticket * \brief Public file to add and manage ticket */ @@ -65,7 +65,7 @@ $object = new ActionsTicket($db); * Actions */ -if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close" || $action == "new_public_message") { +if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close" || $action == "add_public_message") { $error = 0; $display_ticket = false; if (!strlen($track_id)) { @@ -89,22 +89,28 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if (!$error) { $ret = $object->fetch('', '', $track_id); if ($ret && $object->dao->id > 0) { - // vérifie si l'adresse email est bien dans les contacts du ticket - $contacts = $object->dao->liste_contact(-1, 'external'); - foreach ($contacts as $contact) { - if ($contact['email'] == $email) { - $display_ticket = true; - $_SESSION['email_customer'] = $email; - break; - } else { - $display_ticket = false; - } - } - + // Check if emails provided is the one of author + if ($object->dao->origin_email == $email) + { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } + // Check if emails provided is inside list of contacts + else { + $contacts = $object->dao->liste_contact(-1, 'external'); + foreach ($contacts as $contact) { + if ($contact['email'] == $email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + break; + } else { + $display_ticket = false; + } + } + } if ($object->dao->fk_soc > 0) { $object->dao->fetch_thirdparty(); } - if ($email == $object->dao->origin_email || $email == $object->dao->thirdparty->email) { $display_ticket = true; $_SESSION['email_customer'] = $email; @@ -116,12 +122,32 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | } } + if ($action == "add_public_message") + { + // TODO Add message... + + + + + if (! $error) + { + $action = 'view_ticket'; + } + } + if ($error || $errors) { setEventMessages($object->error, $object->errors, 'errors'); - $action = ''; + if ($action == "add_public_message") + { + $action = 'add_message'; + } + else + { + $action = ''; + } } } - +//var_dump($action); //$object->doActions($action); @@ -251,16 +277,18 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | $formticket = new FormTicket($db); - $formticket->action = "new_public_message"; + $formticket->action = "add_public_message"; $formticket->track_id = $object->dao->track_id; $formticket->id = $object->dao->id; - $formticket->param = array('fk_user_create' => '-1'); + $formticket->param = array('track_id' => $object->dao->track_id, 'fk_user_create' => '-1', 'returnurl' => DOL_URL_ROOT.'/public/ticket/view.php'); $formticket->withfile = 2; $formticket->showMessageForm('100%'); - } else { - print '
'; + } + + if ($action != 'add_message') { + print ''; print ''; print ''; print ''; diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 7ab32f20851..29654654110 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -180,7 +180,7 @@ class Ticket extends CommonObject 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'position'=>1, 'visible'=>-2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id"), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'notnull'=>1, 'index'=>1), 'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'css'=>''), - 'track_id' => array('type'=>'varchar(255)', 'label'=>'TrackID', 'visible'=>0, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), + 'track_id' => array('type'=>'varchar(255)', 'label'=>'TicketTrackId', 'visible'=>-2, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), 'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'nowraponall'), 'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"), 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>""), From 94f063449268ed9713ad4c75c52a1759bc224119 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 21:45:11 +0200 Subject: [PATCH 0256/1148] Fix empty link --- htdocs/accountancy/customer/lines.php | 6 +++--- htdocs/accountancy/supplier/lines.php | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php index ea174638a2a..0e7047b84de 100644 --- a/htdocs/accountancy/customer/lines.php +++ b/htdocs/accountancy/customer/lines.php @@ -374,9 +374,9 @@ if ($result) { // Ref Product print '
'; - if ($product_static->id) - print $product_static->getNomUrl(1); - if ($objp->product_label) print '
'.$objp->product_label; + if ($product_static->id > 0) print $product_static->getNomUrl(1); + if ($product_static->id > 0 && $objp->product_label) print '
'; + if ($objp->product_label) print $objp->product_label; print '
'; diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php index a67386f6fbd..c4aa1316876 100644 --- a/htdocs/accountancy/supplier/lines.php +++ b/htdocs/accountancy/supplier/lines.php @@ -384,9 +384,9 @@ if ($result) { // Ref product print ''; - if ($product_static->id) - print $product_static->getNomUrl(1); - if ($objp->product_label) print '
'.$objp->product_label; + if ($product_static->id > 0) print $product_static->getNomUrl(1); + if ($product_static->id > 0 && $objp->product_label) print '
'; + if ($objp->product_label) print $objp->product_label; print '
 ".$langs->trans("Salary")." fk_user."\">".$obj->firstname." ".$obj->lastname."".$langs->trans("Salary")." fk_user."\">".$obj->firstname." ".$obj->lastname."'.price(-$obj->amount).''.price(-$obj->amount).'
'; print ''; -print ''; +print ''; +print '\n"; print "\n"; foreach ($list as $key) { - - print ''; // Param $label = $langs->trans($key); - print ''; + print ''; // Value print ''."\n"; } - // Other attributes - $parameters=array(); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; + // Other attributes + $parameters=array(); + $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + if (empty($reshook)) + { + print $object->showOptionals($extrafields, 'edit', $parameters); + } print '
' . $langs->trans('Options') . ''.$langs->trans("Parameters").''.$langs->trans("Value")."
'; diff --git a/htdocs/admin/salaries_extrafields.php b/htdocs/salaries/admin/salaries_extrafields.php similarity index 87% rename from htdocs/admin/salaries_extrafields.php rename to htdocs/salaries/admin/salaries_extrafields.php index 180e695407f..7920acf5c6c 100644 --- a/htdocs/admin/salaries_extrafields.php +++ b/htdocs/salaries/admin/salaries_extrafields.php @@ -40,7 +40,7 @@ foreach ($tmptype2label as $key => $val) $type2label[$key]=$langs->transnoentiti $action=GETPOST('action', 'alpha'); $attrname=GETPOST('attrname', 'alpha'); -$elementtype='adherent'; //Must be the $table_element of the class that manage extrafield +$elementtype='payment_salary'; //Must be the $table_element of the class that manage extrafield if (!$user->admin) accessforbidden(); @@ -57,19 +57,19 @@ require DOL_DOCUMENT_ROOT.'/core/actions_extrafields.inc.php'; * View */ -$textobject = $langs->transnoentitiesnoconv("Members"); +$textobject = $langs->transnoentitiesnoconv("Salaries"); -$help_url='EN:Module_Foundations|FR:Module_Adhérents|ES:Módulo_Miembros'; -llxHeader('', $langs->trans("MembersSetup"), $help_url); +$help_url=''; +llxHeader('', $langs->trans("SalariesSetup"), $help_url); $linkback=''.$langs->trans("BackToModuleList").''; -print load_fiche_titre($langs->trans("MembersSetup"), $linkback, 'title_setup'); +print load_fiche_titre($langs->trans("SalariesSetup"), $linkback, 'title_setup'); -$head = member_admin_prepare_head(); +$head = salaries_admin_prepare_head(); -dol_fiche_head($head, 'attributes', $langs->trans("Members"), -1, 'user'); +dol_fiche_head($head, 'attributes', $langs->trans("Salaries"), -1, 'user'); require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php'; diff --git a/htdocs/compta/salaries/card.php b/htdocs/salaries/card.php similarity index 89% rename from htdocs/compta/salaries/card.php rename to htdocs/salaries/card.php index c19b18bc0f0..5028dae747e 100644 --- a/htdocs/compta/salaries/card.php +++ b/htdocs/salaries/card.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2011-2019 Alexandre Spangaro * Copyright (C) 2014 Laurent Destailleur * Copyright (C) 2015 Jean-François Ferry * Copyright (C) 2015 Charlie BENKE @@ -20,20 +20,21 @@ */ /** - * \file htdocs/compta/salaries/card.php + * \file htdocs/salaries/card.php * \ingroup salaries * \brief Page of salaries payments */ -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php'; +require_once DOL_DOCUMENT_ROOT . '/core/lib/salaries.lib.php'; +require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; if (! empty($conf->projet->enabled)) { - require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php'; } // Load translation files required by the page @@ -51,12 +52,14 @@ if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'salaries', '', '', ''); $object = new PaymentSalary($db); +$extrafields = new ExtraFields($db); + +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label($object->table_element); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context $hookmanager->initHooks(array('salarycard','globalcard')); - - /** * Actions */ @@ -100,11 +103,15 @@ if ($action == 'add' && empty($cancel)) $object->fk_user_author=$user->id; $object->fk_project= GETPOST('fk_project', 'int'); - // Set user current salary as ref salaray for the payment + // Set user current salary as ref salary for the payment $fuser=new User($db); $fuser->fetch(GETPOST("fk_user", "int")); $object->salary=$fuser->salary; + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels, $object); + if ($ret < 0) $error++; + if (empty($datep) || empty($datev) || empty($datesp) || empty($dateep)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Date")), null, 'errors'); @@ -174,7 +181,7 @@ if ($action == 'delete') if ($result >= 0) { $db->commit(); - header("Location: ".DOL_URL_ROOT.'/compta/salaries/list.php'); + header("Location: ".DOL_URL_ROOT.'/salaries/list.php'); exit; } else @@ -333,10 +340,14 @@ if ($action == 'create') print '
'; @@ -365,7 +376,7 @@ if ($id) dol_fiche_head($head, 'card', $langs->trans("SalaryPayment"), -1, 'payment'); - $linkback = ''.$langs->trans("BackToList").''; + $linkback = ''.$langs->trans("BackToList").''; $morehtmlref='
'; @@ -453,10 +464,8 @@ if ($id) } } - // Other attributes - $parameters=array(); - $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook - print $hookmanager->resPrint; + // Other attributes + include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php'; print '
'; diff --git a/htdocs/compta/salaries/class/index.html b/htdocs/salaries/class/index.html similarity index 100% rename from htdocs/compta/salaries/class/index.html rename to htdocs/salaries/class/index.html diff --git a/htdocs/compta/salaries/class/paymentsalary.class.php b/htdocs/salaries/class/paymentsalary.class.php similarity index 93% rename from htdocs/compta/salaries/class/paymentsalary.class.php rename to htdocs/salaries/class/paymentsalary.class.php index 1d0bad641fc..905829e4696 100644 --- a/htdocs/compta/salaries/class/paymentsalary.class.php +++ b/htdocs/salaries/class/paymentsalary.class.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2011-2019 Alexandre Spangaro * Copyright (C) 2014 Juanjo Menent * * This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ */ /** - * \file htdocs/compta/salaries/class/paymentsalary.class.php + * \file htdocs/salaries/class/paymentsalary.class.php * \ingroup salaries * \brief Class for salaries module payment */ @@ -157,6 +157,19 @@ class PaymentSalary extends CommonObject return -1; } + // Update extrafield + if (! $error) + { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + } + if (! $notrigger) { // Call trigger @@ -242,6 +255,10 @@ class PaymentSalary extends CommonObject $this->fk_account = $obj->fk_account; $this->fk_type = $obj->fk_type; $this->rappro = $obj->rappro; + + // Retreive all extrafield + // fetch optionals attributes and labels + $this->fetch_optionals(); } $this->db->free($resql); @@ -272,6 +289,19 @@ class PaymentSalary extends CommonObject if ($result < 0) return -1; // End call triggers + // Delete donation + if (! $error) + { + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "payment_salary_extrafields"; + $sql.= " WHERE fk_object=" . $this->id; + + $resql = $this->db->query($sql); + if (! $resql) + { + $this->errors[] = $this->db->lasterror(); + $error++; + } + } $sql = "DELETE FROM ".MAIN_DB_PREFIX."payment_salary"; $sql.= " WHERE rowid=".$this->id; @@ -418,6 +448,18 @@ class PaymentSalary extends CommonObject $result=$acc->fetch($this->accountid); if ($result <= 0) dol_print_error($this->db); + // Update extrafield + if (! $error) { + if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used + { + $result=$this->insertExtraFields(); + if ($result < 0) + { + $error++; + } + } + } + // Insert payment into llx_bank // Add link 'payment_salary' in bank_url between payment and bank transaction $bank_line_id = $acc->addline( @@ -449,7 +491,7 @@ class PaymentSalary extends CommonObject if (! $error) { // Add link 'payment_salary' in bank_url between payment and bank transaction - $url=DOL_URL_ROOT.'/compta/salaries/card.php?id='; + $url=DOL_URL_ROOT.'/salaries/card.php?id='; $result=$acc->add_url_line($bank_line_id, $this->id, $url, "(SalaryPayment)", "payment_salary"); if ($result <= 0) @@ -554,7 +596,7 @@ class PaymentSalary extends CommonObject $label.= '
'; $label.= '' . $langs->trans('Ref') . ': ' . $this->ref; - $url = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$this->id; + $url = DOL_URL_ROOT.'/salaries/card.php?id='.$this->id; if ($option != 'nolink') { diff --git a/htdocs/compta/salaries/class/salariesstats.class.php b/htdocs/salaries/class/salariesstats.class.php similarity index 97% rename from htdocs/compta/salaries/class/salariesstats.class.php rename to htdocs/salaries/class/salariesstats.class.php index 0287f4978df..8671c4b6b0d 100644 --- a/htdocs/compta/salaries/class/salariesstats.class.php +++ b/htdocs/salaries/class/salariesstats.class.php @@ -17,12 +17,12 @@ */ /** - * \file htdocs/compta/salaries/class/salariesstats.class.php + * \file htdocs/salaries/class/salariesstats.class.php * \ingroup salaries * \brief Fichier de la classe de gestion des stats des salaires */ include_once DOL_DOCUMENT_ROOT . '/core/class/stats.class.php'; -include_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php'; +include_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php'; /** * Classe permettant la gestion des stats des salaires diff --git a/htdocs/compta/salaries/document.php b/htdocs/salaries/document.php similarity index 91% rename from htdocs/compta/salaries/document.php rename to htdocs/salaries/document.php index 3ff92d23c1c..8cf985c1b88 100644 --- a/htdocs/compta/salaries/document.php +++ b/htdocs/salaries/document.php @@ -6,7 +6,7 @@ * Copyright (C) 2005 Simon TOSSER * Copyright (C) 2011-2012 Juanjo Menent * Copyright (C) 2013 Cédric Salvador - * Copyright (C) 2015-2017 Alexandre Spangaro + * Copyright (C) 2015-2019 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,16 +24,16 @@ */ /** - * \file htdocs/compta/salaries/document.php + * \file htdocs/salaries/document.php * \ingroup salaries * \brief Page of linked files onto salaries */ -require '../../main.inc.php'; +require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; // Load translation files required by the page $langs->loadLangs(array("compta","bills","users","salaries","hrm")); @@ -99,7 +99,7 @@ if ($object->id) $totalsize+=$file['size']; } - $linkback = ''.$langs->trans("BackToList").''; + $linkback = ''.$langs->trans("BackToList").''; $morehtmlref='
'; diff --git a/htdocs/compta/salaries/info.php b/htdocs/salaries/info.php similarity index 84% rename from htdocs/compta/salaries/info.php rename to htdocs/salaries/info.php index 4ef9691bd31..59de25378f7 100644 --- a/htdocs/compta/salaries/info.php +++ b/htdocs/salaries/info.php @@ -1,7 +1,7 @@ * Copyright (C) 2015 Charlie BENKE - * Copyright (C) 2017 Alexandre Spangaro + * Copyright (C) 2017-2019 Alexandre Spangaro * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,13 +18,13 @@ */ /** - * \file htdocs/compta/salaries/info.php + * \file htdocs/salaries/info.php * \ingroup salaries * \brief Page with info about salaries contribution */ -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; @@ -54,7 +54,7 @@ $head = salaries_prepare_head($object); dol_fiche_head($head, 'info', $langs->trans("SalaryPayment"), -1, 'payment'); -$linkback = ''.$langs->trans("BackToList").''; +$linkback = ''.$langs->trans("BackToList").''; $morehtmlref='
'; diff --git a/htdocs/compta/salaries/list.php b/htdocs/salaries/list.php similarity index 96% rename from htdocs/compta/salaries/list.php rename to htdocs/salaries/list.php index 4fa8bd09a76..8694b99ae78 100644 --- a/htdocs/compta/salaries/list.php +++ b/htdocs/salaries/list.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2011-2019 Alexandre Spangaro * Copyright (C) 2015-2016 Laurent Destailleur * Copyright (C) 2015 Jean-François Ferry * @@ -18,13 +18,13 @@ */ /** - * \file htdocs/compta/salaries/list.php + * \file htdocs/salaries/list.php * \ingroup salaries * \brief List of salaries payments */ -require '../../main.inc.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +require '../main.inc.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php'; @@ -150,7 +150,7 @@ if ($result) $newcardbutton=''; if (! empty($user->rights->salaries->write)) { - $newcardbutton=''.$langs->trans('NewSalaryPayment').''; + $newcardbutton=''.$langs->trans('NewSalaryPayment').''; $newcardbutton.= ''; $newcardbutton.= ''; } diff --git a/htdocs/compta/salaries/stats/index.php b/htdocs/salaries/stats/index.php similarity index 97% rename from htdocs/compta/salaries/stats/index.php rename to htdocs/salaries/stats/index.php index d6f94427cce..cac3c8c9f34 100644 --- a/htdocs/compta/salaries/stats/index.php +++ b/htdocs/salaries/stats/index.php @@ -17,14 +17,14 @@ */ /** - * \file htdocs/compta/salaries/stats/index.php + * \file htdocs/salaries/stats/index.php * \ingroup salaries * \brief Page for statistics of module salaries */ require '../../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php'; -require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/salariesstats.class.php'; +require_once DOL_DOCUMENT_ROOT.'/salaries/class/salariesstats.class.php'; // Load translation files required by the page $langs->loadLangs(array("salaries","companies")); @@ -178,7 +178,7 @@ if (! count($arrayyears)) $arrayyears[$nowyear]=$nowyear; $h=0; $head = array(); -$head[$h][0] = DOL_URL_ROOT . '/compta/salaries/stats/index.php'; +$head[$h][0] = DOL_URL_ROOT . '/salaries/stats/index.php'; $head[$h][1] = $langs->trans("ByMonthYear"); $head[$h][2] = 'byyear'; $h++; diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php index 196819f1a4a..76d1f6d4c69 100644 --- a/htdocs/user/bank.php +++ b/htdocs/user/bank.php @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/user/class/userbankaccount.class.php'; if (! empty($conf->holiday->enabled)) require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; if (! empty($conf->expensereport->enabled)) require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; -if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; +if (! empty($conf->salaries->enabled)) require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php'; // Load translation files required by page $langs->loadLangs(array('companies', 'commercial', 'banks', 'bills', 'trips', 'holiday', 'salaries')); @@ -307,7 +307,7 @@ if ($action != 'edit' && $action != 'create') // If not bank account yet, $acco print ''; print ''; - print '
'; + print ''; print ''; From ec34ce1e6418f613f6be2aeb5994a6d0737c3141 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 23:11:00 +0200 Subject: [PATCH 0258/1148] Maxi debug of module ticket --- htdocs/core/class/html.formticket.class.php | 88 +++++++++++++++++---- htdocs/public/ticket/index.php | 2 +- htdocs/public/ticket/list.php | 2 +- htdocs/public/ticket/view.php | 68 ++++++++++++---- htdocs/ticket/card.php | 47 +++++------ 5 files changed, 152 insertions(+), 55 deletions(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index 6f712fa6c4d..fdbce981e72 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -733,40 +733,97 @@ class FormTicket print ajax_combobox('select'.$htmlname); } + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps + /** + * Clear list of attached files in send mail form (also stored in session) + * + * @return void + */ + public function clear_attached_files() + { + // phpcs:enable + global $conf,$user; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + + // Set tmp user directory + $vardir=$conf->user->dir_output."/".$user->id; + $upload_dir = $vardir.'/temp/'; // TODO Add $keytoavoidconflict in upload_dir path + if (is_dir($upload_dir)) dol_delete_dir_recursive($upload_dir); + + $keytoavoidconflict = empty($this->trackid)?'':'-'.$this->trackid; // this->trackid must be defined + unset($_SESSION["listofpaths".$keytoavoidconflict]); + unset($_SESSION["listofnames".$keytoavoidconflict]); + unset($_SESSION["listofmimes".$keytoavoidconflict]); + } + /** * Show the form to add message on ticket * - * @param string $width Width of form - * @return void + * @param string $width Width of form + * @return void */ public function showMessageForm($width = '40%') { - global $conf, $langs, $user, $mysoc; + global $conf, $langs, $user, $hookmanager, $form, $mysoc; + + $formmail = new FormMail($this->db); + $addfileaction = 'addfile'; + + if (! is_object($form)) $form=new Form($this->db); // Load translation files required by the page $langs->loadLangs(array('other', 'mails')); - $addfileaction = 'addfile'; + // Clear temp files. Must be done at beginning, before call of triggers + if (GETPOST('mode', 'alpha') == 'init' || (GETPOST('modelmailselected', 'alpha') && GETPOST('modelmailselected', 'alpha') != '-1')) + { + $this->clear_attached_files(); + } - $form = new Form($this->db); - $formmail = new FormMail($this->db); + // Define output language + $outputlangs = $langs; + $newlang = ''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $this->param['langsmodels']; + if (! empty($newlang)) + { + $outputlangs = new Translate("", $conf); + $outputlangs->setDefaultLang($newlang); + $outputlangs->load('other'); + } + // Get message template for $this->param["models"] into c_email_templates + $arraydefaultmessage = -1; + if ($this->param['models'] != 'none') + { + $model_id=0; + if (array_key_exists('models_id', $this->param)) + { + $model_id=$this->param["models_id"]; + } + + $arraydefaultmessage=$formmail->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id); // If $model_id is empty, preselect the first one + } // Define list of attached files $listofpaths = array(); $listofnames = array(); $listofmimes = array(); - if (!empty($_SESSION["listofpaths"])) { - $listofpaths = explode(';', $_SESSION["listofpaths"]); + $keytoavoidconflict = empty($this->trackid)?'':'-'.$this->trackid; // this->trackid must be defined + + if (GETPOST('mode', 'alpha') == 'init' || (GETPOST('modelmailselected', 'alpha') && GETPOST('modelmailselected', 'alpha') != '-1')) + { + if (! empty($arraydefaultmessage->joinfiles) && is_array($this->param['fileinit'])) + { + foreach($this->param['fileinit'] as $file) + { + $this->add_attached_files($file, basename($file), dol_mimetype($file)); + } + } } - if (!empty($_SESSION["listofnames"])) { - $listofnames = explode(';', $_SESSION["listofnames"]); - } - - if (!empty($_SESSION["listofmimes"])) { - $listofmimes = explode(';', $_SESSION["listofmimes"]); - } + if (! empty($_SESSION["listofpaths".$keytoavoidconflict])) $listofpaths=explode(';', $_SESSION["listofpaths".$keytoavoidconflict]); + if (! empty($_SESSION["listofnames".$keytoavoidconflict])) $listofnames=explode(';', $_SESSION["listofnames".$keytoavoidconflict]); + if (! empty($_SESSION["listofmimes".$keytoavoidconflict])) $listofmimes=explode(';', $_SESSION["listofmimes".$keytoavoidconflict]); // Define output language $outputlangs = $langs; @@ -808,6 +865,7 @@ class FormTicket print ''; print ''; print ''; + print ''; foreach ($this->param as $key => $value) { print ''; } diff --git a/htdocs/public/ticket/index.php b/htdocs/public/ticket/index.php index 2e138312102..b7f7bd71088 100644 --- a/htdocs/public/ticket/index.php +++ b/htdocs/public/ticket/index.php @@ -77,7 +77,7 @@ print ''; print ''; // End of page -htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); +htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object); llxFooter('', 'public'); diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 39736c6d857..88b8426fef9 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -706,7 +706,7 @@ if ($action == "view_ticketlist") print ""; // End of page -htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); +htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object); llxFooter('', 'public'); diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index be77e50ea28..e7df24c16f3 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -48,8 +48,9 @@ $langs->loadLangs(array("companies","other","ticket")); // Get parameters $track_id = GETPOST('track_id', 'alpha'); -$action = GETPOST('action', 'aZ09'); -$email = GETPOST('email', 'alpha'); +$cancel = GETPOST('cancel', 'alpha'); +$action = GETPOST('action', 'aZ09'); +$email = GETPOST('email', 'alpha'); if (GETPOST('btn_view_ticket')) { unset($_SESSION['email_customer']); @@ -65,7 +66,17 @@ $object = new ActionsTicket($db); * Actions */ -if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close" || $action == "add_public_message") { +if ($cancel) +{ + if (! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + $action='view_ticket'; +} + +if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close" || $action == "add_message") { $error = 0; $display_ticket = false; if (!strlen($track_id)) { @@ -108,12 +119,33 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | } } } - if ($object->dao->fk_soc > 0) { + // Check email of thirdparty of ticket + if ($object->dao->fk_soc > 0 || $object->dao->socid > 0) { $object->dao->fetch_thirdparty(); + if ($email == $object->dao->thirdparty->email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } } - if ($email == $object->dao->origin_email || $email == $object->dao->thirdparty->email) { - $display_ticket = true; - $_SESSION['email_customer'] = $email; + // Check if email is email of creator + if ($object->dao->fk_user_create > 0) + { + $tmpuser = new User($db); + $tmpuser->fetch($object->dao->fk_user_create); + if ($email == $tmpuser->email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } + } + // Check if email is email of creator + if ($object->dao->fk_user_assign > 0 && $object->dao->fk_user_assign != $object->dao->fk_user_create) + { + $tmpuser = new User($db); + $tmpuser->fetch($object->dao->fk_user_assign); + if ($email == $tmpuser->email) { + $display_ticket = true; + $_SESSION['email_customer'] = $email; + } } } else { $error++; @@ -122,9 +154,11 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | } } - if ($action == "add_public_message") + if (! $error && $action == "add_message" && $display_ticket) { // TODO Add message... + $ret = $object->dao->newMessage($user, $action, 0); + @@ -137,9 +171,9 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if ($error || $errors) { setEventMessages($object->error, $object->errors, 'errors'); - if ($action == "add_public_message") + if ($action == "add_message") { - $action = 'add_message'; + $action = 'presend'; } else { @@ -172,7 +206,7 @@ llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); print '
'; -if ($action == "view_ticket" || $action == "add_message" || $action == "close" || $action == "confirm_public_close") { +if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close") { if ($display_ticket) { // Confirmation close if ($action == 'close') { @@ -272,22 +306,24 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | print '
'; - if ($action == 'add_message') { + if ($action == 'presend') { print load_fiche_titre($langs->trans('TicketAddMessage'), '', 'messages@ticket'); $formticket = new FormTicket($db); - $formticket->action = "add_public_message"; + $formticket->action = "add_message"; $formticket->track_id = $object->dao->track_id; $formticket->id = $object->dao->id; $formticket->param = array('track_id' => $object->dao->track_id, 'fk_user_create' => '-1', 'returnurl' => DOL_URL_ROOT.'/public/ticket/view.php'); $formticket->withfile = 2; + $formticket->withcancel = 1; + $formticket->showMessageForm('100%'); } - if ($action != 'add_message') { + if ($action != 'presend') { print ''; print ''; print ''; @@ -302,7 +338,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | if ($object->dao->fk_statut < 8) { // New message - print ''; + print ''; // Close ticket if ($object->dao->fk_statut > 0 && $object->dao->fk_statut < 8) { @@ -346,7 +382,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" | print "
"; // End of page -htmlPrintOnlinePaymentFooter($mysoc, $langs, 1, $suffix, $object); +htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object); llxFooter('', 'public'); diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index af65fbd2715..ba2d14b06ce 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -75,7 +75,7 @@ if (empty($action) && empty($id) && empty($ref)) $action='view'; //Select mail models is same action as add_message if (GETPOST('modelselected', 'alpha')) { - $action = 'create_message'; + $action = 'presend'; } // Load object @@ -255,17 +255,17 @@ if (GETPOST('add', 'alpha') && $user->rights->ticket->write) { if ($action == 'edit' && $user->rights->ticket->write) { $error = 0; - if ($object->fetch(GETPOST('id')) < 0) { + if ($object->fetch(GETPOST('id', 'int')) < 0) { $error++; array_push($object->errors, $langs->trans("ErrorTicketIsNotValid")); $_GET["action"] = $_POST["action"] = ''; } } -if (GETPOST('update') && GETPOST('id') && $user->rights->ticket->write) { +if (GETPOST('update', 'alpha') && GETPOST('id', 'int') && $user->rights->ticket->write) { $error = 0; - $ret = $object->fetch(GETPOST('id')); + $ret = $object->fetch(GETPOST('id', 'int')); if ($ret < 0) { $error++; array_push($object->errors, $langs->trans("ErrorTicketIsNotValid")); @@ -385,7 +385,7 @@ if ($action == "add_message" && GETPOST('btn_add_message') && $user->rights->tic exit; } else { setEventMessages($object->error, null, 'errors'); - $action = 'create_message'; + $action = 'presend'; } } @@ -477,7 +477,6 @@ if ($action == 'setsubject') { } } - if ($action == 'confirm_reopen' && $user->rights->ticket->manage && !GETPOST('cancel')) { if ($object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')) >= 0) { // prevent browser refresh from reopening ticket several times @@ -601,6 +600,8 @@ $autocopy='MAIN_MAIL_AUTOCOPY_TICKET_TO'; // used to know the automatic BCC to $trackid='tic'.$object->id; include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; +// Set $action to correct value for the case we used presend action to add a message +if (GETPOSTISSET('actionbis') && $action == 'presend') $action = 'presend_addmessage'; /* @@ -640,7 +641,7 @@ if ($action == 'create' || $action == 'presend') $formticket->showForm(1); } -if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'create_message' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen' +if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'presend' || $action == 'presend_addmessage' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen' || $action == 'editsubject' || $action == 'edit_extras' || $action == 'update_extras' || $action == 'edit_extrafields' || $action == 'set_extrafields' || $action == 'classify' || $action == 'sel_contract' || $action == 'edit_message_init' || $action == 'set_status' || $action == 'dellink') { if ($res > 0) @@ -1155,7 +1156,7 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd // Buttons for actions - if ($action != 'presend' && $action != 'editline') { + if ($action != 'presend' && $action != 'presend_addmessage' && $action != 'editline') { print '
'."\n"; $parameters=array(); $reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook @@ -1164,8 +1165,8 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd if (empty($reshook)) { // Show link to add a message (if read and not closed) - if ($object->fk_statut < Ticket::STATUS_CLOSED && $action != "create_message") { - print ''; + if ($object->fk_statut < Ticket::STATUS_CLOSED && $action != "presend" && $action != "presend_addmessage") { + print ''; } // Link to create an intervention @@ -1200,8 +1201,10 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd if (GETPOST('modelselected')) { $action = 'presend'; } + // Set $action to correct value for the case we used presend action to add a message + if (GETPOSTISSET('actionbis') && $action == 'presend') $action = 'presend_addmessage'; - if ($action != 'create_message') + if ($action != 'presend' && $action != 'presend_addmessage') { print '
'; print ''; // ancre @@ -1233,23 +1236,23 @@ if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'd $substitutionarray['__THIRDPARTY_NAME__'] = $object->thirdparty->name; } $substitutionarray['__SIGNATURE__'] = $user->signature; - $substitutionarray['__TICKETSUP_TRACKID__'] = $object->track_id; - $substitutionarray['__TICKETSUP_REF__'] = $object->ref; - $substitutionarray['__TICKETSUP_SUBJECT__'] = $object->subject; - $substitutionarray['__TICKETSUP_TYPE__'] = $object->type_code; - $substitutionarray['__TICKETSUP_SEVERITY__'] = $object->severity_code; - $substitutionarray['__TICKETSUP_CATEGORY__'] = $object->category_code; // For backward compatibility - $substitutionarray['__TICKETSUP_ANALYTIC_CODE__'] = $object->category_code; - $substitutionarray['__TICKETSUP_MESSAGE__'] = $object->message; - $substitutionarray['__TICKETSUP_PROGRESSION__'] = $object->progress; + $substitutionarray['__TICKET_TRACKID__'] = $object->track_id; + $substitutionarray['__TICKET_REF__'] = $object->ref; + $substitutionarray['__TICKET_SUBJECT__'] = $object->subject; + $substitutionarray['__TICKET_TYPE__'] = $object->type_code; + $substitutionarray['__TICKET_SEVERITY__'] = $object->severity_code; + $substitutionarray['__TICKET_CATEGORY__'] = $object->category_code; // For backward compatibility + $substitutionarray['__TICKET_ANALYTIC_CODE__'] = $object->category_code; + $substitutionarray['__TICKET_MESSAGE__'] = $object->message; + $substitutionarray['__TICKET_PROGRESSION__'] = $object->progress; if ($object->fk_user_assign > 0) { $userstat->fetch($object->fk_user_assign); - $substitutionarray['__TICKETSUP_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); + $substitutionarray['__TICKET_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); } if ($object->fk_user_create > 0) { $userstat->fetch($object->fk_user_create); - $substitutionarray['__TICKETSUP_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); + $substitutionarray['__TICKET_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname); } foreach ($substitutionarray as $key => $val) { $help.=$key.' -> '.$langs->trans($val).'
'; From 5f042cf6adf4d822d11b4221cbc6cce6b7ac6f7e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Fri, 19 Jul 2019 23:19:06 +0200 Subject: [PATCH 0259/1148] QUAL Move ligne.php to line.php --- htdocs/compta/bank/bankentries_list.php | 10 +++++----- htdocs/compta/bank/class/account.class.php | 2 +- htdocs/compta/bank/info.php | 2 +- htdocs/compta/bank/{ligne.php => line.php} | 8 ++++---- htdocs/compta/bank/releve.php | 4 ++-- htdocs/compta/bank/transfer.php | 4 ++-- htdocs/compta/prelevement/card.php | 2 +- htdocs/compta/prelevement/fiche-rejet.php | 2 +- htdocs/compta/prelevement/{ligne.php => line.php} | 12 ++++++------ htdocs/compta/prelevement/list.php | 2 +- htdocs/compta/prelevement/rejets.php | 2 +- htdocs/contrat/index.php | 4 ++-- htdocs/install/upgrade2.php | 2 +- htdocs/public/stripe/ipn.php | 4 ++-- 14 files changed, 30 insertions(+), 30 deletions(-) rename htdocs/compta/bank/{ligne.php => line.php} (99%) rename htdocs/compta/prelevement/{ligne.php => line.php} (95%) diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php index 5609bb6b598..37a0b9cb71b 100644 --- a/htdocs/compta/bank/bankentries_list.php +++ b/htdocs/compta/bank/bankentries_list.php @@ -1116,7 +1116,7 @@ if ($resql) if (! empty($arrayfields['b.rowid']['checked'])) { print '
'; if (! $i) $totalarray['nbfield']++; } @@ -1126,7 +1126,7 @@ if ($resql) { print "'; // Description - print '"; } diff --git a/htdocs/compta/bank/transfer.php b/htdocs/compta/bank/transfer.php index 199b1f9c08d..05c1f3a1515 100644 --- a/htdocs/compta/bank/transfer.php +++ b/htdocs/compta/bank/transfer.php @@ -120,9 +120,9 @@ if ($action == 'add') if (! $error) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amountto), '', '', $user); if (! ($bank_line_id_to > 0)) $error++; - if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; - if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; if (! $error) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index d31efcc9df8..b5473ddacb9 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -362,7 +362,7 @@ if ($id > 0 || $ref) print "'; diff --git a/htdocs/compta/prelevement/fiche-rejet.php b/htdocs/compta/prelevement/fiche-rejet.php index c930db99012..0e4d28fde2f 100644 --- a/htdocs/compta/prelevement/fiche-rejet.php +++ b/htdocs/compta/prelevement/fiche-rejet.php @@ -203,7 +203,7 @@ if ($resql) print ''; diff --git a/htdocs/compta/prelevement/ligne.php b/htdocs/compta/prelevement/line.php similarity index 95% rename from htdocs/compta/prelevement/ligne.php rename to htdocs/compta/prelevement/line.php index 8b11716bf6f..c9004c04d26 100644 --- a/htdocs/compta/prelevement/ligne.php +++ b/htdocs/compta/prelevement/line.php @@ -20,7 +20,7 @@ */ /** - * \file htdocs/compta/prelevement/ligne.php + * \file htdocs/compta/prelevement/line.php * \ingroup prelevement * \brief card of withdraw line */ @@ -86,7 +86,7 @@ if ($action == 'confirm_rejet') $rej->create($user, $id, GETPOST('motif', 'alpha'), $daterej, $lipre->bon_rowid, GETPOST('facturer', 'int')); - header("Location: ligne.php?id=".$id); + header("Location: line.php?id=".$id); exit; } } @@ -97,7 +97,7 @@ if ($action == 'confirm_rejet') } else { - header("Location: ligne.php?id=".$id); + header("Location: line.php?id=".$id); exit; } } @@ -112,7 +112,7 @@ $invoicestatic=new Facture($db); llxHeader('', $langs->trans("StandingOrder")); $h = 0; -$head[$h][0] = DOL_URL_ROOT.'/compta/prelevement/ligne.php?id='.$id; +$head[$h][0] = DOL_URL_ROOT.'/compta/prelevement/line.php?id='.$id; $head[$h][1] = $langs->trans("Card"); $hselected = $h; $h++; @@ -179,7 +179,7 @@ if ($id) $rej = new RejetPrelevement($db, $user); - print ''; + print ''; print ''; print ''; print '
'.$langs->trans("LastSalaries", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSalaries").' '.$num.''; print '
'.$langs->trans("LastSalaries", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSalaries").' '.$num.'
'; - print "rowid.'&save_lastsearch_values=1">'.img_object($langs->trans("ShowPayment").': '.$objp->rowid, 'account', 'class="classfortooltip"').' '.$objp->rowid."   "; + print "rowid.'&save_lastsearch_values=1">'.img_object($langs->trans("ShowPayment").': '.$objp->rowid, 'account', 'class="classfortooltip"').' '.$objp->rowid."   "; print '"; - //print "rowid."&account=".$objp->fk_account."\">"; + //print "rowid."&account=".$objp->fk_account."\">"; $reg=array(); preg_match('/\((.+)\)/i', $objp->label, $reg); // Si texte entoure de parenthee on tente recherche de traduction if ($reg[1] && $langs->trans($reg[1])!=$reg[1]) print $langs->trans($reg[1]); @@ -1459,7 +1459,7 @@ if ($resql) // Transaction reconciliated or edit link if ($objp->conciliated && $bankaccount->canBeConciliated() > 0) // If line not conciliated and account can be conciliated { - print ''; + print ''; print img_edit(); print ''; } @@ -1467,13 +1467,13 @@ if ($resql) { if ($user->rights->banque->modifier || $user->rights->banque->consolidate) { - print ''; + print ''; print img_edit(); print ''; } else { - print ''; + print ''; print img_view(); print ''; } diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 89a05f3e215..5724178e9de 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -2277,7 +2277,7 @@ class AccountLine extends CommonObject $result=''; $label=$langs->trans("ShowTransaction").': '.$this->rowid; - $linkstart = ''; + $linkstart = ''; $linkend=''; $result .= $linkstart; diff --git a/htdocs/compta/bank/info.php b/htdocs/compta/bank/info.php index 7eaeb515aa9..ce9f2f5c2dc 100644 --- a/htdocs/compta/bank/info.php +++ b/htdocs/compta/bank/info.php @@ -45,7 +45,7 @@ $object->info($id); $h=0; -$head[$h][0] = DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$id; +$head[$h][0] = DOL_URL_ROOT.'/compta/bank/line.php?rowid='.$id; $head[$h][1] = $langs->trans("Card"); $h++; diff --git a/htdocs/compta/bank/ligne.php b/htdocs/compta/bank/line.php similarity index 99% rename from htdocs/compta/bank/ligne.php rename to htdocs/compta/bank/line.php index 40906bfd455..2b04f83472f 100644 --- a/htdocs/compta/bank/ligne.php +++ b/htdocs/compta/bank/line.php @@ -24,7 +24,7 @@ */ /** - * \file htdocs/compta/bank/ligne.php + * \file htdocs/compta/bank/line.php * \ingroup bank * \brief Page to edit a bank transaction record */ @@ -223,7 +223,7 @@ if ($user->rights->banque->consolidate && ($action == 'num_releve' || $action == else $sql.=", rappro = ".$rappro; $sql.= " WHERE rowid = ".$rowid; - dol_syslog("ligne.php", LOG_DEBUG); + dol_syslog("line.php", LOG_DEBUG); $result = $db->query($sql); if ($result) { @@ -256,7 +256,7 @@ foreach ($cats as $cat) { $tabs = array( array( - DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$rowid, + DOL_URL_ROOT.'/compta/bank/line.php?rowid='.$rowid, $langs->trans('Card') ), array( @@ -416,7 +416,7 @@ if ($result) print ''; } elseif ($links[$key]['type']=='banktransfert') { - print ''; + print ''; print img_object($langs->trans('ShowTransaction'), 'payment').' '; print $langs->trans("TransactionOnTheOtherAccount"); print ''; diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index b93f381c555..53cdde900e3 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -616,7 +616,7 @@ else print ''.$type_label.' '.($objp->num_chq?$objp->num_chq:'').$link.''; + print ''; $reg=array(); preg_match('/\((.+)\)/i', $objp->label, $reg); // Si texte entoure de parenthese on tente recherche de traduction if ($reg[1] && $langs->trans($reg[1])!=$reg[1]) print $langs->trans($reg[1]); @@ -778,7 +778,7 @@ else if ($user->rights->banque->modifier || $user->rights->banque->consolidate) { - print ''; + print ''; print img_edit(); print ""; print $ligne->LibStatut($obj->statut, 2); print " "; - print ''; + print ''; print sprintf("%06s", $obj->rowid); print '
'; - print ''; + print ''; print img_picto('', 'statut'.$obj->statut).' '; print substr('000000'.$obj->rowid, -6); print '
'; @@ -231,7 +231,7 @@ if ($id) { if ($user->rights->prelevement->bons->credit) { - print "id\">".$langs->trans("StandingOrderReject").""; + print "id\">".$langs->trans("StandingOrderReject").""; } else { diff --git a/htdocs/compta/prelevement/list.php b/htdocs/compta/prelevement/list.php index 81e58e19cca..dd53988d2ec 100644 --- a/htdocs/compta/prelevement/list.php +++ b/htdocs/compta/prelevement/list.php @@ -172,7 +172,7 @@ if ($result) print $ligne->LibStatut($obj->statut_ligne, 2); print " "; - print ''; + print ''; print substr('000000'.$obj->rowid_ligne, -6); print ''; diff --git a/htdocs/compta/prelevement/rejets.php b/htdocs/compta/prelevement/rejets.php index 333d07a4617..5d48cec2a75 100644 --- a/htdocs/compta/prelevement/rejets.php +++ b/htdocs/compta/prelevement/rejets.php @@ -100,7 +100,7 @@ if ($result) print '"; diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index 3bf047c87c8..85538fe9ea8 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -517,7 +517,7 @@ if ($resql) $staticcompany->name=$obj->name; print $staticcompany->getNomUrl(1, '', 20); print ''; - print ''; print "\n"; @@ -596,7 +596,7 @@ if ($resql) $staticcompany->name=$obj->name; print $staticcompany->getNomUrl(1, '', 20); print ''; - print ''; print "\n"; diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php index 11bfe9ff99f..24d73da5485 100644 --- a/htdocs/install/upgrade2.php +++ b/htdocs/install/upgrade2.php @@ -1089,7 +1089,7 @@ function migrate_links_transfert($db, $langs, $conf) $sql.= "fk_bank, url_id, url, label, type"; $sql.= ")"; $sql.= " VALUES ("; - $sql.= $obj->barowid.",".$obj->bbrowid.", '/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'"; + $sql.= $obj->barowid.",".$obj->bbrowid.", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'"; $sql.= ")"; print $sql.'
'; diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php index bfd1788e12f..2f44c6390ff 100644 --- a/htdocs/public/stripe/ipn.php +++ b/htdocs/public/stripe/ipn.php @@ -232,9 +232,9 @@ elseif ($event->type == 'payout.paid') { if (! $error) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amount), '', '', $user); if (! ($bank_line_id_to > 0)) $error++; - if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; - if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert'); + if (! $error) $result=$accountto->add_url_line($bank_line_id_to, $bank_line_id_from, DOL_URL_ROOT.'/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'); if (! ($result > 0)) $error++; } From feee4374713d3a844de3141aec9b87004f5702c0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 23:43:49 +0200 Subject: [PATCH 0260/1148] FIX Closing ticket from public interface --- htdocs/public/ticket/list.php | 130 +++++++++++++-------------- htdocs/public/ticket/view.php | 20 +++-- htdocs/ticket/card.php | 9 +- htdocs/ticket/class/ticket.class.php | 2 +- htdocs/ticket/list.php | 16 ++-- 5 files changed, 93 insertions(+), 84 deletions(-) diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 88b8426fef9..5cbe0099b6d 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -237,37 +237,37 @@ if ($action == "view_ticketlist") } if (!empty($search_subject)) { $filter['t.subject'] = $search_subject; - $param .= '&search_subject=' . $search_subject; + $param .= '&search_subject=' .urlencode($search_subject); } if (!empty($search_type)) { $filter['t.type_code'] = $search_type; - $param .= '&search_type=' . $search_type; + $param .= '&search_type=' . urlencode($search_type); } if (!empty($search_category)) { $filter['t.category_code'] = $search_category; - $param .= '&search_category=' . $search_category; + $param .= '&search_category=' . urlencode($search_category); } if (!empty($search_severity)) { $filter['t.severity_code'] = $search_severity; - $param .= '&search_severity=' . $search_severity; + $param .= '&search_severity=' . urlencode($search_severity); } if (!empty($search_fk_user_assign)) { // -1 value = all so no filter if ($search_fk_user_assign > 0) { $filter['t.fk_user_assign'] = $search_fk_user_assign; - $param .= '&search_fk_user_assign=' . $search_fk_user_assign; + $param .= '&search_fk_user_assign=' . urlencode($search_fk_user_assign); } } if (!empty($search_fk_user_create)) { // -1 value = all so no filter if ($search_fk_user_create > 0) { $filter['t.fk_user_create'] = $search_fk_user_create; - $param .= '&search_fk_user_create=' . $search_fk_user_create; + $param .= '&search_fk_user_create=' . urlencode($search_fk_user_create); } } if ((isset($search_fk_status) && $search_fk_status != '') && $search_fk_status != '-1' && $search_fk_status != 'non_closed') { $filter['t.fk_statut'] = $search_fk_status; - $param .= '&search_fk_status=' . $search_fk_status; + $param .= '&search_fk_status=' . urlencode($search_fk_status); } if (isset($search_fk_status) && $search_fk_status == 'non_closed') { $filter['t.fk_statut'] = array(0, 1, 3, 4, 5, 6); @@ -388,62 +388,7 @@ if ($action == "view_ticketlist") print '
'; print $ligne->LibStatut($obj->statut, 2).' '; - print ''; + print ''; print substr('000000'.$obj->rowid, -6)."'; + print ''; print $staticcontratligne->LibStatut($obj->statut, 3); print '
'; + print ''; print $staticcontratligne->LibStatut($obj->statut, 3, 1); print '
'; - print ''; - if (!empty($arrayfields['t.datec']['checked'])) { - print_liste_field_titre($arrayfields['t.datec']['label'], $url_page_current, 't.datec', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.date_read']['checked'])) { - print_liste_field_titre($arrayfields['t.date_read']['label'], $url_page_current, 't.date_read', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.date_close']['checked'])) { - print_liste_field_titre($arrayfields['t.date_close']['label'], $url_page_current, 't.date_close', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.ref']['checked'])) { - print_liste_field_titre($arrayfields['t.ref']['label'], $url_page_current, 't.ref', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.subject']['checked'])) { - print_liste_field_titre($arrayfields['t.subject']['label']); - } - if (!empty($arrayfields['type.code']['checked'])) { - print_liste_field_titre($arrayfields['type.code']['label'], $url_page_current, 'type.code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['category.code']['checked'])) { - print_liste_field_titre($arrayfields['category.code']['label'], $url_page_current, 'category.code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['severity.code']['checked'])) { - print_liste_field_titre($arrayfields['severity.code']['label'], $url_page_current, 'severity.code', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.progress']['checked'])) { - print_liste_field_titre($arrayfields['t.progress']['label'], $url_page_current, 't.progress', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.fk_user_create']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_user_create']['label'], $url_page_current, 't.fk_user_create', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.fk_user_assign']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_user_assign']['label'], $url_page_current, 't.fk_user_assign', '', $param, '', $sortfield, $sortorder); - } - if (!empty($arrayfields['t.tms']['checked'])) { - print_liste_field_titre($arrayfields['t.tms']['label'], $url_page_current, 't.tms', '', $param, '', $sortfield, $sortorder); - } - // Extra fields - if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { - foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { - if (!empty($arrayfields["ef." . $key]['checked'])) { - $align = $extrafields->getAlignFlag($key); - print_liste_field_titre($extralabels[$key], $url_page_current, "ef." . $key, "", $param, ($align ? 'align="' . $align . '"' : ''), $sortfield, $sortorder); - } - } - } - if (!empty($arrayfields['t.fk_statut']['checked'])) { - print_liste_field_titre($arrayfields['t.fk_statut']['label'], $url_page_current, 't.fk_statut', '', $param, '', $sortfield, $sortorder); - } - print_liste_field_titre($selectedfields, $url_page_current, "", '', '', 'align="right"', $sortfield, $sortorder, 'maxwidthsearch '); - print ''; - - /* - * Filter bar - */ - + // Filter bar print ''; if (!empty($arrayfields['t.datec']['checked'])) { @@ -463,13 +408,13 @@ if ($action == "view_ticketlist") if (!empty($arrayfields['t.subject']['checked'])) { print ''; } if (!empty($arrayfields['type.code']['checked'])) { print ''; } @@ -524,6 +469,59 @@ if ($action == "view_ticketlist") print ''; print ''; + // Field title + print ''; + if (!empty($arrayfields['t.datec']['checked'])) { + print_liste_field_titre($arrayfields['t.datec']['label'], $url_page_current, 't.datec', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.date_read']['checked'])) { + print_liste_field_titre($arrayfields['t.date_read']['label'], $url_page_current, 't.date_read', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.date_close']['checked'])) { + print_liste_field_titre($arrayfields['t.date_close']['label'], $url_page_current, 't.date_close', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.ref']['checked'])) { + print_liste_field_titre($arrayfields['t.ref']['label'], $url_page_current, 't.ref', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.subject']['checked'])) { + print_liste_field_titre($arrayfields['t.subject']['label']); + } + if (!empty($arrayfields['type.code']['checked'])) { + print_liste_field_titre($arrayfields['type.code']['label'], $url_page_current, 'type.code', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['category.code']['checked'])) { + print_liste_field_titre($arrayfields['category.code']['label'], $url_page_current, 'category.code', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['severity.code']['checked'])) { + print_liste_field_titre($arrayfields['severity.code']['label'], $url_page_current, 'severity.code', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.progress']['checked'])) { + print_liste_field_titre($arrayfields['t.progress']['label'], $url_page_current, 't.progress', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.fk_user_create']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_user_create']['label'], $url_page_current, 't.fk_user_create', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.fk_user_assign']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_user_assign']['label'], $url_page_current, 't.fk_user_assign', '', $param, '', $sortfield, $sortorder); + } + if (!empty($arrayfields['t.tms']['checked'])) { + print_liste_field_titre($arrayfields['t.tms']['label'], $url_page_current, 't.tms', '', $param, '', $sortfield, $sortorder); + } + // Extra fields + if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) { + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) { + if (!empty($arrayfields["ef." . $key]['checked'])) { + $align = $extrafields->getAlignFlag($key); + print_liste_field_titre($extralabels[$key], $url_page_current, "ef." . $key, "", $param, ($align ? 'align="' . $align . '"' : ''), $sortfield, $sortorder); + } + } + } + if (!empty($arrayfields['t.fk_statut']['checked'])) { + print_liste_field_titre($arrayfields['t.fk_statut']['label'], $url_page_current, 't.fk_statut', '', $param, '', $sortfield, $sortorder); + } + print_liste_field_titre($selectedfields, $url_page_current, "", '', '', 'align="right"', $sortfield, $sortorder, 'maxwidthsearch '); + print ''; + while ($obj = $db->fetch_object($resql)) { print ''; @@ -551,7 +549,7 @@ if ($action == "view_ticketlist") // Ref if (!empty($arrayfields['t.ref']['checked'])) { - print ''; } diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index e7df24c16f3..3c732773b90 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -84,7 +84,6 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a array_push($object->errors, $langs->trans("ErrorFieldRequired", $langs->transnoentities("TicketTrackId"))); $action = ''; } - if (!strlen($email)) { $error++; array_push($object->errors, $langs->trans("ErrorFieldRequired", $langs->transnoentities("Email"))); @@ -154,6 +153,19 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a } } + if (! $error && $action == 'confirm_public_close' && $display_ticket) + { + if ($object->dao->close($user)) { + setEventMessages($langs->trans('TicketMarkedAsClosed'), null, 'mesgs'); + + $url = 'view.php?action=view_ticket&track_id=' . GETPOST('track_id', 'alpha'); + header("Location: " . $url); + } else { + $action = ''; + setEventMessages($object->error, $object->errors, 'errors'); + } + } + if (! $error && $action == "add_message" && $display_ticket) { // TODO Add message... @@ -290,8 +302,6 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a $fuser = new User($db); $fuser->fetch($object->dao->fk_user_assign); print $fuser->getFullName($langs, 1); - } else { - print $langs->trans('None'); } print ''; @@ -336,12 +346,12 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a // List ticket print ''; - if ($object->dao->fk_statut < 8) { + if ($object->dao->fk_statut < Ticket::STATUS_CLOSED) { // New message print ''; // Close ticket - if ($object->dao->fk_statut > 0 && $object->dao->fk_statut < 8) { + if ($object->dao->fk_statut >= Ticket::STATUS_NOT_READ && $object->dao->fk_statut < Ticket::STATUS_CLOSED) { print ''; } } diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php index ba2d14b06ce..b770e2fec40 100644 --- a/htdocs/ticket/card.php +++ b/htdocs/ticket/card.php @@ -394,9 +394,6 @@ if ($action == "confirm_close" && GETPOST('confirm', 'alpha') == 'yes' && $user- $object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')); if ($object->close($user)) { - // Log action in ticket logs table - $log_action = $langs->trans('TicketLogClosedBy', $user->getFullName($langs)); - setEventMessages($langs->trans('TicketMarkedAsClosed'), null, 'mesgs'); $url = 'card.php?action=view&track_id=' . GETPOST('track_id', 'alpha'); @@ -409,13 +406,15 @@ if ($action == "confirm_close" && GETPOST('confirm', 'alpha') == 'yes' && $user- if ($action == "confirm_public_close" && GETPOST('confirm', 'alpha') == 'yes') { $object->fetch(GETPOST('id', 'int'), '', GETPOST('track_id', 'alpha')); - if (($_SESSION['email_customer'] == $object->origin_email || $_SESSION['email_customer'] == $object->thirdparty->email) && $object->close()) { + if ($_SESSION['email_customer'] == $object->origin_email || $_SESSION['email_customer'] == $object->thirdparty->email) { + $object->close($user); + // Log action in ticket logs table $log_action = $langs->trans('TicketLogClosedBy', $_SESSION['email_customer']); setEventMessages('
' . $langs->trans('TicketMarkedAsClosed') . '
', null, 'mesgs'); - $url = 'view.php?action=view_ticket&track_id=' . GETPOST('track_id', 'alpha'); + $url = 'card.php?action=view_ticket&track_id=' . GETPOST('track_id', 'alpha'); header("Location: " . $url); } else { setEventMessages($object->error, $object->errors, 'errors'); diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php index 29654654110..72cddcce607 100644 --- a/htdocs/ticket/class/ticket.class.php +++ b/htdocs/ticket/class/ticket.class.php @@ -183,7 +183,7 @@ class Ticket extends CommonObject 'track_id' => array('type'=>'varchar(255)', 'label'=>'TicketTrackId', 'visible'=>-2, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"), 'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'nowraponall'), 'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>-2, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"), - 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>""), + 'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth75'), 'type_code' => array('type'=>'varchar(32)', 'label'=>'Type', 'visible'=>1, 'enabled'=>1, 'position'=>20, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'), 'category_code' => array('type'=>'varchar(32)', 'label'=>'TicketGroup', 'visible'=>-1, 'enabled'=>1, 'position'=>21, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'), 'severity_code' => array('type'=>'varchar(32)', 'label'=>'Severity', 'visible'=>1, 'enabled'=>1, 'position'=>22, 'notnull'=>-1, 'help'=>"", 'css'=>'maxwidth100'), diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 91eeceb54e4..0f415ddbf33 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -499,10 +499,11 @@ print '
'; - print ''; + print ''; print ''; - $formTicket->selectTypesTickets($search_type, 'search_type', '', 2, 1, 1); + $formTicket->selectTypesTickets($search_type, 'search_type', '', 2, 1, 1, 0, 'maxwidth150'); print '
'; + print ''; print $obj->ref; print '
'; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; - if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center'; + $cssforfield=(empty($val['css'])?'':$val['css']); + if ($key == 'fk_statut') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { if ($key == 'type_code') { print ''."\n"; print ''; foreach($object->fields as $key => $val) { - $cssforfield=''; - if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; - if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + $cssforfield=(empty($val['css'])?'':$val['css']); if ($key == 'fk_statut') $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center'; + elseif (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap'; + elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price'))) $cssforfield.=($cssforfield?' ':'').'right'; if (! empty($arrayfields['t.'.$key]['checked'])) { print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, '', $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n"; From de4142e23e5035040c33858fd7c31a57cf179e79 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 19 Jul 2019 23:57:35 +0200 Subject: [PATCH 0261/1148] FIX Add message from public interface --- htdocs/core/class/html.formticket.class.php | 2 +- htdocs/public/ticket/view.php | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php index fdbce981e72..a7797f91833 100644 --- a/htdocs/core/class/html.formticket.class.php +++ b/htdocs/core/class/html.formticket.class.php @@ -1058,7 +1058,7 @@ class FormTicket $out .= '
'; $out .= img_mime($listofnames[$key]) . ' ' . $listofnames[$key]; if (!$this->withfilereadonly) { - $out .= ' '; + $out .= ' '; } $out .= '
'; } diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 3c732773b90..58b53a3f344 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -166,7 +166,7 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a } } - if (! $error && $action == "add_message" && $display_ticket) + if (! $error && $action == "add_message" && $display_ticket && GETPOSTISSET('btn_add_message')) { // TODO Add message... $ret = $object->dao->newMessage($user, $action, 0); @@ -196,6 +196,13 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a //var_dump($action); //$object->doActions($action); +// Actions to send emails (for ticket, we need to manage the addfile and removefile only) +$trigger_name='TICKET_SENTBYMAIL'; +$paramname='id'; +$autocopy='MAIN_MAIL_AUTOCOPY_TICKET_TO'; // used to know the automatic BCC to add +$trackid='tic'.$object->id; +include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php'; + /* From 220f8300c12dd75e9209b32f892410a73b72c229 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 00:14:14 +0200 Subject: [PATCH 0262/1148] FIX Responsive of public interface of ticket --- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/public/ticket/view.php | 5 +++-- htdocs/theme/eldy/global.inc.php | 18 +++++++++++++++++- htdocs/theme/md/style.css.php | 16 ++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 9e0c357be05..84be86f4a15 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -185,5 +185,5 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $ print '
'; } - print '
'; + print '
'; } diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php index 58b53a3f344..cdbd3abad19 100644 --- a/htdocs/public/ticket/view.php +++ b/htdocs/public/ticket/view.php @@ -223,7 +223,7 @@ $arrayofcss = array('/ticket/css/styles.css.php'); llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss); -print '
'; +print '
'; if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close") { if ($display_ticket) { @@ -350,8 +350,9 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a print "\n"; print '
'; + // List ticket - print ''; + print ''; if ($object->dao->fk_statut < Ticket::STATUS_CLOSED) { // New message diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 44c66a979d5..7c2bbba5c42 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5247,10 +5247,26 @@ div.tabsElem a.tab { /* ============================================================================== */ /* Ticket module */ /* ============================================================================== */ - +.ticketpublicarea { + width: 70%; +} .publicnewticketform { margin-top: 25px !important; } +.ticketlargemargin { + padding-left: 50px; + padding-right: 50px; +} +@media only screen and (max-width: 767px) +{ + .ticketlargemargin { + padding-left: 5px; padding-right: 5px; + } + .ticketpublicarea { + width: 100%; + } +} + #cd-timeline { position: relative; padding: 2em 0; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index c15bbf26eef..9fad375eade 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -5404,9 +5404,25 @@ border-top-right-radius: 6px; /* Ticket module */ /* ============================================================================== */ +.ticketpublicarea { + width: 70%; +} .publicnewticketform { margin-top: 25px !important; } +.ticketlargemargin { + padding-left: 50px; + padding-right: 50px; +} +@media only screen and (max-width: 767px) +{ + .ticketlargemargin { + padding-left: 5px; padding-right: 5px; + } + .ticketpublicarea { + width: 100%; + } +} #cd-timeline { position: relative; From 2418b94e282ea5c73a89d18dcbb7c1a887031d39 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 00:17:26 +0200 Subject: [PATCH 0263/1148] Fix translation --- htdocs/public/ticket/list.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php index 5cbe0099b6d..5e1ce07e098 100644 --- a/htdocs/public/ticket/list.php +++ b/htdocs/public/ticket/list.php @@ -219,7 +219,7 @@ if ($action == "view_ticketlist") 't.progress' => array('label' => $langs->trans("Progression"), 'checked' => 0), //'t.fk_contract' => array('label' => $langs->trans("Contract"), 'checked' => 0), 't.fk_user_create' => array('label' => $langs->trans("Author"), 'checked' => 1), - 't.fk_user_assign' => array('label' => $langs->trans("AuthorAssign"), 'checked' => 0), + 't.fk_user_assign' => array('label' => $langs->trans("AssignedTo"), 'checked' => 0), //'t.entity'=>array('label'=>$langs->trans("Entity"), 'checked'=>1, 'enabled'=>(! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode))), //'t.datec' => array('label' => $langs->trans("DateCreation"), 'checked' => 0, 'position' => 500), @@ -611,8 +611,6 @@ if ($action == "view_ticketlist") $user_assign->lastname = (!empty($obj->user_assign_lastname) ? $obj->user_assign_lastname : ''); $user_assign->id = (!empty($obj->fk_user_assign) ? $obj->fk_user_assign : ''); print $user_assign->getFullName($langs); - } else { - print $langs->trans('None'); } print ''; } From e85c2202e8e0315171532e142893c746f604c05f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 11:44:31 +0200 Subject: [PATCH 0264/1148] FIX missing token --- htdocs/admin/modules.php | 3 ++- htdocs/core/class/html.form.class.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 0507596caec..a0b8f2e50de 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -900,7 +900,8 @@ if ($mode == 'marketplace') ?>
- + +
trans('Keyword') ?>:
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 45bc4525431..711c48053f1 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6618,7 +6618,7 @@ class Form print '
'; @@ -562,10 +563,11 @@ print '
'; - if(!empty($compatibleImportElementsList)) + if (!empty($compatibleImportElementsList)) { $res=@include dol_buildpath('core/tpl/ajax/objectlinked_lineimport.tpl.php'); } From 9f9598ac9939469ad970c1deb9bcad0a6080c6c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 11:44:31 +0200 Subject: [PATCH 0265/1148] FIX missing token --- htdocs/admin/modules.php | 3 ++- htdocs/core/class/html.form.class.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index 0507596caec..a0b8f2e50de 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -900,7 +900,8 @@ if ($mode == 'marketplace') ?> - + +
trans('Keyword') ?>:
diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 68c4bec4690..6c5ed3c23f0 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6607,7 +6607,7 @@ class Form print '
'; - if(!empty($compatibleImportElementsList)) + if (!empty($compatibleImportElementsList)) { $res=@include dol_buildpath('core/tpl/ajax/objectlinked_lineimport.tpl.php'); } From 20e58bdd97a8be10e7e7feb98caddc4e067fc430 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 13:09:25 +0200 Subject: [PATCH 0266/1148] FIX Limit of uploaded files (max_post_size was not used) --- htdocs/admin/modules.php | 30 ++++++++++++--- htdocs/admin/system/phpinfo.php | 21 ++++++++++- htdocs/core/class/html.formfile.class.php | 30 ++++++++++++--- htdocs/core/lib/functions.lib.php | 31 ++++++++-------- htdocs/imports/import.php | 45 +++++++++++++++++------ htdocs/langs/en_US/errors.lang | 1 + htdocs/main.inc.php | 2 +- 7 files changed, 120 insertions(+), 40 deletions(-) diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index a0b8f2e50de..5fd40fb032a 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -1027,15 +1027,35 @@ if ($mode == 'deploy') print $langs->trans("YouCanSubmitFile"); - $max=$conf->global->MAIN_UPLOAD_DOC; // En Kb - $maxphp=@ini_get('upload_max_filesize'); // En inconnu + $max=$conf->global->MAIN_UPLOAD_DOC; // In Kb + $maxphp=@ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; - // Now $max and $maxphp are in Kb + $maxphp2=@ini_get('post_max_size'); // In unknown + if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; + if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; + if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; + if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; + // Now $max and $maxphp and $maxphp2 are in Kb $maxmin = $max; - if ($maxphp > 0) $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphptoshowparam = ''; + if ($maxphp > 0) + { + $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphp; + $maxphptoshowparam = 'upload_max_filesize'; + } + if ($maxphp2 > 0) + { + $maxmin=min($max, $maxphp2); + if ($maxphp2 < $maxphp) + { + $maxphptoshow = $maxphp2; + $maxphptoshowparam = 'post_max_size'; + } + } if ($maxmin > 0) { @@ -1063,7 +1083,7 @@ if ($mode == 'deploy') { $langs->load('other'); print ' '; - print info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphp), 1); + print info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphptoshow, $maxphptoshowparam), 1); } } else diff --git a/htdocs/admin/system/phpinfo.php b/htdocs/admin/system/phpinfo.php index 2dc9406eb13..d1c737ef5a8 100644 --- a/htdocs/admin/system/phpinfo.php +++ b/htdocs/admin/system/phpinfo.php @@ -48,14 +48,31 @@ if (isset($title)) } +// Check PHP setup is OK +$maxphp=@ini_get('upload_max_filesize'); // In unknown +if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; +if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; +if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; +if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; +$maxphp2=@ini_get('post_max_size'); // In unknown +if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; +if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; +if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; +if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; +if ($maxphp > 0 && $maxphp2 > 0 && $maxphp > $maxphp2) +{ + $langs->load("errors"); + print info_admin($langs->trans("WarningParamUploadMaxFileSizeHigherThanPostMaxSize", @ini_get('upload_max_filesize'), @ini_get('post_max_size')), 0, 0, 0, 'warning'); + print '
'; +} + print ''; print ''; print "\n"; -$var=false; -// Recupere la version de PHP +// Get PHP version $phpversion=version_php(); print '\n"; diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index be389a94283..5f63d4db66c 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -130,15 +130,35 @@ class FormFile $out .= ''; // Input file name box - print ''; print ''; print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; print ''; print ''; print ''; From f6c937a218a43aa8f0297f2bb3360f1f9d10cd38 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:14:18 +0200 Subject: [PATCH 0270/1148] Fix translation --- htdocs/compta/accounting-files.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 8467602a6fe..e52f91ba45c 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; -$langs->loadLangs(array("accountancy", "bills", "companies", "salaries")); +$langs->loadLangs(array("accountancy", "bills", "companies", "salaries", "compta")); $date_start =GETPOST('date_start', 'alpha'); $date_startDay= GETPOST('date_startday', 'int'); From 78dadfe91bf09536bd7fb012da60dfb33e87fb5c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:27:04 +0200 Subject: [PATCH 0271/1148] Restore scrutinizer setup --- .scrutinizer.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index 60fea392133..b48aa158cce 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -1,6 +1,6 @@ # .scrutinizer.yml -build: - - php-scrutinizer-run +#build: +# - php-scrutinizer-run imports: - javascript From 6956067d8f2a48d91af81d6487f3eb32ae0c78fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:04:11 +0200 Subject: [PATCH 0272/1148] Fix print of print --- htdocs/societe/paymentmodes.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 51a7ccb24bb..fdd4f54b6c8 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1208,8 +1208,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print_liste_field_titre("BIC"); if (! empty($conf->prelevement->enabled)) { - print print_liste_field_titre("RUM"); - print print_liste_field_titre("WithdrawMode"); + print_liste_field_titre("RUM"); + print_liste_field_titre("WithdrawMode"); } print_liste_field_titre("DefaultRIB", '', '', '', '', '', '', '', 'center '); print_liste_field_titre('', '', '', '', '', '', '', '', 'center '); From d88fec52bfd8bff0196a1d32a1ffc5f2349afd48 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 20 Jul 2019 15:07:59 +0200 Subject: [PATCH 0273/1148] fix warining message --- htdocs/comm/action/peruser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 9e2a7278a27..65669625398 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1189,8 +1189,8 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & } $ids1='';$ids2=''; - if (count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',',array_keys($cases1[$h])); - if (count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',',array_keys($cases2[$h])); + if (is_array($cases1[$h]) && count($cases1[$h]) && array_keys($cases1[$h])) $ids1=join(',',array_keys($cases1[$h])); + if (is_array($cases2[$h]) && count($cases2[$h]) && array_keys($cases2[$h])) $ids2=join(',',array_keys($cases2[$h])); if ($h == $begin_h) echo ''; print ''; @@ -2257,7 +2257,6 @@ else if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field { print ''; - print $htmllogobar; $htmllogobar=''; print ''; } @@ -2269,7 +2268,6 @@ else print $object->code_client; if ($object->check_codeclient() <> 0) print ' ('.$langs->trans("WrongCustomerCode").')'; print ''; - print $htmllogobar; $htmllogobar=''; print ''; } @@ -2281,7 +2279,6 @@ else print $object->code_fournisseur; if ($object->check_codefournisseur() <> 0) print ' ('.$langs->trans("WrongSupplierCode").')'; print ''; - print $htmllogobar; $htmllogobar=''; print ''; } @@ -2291,9 +2288,6 @@ else print ''; - if ($htmllogobar) $htmllogobar.=$form->showbarcode($object); - print $htmllogobar; - $htmllogobar=''; print ''; } diff --git a/htdocs/societe/class/companypaymentmode.class.php b/htdocs/societe/class/companypaymentmode.class.php index 4275d356566..911d995dd78 100644 --- a/htdocs/societe/class/companypaymentmode.class.php +++ b/htdocs/societe/class/companypaymentmode.class.php @@ -310,7 +310,7 @@ class CompanyPaymentMode extends CommonObject if ($type) $morewhere.= " AND type = '".$this->db->escape($type)."'"; $result = $this->fetchCommon($id, $ref, $morewhere); - if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines(); + //if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines(); return $result; } diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php index 5f333da69a3..2ab63178f4c 100644 --- a/htdocs/societe/class/societeaccount.class.php +++ b/htdocs/societe/class/societeaccount.class.php @@ -79,7 +79,7 @@ class SocieteAccount extends CommonObject public $fields=array( 'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',), 'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'default'=>1), - 'key_account' => array('type'=>'varchar(128)', 'label'=>'KeyAccount', 'visible'=>-1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Key account',), + 'key_account' => array('type'=>'varchar(128)', 'label'=>'KeyAccount', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Key account',), 'login' => array('type'=>'varchar(64)', 'label'=>'Login', 'visible'=>1, 'enabled'=>1, 'position'=>10), 'pass_encoding' => array('type'=>'varchar(24)', 'label'=>'PassEncoding', 'visible'=>0, 'enabled'=>1, 'position'=>30), 'pass_crypted' => array('type'=>'varchar(128)', 'label'=>'Password', 'visible'=>1, 'enabled'=>1, 'position'=>31, 'notnull'=>1), diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php index d6df59f4740..4657a3e3f64 100644 --- a/htdocs/societe/index.php +++ b/htdocs/societe/index.php @@ -63,41 +63,6 @@ print load_fiche_titre($transAreaType, $linkback, 'title_companies.png'); print '
'; -if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS)) // This is useless due to the global search combo -{ - // Search thirdparty - if (! empty($conf->societe->enabled) && $user->rights->societe->lire) - { - $listofsearchfields['search_thirdparty']=array('text'=>'ThirdParty'); - } - // Search contact/address - if (! empty($conf->societe->enabled) && $user->rights->societe->lire) - { - $listofsearchfields['search_contact']=array('text'=>'Contact'); - } - - if (count($listofsearchfields)) - { - print ''; - print ''; - print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("Version")."".$phpversion."
'; - $max=$conf->global->MAIN_UPLOAD_DOC; // En Kb - $maxphp=@ini_get('upload_max_filesize'); // En inconnu + $max=$conf->global->MAIN_UPLOAD_DOC; // In Kb + $maxphp=@ini_get('upload_max_filesize'); // In unknown if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; - // Now $max and $maxphp are in Kb + $maxphp2=@ini_get('post_max_size'); // In unknown + if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; + if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; + if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; + if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; + // Now $max and $maxphp and $maxphp2 are in Kb $maxmin = $max; - if ($maxphp > 0) $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphptoshowparam = ''; + if ($maxphp > 0) + { + $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphp; + $maxphptoshowparam = 'upload_max_filesize'; + } + if ($maxphp2 > 0) + { + $maxmin=min($max, $maxphp2); + if ($maxphp2 < $maxphp) + { + $maxphptoshow = $maxphp2; + $maxphptoshowparam = 'post_max_size'; + } + } if ($maxmin > 0) { @@ -168,7 +188,7 @@ class FormFile { $langs->load('other'); $out .= ' '; - $out .= info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphp), 1); + $out .= info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphptoshow), 1); } } else diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index c930dbf172a..9aa6177adf4 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2935,22 +2935,23 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF /** * Show picto whatever it's its name (generic function) * - * @param string $titlealt Text on title tag for tooltip. Not used if param notitle is set to 1. - * @param string $picto Name of image file to show ('filenew', ...) - * If no extension provided, we use '.png'. Image must be stored into theme/xxx/img directory. - * Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img - * Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img - * Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1) - * @param string $moreatt Add more attribute on img tag (For example 'style="float: right"') - * @param boolean|int $pictoisfullpath If true or 1, image path is a full path - * @param int $srconly Return only content of the src attribute of img. - * @param int $notitle 1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip. - * @param string $alt Force alt for bind people - * @param string $morecss Add more class css on img tag (For example 'myclascss'). Work only if $moreatt is empty. - * @return string Return img tag + * @param string $titlealt Text on title tag for tooltip. Not used if param notitle is set to 1. + * @param string $picto Name of image file to show ('filenew', ...) + * If no extension provided, we use '.png'. Image must be stored into theme/xxx/img directory. + * Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img + * Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img + * Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1) + * @param string $moreatt Add more attribute on img tag (For example 'style="float: right"') + * @param boolean|int $pictoisfullpath If true or 1, image path is a full path + * @param int $srconly Return only content of the src attribute of img. + * @param int $notitle 1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip. + * @param string $alt Force alt for bind people + * @param string $morecss Add more class css on img tag (For example 'myclascss'). Work only if $moreatt is empty. + * @param string $marginleftonlyshort 1 = Add a short left margin on picto, 2 = Add a larger left maring on picto, 0 = No margin left. Works for fontawesome picto only. + * @return string Return img tag * @see img_object(), img_picto_common() */ -function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $srconly = 0, $notitle = 0, $alt = '', $morecss = '') +function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $srconly = 0, $notitle = 0, $alt = '', $morecss = '', $marginleftonlyshort = 2) { global $conf, $langs; @@ -2986,7 +2987,7 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $ if (empty($conf->global->MAIN_DISABLE_FONT_AWESOME_5)) $fa='fas'; $fakey = $pictowithoutext; $facolor = ''; $fasize = ''; - $marginleftonlyshort = 2; + if ($pictowithoutext == 'setup') { $fakey = 'fa-cog'; $fasize = '1.4em'; diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php index 7bcd69e3d0b..2d3882e523e 100644 --- a/htdocs/imports/import.php +++ b/htdocs/imports/import.php @@ -567,25 +567,46 @@ if ($step == 3 && $datatoimport) //print '
'.$langs->trans("FileWithDataToImport").'
'; - print '     '; + print '
'; + print '     '; $out = (empty($conf->global->MAIN_UPLOAD_DOC)?' disabled':''); print ''; $out=''; if (! empty($conf->global->MAIN_UPLOAD_DOC)) { - $max=$conf->global->MAIN_UPLOAD_DOC; // En Kb - $maxphp=@ini_get('upload_max_filesize'); // En inconnu - if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; - if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; - if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; - if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; - // Now $max and $maxphp are in Kb - if ($maxphp > 0) $max=min($max, $maxphp); + $max=$conf->global->MAIN_UPLOAD_DOC; // In Kb + $maxphp=@ini_get('upload_max_filesize'); // In unknown + if (preg_match('/k$/i', $maxphp)) $maxphp=$maxphp*1; + if (preg_match('/m$/i', $maxphp)) $maxphp=$maxphp*1024; + if (preg_match('/g$/i', $maxphp)) $maxphp=$maxphp*1024*1024; + if (preg_match('/t$/i', $maxphp)) $maxphp=$maxphp*1024*1024*1024; + $maxphp2=@ini_get('post_max_size'); // In unknown + if (preg_match('/k$/i', $maxphp2)) $maxphp2=$maxphp2*1; + if (preg_match('/m$/i', $maxphp2)) $maxphp2=$maxphp2*1024; + if (preg_match('/g$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024; + if (preg_match('/t$/i', $maxphp2)) $maxphp2=$maxphp2*1024*1024*1024; + // Now $max and $maxphp and $maxphp2 are in Kb + $maxmin = $max; + $maxphptoshow = $maxphptoshowparam = ''; + if ($maxphp > 0) + { + $maxmin=min($max, $maxphp); + $maxphptoshow = $maxphp; + $maxphptoshowparam = 'upload_max_filesize'; + } + if ($maxphp2 > 0) + { + $maxmin=min($max, $maxphp2); + if ($maxphp2 < $maxphp) + { + $maxphptoshow = $maxphp2; + $maxphptoshowparam = 'post_max_size'; + } + } $langs->load('other'); $out .= ' '; - $out.=info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphp), 1); + $out .= info_admin($langs->trans("ThisLimitIsDefinedInSetup", $max, $maxphptoshow), 1); } else { @@ -846,7 +867,7 @@ if ($step == 4 && $datatoimport) print ''; print '
'; - print $langs->trans("SelectImportFields", img_picto('', 'grip_title', '')).' '; + print $langs->trans("SelectImportFields", img_picto('', 'grip_title', '', false, 0, 0, '', '', 0)).' '; $htmlother->select_import_model($importmodelid, 'importmodelid', $datatoimport, 1); print ''; print '
'; diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index bb92e41a537..8e4d42559a8 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -219,6 +219,7 @@ ErrorURLMustStartWithHttp=URL %s must start with http:// or https:// ErrorNewRefIsAlreadyUsed=Error, the new reference is already used ErrorDeletePaymentLinkedToAClosedInvoiceNotPossible=Error, delete payment linked to a closed invoice is not possible. # Warnings +WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup. WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user. WarningMandatorySetupNotComplete=Click here to setup mandatory parameters WarningEnableYourModulesApplications=Click here to enable your modules and applications diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 4e1a6ecf01d..7b695dd8a12 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -372,7 +372,7 @@ if (! defined('NOTOKENRENEWAL')) } //var_dump(GETPOST('token').' '.$_SESSION['token'].' - '.$_SESSION['newtoken'].' '.$_SERVER['SCRIPT_FILENAME']); - +//$dolibarr_nocsrfcheck=1; // Check token //var_dump((! defined('NOCSRFCHECK')).' '.empty($dolibarr_nocsrfcheck).' '.(! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)).' '.$_SERVER['REQUEST_METHOD'].' '.(! GETPOSTISSET('token'))); if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN)) From 826851e1a9f1d37d3674977fa2a3b3638772b6e4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:01:00 +0200 Subject: [PATCH 0267/1148] Fix migration --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 1b9f52ffaed..213a0d69cdf 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -30,7 +30,8 @@ -- Missing in v10 ALTER TABLE llx_account_bookkeeping ADD COLUMN date_export datetime DEFAULT NULL; - +ALTER TABLE llx_expensereport ADD COLUMN paid smallint default 0 NOT NULL; +UPDATE llx_expensereport set paid = 1 WHERE fk_statut = 6 and paid = 0; create table llx_entrepot_extrafields ( From ac8a776113e82afa849d3ebb4484e54432f78544 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:02:53 +0200 Subject: [PATCH 0268/1148] FIX Column 'paid' missing in expense report --- htdocs/expensereport/class/expensereport.class.php | 4 ++-- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 +++ htdocs/install/mysql/tables/llx_expensereport.sql | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index c09d2897980..0041974d4e9 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -572,8 +572,8 @@ class ExpenseReport extends CommonObject $this->db->begin(); $sql = "UPDATE ".MAIN_DB_PREFIX."expensereport"; - $sql.= " SET fk_statut = 6, paid=1"; - $sql.= " WHERE rowid = ".$id." AND fk_statut = 5"; + $sql.= " SET fk_statut = ".self::STATUS_CLOSED.", paid=1"; + $sql.= " WHERE rowid = ".$id." AND fk_statut = ".self::STATUS_APPROVED; dol_syslog(get_class($this)."::set_paid sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index c2d4809f958..6484fe572df 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -206,6 +206,9 @@ ALTER TABLE llx_user ADD COLUMN linkedin varchar(255) after whatsapp; ALTER TABLE llx_expensereport_det ADD COLUMN fk_ecm_files integer DEFAULT NULL; +ALTER TABLE llx_expensereport ADD COLUMN paid smallint default 0 NOT NULL; +UPDATE llx_expensereport set paid = 1 WHERE fk_statut = 6 and paid = 0; + CREATE TABLE llx_bom_bom( -- BEGIN MODULEBUILDER FIELDS diff --git a/htdocs/install/mysql/tables/llx_expensereport.sql b/htdocs/install/mysql/tables/llx_expensereport.sql index ac1ec890788..df38697adaf 100755 --- a/htdocs/install/mysql/tables/llx_expensereport.sql +++ b/htdocs/install/mysql/tables/llx_expensereport.sql @@ -44,7 +44,7 @@ CREATE TABLE llx_expensereport ( fk_user_cancel integer DEFAULT NULL, fk_statut integer NOT NULL, -- 1=brouillon, 2=validated (waiting approval), 4=canceled, 5=approved, 6=payed, 99=refused fk_c_paiement integer DEFAULT NULL, -- deprecated - paid smallint default 0 NOT NULL, -- deprecated + paid smallint default 0 NOT NULL, -- deprecated (status is used instead) note_public text, note_private text, detail_refuse varchar(255) DEFAULT NULL, From 0dcd38b96f8d9ef22c4c994f37bd038d658cf77f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 14:09:42 +0200 Subject: [PATCH 0269/1148] Fix decimals --- htdocs/compta/accounting-files.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/accounting-files.php b/htdocs/compta/accounting-files.php index 9069045c8b3..8467602a6fe 100644 --- a/htdocs/compta/accounting-files.php +++ b/htdocs/compta/accounting-files.php @@ -503,9 +503,9 @@ if (!empty($date_start) && !empty($date_stop)) print '
'.price($totalET).''.price($totalIT).''.price($totalVAT).''.price(price2num($totalET, 'MT')).''.price(price2num($totalIT, 'MT')).''.price(price2num($totalVAT, 'MT')).''; else echo ''; From d03d79222e9ecfd239a49566dd8695ceac5841c3 Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 20 Jul 2019 15:15:48 +0200 Subject: [PATCH 0274/1148] fix warning php --- htdocs/comm/action/peruser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 65669625398..7dfe197033e 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1207,14 +1207,14 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & $color1='222222'; } - if (count($cases2[$h]) == 1) // only 1 event + if (is_array($cases2[$h]) && count($cases2[$h]) == 1) // only 1 event { $output = array_slice($cases2[$h], 0, 1); $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); if ($output[0]['string']) $title2.=($title2?' - ':'').$output[0]['string']; if ($output[0]['color']) $color2 = $output[0]['color']; } - else if (count($cases2[$h]) > 1) + else if (is_array($cases2[$h]) && count($cases2[$h]) > 1) { $title2=$langs->trans("Ref").' '.$ids2.($title2?' - '.$title2:''); $color2='222222'; From b046bcc197a0b8d0b800c1153ace0e76de4e988f Mon Sep 17 00:00:00 2001 From: florian HENRY Date: Sat, 20 Jul 2019 15:19:25 +0200 Subject: [PATCH 0275/1148] fix warning php --- htdocs/comm/action/peruser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 7dfe197033e..16d9f09947c 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -1194,14 +1194,14 @@ function show_day_events2($username, $day, $month, $year, $monthshown, $style, & if ($h == $begin_h) echo ''; else echo ''; - if (count($cases1[$h]) == 1) // only 1 event + if (is_array($cases1[$h]) && count($cases1[$h]) == 1) // only 1 event { $output = array_slice($cases1[$h], 0, 1); $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); if ($output[0]['string']) $title1.=($title1?' - ':'').$output[0]['string']; if ($output[0]['color']) $color1 = $output[0]['color']; } - else if (count($cases1[$h]) > 1) + else if (is_array($cases1[$h]) && count($cases1[$h]) > 1) { $title1=$langs->trans("Ref").' '.$ids1.($title1?' - '.$title1:''); $color1='222222'; From a9000556318e45b26f500bab2b5fb1635de20bb0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:53:21 +0200 Subject: [PATCH 0276/1148] Fix class not found error --- htdocs/societe/class/societe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 16b690ecaf7..d83e937dc9f 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4172,8 +4172,8 @@ class Societe extends CommonObject if ($result < 0) { $error++; - $this->error = $c->error; - $this->errors = $c->errors; + $this->error = $this->error; + $this->errors = $this->errors; break; } } From 2e68488231d6924ff0eeebf0454be33f8feb779f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:53:46 +0200 Subject: [PATCH 0277/1148] Enhance scan using phpstan --- build/phpstan/bootstrap.php | 2 +- htdocs/societe/ajax/company.php | 8 +- .../company/actions_card_company.class.php | 6 +- .../actions_card_individual.class.php | 6 +- htdocs/societe/card.php | 12 +-- .../class/companypaymentmode.class.php | 2 +- htdocs/societe/class/societeaccount.class.php | 2 +- htdocs/societe/index.php | 37 +------- htdocs/societe/paymentmodes.php | 4 +- htdocs/societe/societecontact.php | 18 +++- htdocs/societe/website.php | 19 +++- phpstan.neon | 86 ++++++++++++++++++- 12 files changed, 137 insertions(+), 65 deletions(-) diff --git a/build/phpstan/bootstrap.php b/build/phpstan/bootstrap.php index e567b609a2f..6b6fd7b292e 100644 --- a/build/phpstan/bootstrap.php +++ b/build/phpstan/bootstrap.php @@ -8,7 +8,7 @@ define('DOL_DOCUMENT_ROOT', __DIR__ . '/../../htdocs'); define('DOL_DATA_ROOT', __DIR__ . '/../../documents'); define('DOL_URL_ROOT', '/'); -// Load the main.inc.php file to have finctions llx_Header and llx_Footer defined +// Load the main.inc.php file to have functions llx_Header and llx_Footer defined if (! defined("NOLOGIN")) define("NOLOGIN", '1'); global $conf, $langs, $user, $db; include_once __DIR__ . '/../../htdocs/main.inc.php'; diff --git a/htdocs/societe/ajax/company.php b/htdocs/societe/ajax/company.php index b59d924212a..88ad415a64c 100644 --- a/htdocs/societe/ajax/company.php +++ b/htdocs/societe/ajax/company.php @@ -1,7 +1,7 @@ * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2007-2011 Laurent Destailleur + * Copyright (C) 2007-2019 Laurent Destailleur * * 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 @@ -58,12 +58,12 @@ if (! empty($action) && $action == 'fetch' && ! empty($id)) $ret=$object->fetch($id); if ($ret > 0) { - $outname=$object->name; - $outlabel = ''; + $outref = $object->ref; + $outname = $object->name; $outdesc = ''; $outtype = $object->type; - $outjson = array('ref' => $outref,'name' => $outname,'desc' => $outdesc,'type' => $outtype); + $outjson = array('ref' => $outref, 'name' => $outname, 'desc' => $outdesc, 'type' => $outtype); } echo json_encode($outjson); diff --git a/htdocs/societe/canvas/company/actions_card_company.class.php b/htdocs/societe/canvas/company/actions_card_company.class.php index 27aeca883cc..7b8895a1f3f 100644 --- a/htdocs/societe/canvas/company/actions_card_company.class.php +++ b/htdocs/societe/canvas/company/actions_card_company.class.php @@ -23,9 +23,11 @@ */ include_once DOL_DOCUMENT_ROOT.'/societe/canvas/actions_card_common.class.php'; + /** - * \class ActionsCardCompany - * \brief Class with controller methods for thirdparty canvas + * ActionsCardCompany + * + * Class with controller methods for thirdparty canvas */ class ActionsCardCompany extends ActionsCardCommon { diff --git a/htdocs/societe/canvas/individual/actions_card_individual.class.php b/htdocs/societe/canvas/individual/actions_card_individual.class.php index 391fd85c836..cf6118fd023 100644 --- a/htdocs/societe/canvas/individual/actions_card_individual.class.php +++ b/htdocs/societe/canvas/individual/actions_card_individual.class.php @@ -22,9 +22,11 @@ */ include_once DOL_DOCUMENT_ROOT.'/societe/canvas/actions_card_common.class.php'; + /** - * \class ActionsCardIndividual - * \brief Class with controller methods for individual canvas + * ActionsCardIndividual + * + * Class with controller methods for individual canvas */ class ActionsCardIndividual extends ActionsCardCommon { diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 3d9f3d7304c..f69b37b262c 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -251,10 +251,10 @@ if (empty($reshook)) // External modules should update their ones too if (! $error) { - $reshook = $hookmanager->executeHooks('replaceThirdparty', array( + $reshook = $hookmanager->executeHooks('replaceThirdparty', array( 'soc_origin' => $soc_origin->id, 'soc_dest' => $object->id - ), $soc_dest, $action); + ), $object, $action); if ($reshook < 0) { @@ -1188,7 +1188,7 @@ else // Prospect/Customer print '
'.$form->editfieldkey('ProspectCustomer', 'customerprospect', '', $object, 0, 'string', '', 1).''; - $selected=(GETPOSTISSET('client', 'int')?GETPOST('client', 'int'):$object->client); + $selected=(GETPOSTISSET('client')?GETPOST('client', 'int'):$object->client); print $formcompany->selectProspectCustomerType($selected); print '
'.$langs->trans('Prefix').''.$object->prefix_comm.'
'; print $langs->trans('Gencod').''.$object->barcode; print '
'; - $i=0; - foreach($listofsearchfields as $key => $value) - { - if ($i == 0) print ''; - print ''; - print ''; - if ($i == 0) print ''; - print ''; - $i++; - } - print '
'.$langs->trans("Search").'
'; - print ''; - print '
'; - } -} - - /* * Statistics area */ @@ -194,7 +159,7 @@ if (! empty($conf->categorie->enabled) && ! empty($conf->global->CATEGORY_GRAPHS print '
'; print ''; print ''; - print ' 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant print ' onclick="location.href=\'list.php?action=change&contextpage=poslist&idcustomer='.$obj->rowid.'&place='.$place.'\'"'; } print '>'; diff --git a/htdocs/societe/notify/card.php b/htdocs/societe/notify/card.php index 59c43551f41..2c864755bd9 100644 --- a/htdocs/societe/notify/card.php +++ b/htdocs/societe/notify/card.php @@ -32,10 +32,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/interface_50_modNotification_Noti $langs->loadLangs(array("companies", "mails", "admin", "other")); -$socid = GETPOST("socid", 'int'); -$action = GETPOST('action', 'aZ09'); -$contactid=GETPOST('contactid'); // May be an int or 'thirdparty' -$actionid=GETPOST('actionid'); +$socid = GETPOST("socid", 'int'); +$action = GETPOST('action', 'aZ09'); +$contactid = GETPOST('contactid'); // May be an int or 'thirdparty' +$actionid = GETPOST('actionid'); +$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') // Security check if ($user->societe_id) $socid=$user->societe_id; From de18d5d18733de90dbe8a97ba4aa8ead5094042c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:22:00 +0200 Subject: [PATCH 0284/1148] Enhance phpstan --- htdocs/core/lib/hrm.lib.php | 5 +++- phpstan.neon | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/hrm.lib.php b/htdocs/core/lib/hrm.lib.php index 50723ee5249..f64054dde30 100644 --- a/htdocs/core/lib/hrm.lib.php +++ b/htdocs/core/lib/hrm.lib.php @@ -20,7 +20,6 @@ * \ingroup HRM * \brief Library for hrm */ -$langs->load('hrm'); /** * Return head table for establishment tabs screen @@ -32,6 +31,8 @@ function establishment_prepare_head($object) { global $langs, $conf; + $langs->load('hrm'); + $h = 0; $head = array(); @@ -65,6 +66,8 @@ function hrm_admin_prepare_head() { global $langs, $conf, $user; + $langs->load('hrm'); + $h = 0; $head = array(); diff --git a/phpstan.neon b/phpstan.neon index 55cd13f59df..a33a17919f4 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -112,6 +112,51 @@ parameters: - %currentWorkingDirectory%/htdocs/core/lib/fourn.lib.php - %currentWorkingDirectory%/htdocs/core/lib/functions.lib.php - %currentWorkingDirectory%/htdocs/core/lib/functions2.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/geturl.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/holiday.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/hrm.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/images.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/import.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/invoice.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/invoice2.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/json.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ldap.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/loan.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/mailmanspip.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/member.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/memory.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/modulebuilder.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/multicurrency.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/oauth.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/order.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/parsemd.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/payments.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/pdf.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/prelevement.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/price.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/product.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/project.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/propal.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/reception.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/report.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/resource.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/salaries.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/security.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/security2.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/sendings.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/signature.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/stock.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/supplier_proposal.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/takepos.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/tax.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ticket.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/treeview.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/trip.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/usergroups.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/vat.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/website.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ws.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/xcal.lib.php featureToggles: subtractableTypes: false validateParameters: false @@ -147,6 +192,7 @@ parameters: - '#Undefined variable: \$mysoc#' - '#Undefined variable: \$error#' - '#Undefined variable: \$errors#' + - '#Undefined variable: \$form#' - message: '#Undefined variable: \$object#' path: %currentWorkingDirectory%/htdocs/societe/tpl internalErrorsCountLimit: 50 From 904e399293d52010b316fcce1db5e2be1e939827 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:25:57 +0200 Subject: [PATCH 0285/1148] Fix wrong nb of parmaeters --- htdocs/societe/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index d3cd26f8115..34784beefcb 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -741,7 +741,7 @@ if (empty($reshook)) { require_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php'; // the dir dirname($newfile) is directory of logo, so we should have only one file at once into index, so we delete indexes for the dir - deleteFilesIntoDatabaseIndex(dirname($newfile), '', '', 'uploaded', 1); + deleteFilesIntoDatabaseIndex(dirname($newfile), '', ''); // now we index the uploaded logo file addFileIntoDatabaseIndex(dirname($newfile), basename($newfile), '', 'uploaded', 1); } From 932530bd37b1d210f70e8d86a4a5be1179245907 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 16:00:32 +0200 Subject: [PATCH 0286/1148] FIX ajax call for line positioning when CSRFCHECK_WITH_TOKEN is on --- htdocs/core/tpl/ajaxrow.tpl.php | 4 +++- htdocs/main.inc.php | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/tpl/ajaxrow.tpl.php b/htdocs/core/tpl/ajaxrow.tpl.php index 8971dc2a919..071db6a82ee 100644 --- a/htdocs/core/tpl/ajaxrow.tpl.php +++ b/htdocs/core/tpl/ajaxrow.tpl.php @@ -66,13 +66,15 @@ $(document).ready(function(){ var fk_element = ""; var element_id = ""; var filepath = ""; + var token = ""; // We use old 'token' and not 'newtoken' for such ajax call because the ajax page has the NOTOKENRENEWAL constant set. $.post("/core/ajax/row.php", { roworder: roworder, table_element_line: table_element_line, fk_element: fk_element, element_id: element_id, - filepath: filepath + filepath: filepath, + token: token }, function() { console.log("tableDND end of ajax call"); diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 7b695dd8a12..1906f49a89a 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -273,6 +273,7 @@ if (isset($_SERVER["HTTP_USER_AGENT"])) if ($conf->browser->layout == 'phone') $conf->dol_no_mouse_hover=1; } + // Force HTTPS if required ($conf->file->main_force_https is 0/1 or https dolibarr root url) // $_SERVER["HTTPS"] is 'on' when link is https, otherwise $_SERVER["HTTPS"] is empty or 'off' if (! empty($conf->file->main_force_https) && (empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != 'on')) @@ -380,6 +381,7 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> { if ($_SERVER['REQUEST_METHOD'] == 'POST' && ! GETPOSTISSET('token')) // Note, offender can still send request by GET { + dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused by CSRFCHECK_WITH_TOKEN protection. Token not provided."); print "Access by POST method refused by CSRF protection in main.inc.php. Token not provided.\n"; print "If you access your server behind a proxy using url rewriting, you might check that all HTTP header is propagated (or add the line \$dolibarr_nocsrfcheck=1 into your conf.php file or MAIN_SECURITY_CSRF_WITH_TOKEN to 0 into setup).\n"; die; @@ -389,9 +391,9 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> //{ if (GETPOSTISSET('token') && GETPOST('token', 'alpha') != $_SESSION['token']) { - dol_syslog("Invalid token, so we disable POST and some GET parameters - referer=".$_SERVER['HTTP_REFERER'].", action=".GETPOST('action', 'aZ09').", _GET|POST['token']=".GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING); + dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused due to invalid token, so we disable POST and some GET parameters - referer=".$_SERVER['HTTP_REFERER'].", action=".GETPOST('action', 'aZ09').", _GET|POST['token']=".GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING); //print 'Unset POST by CSRF protection in main.inc.php.'; // Do not output anything because this create problems when using the BACK button on browsers. - if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php.', null, 'warnings'); + if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php.'."
\n".'$_SERVER[REQUEST_URI] = '.$_SERVER['REQUEST_URI'].' $_SERVER[REQUEST_METHOD] = '.$_SERVER['REQUEST_METHOD'].' GETPOST(token) = '.GETPOST('token', 'alpha').' $_SESSION[token] = '.$_SESSION['token'], null, 'warnings'); unset($_POST); unset($_GET['confirm']); } From 4f34a8b6e84aaf8ede4e4b4ceee96769b01a7964 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 16:15:13 +0200 Subject: [PATCH 0287/1148] FIX Position was lost when we edit the line of template invoice --- htdocs/compta/facture/fiche-rec.php | 14 ++++++++------ htdocs/core/tpl/ajaxrow.tpl.php | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index dd4a2af11ee..9b50e782454 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -774,7 +774,7 @@ if (empty($reshook)) $array_options = $extrafieldsline->getOptionalsFromPost($object->table_element_line); $objectline = new FactureLigneRec($db); - if ($objectline->fetch(GETPOST('lineid'))) + if ($objectline->fetch(GETPOST('lineid', 'int'))) { $objectline->array_options=$array_options; $result=$objectline->insertExtraFields(); @@ -784,6 +784,8 @@ if (empty($reshook)) } } + $position = ($objectline->rang >= 0 ? $objectline->rang : 0); + // Unset extrafield if (is_array($extralabelsline)) { @@ -795,8 +797,8 @@ if (empty($reshook)) } // Define special_code for special lines - $special_code=GETPOST('special_code'); - if (! GETPOST('qty')) $special_code=3; + $special_code=GETPOST('special_code', 'int'); + if (! GETPOST('qty', 'alpha')) $special_code=3; /*$line = new FactureLigne($db); $line->fetch(GETPOST('lineid')); @@ -832,11 +834,11 @@ if (empty($reshook)) $error ++; } } else { - $type = GETPOST('type'); + $type = GETPOST('type', 'int'); $label = (GETPOST('product_label') ? GETPOST('product_label') : ''); // Check parameters - if (GETPOST('type') < 0) { + if (GETPOST('type', 'int') < 0) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors'); $error ++; } @@ -868,7 +870,7 @@ if (empty($reshook)) 0, 0, $type, - 0, + $position, $special_code, $label, GETPOST('units'), diff --git a/htdocs/core/tpl/ajaxrow.tpl.php b/htdocs/core/tpl/ajaxrow.tpl.php index 071db6a82ee..0b92df1e519 100644 --- a/htdocs/core/tpl/ajaxrow.tpl.php +++ b/htdocs/core/tpl/ajaxrow.tpl.php @@ -66,7 +66,7 @@ $(document).ready(function(){ var fk_element = ""; var element_id = ""; var filepath = ""; - var token = ""; // We use old 'token' and not 'newtoken' for such ajax call because the ajax page has the NOTOKENRENEWAL constant set. + var token = ""; // We use old 'token' and not 'newtoken' for Ajax call because the ajax page has the NOTOKENRENEWAL constant set. $.post("/core/ajax/row.php", { roworder: roworder, From f0f0b989e96242681d5d03bc5f6d8159433e8d32 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 16:41:01 +0200 Subject: [PATCH 0288/1148] FIX Add warning when setup is strange --- htdocs/admin/mails.php | 10 ++++++++-- htdocs/langs/en_US/admin.lang | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index bc12fd5ddd6..997b0e97bdb 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -526,11 +526,17 @@ else print '
'; // Disable - print ''; + print ''; // Force e-mail recipient print ''; //Add user to select destinaries list diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 4e133489ce8..2edb5500d54 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1921,4 +1921,5 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? \ No newline at end of file +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? +RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value \ No newline at end of file From cf87196f376ef3e1f2d6ff68741ad90e308c982b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 21 Jul 2019 20:55:12 +0200 Subject: [PATCH 0289/1148] Fix css --- htdocs/compta/sociales/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php index 3ac50a65e9a..0318efb7e1a 100644 --- a/htdocs/compta/sociales/card.php +++ b/htdocs/compta/sociales/card.php @@ -655,7 +655,7 @@ if ($id > 0) else { - print ''; + print ''; print ''; print ''; } From 7ec8b48b180a9f7c1bb27bb6ca9c8a4c39e3175d Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 21 Jul 2019 22:21:11 +0200 Subject: [PATCH 0290/1148] Fix lost filter in action list --- htdocs/comm/action/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php index aae2d48e9cf..10f3048c2f6 100644 --- a/htdocs/comm/action/list.php +++ b/htdocs/comm/action/list.php @@ -43,7 +43,7 @@ $action=GETPOST('action','alpha'); $contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'actioncommlist'; // To manage different context of search $resourceid=GETPOST("search_resourceid","int")?GETPOST("search_resourceid","int"):GETPOST("resourceid","int"); $pid=GETPOST("search_projectid",'int',3)?GETPOST("search_projectid",'int',3):GETPOST("projectid",'int',3); -$status=GETPOST("search_status",'alpha')?GETPOST("search_status",'alpha'):GETPOST("status",'alpha'); +$status=(GETPOST("search_status",'alpha') != '')?GETPOST("search_status",'alpha'):GETPOST("status",'alpha'); $type=GETPOST('search_type','alphanohtml')?GETPOST('search_type','alphanohtml'):GETPOST('type','alphanohtml'); $optioncss = GETPOST('optioncss','alpha'); $year=GETPOST("year",'int'); From c9e70ed1c1d4f544e773cc9b703aace0b712c9a4 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Mon, 22 Jul 2019 09:30:43 +0200 Subject: [PATCH 0291/1148] Fix problems detected by travis-ci --- .../repair_llx_commande_fournisseur_dispatch_3.6-9.0.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/script/repair_llx_commande_fournisseur_dispatch_3.6-9.0.php b/htdocs/fourn/commande/script/repair_llx_commande_fournisseur_dispatch_3.6-9.0.php index fec3c82cb56..0c4b006664c 100644 --- a/htdocs/fourn/commande/script/repair_llx_commande_fournisseur_dispatch_3.6-9.0.php +++ b/htdocs/fourn/commande/script/repair_llx_commande_fournisseur_dispatch_3.6-9.0.php @@ -42,7 +42,7 @@ // Dolibarr environment $path_dir = '../../'; $main_inc_file = 'main.inc.php'; -while ((false == @include($path_dir . $main_inc_file)) && 3*10 > strlen($path_dir)) { +while ((false == (@include $path_dir . $main_inc_file)) && 3*10 > strlen($path_dir)) { $path_dir = '../' . $path_dir; if (strlen($path_dir) > 20) { echo 'Error: unable to include "' . $main_inc_file . '" from any of the parent directories.'; @@ -141,7 +141,6 @@ if ($resql_dispatch) { flush(); ob_flush(); } - } } else { echo 'Unable to find any dispatch without an fk_commandefourndet.' . "\n"; From cfaf9ce0ea906f337845a6e8029d56410194419d Mon Sep 17 00:00:00 2001 From: jcp Date: Mon, 22 Jul 2019 11:44:18 +0200 Subject: [PATCH 0292/1148] SET special_code=4 for existing records --- htdocs/install/mysql/migration/9.0.0-10.0.0.sql | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql index c2d4809f958..89abab54011 100644 --- a/htdocs/install/mysql/migration/9.0.0-10.0.0.sql +++ b/htdocs/install/mysql/migration/9.0.0-10.0.0.sql @@ -395,3 +395,6 @@ insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) v insert into llx_c_type_contact(rowid, element, source, code, libelle, active ) values (113, 'supplier_proposal', 'external', 'SERVICE', 'Contact fournisseur prestation', 1); ALTER TABLE llx_ticket_extrafields ADD INDEX idx_ticket_extrafields (fk_object); + +-- Use special_code=3 in Takepos +UPDATE llx_facturedet AS fd LEFT JOIN llx_facture AS f ON f.rowid = fd.fk_facture SET fd.special_code = 4 WHERE f.module_source = 'takepos' AND fd.special_code = 3 From 6409cc06ae8d3827610497c8bda26b6671482080 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Mon, 22 Jul 2019 11:42:25 +0200 Subject: [PATCH 0293/1148] FIX duplicate on the check (TODO field $onetrtd not used ?) --- htdocs/core/class/commonobject.class.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 7cf3273b818..b2826737d0d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6289,7 +6289,7 @@ abstract class CommonObject * @param array $params Optional parameters. Example: array('style'=>'class="oddeven"', 'colspan'=>$colspan) * @param string $keysuffix Suffix string to add after name and id of field (can be used to avoid duplicate names) * @param string $keyprefix Prefix string to add before name and id of field (can be used to avoid duplicate names) - * @param string $onetrtd All fields in same tr td + * @param string $onetrtd All fields in same tr td (TODO field not used ?) * @return string */ function showOptionals($extrafields, $mode='view', $params=null, $keysuffix='', $keyprefix='', $onetrtd=0) @@ -6386,10 +6386,7 @@ abstract class CommonObject $out .= ''; - if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) - { - if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { $colspan='0'; } - } + if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && ($e % 2) == 0) { $colspan='0'; } if ($action == 'selectlines') { $colspan++; } From 7bdfd832884f1010c056b153e6691cd0b7412362 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 22 Jul 2019 15:15:08 +0200 Subject: [PATCH 0294/1148] FIX FEC Format - Missing date_creation in general ledger when you add a new transaction --- htdocs/accountancy/class/bookkeeping.class.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index d31e660f0f1..21e43b524d7 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -549,7 +549,7 @@ class BookKeeping extends CommonObject // Put here code to add control on parameters values // Insert request - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . $mode.'('; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . $mode.' ('; $sql .= 'doc_date,'; $sql .= 'date_lim_reglement,'; $sql .= 'doc_type,'; @@ -1693,20 +1693,22 @@ class BookKeeping extends CommonObject $this->db->begin(); - if ($direction==0) + if ($direction==0) { $next_piecenum=$this->getNextNumMvt(); + $now = dol_now(); + if ($next_piecenum < 0) { $error++; } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'(doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.' (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)'; - $sql .= 'SELECT doc_date, doc_type,'; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num, date_creation)'; + $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.$next_piecenum.''; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.$next_piecenum.', "'.$this->db->idate($now).'"'; $sql .= ' FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; $resql = $this->db->query($sql); if (! $resql) { @@ -1729,11 +1731,11 @@ class BookKeeping extends CommonObject $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'_tmp(doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'_tmp (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)'; - $sql .= 'SELECT doc_date, doc_type,'; + $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num'; From a33ac665bb5df8f71e6d1412c89653439b75ee8a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 22 Jul 2019 22:07:04 +0200 Subject: [PATCH 0295/1148] Fix phpcs --- htdocs/compta/prelevement/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index c5e831ffcd5..5864d6301bd 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -86,7 +86,7 @@ if (empty($reshook)) } // Seems to no be used and replaced with $action == 'infocredit' - if ( $action == 'confirm_credite' && GETPOST('confirm','alpha') == 'yes') + if ( $action == 'confirm_credite' && GETPOST('confirm', 'alpha') == 'yes') { $res=$object->set_credite(); if ($res >= 0) From bf55733678a0ea52ed1705e7791a314d1b56ac89 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 02:45:31 +0200 Subject: [PATCH 0296/1148] NEW Replace the "info" tab on contract with the more complete "agenda" tag. --- htdocs/contrat/agenda.php | 261 +++++++++++++++++++++++++++++++ htdocs/contrat/card.php | 15 +- htdocs/contrat/info.php | 156 ------------------ htdocs/core/lib/company.lib.php | 8 + htdocs/core/lib/contract.lib.php | 15 +- htdocs/langs/en_US/main.lang | 1 + htdocs/societe/agenda.php | 3 - 7 files changed, 291 insertions(+), 168 deletions(-) create mode 100644 htdocs/contrat/agenda.php delete mode 100644 htdocs/contrat/info.php diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php new file mode 100644 index 00000000000..1bb6d8e9181 --- /dev/null +++ b/htdocs/contrat/agenda.php @@ -0,0 +1,261 @@ + + * Copyright (C) 2017 Ferran Marcet + * + * 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 . + */ + +/** + * \file htdocs/contrat/agenda.php + * \ingroup contrat + * \brief Page of contract events + */ + +require "../main.inc.php"; +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; +require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} + +// Load translation files required by the page +$langs->loadLangs(array("companies", "contracts")); + +if (GETPOST('actioncode', 'array')) +{ + $actioncode=GETPOST('actioncode', 'array', 3); + if (! count($actioncode)) $actioncode='0'; +} +else +{ + $actioncode=GETPOST("actioncode", "alpha", 3)?GETPOST("actioncode", "alpha", 3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)); +} +$search_agenda_label=GETPOST('search_agenda_label'); + +$action = GETPOST('action', 'alpha'); +$confirm = GETPOST('confirm', 'alpha'); +$id = GETPOST('id', 'int'); +$ref = GETPOST('ref', 'alpha'); + +// Security check +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'contrat', $id, ''); + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST("sortfield", 'alpha'); +$sortorder = GETPOST("sortorder", 'alpha'); +$page = GETPOST("page", 'int'); +if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; +if (! $sortfield) $sortfield='a.datep,a.id'; +if (! $sortorder) $sortorder='DESC,DESC'; + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('agendacontract','globalcard')); + + +/* + * Actions + */ + +$parameters=array('id'=>$id); +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors'); + +if (empty($reshook)) +{ + // Cancel + if (GETPOST('cancel', 'alpha') && ! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + + // Purge search criteria + if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers + { + $actioncode=''; + $search_agenda_label=''; + } +} + + + + +/* + * View + */ + +$form = new Form($db); +$formfile = new FormFile($db); +if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db); + +if ($id > 0) +{ + // Load object modContract + $module=(! empty($conf->global->CONTRACT_ADDON)?$conf->global->CONTRACT_ADDON:'mod_contract_serpis'); + if (substr($module, 0, 13) == 'mod_contract_' && substr($module, -3) == 'php') + { + $module = substr($module, 0, dol_strlen($module)-4); + } + $result=dol_include_once('/core/modules/contract/'.$module.'.php'); + if ($result > 0) + { + $modCodeContract = new $module(); + } + + require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; + + $object = new Contrat($db); + $result = $object->fetch($id); + $object->fetch_thirdparty(); + + $title=$langs->trans("Agenda"); + if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/contractrefonly/', $conf->global->MAIN_HTML_TITLE) && $object->ref) $title=$object->ref." - ".$title; + llxHeader('', $title); + + if (! empty($conf->notification->enabled)) $langs->load("mails"); + $head = contract_prepare_head($object); + + dol_fiche_head($head, 'agenda', $langs->trans("Agenda"), -1, 'agenda'); + + $linkback = ''.$langs->trans("BackToList").''; + + $morehtmlref=''; + if (! empty($modCodeContract->code_auto)) { + $morehtmlref.=$object->ref; + } else { + $morehtmlref.=$form->editfieldkey("", 'ref', $object->ref, $object, $user->rights->contrat->creer, 'string', '', 0, 3); + $morehtmlref.=$form->editfieldval("", 'ref', $object->ref, $object, $user->rights->contrat->creer, 'string', '', 0, 2); + } + + $morehtmlref.='
'; + // Ref customer + $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, $user->rights->contrat->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, $user->rights->contrat->creer, 'string', '', null, null, '', 1, 'getFormatedCustomerRef'); + // Ref supplier + $morehtmlref.='
'; + $morehtmlref.=$form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->contrat->creer, 'string', '', 0, 1); + $morehtmlref.=$form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, $user->rights->contrat->creer, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); + // Thirdparty + $morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); + if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref.=' ('.$langs->trans("OtherContracts").')'; + // Project + if (! empty($conf->projet->enabled)) + { + $langs->load("projects"); + $morehtmlref.='
'.$langs->trans('Project') . ' '; + if ($user->rights->contrat->creer) + { + if ($action != 'classify') + $morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; + if ($action == 'classify') { + //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); + $morehtmlref.='
'; + $morehtmlref.=''; + $morehtmlref.=''; + $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); + $morehtmlref.=''; + $morehtmlref.=''; + } else { + $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); + } + } else { + if (! empty($object->fk_project)) { + $proj = new Project($db); + $proj->fetch($object->fk_project); + $morehtmlref.=''; + $morehtmlref.=$proj->ref; + $morehtmlref.=''; + } else { + $morehtmlref.=''; + } + } + } + $morehtmlref.='
'; + + dol_banner_tab($object, 'id', $linkback, 1, 'ref', 'none', $morehtmlref); + + print '
'; + + print '
'; + + $object->info($id); + dol_print_object_info($object, 1); + + print '
'; + + dol_fiche_end(); + + + + // Actions buttons + + /*$objthirdparty=$object; + $objcon=new stdClass(); + + $out=''; + $permok=$user->rights->agenda->myactions->create; + if ((! empty($objthirdparty->id) || ! empty($objcon->id)) && $permok) + { + //$out.='trans("AddAnAction"),'filenew'); + //$out.=""; + }*/ + + + //print '
'; + //print '
'; + + + $newcardbutton=''; + if (! empty($conf->agenda->enabled)) + { + if (! empty($user->rights->agenda->myactions->create) || ! empty($user->rights->agenda->allactions->create)) + { + $newcardbutton.= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out); + } + } + + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + print '
'; + + $param='&id='.$id; + if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage; + if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit; + + print load_fiche_titre($langs->trans("ActionsOnContract"), $newcardbutton, ''); + //print_barre_liste($langs->trans("ActionsOnCompany"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $newcardbutton, '', 0, 1, 1); + + // List of all actions + $filters=array(); + $filters['search_agenda_label']=$search_agenda_label; + + // TODO Replace this with same code than into list.php + show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder); + } +} + +llxFooter(); +$db->close(); diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 671888545c8..430aad5e7e7 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -2209,10 +2209,14 @@ else print '
'; + $MAXEVENT = 10; + + $morehtmlright = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-list-alt', DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id); + // List of actions on element include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; $formactions = new FormActions($db); - $somethingshown = $formactions->showactions($object, 'contract', $socid, 1); + $somethingshown = $formactions->showactions($object, 'contract', $socid, 1, 'listactions', $MAXEVENT, '', $morehtmlright); print '
'; @@ -2237,14 +2241,18 @@ $db->close(); margin->enabled) && $action == 'editline') { + // TODO Why this ? To manage margin on contracts ? ?> - - - * Copyright (C) 2017 Ferran Marcet - * - * 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 . - */ - -/** - * \file htdocs/contrat/info.php - * \ingroup contrat - * \brief Page des informations d'un contrat - */ - -require "../main.inc.php"; -require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; -if (! empty($conf->projet->enabled)) { - require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; -} - -// Load translation files required by the page -$langs->load("contracts"); - -$action = GETPOST('action', 'alpha'); -$confirm = GETPOST('confirm', 'alpha'); -$id = GETPOST('id', 'int'); -$ref = GETPOST('ref', 'alpha'); - -// Security check -if ($user->societe_id) $socid=$user->societe_id; -$result = restrictedArea($user, 'contrat', $id, ''); - -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('contractcard','globalcard')); - - -/* - * Actions - */ - -// None - - - -/* - * View - */ - -$form = new Form($db); - -llxHeader('', $langs->trans("Contract"), ""); - -$object = new Contrat($db); -$object->fetch($id, $ref); -if ($object->id > 0) -{ - $object->fetch_thirdparty(); -} - -$object->info($object->id); - -$head = contract_prepare_head($object); - -dol_fiche_head($head, 'info', $langs->trans("Contract"), -1, 'contract'); - - -// Contract card - -$linkback = ''.$langs->trans("BackToList").''; - - -$morehtmlref=''; -//if (! empty($modCodeContract->code_auto)) { -$morehtmlref.=$object->ref; -/*} else { - $morehtmlref.=$form->editfieldkey("",'ref',$object->ref,0,'string','',0,3); -$morehtmlref.=$form->editfieldval("",'ref',$object->ref,0,'string','',0,2); -}*/ - -$morehtmlref.='
'; -// Ref customer -$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_customer', $object->ref_customer, $object, 0, 'string', '', 0, 1); -$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_customer', $object->ref_customer, $object, 0, 'string', '', null, null, '', 1, 'getFormatedCustomerRef'); -// Ref supplier -$morehtmlref.='
'; -$morehtmlref.=$form->editfieldkey("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', 0, 1); -$morehtmlref.=$form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1, 'getFormatedSupplierRef'); -// Thirdparty -$morehtmlref.='
'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1); -// Project -if (! empty($conf->projet->enabled)) -{ - $langs->load("projects"); - $morehtmlref.='
'.$langs->trans('Project') . ' '; - if ($user->rights->contrat->creer) - { - if ($action != 'classify') - //$morehtmlref.='' . img_edit($langs->transnoentitiesnoconv('SetProject')) . ' : '; - $morehtmlref.=' : '; - if ($action == 'classify') { - //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1); - $morehtmlref.='
'; - $morehtmlref.=''; - $morehtmlref.=''; - $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1); - $morehtmlref.=''; - $morehtmlref.=''; - } else { - $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1); - } - } else { - if (! empty($object->fk_project)) { - $proj = new Project($db); - $proj->fetch($object->fk_project); - $morehtmlref.=''; - $morehtmlref.=$proj->ref; - $morehtmlref.=''; - } else { - $morehtmlref.=''; - } - } -} -$morehtmlref.='
'; - - -dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'none', $morehtmlref); - - -print '
'; -print '
'; - -print '
'; - -print '
'.$langs->trans("Categories").'
'; + print '
'; $sql = "SELECT c.label, count(*) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."categorie_societe as cs"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."categorie as c ON cs.fk_categorie = c.rowid"; diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 51a7ccb24bb..fdd4f54b6c8 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1208,8 +1208,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' print_liste_field_titre("BIC"); if (! empty($conf->prelevement->enabled)) { - print print_liste_field_titre("RUM"); - print print_liste_field_titre("WithdrawMode"); + print_liste_field_titre("RUM"); + print_liste_field_titre("WithdrawMode"); } print_liste_field_titre("DefaultRIB", '', '', '', '', '', '', '', 'center '); print_liste_field_titre('', '', '', '', '', '', '', '', 'center '); diff --git a/htdocs/societe/societecontact.php b/htdocs/societe/societecontact.php index 72bf7f6d27e..d09861da3f8 100644 --- a/htdocs/societe/societecontact.php +++ b/htdocs/societe/societecontact.php @@ -37,6 +37,18 @@ $langs->loadLangs(array("orders", "companies")); $id=GETPOST('id', 'int')?GETPOST('id', 'int'):GETPOST('socid', 'int'); $ref=GETPOST('ref', 'alpha'); $action=GETPOST('action', 'alpha'); +$massaction=GETPOST('massaction', 'alpha'); + +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield=GETPOST("sortfield", 'alpha'); +$sortorder=GETPOST("sortorder", 'alpha'); +$page=GETPOST("page", 'int'); +if (! $sortorder) $sortorder="ASC"; +if (! $sortfield) $sortfield="s.nom"; +if (empty($page) || $page == -1 || !empty($search_btn) || !empty($search_remove_btn) || (empty($toselect) && $massaction === '0')) { $page = 0; } +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; // Security check if ($user->societe_id) $socid=$user->societe_id; @@ -233,12 +245,14 @@ if ($id > 0 || ! empty($ref)) { $num = $db->num_rows($resql); - if ($num > 0 ) + if ($num > 0) { + $param = ''; + $titre=$langs->trans("MembersListOfTiers"); print '
'; - print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, ''); + print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, 0, ''); print ""; print ''; diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php index fa868de6e42..fa74b1b3dd3 100644 --- a/htdocs/societe/website.php +++ b/htdocs/societe/website.php @@ -230,9 +230,9 @@ dol_fiche_end(); $newcardbutton = ''; if (! empty($conf->website->enabled)) { if (! empty($user->rights->societe->lire)) { - $morehtmlright.= dolGetButtonTitle($langs->trans("AddWebsiteAccount"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id)); + $newcardbutton.= dolGetButtonTitle($langs->trans("AddWebsiteAccount"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id)); } else { - $morehtmlright.= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', 0); + $newcardbutton.= dolGetButtonTitle($langs->trans("AddAction"), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/website/websiteaccount_card.php?action=create&fk_soc='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?id='.$object->id), '', 0); } } @@ -248,14 +248,15 @@ foreach($objectwebsiteaccount->fields as $key => $val) $sql.='t.'.$key.', '; } // Add fields from extrafields -foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ", ef.".$key.' as options_'.$key : ''); +if (! empty($extrafields->attributes[$object->table_element]['label'])) + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.' as options_'.$key.', ' : ''); // Add fields from hooks $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $objectwebsiteaccount); // Note that $action and $object may have been modified by hook $sql.=$hookmanager->resPrint; $sql=preg_replace('/, $/', '', $sql); $sql.= " FROM ".MAIN_DB_PREFIX."societe_account as t"; -if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_account_extrafields as ef on (t.rowid = ef.fk_object)"; +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; if ($objectwebsiteaccount->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity('societeaccount').")"; else $sql.=" WHERE 1 = 1"; $sql.=" AND fk_soc = ".$object->id; @@ -428,6 +429,16 @@ foreach ($extrafields->attribute_computed as $key => $val) } +// Detect if we need a fetch on each output line +$needToFetchEachLine=0; +if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) +{ + foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) + { + if (preg_match('/\$object/', $val)) $needToFetchEachLine++; // There is at least one compute field that use $object + } +} + // Loop on record // -------------------------------------------------------------------- $i=0; diff --git a/phpstan.neon b/phpstan.neon index 34dd50fb4bc..6d63f931375 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -4,6 +4,7 @@ parameters: - %currentWorkingDirectory%/htdocs/includes/restler/framework/Luracast/Restler/AutoLoader.php - %currentWorkingDirectory%/htdocs/includes/* - %currentWorkingDirectory%/htdocs/*/class/api_* + - %currentWorkingDirectory%/htdocs/*/canvas/*/tpl/*.tpl.php autoload_directories: - %currentWorkingDirectory%/htdocs/accountancy/class - %currentWorkingDirectory%/htdocs/adherents/class @@ -23,14 +24,94 @@ parameters: - %currentWorkingDirectory%/htdocs/compta/facture/class - %currentWorkingDirectory%/htdocs/compta/localtax/class - %currentWorkingDirectory%/htdocs/compta/paiement/class + - %currentWorkingDirectory%/htdocs/compta/prelevement/class + - %currentWorkingDirectory%/htdocs/compta/salaries/class + - %currentWorkingDirectory%/htdocs/compta/sociales/class + - %currentWorkingDirectory%/htdocs/compta/tva/class - %currentWorkingDirectory%/htdocs/conf - %currentWorkingDirectory%/htdocs/contact/class - %currentWorkingDirectory%/htdocs/contrat/class - %currentWorkingDirectory%/htdocs/core/class + - %currentWorkingDirectory%/htdocs/core/lib + - %currentWorkingDirectory%/htdocs/core/triggers + - %currentWorkingDirectory%/htdocs/core/modules/bank + - %currentWorkingDirectory%/htdocs/core/modules/bom + - %currentWorkingDirectory%/htdocs/core/modules/commande + - %currentWorkingDirectory%/htdocs/core/modules/expedition + #- %currentWorkingDirectory%/htdocs/core/modules/expensereport + - %currentWorkingDirectory%/htdocs/core/modules/facture + - %currentWorkingDirectory%/htdocs/core/modules/fichinter + - %currentWorkingDirectory%/htdocs/core/modules/holiday + - %currentWorkingDirectory%/htdocs/core/modules/livraison + #- %currentWorkingDirectory%/htdocs/core/modules/member + - %currentWorkingDirectory%/htdocs/core/modules/payment + - %currentWorkingDirectory%/htdocs/core/modules/product + - %currentWorkingDirectory%/htdocs/core/modules/propale + - %currentWorkingDirectory%/htdocs/core/modules/reception + #- %currentWorkingDirectory%/htdocs/core/modules/stock + - %currentWorkingDirectory%/htdocs/core/modules/supplier_invoice + - %currentWorkingDirectory%/htdocs/core/modules/supplier_order + #- %currentWorkingDirectory%/htdocs/core/modules/supplier_payment + - %currentWorkingDirectory%/htdocs/core/modules/supplier_proposal + - %currentWorkingDirectory%/htdocs/cron/class + - %currentWorkingDirectory%/htdocs/datapolicy/class + - %currentWorkingDirectory%/htdocs/debugbar/class + - %currentWorkingDirectory%/htdocs/don/class + - %currentWorkingDirectory%/htdocs/ecm/class + - %currentWorkingDirectory%/htdocs/emailcollector/class + - %currentWorkingDirectory%/htdocs/expedition/class + - %currentWorkingDirectory%/htdocs/expensereport/class + - %currentWorkingDirectory%/htdocs/exports/class + - %currentWorkingDirectory%/htdocs/fichinter/class + - %currentWorkingDirectory%/htdocs/fourn/class + - %currentWorkingDirectory%/htdocs/holiday/class + - %currentWorkingDirectory%/htdocs/hrm/class + - %currentWorkingDirectory%/htdocs/imports/class + - %currentWorkingDirectory%/htdocs/livraison/class + - %currentWorkingDirectory%/htdocs/loan/class + - %currentWorkingDirectory%/htdocs/mailmanspip/class + - %currentWorkingDirectory%/htdocs/multicurrency/class + - %currentWorkingDirectory%/htdocs/opensurvey/class - %currentWorkingDirectory%/htdocs/product/class + - %currentWorkingDirectory%/htdocs/projet/class + - %currentWorkingDirectory%/htdocs/reception/class + - %currentWorkingDirectory%/htdocs/resource/class - %currentWorkingDirectory%/htdocs/societe/class + - %currentWorkingDirectory%/htdocs/stripe/class + - %currentWorkingDirectory%/htdocs/supplier_proposal/class + - %currentWorkingDirectory%/htdocs/ticket/class - %currentWorkingDirectory%/htdocs/user/class - autoload_files: [] + - %currentWorkingDirectory%/htdocs/variants/class + - %currentWorkingDirectory%/htdocs/website/class + autoload_files: + - %currentWorkingDirectory%/build/phpstan/bootstrap.php + - %currentWorkingDirectory%/htdocs/core/lib/accounting.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/admin.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/agenda.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ajax.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/asset.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/bank.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/barcode.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/categories.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/company.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/contact.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/contract.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/cron.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/date.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/doc.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/doleditor.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/donation.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/ecm.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/emailing.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/expedition.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/expensereport.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/fichinter.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/files.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/fiscalyear.lib.php + #- %currentWorkingDirectory%/htdocs/core/lib/format_cards.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/fourn.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/functions.lib.php + - %currentWorkingDirectory%/htdocs/core/lib/functions2.lib.php featureToggles: subtractableTypes: false validateParameters: false @@ -66,6 +147,9 @@ parameters: - '#Undefined variable: \$db#' - '#Undefined variable: \$conf#' - '#Undefined variable: \$hookmanager#' + - '#Undefined variable: \$mysoc#' + - '#Undefined variable: \$error#' + - '#Undefined variable: \$errors#' internalErrorsCountLimit: 50 cache: nodesByFileCountMax: 512 From fea12c3c5969ca10f064c23133a89b37f15cb1ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:53:21 +0200 Subject: [PATCH 0278/1148] Fix class not found error --- htdocs/societe/class/societe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index b1d037552aa..61419b837fb 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4148,8 +4148,8 @@ class Societe extends CommonObject if ($result < 0) { $error++; - $this->error = $c->error; - $this->errors = $c->errors; + $this->error = $this->error; + $this->errors = $this->errors; break; } } From 6594b361b1ec45d52b80a5c9520e948515b4ecc4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 15:56:20 +0200 Subject: [PATCH 0279/1148] Removed useless code --- htdocs/societe/class/societe.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 61419b837fb..c9933bc711b 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4148,8 +4148,6 @@ class Societe extends CommonObject if ($result < 0) { $error++; - $this->error = $this->error; - $this->errors = $this->errors; break; } } From 73b53029059fe27c53f7feef4de499c4c0163672 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:00:16 +0200 Subject: [PATCH 0280/1148] Fix var not defined --- htdocs/societe/class/societe.class.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index c9933bc711b..a26ff197d9e 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -3024,7 +3024,7 @@ class Societe extends CommonObject for ($index = 0; $index < 9; $index ++) { - $number = (int) $siren[$index]; + $number = (int) $chaine[$index]; if (($index % 2) != 0) { if (($number *= 2) > 9) $number -= 9; } $sum += $number; } @@ -3066,13 +3066,16 @@ class Societe extends CommonObject $string=preg_replace('/(\s)/', '', $string); $string = strtoupper($string); - for ($i = 0; $i < 9; $i ++) - $num[$i] = substr($string, $i, 1); - //Check format if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $string)) return 0; + $num = array(); + for ($i = 0; $i < 9; $i ++) + { + $num[$i] = substr($string, $i, 1); + } + //Check NIF if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $string)) if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($string, 0, 8) % 23, 1)) From 6bc38acb56810ff60c9b2e26fc9525f8d552a504 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:01:28 +0200 Subject: [PATCH 0281/1148] Fix assignation --- htdocs/societe/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index d0f0bdeb1b8..d3cd26f8115 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2719,7 +2719,7 @@ else $MAXEVENT = 10; - $morehtmlright.= dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-list-alt', DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id); + $morehtmlright = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-list-alt', DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id); // List of actions on element include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php'; From b6a1c92fc0874131ff355eace6903793eef33028 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:08:31 +0200 Subject: [PATCH 0282/1148] Enhance phpstan --- htdocs/societe/paymentmodes.php | 59 ++++++++++++++++----------------- phpstan.neon | 5 ++- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index fdd4f54b6c8..497afe9c210 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -778,40 +778,39 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if ($conf->facture->enabled && $user->rights->facture->lire) $elementTypeArray['invoice']=$langs->transnoentitiesnoconv('Invoices'); if ($conf->contrat->enabled && $user->rights->contrat->lire) $elementTypeArray['contract']=$langs->transnoentitiesnoconv('Contracts'); - if (! empty($conf->stripe->enabled)) - { - $permissiontowrite = $user->rights->societe->creer; - // Stripe customer key 'cu_....' stored into llx_societe_account - print ''; } - print ''; - } } print '
'; - //print $langs->trans('StripeCustomerId'); - print $form->editfieldkey("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', 0, 2, 'socid'); - print ''; - //print $stripecu; - print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid'); - if (! empty($conf->stripe->enabled) && $stripecu && $action != 'editkey_account') + if (! empty($conf->stripe->enabled)) { - $connect=''; - if (!empty($stripeacc)) $connect=$stripeacc.'/'; - $url='https://dashboard.stripe.com/'.$connect.'test/customers/'.$stripecu; - if ($servicestatus) + $permissiontowrite = $user->rights->societe->creer; + // Stripe customer key 'cu_....' stored into llx_societe_account + print '
'; + //print $langs->trans('StripeCustomerId'); + print $form->editfieldkey("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', 0, 2, 'socid'); + print ''; + //print $stripecu; + print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid'); + if (! empty($conf->stripe->enabled) && $stripecu && $action != 'editkey_account') { - $url='https://dashboard.stripe.com/'.$connect.'customers/'.$stripecu; + $connect=''; + if (!empty($stripeacc)) $connect=$stripeacc.'/'; + $url='https://dashboard.stripe.com/'.$connect.'test/customers/'.$stripecu; + if ($servicestatus) + { + $url='https://dashboard.stripe.com/'.$connect.'customers/'.$stripecu; + } + print ' '.img_picto($langs->trans('ShowInStripe'), 'object_globe').''; } - print ' '.img_picto($langs->trans('ShowInStripe'), 'object_globe').''; + print ''; + if (empty($stripecu)) + { + print '
'; + print ''; + print ''; + print ''; + print ''; + print '
'; + } + print '
'; - if (empty($stripecu)) - { - print '
'; - print ''; - print ''; - print ''; - print ''; - print ''; - print '
'; - } - print '
'; diff --git a/phpstan.neon b/phpstan.neon index 6d63f931375..55cd13f59df 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -139,9 +139,6 @@ parameters: reportMagicMethods: false reportMagicProperties: false ignoreErrors: - - - message: '#Call to an undefined method abcdef#' - path: %currentWorkingDirectory%/dirtoignoreerror/* - '#Undefined variable: \$langs#' - '#Undefined variable: \$user#' - '#Undefined variable: \$db#' @@ -150,6 +147,8 @@ parameters: - '#Undefined variable: \$mysoc#' - '#Undefined variable: \$error#' - '#Undefined variable: \$errors#' + - message: '#Undefined variable: \$object#' + path: %currentWorkingDirectory%/htdocs/societe/tpl internalErrorsCountLimit: 50 cache: nodesByFileCountMax: 512 From 6015254a77b4f6c55b3ff5429c21a1857f552ed1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 20 Jul 2019 16:15:01 +0200 Subject: [PATCH 0283/1148] Fix var not defined --- htdocs/societe/list.php | 1 + htdocs/societe/notify/card.php | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index c9275293bb2..9ddbed6c9b0 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -1002,6 +1002,7 @@ while ($i < min($num, $limit)) print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("MAIN_DISABLE_ALL_MAILS").''.yn($conf->global->MAIN_DISABLE_ALL_MAILS).'
'.$langs->trans("MAIN_DISABLE_ALL_MAILS").''.yn($conf->global->MAIN_DISABLE_ALL_MAILS); + if (! empty($conf->global->MAIN_DISABLE_ALL_MAILS)) print img_warning($langs->trans("Disabled")); + print '
'.$langs->trans("MAIN_MAIL_FORCE_SENDTO").''.$conf->global->MAIN_MAIL_FORCE_SENDTO; - if (! empty($conf->global->MAIN_MAIL_FORCE_SENDTO) && ! isValidEmail($conf->global->MAIN_MAIL_FORCE_SENDTO)) print img_warning($langs->trans("ErrorBadEMail")); + if (! empty($conf->global->MAIN_MAIL_FORCE_SENDTO)) + { + if (! isValidEmail($conf->global->MAIN_MAIL_FORCE_SENDTO)) print img_warning($langs->trans("ErrorBadEMail")); + else print img_warning($langs->trans("RecipientEmailsWillBeReplacedWithThisValue")); + } print '
'.$langs->trans("None").'
'.$langs->trans("None").'
'; -dol_print_object_info($object); -print '
'; - -print '
'; - -dol_fiche_end(); - - -llxFooter(); -$db->close(); diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index ef34befa71c..58e411a0bdf 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1261,6 +1261,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", o.ref"; elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql.= ", o.ref"; elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') $sql.= ", o.ref"; + elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') $sql.= ", o.ref"; $sql.= " FROM ".MAIN_DB_PREFIX."actioncomm as a"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_action"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; @@ -1284,6 +1285,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", ".MAIN_DB_PREFIX."product as o"; elseif (is_object($filterobj) && get_class($filterobj) == 'Ticket') $sql.= ", ".MAIN_DB_PREFIX."ticket as o"; elseif (is_object($filterobj) && get_class($filterobj) == 'BOM') $sql.= ", ".MAIN_DB_PREFIX."bom_bom as o"; + elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') $sql.= ", ".MAIN_DB_PREFIX."contrat as o"; $sql.= " WHERE a.entity IN (".getEntity('agenda').")"; if ($force_filter_contact === false) { @@ -1314,6 +1316,11 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'bom'"; if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; } + elseif (is_object($filterobj) && get_class($filterobj) == 'Contrat') + { + $sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'contract'"; + if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id; + } } // Condition on actioncode @@ -1368,6 +1375,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon = '', $noprin } elseif (empty($sql) && !empty($sql2)) { $sql = $sql2; } + //TODO Add limit in nb of results $sql.= $db->order($sortfield_new, $sortorder); dol_syslog("company.lib::show_actions_done", LOG_DEBUG); diff --git a/htdocs/core/lib/contract.lib.php b/htdocs/core/lib/contract.lib.php index 0583fa4f365..d1a4a07689e 100644 --- a/htdocs/core/lib/contract.lib.php +++ b/htdocs/core/lib/contract.lib.php @@ -30,8 +30,8 @@ */ function contract_prepare_head(Contrat $object) { - global $db, $langs, $conf; - + global $db, $langs, $conf, $user; + $h = 0; $head = array(); @@ -79,9 +79,14 @@ function contract_prepare_head(Contrat $object) $head[$h][2] = 'documents'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/contrat/info.php?id='.$object->id; - $head[$h][1] = $langs->trans("Info"); - $head[$h][2] = 'info'; + $head[$h][0] = DOL_URL_ROOT.'/contrat/agenda.php?id='.$object->id; + $head[$h][1].= $langs->trans("Events"); + if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) )) + { + $head[$h][1].= '/'; + $head[$h][1].= $langs->trans("Agenda"); + } + $head[$h][2] = 'agenda'; $h++; complete_head_from_modules($conf, $langs, $object, $head, $h, 'contract', 'remove'); diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 5e55597c306..1cadc32f4ab 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -445,6 +445,7 @@ ContactsAddressesForCompany=Contacts/addresses for this third party AddressesForCompany=Addresses for this third party ActionsOnCompany=Events for this third party ActionsOnContact=Events for this contact/address +ActionsOnContract=Events for this contract ActionsOnMember=Events about this member ActionsOnProduct=Events about this product NActionsLate=%s late diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php index 53a1ee5d7ed..6afdc662f4f 100644 --- a/htdocs/societe/agenda.php +++ b/htdocs/societe/agenda.php @@ -103,9 +103,6 @@ if ($socid > 0) require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; - $langs->load("companies"); - - $object = new Societe($db); $result = $object->fetch($socid); From a61a4350950638d38a588ec174b1979babd77055 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 02:54:49 +0200 Subject: [PATCH 0297/1148] Fix tab title --- htdocs/contrat/agenda.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contrat/agenda.php b/htdocs/contrat/agenda.php index 1bb6d8e9181..622d195d8cd 100644 --- a/htdocs/contrat/agenda.php +++ b/htdocs/contrat/agenda.php @@ -134,7 +134,7 @@ if ($id > 0) if (! empty($conf->notification->enabled)) $langs->load("mails"); $head = contract_prepare_head($object); - dol_fiche_head($head, 'agenda', $langs->trans("Agenda"), -1, 'agenda'); + dol_fiche_head($head, 'agenda', $langs->trans("Contract"), -1, 'contract'); $linkback = ''.$langs->trans("BackToList").''; From d6d5a93225825eb3ac7d398dc70a5785eb9e4e9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 03:15:06 +0200 Subject: [PATCH 0298/1148] Fix css --- htdocs/projet/ganttview.php | 4 ++-- htdocs/projet/tasks.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index a30fce71ef1..ba1e2f2994e 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -204,9 +204,9 @@ if ($user->rights->projet->all->creer || $user->rights->projet->creer) { } } -$linktocreatetask = dolGetButtonTitle($langs->trans('AddTask'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id.'&action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$object->id), '', $linktocreatetaskUserRight, $linktocreatetaskParam); +$linktocreatetask = dolGetButtonTitle($langs->trans('AddTask'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id.'&action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$object->id), '', $linktocreatetaskUserRight, $linktocreatetaskParam); -$linktolist = dolGetButtonTitle($langs->trans('GoToListOfTasks'), '', 'fa fa-tasks', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id); +$linktolist = dolGetButtonTitle($langs->trans('GoToListOfTasks'), '', 'fa fa-tasks paddingleft', DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id); //print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $linktotasks, $num, $totalnboflines, 'title_generic.png', 0, '', '', 0, 1); print load_fiche_titre($title, $linktolist.'   '.$linktocreatetask, 'title_generic.png'); diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index b05b27b5e90..b8ac9fb7e02 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -709,7 +709,7 @@ elseif ($id > 0 || ! empty($ref)) $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields print '
'; - print ''; + print '
'; // Fields title search print ''; From 2dccaef1cdc8420d4d17dab8a4eceed9068a0c57 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 03:39:07 +0200 Subject: [PATCH 0299/1148] Fix message --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 1906f49a89a..77f2a1f746f 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -393,7 +393,7 @@ if ((! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck) && ! empty($conf-> { dol_syslog("--- Access to ".$_SERVER["PHP_SELF"]." refused due to invalid token, so we disable POST and some GET parameters - referer=".$_SERVER['HTTP_REFERER'].", action=".GETPOST('action', 'aZ09').", _GET|POST['token']=".GETPOST('token', 'alpha').", _SESSION['token']=".$_SESSION['token'], LOG_WARNING); //print 'Unset POST by CSRF protection in main.inc.php.'; // Do not output anything because this create problems when using the BACK button on browsers. - if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php.'."
\n".'$_SERVER[REQUEST_URI] = '.$_SERVER['REQUEST_URI'].' $_SERVER[REQUEST_METHOD] = '.$_SERVER['REQUEST_METHOD'].' GETPOST(token) = '.GETPOST('token', 'alpha').' $_SESSION[token] = '.$_SESSION['token'], null, 'warnings'); + if ($conf->global->MAIN_FEATURES_LEVEL>1) setEventMessages('Unset POST by CSRF protection in main.inc.php (POST was already done or was done by a not allowed web page).'."
\n".'$_SERVER[REQUEST_URI] = '.$_SERVER['REQUEST_URI'].' $_SERVER[REQUEST_METHOD] = '.$_SERVER['REQUEST_METHOD'].' GETPOST(token) = '.GETPOST('token', 'alpha').' $_SESSION[token] = '.$_SESSION['token'], null, 'warnings'); unset($_POST); unset($_GET['confirm']); } From 559a9024050bcd8b86b969c4ccbd6527ac5117ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 03:39:35 +0200 Subject: [PATCH 0300/1148] FIX summary of time spent in preview tab of projects --- htdocs/projet/class/project.class.php | 4 ++-- htdocs/projet/element.php | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index cbee8d181ca..2261e06219b 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -599,13 +599,13 @@ class Project extends CommonObject $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . $tablename." WHERE ".$projectkey." IN (". $ids .") AND entity IN (".getEntity($type).")"; } - if ($dates > 0) + if ($dates > 0 && ($type != 'project_task')) // For table project_taks, we want the filter on date apply on project_time_spent table { if (empty($datefieldname) && ! empty($this->table_element_date)) $datefieldname=$this->table_element_date; if (empty($datefieldname)) return 'Error this object has no date field defined'; $sql.=" AND (".$datefieldname." >= '".$this->db->idate($dates)."' OR ".$datefieldname." IS NULL)"; } - if ($datee > 0) + if ($datee > 0 && ($type != 'project_task')) // For table project_taks, we want the filter on date apply on project_time_spent table { if (empty($datefieldname) && ! empty($this->table_element_date)) $datefieldname=$this->table_element_date; if (empty($datefieldname)) return 'Error this object has no date field defined'; diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index b4d2a8b290f..4f5af0ca94f 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -532,7 +532,8 @@ if (! $showdatefilter) { print '
'; print '
'; - print ''; + print ''; + print ''; print ''; print '
'; print ''; print ''; From 57db12ccdbeac8bea717ad5b28dc67f1bb78a2d7 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:10:13 +0200 Subject: [PATCH 0307/1148] Update card.php --- htdocs/contact/card.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 12e2e1cb206..cfead2173ff 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility_id = GETPOST("civility_id", 'alpha'); + $object->civility = GETPOST("civility", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -349,7 +349,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility_id = GETPOST("civility_id", 'alpha'); + $object->civility = GETPOST("civility", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); @@ -573,7 +573,7 @@ else // Civility print ''; print ''; From f959341aa83d7dd0bfa8394c35bf1af4065d2318 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:30:12 +0200 Subject: [PATCH 0308/1148] Update card.php --- htdocs/contact/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index cfead2173ff..ff0c9f5cc98 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility", 'alpha'); + $object->civility = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -349,7 +349,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility", 'alpha'); + $object->civility = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); From 9ddb8a5b0b47c7d7057ad4074f553cfa86d047ad Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 14:41:29 +0200 Subject: [PATCH 0309/1148] Fix tooltip to say closed project are not visibles --- htdocs/core/class/html.formprojet.class.php | 8 ++++---- htdocs/expensereport/card.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php index b4c0c4295c9..057f977fadb 100644 --- a/htdocs/core/class/html.formprojet.class.php +++ b/htdocs/core/class/html.formprojet.class.php @@ -60,7 +60,7 @@ class FormProjets * @param int $maxlength Maximum length of label * @param int $option_only Return only html options lines without the select tag * @param int $show_empty Add an empty line - * @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable) + * @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable). Use a negative value to not show the "discarded" tooltip. * @param int $forcefocus Force focus on field (works with javascript only) * @param int $disabled Disabled * @param int $mode 0 for HTML mode and 1 for JSON mode @@ -100,13 +100,13 @@ class FormProjets } else { - $out.=$this->select_projects_list($socid, $selected, $htmlname, $maxlength, $option_only, $show_empty, $discard_closed, $forcefocus, $disabled, 0, $filterkey, 1, $forceaddid, $htmlid, $morecss); + $out.=$this->select_projects_list($socid, $selected, $htmlname, $maxlength, $option_only, $show_empty, abs($discard_closed), $forcefocus, $disabled, 0, $filterkey, 1, $forceaddid, $htmlid, $morecss); } - if ($discard_closed) + if ($discard_closed > 0) { if (class_exists('Form')) { - if (empty($form)) $form=new Form($this->db); + if (! is_object($form)) $form=new Form($this->db); $out.=$form->textwithpicto('', $langs->trans("ClosedProjectsAreHidden")); } } diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 94754a71c7f..58273a67ebe 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2441,7 +2441,7 @@ else print ''; print ''; print ''; - if (! empty($conf->projet->enabled)) print ''; + if (! empty($conf->projet->enabled)) print ''; if (!empty($conf->global->MAIN_USE_EXPENSE_IK)) print ''; print ''; print ''; @@ -2469,7 +2469,7 @@ else if (! empty($conf->projet->enabled)) { print ''; } From be13d5e47158cc7322346c6fa4f133cbde6e992e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 14:49:09 +0200 Subject: [PATCH 0310/1148] FIX The new feature to attach document on lines was not correclty enabled. --- htdocs/expensereport/card.php | 6 +++--- htdocs/expensereport/tpl/expensereport_linktofile.tpl.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 58273a67ebe..04044e0ad97 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2258,7 +2258,7 @@ else print ''.$langs->trans("UploadANewFileNow"); print img_picto($langs->trans("UploadANewFileNow"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); print ''; - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { print '   -   '.''.$langs->trans("AttachTheNewLineToTheDocument"); print img_picto($langs->trans("AttachTheNewLineToTheDocument"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); @@ -2389,7 +2389,7 @@ else $nbFiles = $nbLinks = 0; $arrayoffiles = array(); - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; @@ -2406,7 +2406,7 @@ else print ''.$langs->trans("UploadANewFileNow"); print img_picto($langs->trans("UploadANewFileNow"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); print ''; - if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { print '   -   '.''.$langs->trans("AttachTheNewLineToTheDocument"); print img_picto($langs->trans("AttachTheNewLineToTheDocument"), 'chevron-down', '', false, 0, 0, '', 'marginleftonly'); diff --git a/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php b/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php index 48f21bc3dc2..aa66409f3ba 100644 --- a/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php +++ b/htdocs/expensereport/tpl/expensereport_linktofile.tpl.php @@ -1,6 +1,6 @@ global->MAIN_FEATURES_LEVEL >= 2) +if (empty($conf->global->EXPENSEREPORT_DISABLE_ATTACHMENT_ON_LINES)) { print ''."\n"; From 2162f2331dfecef69fb344c629d222d0fa73a241 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 06:57:42 +0200 Subject: [PATCH 0311/1148] Try to fix travis --- htdocs/accountancy/class/bookkeeping.class.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 21e43b524d7..0034723ec4c 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -1701,22 +1701,22 @@ class BookKeeping extends CommonObject if ($next_piecenum < 0) { $error++; } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.' (doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . ' (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num, date_creation)'; $sql .= ' SELECT doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; - $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.$next_piecenum.', "'.$this->db->idate($now).'"'; - $sql .= ' FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, ' . $next_piecenum . ', "' . $this->db->idate($now) . '"'; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'DELETE FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; @@ -1724,14 +1724,14 @@ class BookKeeping extends CommonObject dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } } elseif ($direction==1) { - $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element.'_tmp (doc_date, doc_type,'; + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '_tmp (doc_date, doc_type,'; $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)'; @@ -1739,14 +1739,14 @@ class BookKeeping extends CommonObject $sql .= ' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,'; $sql .= ' numero_compte, label_compte, label_operation, debit, credit,'; $sql .= ' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num'; - $sql .= ' FROM '.MAIN_DB_PREFIX . $this->table_element.' WHERE piece_num = '.$piece_num; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element.' WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; $this->errors[] = 'Error ' . $this->db->lasterror(); dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); } - $sql = 'DELETE FROM '.MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num; + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element . '_tmp WHERE piece_num = ' . $piece_num; $resql = $this->db->query($sql); if (! $resql) { $error ++; From 3921f706e24314b23ecd71082fb17e70b4b6680e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 24 Jul 2019 09:01:11 +0200 Subject: [PATCH 0312/1148] Presentation nowrap on amount --- htdocs/compta/index.php | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php index c57b073b487..722a7a3ce82 100644 --- a/htdocs/compta/index.php +++ b/htdocs/compta/index.php @@ -410,8 +410,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print ''; - if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; + if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; + print ''; print ''; print ''; print ''; @@ -510,7 +510,7 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture- print $thirdpartystatic->getNomUrl(1, 'supplier', 44); print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -591,7 +591,7 @@ if (! empty($conf->don->enabled) && $user->rights->societe->lire) print ''; print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -662,8 +662,8 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print ''; print ''; print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; $tot_ttc+=$obj->amount; @@ -671,7 +671,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) } print ''; - print ''; + print ''; print ''; print ''; print ''; @@ -784,8 +784,8 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us print $societestatic->getNomUrl(1, 'customer', 44); print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; $tot_ht += $obj->total_ht; @@ -797,8 +797,8 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us print ''; if (! empty($conf->global->MAIN_SHOW_HT_ON_SUMMARY)) print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; print '
'.$langs->trans("From").' '; @@ -762,7 +763,8 @@ foreach ($listofreferent as $key => $value) // Define form with the combo list of elements to link $addform.='
'; $addform.=''; - $addform.=''; + $addform.=''; + $addform.=''; $addform.=''; $addform.=''; $addform.=''; From 0a1f4b793172dd29bc83256a72198ec1995ac885 Mon Sep 17 00:00:00 2001 From: atm-josselin Date: Tue, 23 Jul 2019 09:45:17 +0200 Subject: [PATCH 0301/1148] FIX : correct error in files with multiple spaces --- htdocs/core/lib/files.lib.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index fa1a5e50a50..ed169573117 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1540,6 +1540,11 @@ function dol_add_file_process($upload_dir, $allowoverwrite=0, $donotupdatesessio $info = pathinfo($destfile); $destfile = dol_sanitizeFileName($info['filename'].'.'.strtolower($info['extension'])); + // We apply dol_string_nohtmltag also to clean file names (this remove duplicate spaces) because + // this function is also applied when we make try to download file (by the GETPOST(filename, 'alphanohtml') call). + $destfile = dol_string_nohtmltag($destfile); + $destfull = dol_string_nohtmltag($destfull); + $resupload = dol_move_uploaded_file($TFile['tmp_name'][$i], $destfull, $allowoverwrite, 0, $TFile['error'][$i], 0, $varfiles); if (is_numeric($resupload) && $resupload > 0) // $resupload can be 'ErrorFileAlreadyExists' From c96ad85126b8b1e56e98fac016e48165d7a80fa4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 12:34:17 +0200 Subject: [PATCH 0302/1148] Add hidden option to avoid experimental to use export files feature --- htdocs/core/menus/standard/eldy.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 88595cd366a..4522d9067e0 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1285,7 +1285,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/accountancy/bookkeeping/balance.php?mainmenu=accountancy&leftmenu=accountancy_accountancy", $langs->trans("AccountBalance"), 1, $user->rights->accounting->mouvements->lire); // Files - if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) + if ((! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) || ! empty($conf->global->ACCOUNTANCY_SHOW_EXPORT_FILES_MENU)) { $newmenu->add("/compta/accounting-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 1, $user->rights->accounting->mouvements->lire); } From 8aaa716e33826408be6c035ae69e5d4e3ef44f61 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 13:05:33 +0200 Subject: [PATCH 0303/1148] Fix missing title --- htdocs/compta/journal/sellsjournal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php index 123bb3c7770..da85e28c612 100644 --- a/htdocs/compta/journal/sellsjournal.php +++ b/htdocs/compta/journal/sellsjournal.php @@ -87,7 +87,7 @@ if (empty($date_start) || empty($date_end)) // We define date_start and date_end $date_start=dol_get_first_day($pastmonthyear, $pastmonth, false); $date_end=dol_get_last_day($pastmonthyear, $pastmonth, false); } -$nom=$langs->trans("SellsJournal"); +$name=$langs->trans("SellsJournal"); $periodlink=''; $exportlink=''; $builddate=dol_now(); From 239b7d56b48f79d142c03ec39729fab0743f59c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 23 Jul 2019 13:31:00 +0200 Subject: [PATCH 0304/1148] Fix compatibility with plugins using old jquery --- htdocs/main.inc.php | 58 ++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 77f2a1f746f..b9b0204bf7e 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1862,34 +1862,38 @@ function top_menu_user(User $user, Translate $langs)
- - - - '; - + + '; + } return $btnUser; } From 46d0137d30c189904fec060ea8217f8aed435e9b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:04:54 +0200 Subject: [PATCH 0305/1148] FIx display civility in contact card --- htdocs/contact/class/contact.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index d6053a46b35..a8bd548fd8a 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -345,7 +345,7 @@ class Contact extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET "; if ($this->socid > 0) $sql .= " fk_soc='".$this->db->escape($this->socid)."',"; elseif ($this->socid == -1) $sql .= " fk_soc=null,"; - $sql .= " civility='".$this->db->escape($this->civility_id)."'"; + $sql .= " civility='".$this->db->escape($this->civility)."'"; $sql .= ", lastname='".$this->db->escape($this->lastname)."'"; $sql .= ", firstname='".$this->db->escape($this->firstname)."'"; $sql .= ", address='".$this->db->escape($this->address)."'"; @@ -1218,7 +1218,7 @@ class Contact extends CommonObject global $langs; $langs->load("dict"); - $code=(! empty($this->civility_id)?$this->civility_id:(! empty($this->civilite_id)?$this->civilite_id:'')); + $code=(! empty($this->civility_id)?$this->civility:(! empty($this->civilite)?$this->civilite:'')); if (empty($code)) return ''; return $langs->getLabelFromKey($this->db, "Civility".$code, "c_civility", "code", "label", $code); } From cc10f5e6840f201ca5374391b5fa4bbf47f3c7cb Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 23 Jul 2019 14:06:51 +0200 Subject: [PATCH 0306/1148] Update card.php --- htdocs/contact/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 97dd835bda0..12e2e1cb206 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -872,7 +872,7 @@ else // Civility print '
'; - print $formcompany->select_civility(isset($_POST["civility_id"])?GETPOST("civility_id"):$object->civility_id); + print $formcompany->select_civility(isset($_POST["civility"])?GETPOST("civility"):$object->civility_code); print '
'; - print $formcompany->select_civility(GETPOST("civility_id", 'alpha')?GETPOST("civility_id", 'alpha'):$object->civility_id); + print $formcompany->select_civility(GETPOST("civility", 'alpha')?GETPOST("civility", 'alpha'):$object->civility_code); print '
'.$langs->trans('Date').''.$langs->trans('Project').''.$form->textwithpicto($langs->trans('Project'), $langs->trans("ClosedProjectsAreHidden")).''.$langs->trans('CarCategory').''.$langs->trans('Type').''.$langs->trans('Description').''; - $formproject->select_projects(-1, $fk_projet, 'fk_projet', 0, 0, 1, 1, 0, 0, 0, '', 0, 0, 'maxwidth300'); + $formproject->select_projects(-1, $fk_projet, 'fk_projet', 0, 0, 1, -1, 0, 0, 0, '', 0, 0, 'maxwidth300'); print ''; print $thirdpartystatic->getNomUrl(1, 'customer', 44); print ''.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->total_ht).''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->tms), 'day').''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3, $obj->am).'
'.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->tms), 'day').''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3).'
'.$donationstatic->getNomUrl(1).''.$label.''.price($objp->amount).''.price($objp->amount).''.dol_print_date($db->jdate($objp->dm), 'day').''.$donationstatic->LibStatut($objp->fk_statut, 3).'
'.$chargestatic->getNomUrl(1).''.dol_print_date($db->jdate($obj->date_ech), 'day').''.price($obj->amount).''.price($obj->sumpaid).''.price($obj->amount).''.price($obj->sumpaid).''.$chargestatic->getLibStatut(3).'
'.$langs->trans("Total").''.price($tot_ttc).''.price($tot_ttc).' 
'.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->total_ttc-$obj->tot_fttc).''.price($obj->total_ttc).''.price($obj->total_ttc-$obj->tot_fttc).''.$commandestatic->LibStatut($obj->fk_statut, $obj->facture, 3).'
'.$langs->trans("Total").'   ('.$langs->trans("RemainderToBill").': '.price($tot_tobill).') '.price($tot_ht).''.price($tot_ttc).''.price($tot_tobill).''.price($tot_ttc).''.price($tot_tobill).' 

'; @@ -909,8 +909,8 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire) print '
'.dol_print_date($db->jdate($obj->datelimite), 'day').''.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->am).''.price($obj->total_ttc).''.price($obj->am).''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3, $obj->am).'
'.$langs->trans("Total").'   ('.$langs->trans("RemainderToTake").': '.price($total_ttc-$totalam).')  '.price($total).''.price($total_ttc).''.price($totalam).''.price($total_ttc).''.price($totalam).' 
'.$societestatic->getNomUrl(1, 'supplier', 44).''.dol_print_date($db->jdate($obj->date_lim_reglement), 'day').''.price($obj->total_ht).''.price($obj->total_ttc).''.price($obj->am).''.price($obj->total_ttc).''.price($obj->am).''.$facstatic->LibStatut($obj->paye, $obj->fk_statut, 3).'
'.$langs->trans("Total").'   ('.$langs->trans("RemainderToPay").': '.price($total_ttc-$totalam).')  '.price($total).''.price($total_ttc).''.price($totalam).''.price($total_ttc).''.price($totalam).' 
'.$langs->trans("GlobalSearchOnExtrafield").''; +print $form->selectyesno("activate_globalSearchOnExtrafield", (! empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD)?$conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD:0), 1); +print '
 
'; + print ''; if (isset($objp->price_base_type) && $objp->price_base_type == 'TTC') print price($objp->price_ttc).' '.$langs->trans("TTC"); else print price($objp->price).' '.$langs->trans("HT"); print '
'; if ($product_type==0) @@ -465,11 +466,11 @@ function activitytrim($product_type) if ($trim1+$trim2+$trim3+$trim4 > 0) { print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; $lgn++; } @@ -498,14 +499,14 @@ function activitytrim($product_type) if ($trim1+$trim2+$trim3+$trim4 > 0) { print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; + print ''; print ''; } if ($num > 0 ) - print '
'.$tmpyear.''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).'
'.$tmpyear.''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).''.price($trim1).''.price($trim2).''.price($trim3).''.price($trim4).''.price($trim1+$trim2+$trim3+$trim4).'
'; + print '
'; } } From ba60e99b45cc0d3097648d02ce28643c9f0b77fa Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 24 Jul 2019 13:22:41 +0200 Subject: [PATCH 0318/1148] Update card.php --- htdocs/contact/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index ff0c9f5cc98..76d0e3911b5 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -179,7 +179,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility_id", 'alpha'); + $object->civility_id = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); $object->zip = GETPOST("zipcode", 'alpha'); @@ -349,7 +349,7 @@ if (empty($reshook)) $object->socid = GETPOST("socid", 'int'); $object->lastname = GETPOST("lastname", 'alpha'); $object->firstname = GETPOST("firstname", 'alpha'); - $object->civility = GETPOST("civility_id", 'alpha'); + $object->civility_id = GETPOST("civility_id", 'alpha'); $object->poste = GETPOST("poste", 'alpha'); $object->address = GETPOST("address", 'alpha'); From c219b62b10ab4dc02b0fc47a399433f78a5ae2ad Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Wed, 24 Jul 2019 13:23:24 +0200 Subject: [PATCH 0319/1148] Update contact.class.php --- htdocs/contact/class/contact.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index a8bd548fd8a..f1ebeddd30e 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -345,7 +345,7 @@ class Contact extends CommonObject $sql = "UPDATE ".MAIN_DB_PREFIX."socpeople SET "; if ($this->socid > 0) $sql .= " fk_soc='".$this->db->escape($this->socid)."',"; elseif ($this->socid == -1) $sql .= " fk_soc=null,"; - $sql .= " civility='".$this->db->escape($this->civility)."'"; + $sql .= " civility='".$this->db->escape($this->civility_id)."'"; $sql .= ", lastname='".$this->db->escape($this->lastname)."'"; $sql .= ", firstname='".$this->db->escape($this->firstname)."'"; $sql .= ", address='".$this->db->escape($this->address)."'"; From 907ba62054ad3b60b6708fa94f9ce34df033ffe9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 24 Jul 2019 14:59:03 +0200 Subject: [PATCH 0320/1148] Sync transifex --- htdocs/langs/ar_SA/accountancy.lang | 1 + htdocs/langs/ar_SA/admin.lang | 13 +- htdocs/langs/ar_SA/bills.lang | 2 +- htdocs/langs/ar_SA/companies.lang | 3 +- htdocs/langs/ar_SA/other.lang | 2 + htdocs/langs/ar_SA/website.lang | 2 +- htdocs/langs/bg_BG/accountancy.lang | 1 + htdocs/langs/bg_BG/admin.lang | 1619 +++++++++++---------- htdocs/langs/bg_BG/agenda.lang | 112 +- htdocs/langs/bg_BG/banks.lang | 156 +- htdocs/langs/bg_BG/bills.lang | 242 +-- htdocs/langs/bg_BG/bookmarks.lang | 28 +- htdocs/langs/bg_BG/cashdesk.lang | 2 +- htdocs/langs/bg_BG/categories.lang | 160 +- htdocs/langs/bg_BG/commercial.lang | 88 +- htdocs/langs/bg_BG/companies.lang | 1 + htdocs/langs/bg_BG/compta.lang | 252 ++-- htdocs/langs/bg_BG/contracts.lang | 134 +- htdocs/langs/bg_BG/deliveries.lang | 37 +- htdocs/langs/bg_BG/dict.lang | 112 +- htdocs/langs/bg_BG/ecm.lang | 70 +- htdocs/langs/bg_BG/help.lang | 16 +- htdocs/langs/bg_BG/holiday.lang | 144 +- htdocs/langs/bg_BG/interventions.lang | 90 +- htdocs/langs/bg_BG/languages.lang | 49 +- htdocs/langs/bg_BG/link.lang | 12 +- htdocs/langs/bg_BG/mails.lang | 6 +- htdocs/langs/bg_BG/main.lang | 190 +-- htdocs/langs/bg_BG/margins.lang | 76 +- htdocs/langs/bg_BG/other.lang | 14 +- htdocs/langs/bg_BG/products.lang | 2 +- htdocs/langs/bg_BG/resource.lang | 20 +- htdocs/langs/bg_BG/salaries.lang | 8 +- htdocs/langs/bg_BG/stocks.lang | 14 +- htdocs/langs/bg_BG/supplier_proposal.lang | 2 +- htdocs/langs/bg_BG/suppliers.lang | 20 +- htdocs/langs/bg_BG/trips.lang | 28 +- htdocs/langs/bg_BG/website.lang | 2 +- htdocs/langs/bg_BG/workflow.lang | 28 +- htdocs/langs/bn_BD/accountancy.lang | 1 + htdocs/langs/bn_BD/admin.lang | 13 +- htdocs/langs/bn_BD/bills.lang | 2 +- htdocs/langs/bn_BD/companies.lang | 3 +- htdocs/langs/bn_BD/other.lang | 2 + htdocs/langs/bn_BD/website.lang | 2 +- htdocs/langs/bs_BA/accountancy.lang | 1 + htdocs/langs/bs_BA/admin.lang | 13 +- htdocs/langs/bs_BA/bills.lang | 2 +- htdocs/langs/bs_BA/companies.lang | 3 +- htdocs/langs/bs_BA/other.lang | 2 + htdocs/langs/bs_BA/website.lang | 2 +- htdocs/langs/ca_ES/accountancy.lang | 17 +- htdocs/langs/ca_ES/admin.lang | 81 +- htdocs/langs/ca_ES/bills.lang | 18 +- htdocs/langs/ca_ES/boxes.lang | 8 +- htdocs/langs/ca_ES/cashdesk.lang | 2 +- htdocs/langs/ca_ES/companies.lang | 1 + htdocs/langs/ca_ES/compta.lang | 8 +- htdocs/langs/ca_ES/errors.lang | 2 +- htdocs/langs/ca_ES/install.lang | 6 +- htdocs/langs/ca_ES/mails.lang | 6 +- htdocs/langs/ca_ES/members.lang | 2 +- htdocs/langs/ca_ES/other.lang | 12 +- htdocs/langs/ca_ES/products.lang | 2 +- htdocs/langs/ca_ES/projects.lang | 4 +- htdocs/langs/ca_ES/salaries.lang | 2 +- htdocs/langs/ca_ES/stocks.lang | 6 +- htdocs/langs/ca_ES/suppliers.lang | 12 +- htdocs/langs/ca_ES/website.lang | 4 +- htdocs/langs/ca_ES/withdrawals.lang | 6 +- htdocs/langs/cs_CZ/accountancy.lang | 1 + htdocs/langs/cs_CZ/admin.lang | 13 +- htdocs/langs/cs_CZ/bills.lang | 2 +- htdocs/langs/cs_CZ/companies.lang | 1 + htdocs/langs/cs_CZ/other.lang | 14 +- htdocs/langs/cs_CZ/website.lang | 2 +- htdocs/langs/da_DK/accountancy.lang | 1 + htdocs/langs/da_DK/admin.lang | 13 +- htdocs/langs/da_DK/bills.lang | 2 +- htdocs/langs/da_DK/companies.lang | 3 +- htdocs/langs/da_DK/other.lang | 2 + htdocs/langs/da_DK/website.lang | 2 +- htdocs/langs/de_AT/admin.lang | 1 + htdocs/langs/de_AT/companies.lang | 1 + htdocs/langs/de_CH/accountancy.lang | 26 +- htdocs/langs/de_CH/admin.lang | 115 +- htdocs/langs/de_CH/agenda.lang | 2 + htdocs/langs/de_CH/boxes.lang | 2 +- htdocs/langs/de_CH/categories.lang | 10 + htdocs/langs/de_CH/commercial.lang | 10 + htdocs/langs/de_CH/companies.lang | 78 +- htdocs/langs/de_CH/deliveries.lang | 13 +- htdocs/langs/de_CH/dict.lang | 7 + htdocs/langs/de_CH/errors.lang | 17 + htdocs/langs/de_CH/interventions.lang | 6 + htdocs/langs/de_CH/main.lang | 16 +- htdocs/langs/de_CH/members.lang | 10 + htdocs/langs/de_CH/orders.lang | 3 + htdocs/langs/de_CH/other.lang | 5 + htdocs/langs/de_CH/paybox.lang | 2 +- htdocs/langs/de_CH/printing.lang | 4 + htdocs/langs/de_CH/propal.lang | 4 + htdocs/langs/de_CH/users.lang | 1 + htdocs/langs/de_CH/website.lang | 1 + htdocs/langs/de_DE/accountancy.lang | 13 +- htdocs/langs/de_DE/admin.lang | 73 +- htdocs/langs/de_DE/bills.lang | 2 +- htdocs/langs/de_DE/companies.lang | 1 + htdocs/langs/de_DE/other.lang | 2 + htdocs/langs/de_DE/website.lang | 2 +- htdocs/langs/de_DE/workflow.lang | 22 +- htdocs/langs/el_GR/accountancy.lang | 1 + htdocs/langs/el_GR/admin.lang | 13 +- htdocs/langs/el_GR/bills.lang | 2 +- htdocs/langs/el_GR/companies.lang | 3 +- htdocs/langs/el_GR/other.lang | 2 + htdocs/langs/el_GR/website.lang | 2 +- htdocs/langs/en_AU/admin.lang | 2 + htdocs/langs/en_CA/admin.lang | 2 + htdocs/langs/en_GB/accountancy.lang | 3 +- htdocs/langs/en_GB/admin.lang | 2 + htdocs/langs/en_IN/admin.lang | 2 + htdocs/langs/es_CL/accountancy.lang | 60 +- htdocs/langs/es_CL/admin.lang | 524 ++++++- htdocs/langs/es_CL/agenda.lang | 17 + htdocs/langs/es_CL/assets.lang | 4 + htdocs/langs/es_CL/banks.lang | 21 +- htdocs/langs/es_CL/bills.lang | 83 ++ htdocs/langs/es_CL/bookmarks.lang | 9 +- htdocs/langs/es_CL/boxes.lang | 32 + htdocs/langs/es_CL/commercial.lang | 5 +- htdocs/langs/es_CL/companies.lang | 59 + htdocs/langs/es_CL/compta.lang | 13 + htdocs/langs/es_CL/ecm.lang | 4 +- htdocs/langs/es_CL/install.lang | 64 + htdocs/langs/es_CL/interventions.lang | 6 + htdocs/langs/es_CL/main.lang | 84 ++ htdocs/langs/es_CL/members.lang | 19 + htdocs/langs/es_CL/orders.lang | 16 + htdocs/langs/es_CL/other.lang | 54 + htdocs/langs/es_CL/products.lang | 45 + htdocs/langs/es_CL/projects.lang | 55 + htdocs/langs/es_CL/propal.lang | 3 + htdocs/langs/es_CL/receptions.lang | 28 + htdocs/langs/es_CL/stocks.lang | 59 +- htdocs/langs/es_CL/supplier_proposal.lang | 1 + htdocs/langs/es_CL/ticket.lang | 37 + htdocs/langs/es_CL/workflow.lang | 21 +- htdocs/langs/es_CO/admin.lang | 4 +- htdocs/langs/es_CO/bills.lang | 1 - htdocs/langs/es_DO/admin.lang | 2 + htdocs/langs/es_EC/admin.lang | 2 - htdocs/langs/es_ES/accountancy.lang | 13 +- htdocs/langs/es_ES/admin.lang | 75 +- htdocs/langs/es_ES/cashdesk.lang | 2 +- htdocs/langs/es_ES/companies.lang | 1 + htdocs/langs/es_ES/mails.lang | 6 +- htdocs/langs/es_ES/members.lang | 2 +- htdocs/langs/es_ES/other.lang | 2 + htdocs/langs/es_ES/products.lang | 2 +- htdocs/langs/es_ES/salaries.lang | 2 +- htdocs/langs/es_ES/stocks.lang | 6 +- htdocs/langs/es_ES/website.lang | 4 +- htdocs/langs/es_ES/withdrawals.lang | 4 +- htdocs/langs/es_MX/accountancy.lang | 3 +- htdocs/langs/es_MX/admin.lang | 3 +- htdocs/langs/es_PA/admin.lang | 2 + htdocs/langs/es_PE/accountancy.lang | 3 +- htdocs/langs/es_PE/admin.lang | 2 + htdocs/langs/es_VE/admin.lang | 2 + htdocs/langs/et_EE/accountancy.lang | 1 + htdocs/langs/et_EE/admin.lang | 225 +-- htdocs/langs/et_EE/agenda.lang | 118 +- htdocs/langs/et_EE/assets.lang | 54 +- htdocs/langs/et_EE/banks.lang | 20 +- htdocs/langs/et_EE/bills.lang | 56 +- htdocs/langs/et_EE/companies.lang | 5 +- htdocs/langs/et_EE/exports.lang | 100 +- htdocs/langs/et_EE/holiday.lang | 2 +- htdocs/langs/et_EE/interventions.lang | 2 +- htdocs/langs/et_EE/main.lang | 6 +- htdocs/langs/et_EE/orders.lang | 2 +- htdocs/langs/et_EE/other.lang | 2 + htdocs/langs/et_EE/products.lang | 2 +- htdocs/langs/et_EE/projects.lang | 2 +- htdocs/langs/et_EE/suppliers.lang | 22 +- htdocs/langs/et_EE/ticket.lang | 2 +- htdocs/langs/et_EE/website.lang | 2 +- htdocs/langs/eu_ES/accountancy.lang | 1 + htdocs/langs/eu_ES/admin.lang | 13 +- htdocs/langs/eu_ES/bills.lang | 2 +- htdocs/langs/eu_ES/companies.lang | 3 +- htdocs/langs/eu_ES/other.lang | 2 + htdocs/langs/eu_ES/website.lang | 2 +- htdocs/langs/fa_IR/accountancy.lang | 1 + htdocs/langs/fa_IR/admin.lang | 75 +- htdocs/langs/fa_IR/agenda.lang | 2 +- htdocs/langs/fa_IR/bills.lang | 10 +- htdocs/langs/fa_IR/companies.lang | 1 + htdocs/langs/fa_IR/main.lang | 12 +- htdocs/langs/fa_IR/other.lang | 2 + htdocs/langs/fa_IR/website.lang | 2 +- htdocs/langs/fi_FI/accountancy.lang | 1 + htdocs/langs/fi_FI/admin.lang | 13 +- htdocs/langs/fi_FI/bills.lang | 2 +- htdocs/langs/fi_FI/companies.lang | 3 +- htdocs/langs/fi_FI/other.lang | 2 + htdocs/langs/fi_FI/website.lang | 2 +- htdocs/langs/fr_BE/accountancy.lang | 3 +- htdocs/langs/fr_BE/admin.lang | 2 + htdocs/langs/fr_CA/accountancy.lang | 3 +- htdocs/langs/fr_CA/admin.lang | 3 +- htdocs/langs/fr_FR/accountancy.lang | 11 +- htdocs/langs/fr_FR/admin.lang | 77 +- htdocs/langs/fr_FR/bills.lang | 2 +- htdocs/langs/fr_FR/blockedlog.lang | 2 +- htdocs/langs/fr_FR/cashdesk.lang | 2 +- htdocs/langs/fr_FR/companies.lang | 1 + htdocs/langs/fr_FR/mails.lang | 6 +- htdocs/langs/fr_FR/main.lang | 2 +- htdocs/langs/fr_FR/members.lang | 2 +- htdocs/langs/fr_FR/mrp.lang | 2 +- htdocs/langs/fr_FR/other.lang | 4 +- htdocs/langs/fr_FR/products.lang | 2 +- htdocs/langs/fr_FR/salaries.lang | 2 +- htdocs/langs/fr_FR/stocks.lang | 6 +- htdocs/langs/fr_FR/website.lang | 6 +- htdocs/langs/fr_FR/withdrawals.lang | 4 +- htdocs/langs/he_IL/accountancy.lang | 1 + htdocs/langs/he_IL/admin.lang | 13 +- htdocs/langs/he_IL/bills.lang | 2 +- htdocs/langs/he_IL/companies.lang | 3 +- htdocs/langs/he_IL/other.lang | 2 + htdocs/langs/he_IL/website.lang | 2 +- htdocs/langs/hr_HR/accountancy.lang | 1 + htdocs/langs/hr_HR/admin.lang | 13 +- htdocs/langs/hr_HR/bills.lang | 2 +- htdocs/langs/hr_HR/companies.lang | 3 +- htdocs/langs/hr_HR/other.lang | 2 + htdocs/langs/hr_HR/website.lang | 2 +- htdocs/langs/hu_HU/accountancy.lang | 1 + htdocs/langs/hu_HU/admin.lang | 13 +- htdocs/langs/hu_HU/bills.lang | 2 +- htdocs/langs/hu_HU/companies.lang | 3 +- htdocs/langs/hu_HU/other.lang | 2 + htdocs/langs/hu_HU/website.lang | 2 +- htdocs/langs/id_ID/accountancy.lang | 1 + htdocs/langs/id_ID/admin.lang | 13 +- htdocs/langs/id_ID/bills.lang | 2 +- htdocs/langs/id_ID/companies.lang | 1 + htdocs/langs/id_ID/other.lang | 2 + htdocs/langs/id_ID/website.lang | 2 +- htdocs/langs/is_IS/accountancy.lang | 1 + htdocs/langs/is_IS/admin.lang | 13 +- htdocs/langs/is_IS/bills.lang | 2 +- htdocs/langs/is_IS/companies.lang | 3 +- htdocs/langs/is_IS/other.lang | 2 + htdocs/langs/is_IS/website.lang | 2 +- htdocs/langs/it_IT/accountancy.lang | 149 +- htdocs/langs/it_IT/admin.lang | 31 +- htdocs/langs/it_IT/banks.lang | 4 +- htdocs/langs/it_IT/bills.lang | 18 +- htdocs/langs/it_IT/boxes.lang | 10 +- htdocs/langs/it_IT/companies.lang | 9 +- htdocs/langs/it_IT/main.lang | 14 +- htdocs/langs/it_IT/members.lang | 2 +- htdocs/langs/it_IT/other.lang | 2 + htdocs/langs/it_IT/website.lang | 2 +- htdocs/langs/ja_JP/accountancy.lang | 1 + htdocs/langs/ja_JP/admin.lang | 13 +- htdocs/langs/ja_JP/bills.lang | 2 +- htdocs/langs/ja_JP/companies.lang | 3 +- htdocs/langs/ja_JP/other.lang | 2 + htdocs/langs/ja_JP/website.lang | 2 +- htdocs/langs/ka_GE/accountancy.lang | 1 + htdocs/langs/ka_GE/admin.lang | 13 +- htdocs/langs/ka_GE/bills.lang | 2 +- htdocs/langs/ka_GE/companies.lang | 3 +- htdocs/langs/ka_GE/other.lang | 2 + htdocs/langs/ka_GE/website.lang | 2 +- htdocs/langs/kn_IN/accountancy.lang | 1 + htdocs/langs/kn_IN/admin.lang | 13 +- htdocs/langs/kn_IN/bills.lang | 2 +- htdocs/langs/kn_IN/companies.lang | 3 +- htdocs/langs/kn_IN/other.lang | 2 + htdocs/langs/kn_IN/website.lang | 2 +- htdocs/langs/ko_KR/accountancy.lang | 1 + htdocs/langs/ko_KR/admin.lang | 13 +- htdocs/langs/ko_KR/bills.lang | 2 +- htdocs/langs/ko_KR/companies.lang | 3 +- htdocs/langs/ko_KR/other.lang | 2 + htdocs/langs/ko_KR/website.lang | 2 +- htdocs/langs/lo_LA/accountancy.lang | 1 + htdocs/langs/lo_LA/admin.lang | 13 +- htdocs/langs/lo_LA/bills.lang | 2 +- htdocs/langs/lo_LA/companies.lang | 3 +- htdocs/langs/lo_LA/other.lang | 2 + htdocs/langs/lo_LA/website.lang | 2 +- htdocs/langs/lt_LT/accountancy.lang | 1 + htdocs/langs/lt_LT/admin.lang | 13 +- htdocs/langs/lt_LT/bills.lang | 2 +- htdocs/langs/lt_LT/companies.lang | 3 +- htdocs/langs/lt_LT/other.lang | 2 + htdocs/langs/lt_LT/website.lang | 2 +- htdocs/langs/lv_LV/accountancy.lang | 13 +- htdocs/langs/lv_LV/admin.lang | 75 +- htdocs/langs/lv_LV/bills.lang | 2 +- htdocs/langs/lv_LV/cashdesk.lang | 2 +- htdocs/langs/lv_LV/companies.lang | 1 + htdocs/langs/lv_LV/mails.lang | 6 +- htdocs/langs/lv_LV/members.lang | 2 +- htdocs/langs/lv_LV/other.lang | 2 + htdocs/langs/lv_LV/products.lang | 2 +- htdocs/langs/lv_LV/salaries.lang | 2 +- htdocs/langs/lv_LV/stocks.lang | 6 +- htdocs/langs/lv_LV/website.lang | 4 +- htdocs/langs/lv_LV/withdrawals.lang | 4 +- htdocs/langs/mk_MK/accountancy.lang | 1 + htdocs/langs/mk_MK/admin.lang | 13 +- htdocs/langs/mk_MK/bills.lang | 2 +- htdocs/langs/mk_MK/companies.lang | 3 +- htdocs/langs/mk_MK/other.lang | 2 + htdocs/langs/mk_MK/website.lang | 2 +- htdocs/langs/mn_MN/accountancy.lang | 1 + htdocs/langs/mn_MN/admin.lang | 13 +- htdocs/langs/mn_MN/bills.lang | 2 +- htdocs/langs/mn_MN/companies.lang | 3 +- htdocs/langs/mn_MN/other.lang | 2 + htdocs/langs/mn_MN/website.lang | 2 +- htdocs/langs/nb_NO/accountancy.lang | 13 +- htdocs/langs/nb_NO/admin.lang | 79 +- htdocs/langs/nb_NO/bills.lang | 2 +- htdocs/langs/nb_NO/cashdesk.lang | 2 +- htdocs/langs/nb_NO/companies.lang | 1 + htdocs/langs/nb_NO/mails.lang | 6 +- htdocs/langs/nb_NO/members.lang | 2 +- htdocs/langs/nb_NO/other.lang | 136 +- htdocs/langs/nb_NO/products.lang | 2 +- htdocs/langs/nb_NO/salaries.lang | 2 +- htdocs/langs/nb_NO/stocks.lang | 6 +- htdocs/langs/nb_NO/website.lang | 4 +- htdocs/langs/nb_NO/withdrawals.lang | 4 +- htdocs/langs/nl_BE/accountancy.lang | 1 - htdocs/langs/nl_BE/admin.lang | 16 +- htdocs/langs/nl_BE/agenda.lang | 16 + htdocs/langs/nl_BE/contracts.lang | 18 + htdocs/langs/nl_BE/interventions.lang | 1 + htdocs/langs/nl_BE/ticket.lang | 14 + htdocs/langs/nl_NL/accountancy.lang | 1 + htdocs/langs/nl_NL/admin.lang | 13 +- htdocs/langs/nl_NL/bills.lang | 20 +- htdocs/langs/nl_NL/companies.lang | 1 + htdocs/langs/nl_NL/other.lang | 2 + htdocs/langs/nl_NL/website.lang | 2 +- htdocs/langs/pl_PL/accountancy.lang | 1 + htdocs/langs/pl_PL/admin.lang | 13 +- htdocs/langs/pl_PL/bills.lang | 2 +- htdocs/langs/pl_PL/companies.lang | 3 +- htdocs/langs/pl_PL/other.lang | 2 + htdocs/langs/pl_PL/website.lang | 2 +- htdocs/langs/pt_BR/accountancy.lang | 2 +- htdocs/langs/pt_BR/admin.lang | 1 - htdocs/langs/pt_PT/accountancy.lang | 1 + htdocs/langs/pt_PT/admin.lang | 13 +- htdocs/langs/pt_PT/bills.lang | 2 +- htdocs/langs/pt_PT/companies.lang | 3 +- htdocs/langs/pt_PT/other.lang | 2 + htdocs/langs/pt_PT/website.lang | 2 +- htdocs/langs/ro_RO/accountancy.lang | 1 + htdocs/langs/ro_RO/admin.lang | 13 +- htdocs/langs/ro_RO/bills.lang | 2 +- htdocs/langs/ro_RO/companies.lang | 3 +- htdocs/langs/ro_RO/other.lang | 2 + htdocs/langs/ro_RO/website.lang | 2 +- htdocs/langs/ru_RU/accountancy.lang | 37 +- htdocs/langs/ru_RU/admin.lang | 1145 +++++++-------- htdocs/langs/ru_RU/bills.lang | 10 +- htdocs/langs/ru_RU/blockedlog.lang | 24 +- htdocs/langs/ru_RU/bookmarks.lang | 16 +- htdocs/langs/ru_RU/boxes.lang | 90 +- htdocs/langs/ru_RU/cashdesk.lang | 26 +- htdocs/langs/ru_RU/categories.lang | 62 +- htdocs/langs/ru_RU/commercial.lang | 26 +- htdocs/langs/ru_RU/companies.lang | 159 +- htdocs/langs/ru_RU/compta.lang | 4 +- htdocs/langs/ru_RU/contracts.lang | 7 +- htdocs/langs/ru_RU/cron.lang | 26 +- htdocs/langs/ru_RU/dict.lang | 14 +- htdocs/langs/ru_RU/donations.lang | 6 +- htdocs/langs/ru_RU/ecm.lang | 8 +- htdocs/langs/ru_RU/help.lang | 2 +- htdocs/langs/ru_RU/holiday.lang | 4 +- htdocs/langs/ru_RU/hrm.lang | 4 +- htdocs/langs/ru_RU/main.lang | 316 ++-- htdocs/langs/ru_RU/orders.lang | 2 +- htdocs/langs/ru_RU/other.lang | 4 +- htdocs/langs/ru_RU/resource.lang | 2 +- htdocs/langs/ru_RU/salaries.lang | 24 +- htdocs/langs/ru_RU/stocks.lang | 4 +- htdocs/langs/ru_RU/suppliers.lang | 16 +- htdocs/langs/ru_RU/ticket.lang | 8 +- htdocs/langs/ru_RU/trips.lang | 4 +- htdocs/langs/ru_RU/users.lang | 66 +- htdocs/langs/ru_RU/website.lang | 6 +- htdocs/langs/ru_RU/workflow.lang | 28 +- htdocs/langs/sk_SK/accountancy.lang | 1 + htdocs/langs/sk_SK/admin.lang | 13 +- htdocs/langs/sk_SK/bills.lang | 2 +- htdocs/langs/sk_SK/companies.lang | 3 +- htdocs/langs/sk_SK/other.lang | 2 + htdocs/langs/sk_SK/website.lang | 2 +- htdocs/langs/sl_SI/accountancy.lang | 1 + htdocs/langs/sl_SI/admin.lang | 13 +- htdocs/langs/sl_SI/bills.lang | 2 +- htdocs/langs/sl_SI/companies.lang | 3 +- htdocs/langs/sl_SI/other.lang | 2 + htdocs/langs/sl_SI/website.lang | 2 +- htdocs/langs/sq_AL/accountancy.lang | 1 + htdocs/langs/sq_AL/admin.lang | 13 +- htdocs/langs/sq_AL/bills.lang | 2 +- htdocs/langs/sq_AL/companies.lang | 3 +- htdocs/langs/sq_AL/other.lang | 2 + htdocs/langs/sq_AL/website.lang | 2 +- htdocs/langs/sr_RS/accountancy.lang | 1 + htdocs/langs/sr_RS/admin.lang | 13 +- htdocs/langs/sr_RS/bills.lang | 2 +- htdocs/langs/sr_RS/companies.lang | 3 +- htdocs/langs/sr_RS/other.lang | 2 + htdocs/langs/sv_SE/accountancy.lang | 1 + htdocs/langs/sv_SE/admin.lang | 13 +- htdocs/langs/sv_SE/bills.lang | 2 +- htdocs/langs/sv_SE/companies.lang | 3 +- htdocs/langs/sv_SE/other.lang | 54 +- htdocs/langs/sv_SE/website.lang | 2 +- htdocs/langs/sw_SW/accountancy.lang | 1 + htdocs/langs/sw_SW/admin.lang | 13 +- htdocs/langs/sw_SW/bills.lang | 2 +- htdocs/langs/sw_SW/companies.lang | 3 +- htdocs/langs/sw_SW/other.lang | 2 + htdocs/langs/th_TH/accountancy.lang | 1 + htdocs/langs/th_TH/admin.lang | 13 +- htdocs/langs/th_TH/bills.lang | 2 +- htdocs/langs/th_TH/companies.lang | 3 +- htdocs/langs/th_TH/other.lang | 2 + htdocs/langs/th_TH/website.lang | 2 +- htdocs/langs/tr_TR/accountancy.lang | 1 + htdocs/langs/tr_TR/admin.lang | 31 +- htdocs/langs/tr_TR/agenda.lang | 2 +- htdocs/langs/tr_TR/assets.lang | 12 +- htdocs/langs/tr_TR/banks.lang | 84 +- htdocs/langs/tr_TR/bills.lang | 4 +- htdocs/langs/tr_TR/categories.lang | 2 +- htdocs/langs/tr_TR/companies.lang | 1 + htdocs/langs/tr_TR/compta.lang | 4 +- htdocs/langs/tr_TR/contracts.lang | 4 +- htdocs/langs/tr_TR/cron.lang | 6 +- htdocs/langs/tr_TR/errors.lang | 4 +- htdocs/langs/tr_TR/install.lang | 2 +- htdocs/langs/tr_TR/interventions.lang | 2 +- htdocs/langs/tr_TR/mails.lang | 10 +- htdocs/langs/tr_TR/main.lang | 16 +- htdocs/langs/tr_TR/orders.lang | 2 +- htdocs/langs/tr_TR/other.lang | 2 + htdocs/langs/tr_TR/products.lang | 12 +- htdocs/langs/tr_TR/projects.lang | 10 +- htdocs/langs/tr_TR/propal.lang | 2 +- htdocs/langs/tr_TR/resource.lang | 4 +- htdocs/langs/tr_TR/supplier_proposal.lang | 2 +- htdocs/langs/tr_TR/ticket.lang | 2 +- htdocs/langs/tr_TR/trips.lang | 2 +- htdocs/langs/tr_TR/users.lang | 10 +- htdocs/langs/tr_TR/website.lang | 6 +- htdocs/langs/uk_UA/accountancy.lang | 1 + htdocs/langs/uk_UA/admin.lang | 13 +- htdocs/langs/uk_UA/bills.lang | 2 +- htdocs/langs/uk_UA/companies.lang | 3 +- htdocs/langs/uk_UA/other.lang | 2 + htdocs/langs/uk_UA/website.lang | 2 +- htdocs/langs/uz_UZ/accountancy.lang | 1 + htdocs/langs/uz_UZ/admin.lang | 13 +- htdocs/langs/uz_UZ/bills.lang | 2 +- htdocs/langs/uz_UZ/companies.lang | 3 +- htdocs/langs/uz_UZ/other.lang | 2 + htdocs/langs/vi_VN/accountancy.lang | 1 + htdocs/langs/vi_VN/admin.lang | 27 +- htdocs/langs/vi_VN/bills.lang | 2 +- htdocs/langs/vi_VN/companies.lang | 3 +- htdocs/langs/vi_VN/main.lang | 2 +- htdocs/langs/vi_VN/other.lang | 2 + htdocs/langs/vi_VN/website.lang | 2 +- htdocs/langs/zh_CN/accountancy.lang | 1 + htdocs/langs/zh_CN/admin.lang | 13 +- htdocs/langs/zh_CN/bills.lang | 2 +- htdocs/langs/zh_CN/companies.lang | 3 +- htdocs/langs/zh_CN/other.lang | 2 + htdocs/langs/zh_CN/website.lang | 2 +- htdocs/langs/zh_TW/accountancy.lang | 1 + htdocs/langs/zh_TW/admin.lang | 13 +- htdocs/langs/zh_TW/bills.lang | 2 +- htdocs/langs/zh_TW/companies.lang | 3 +- htdocs/langs/zh_TW/other.lang | 2 + htdocs/langs/zh_TW/website.lang | 2 +- 502 files changed, 6347 insertions(+), 4399 deletions(-) diff --git a/htdocs/langs/ar_SA/accountancy.lang b/htdocs/langs/ar_SA/accountancy.lang index 738d9106e6f..1cdb76f1100 100644 --- a/htdocs/langs/ar_SA/accountancy.lang +++ b/htdocs/langs/ar_SA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ar_SA/admin.lang b/htdocs/langs/ar_SA/admin.lang index 8a5ed0b5304..1cbca5d3f51 100644 --- a/htdocs/langs/ar_SA/admin.lang +++ b/htdocs/langs/ar_SA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=رابط إلى كائن ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=إنشاء / تعديل الخدمات Permission534=حذف خدمات Permission536=انظر / إدارة الخدمات الخفية Permission538=تصدير الخدمات -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=قراءة التبرعات Permission702=إنشاء / تعديل والهبات Permission703=حذف التبرعات @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ar_SA/bills.lang b/htdocs/langs/ar_SA/bills.lang index 6b5fc0f0a3c..2984cd416a7 100644 --- a/htdocs/langs/ar_SA/bills.lang +++ b/htdocs/langs/ar_SA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=الفاتورة الأولية InvoiceProFormaDesc= الفاتورة المبدئية عبارة عن صورة فاتورة حقيقية ولكنها لا تحتوي على قيمة للمحاسبة. InvoiceReplacement=استبدال الفاتورة InvoiceReplacementAsk=فاتورة استبدال الفاتورة -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=ملاحظة ائتمانية InvoiceAvoirAsk=ملاحظة ائتمانية لتصحيح الفاتورة InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ar_SA/companies.lang b/htdocs/langs/ar_SA/companies.lang index 060ea2565d6..f7e393cad21 100644 --- a/htdocs/langs/ar_SA/companies.lang +++ b/htdocs/langs/ar_SA/companies.lang @@ -28,7 +28,7 @@ AliasNames=الاسم المستعار (التجارية، العلامات ال AliasNameShort=Alias Name Companies=الشركات CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=بلا Vendor=Vendor +Supplier=Vendor AddContact=إنشاء اتصال AddContactAddress=إنشاء الاتصال / عنوان EditContact=تحرير الاتصال / عنوان diff --git a/htdocs/langs/ar_SA/other.lang b/htdocs/langs/ar_SA/other.lang index c694d08bbe6..551689b875a 100644 --- a/htdocs/langs/ar_SA/other.lang +++ b/htdocs/langs/ar_SA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=التدخل ٪ ق المصادق EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ar_SA/website.lang b/htdocs/langs/ar_SA/website.lang index 1cf5f878abd..c1895cc0b84 100644 --- a/htdocs/langs/ar_SA/website.lang +++ b/htdocs/langs/ar_SA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/bg_BG/accountancy.lang b/htdocs/langs/bg_BG/accountancy.lang index 09f1de20348..671bcc70f07 100644 --- a/htdocs/langs/bg_BG/accountancy.lang +++ b/htdocs/langs/bg_BG/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/bg_BG/admin.lang b/htdocs/langs/bg_BG/admin.lang index 5d092654c17..3e25a421f3f 100644 --- a/htdocs/langs/bg_BG/admin.lang +++ b/htdocs/langs/bg_BG/admin.lang @@ -5,137 +5,137 @@ Publisher=Издател VersionProgram=Версия на програмата VersionLastInstall=Първоначално инсталирана версия VersionLastUpgrade=Последно инсталирана версия -VersionExperimental=Експериментален -VersionDevelopment=Разработка -VersionUnknown=Неизвестен -VersionRecommanded=Препоръчва се -FileCheck=Проверки за цялостност на файлове -FileCheckDesc=Този инструмент ви позволява да проверите целостта на файловете и настройката на вашето приложение, сравнявайки всеки файл с официалния. Може да се провери и стойността на някои константи за настройка. Може да използвате този инструмент, за да определите дали някой файл е бил променен (напр. от хакер). +VersionExperimental=Експериментална +VersionDevelopment=В разработка +VersionUnknown=Неизвестна +VersionRecommanded=Препоръчителна +FileCheck=Интегритет +FileCheckDesc=Този инструмент позволява да проверите целостта на файловете и настройката на вашата система, сравнявайки всеки файл с оригиналния. Може да се провери стойността на някои константи за настройка. Може да използвате този инструмент, за да определите дали някой файл е бил променен (например от хакер). FileIntegrityIsStrictlyConformedWithReference=Целостта на файловете е строго съобразена с референцията. -FileIntegrityIsOkButFilesWereAdded=Проверката за целостта на файловете премина, но някои нови файлове са добавени. -FileIntegritySomeFilesWereRemovedOrModified=Проверката за цялостта на файловете е неуспешна. Някои файлове са били променени, премахнати или добавени. +FileIntegrityIsOkButFilesWereAdded=Проверката за целостта на файловете премина успешно, но са добавени някои нови файлове. +FileIntegritySomeFilesWereRemovedOrModified=Проверката за целостта на файловете е неуспешна. Някои файлове са били променени, премахнати или добавени. GlobalChecksum=Глобална контролна сума -MakeIntegrityAnalysisFrom=Извършване на анализ за целостта на файловете на приложението от +MakeIntegrityAnalysisFrom=Извършване на анализ за целостта на файловете в системата от LocalSignature=Вграден локален подпис (по-малко надежден) RemoteSignature=Отдалечен подпис (по-надежден) -FilesMissing=Missing Files -FilesUpdated=Updated Files +FilesMissing=Липсващи файлове +FilesUpdated=Актуализирани файлове FilesModified=Променени файлове FilesAdded=Добавени файлове -FileCheckDolibarr=Проверка целостта на файловете в приложението -AvailableOnlyOnPackagedVersions=Локалният файл за проверка на целостта е наличен, само когато приложението е инсталирано от официален пакет -XmlNotFound=XML файлът за проверка на приложението не е намерен -SessionId=ID на сесията -SessionSaveHandler=Handler за да запазите сесията -SessionSavePath=Място за съхранение на сесията -PurgeSessions=Изчистване на сесиите -ConfirmPurgeSessions=Сигурни ли сте, че желаете да изчистите всички сесии? Това ще прекъсне всички потребители (освен Вас). -NoSessionListWithThisHandler=Запаметяващия манипулатор на сесия, конфигуриран във вашия PHP, не позволява изброяване на всички стартирани сесии. -LockNewSessions=Заключване за нови свързвания -ConfirmLockNewSessions=Сигурни ли сте, че искате да ограничите всяка нова Dolibarr връзка към себе си? Само потребителят %s ще може да се свърже след това. +FileCheckDolibarr=Проверка целостта на файловете в системата +AvailableOnlyOnPackagedVersions=Локалният файл за проверка на целостта е наличен, само когато системата е инсталирана от официален пакет. +XmlNotFound=XML файлът за проверка на системата не е намерен +SessionId=Идентификатор на сесия +SessionSaveHandler=Манипулатор за съхраняване на сесии +SessionSavePath=Място за съхранение на сесия +PurgeSessions=Разчистване на сесиите +ConfirmPurgeSessions=Сигурни ли сте, че искате да разчистите всички сесии? Това ще прекъсне всички потребители (освен Вас). +NoSessionListWithThisHandler=Манипулатора за съхранение на сесии, конфигуриран във вашия PHP, не позволява изброяване на всички стартирани сесии. +LockNewSessions=Блокиране на нови свързвания +ConfirmLockNewSessions=Сигурни ли сте, че искате да ограничите всяка нова Dolibarr връзка, освен своята? Само потребител %s ще може да се свърже след това. UnlockNewSessions=Разрешаване на свързването YourSession=Вашата сесия Sessions=Потребителски сесии -WebUserGroup=Уеб сървър потребител/група -NoSessionFound=Изглежда, че вашата PHP конфигурация не позволява изброяване на активни сесии. Директорията, използвана за запазване на сесии ( %s ), може да бъде защитена (например от разрешения на операционната система или от директивата PHP open_basedir). -DBStoringCharset=Кодиране на знаците за съхраняваните данни в базата данни -DBSortingCharset=Набор от знаци база данни, за да сортирате данните +WebUserGroup=Уеб сървър потребител / група +NoSessionFound=Изглежда, че вашата PHP конфигурация не позволява изброяване на активни сесии. Директорията, използвана за запазване на сесии ( %s ), може да е защитена (например от права на операционната система или от директивата PHP open_basedir). +DBStoringCharset=Кодиране на знаците при съхраняване в базата данни +DBSortingCharset=Кодиране на знаците при сортиране в базата данни ClientCharset=Кодиране от страна на клиента ClientSortingCharset=Съпоставяне от страна на клиента -WarningModuleNotActive=Модула %s трябва да бъде включен -WarningOnlyPermissionOfActivatedModules=Само разрешения, свързани с активирани модули са показани тук. Можете да активирате други модули в страницата Начало->Настройки->Модули. -DolibarrSetup=Dolibarr инсталиране или обновяване +WarningModuleNotActive=Модул %s е необходимо да бъде включен +WarningOnlyPermissionOfActivatedModules=Само разрешения, свързани с активните модули са показани тук. Може да активирате други модули в страницата Начало -> Настройки -> Модули / Приложения +DolibarrSetup=Dolibarr инсталиране / обновяване InternalUser=Вътрешен потребител ExternalUser=Външен потребител InternalUsers=Вътрешни потребители ExternalUsers=Външни потребители GUISetup=Екран SetupArea=Настройки -UploadNewTemplate=Качване на нов шаблон(и) -FormToTestFileUploadForm=Форма за тестване качване на файлове (за настройка) +UploadNewTemplate=Качване на нов(и) шаблон(и) +FormToTestFileUploadForm=Формуляр за тестване на качването на файлове (според настройката) IfModuleEnabled=Забележка: Ефективно е само ако модула %s е активиран -RemoveLock=Премахнете / преименувайте файла %s , ако съществува, за да разрешите използването на инструмента за актуализиране / инсталиране. -RestoreLock=Възстановете файла %s само с разрешение за четене, за да забраните по-нататъшното използване на инструмента за актуализиране / инсталиране. +RemoveLock=Премахнете / преименувайте файла %s , ако съществува, за да разрешите използването на инструмента за инсталиране / актуализиране. +RestoreLock=Възстановете файла %s само с права за четене, за да забраните по-нататъшното използване на инструмента за инсталиране / актуализиране. SecuritySetup=Настройки на сигурността -SecurityFilesDesc=Определете тук опциите, свързани със сигурността, относно качването на файлове. -ErrorModuleRequirePHPVersion=Грешка, този модул изисква PHP версия %s или по-висока -ErrorModuleRequireDolibarrVersion=Грешка, този модул изисква Dolibarr версия %s или по-висока +SecurityFilesDesc=Дефинирайте тук параметрите, свързани със сигурността, относно качването на файлове. +ErrorModuleRequirePHPVersion=Грешка, този модул изисква PHP версия %s или по-висока. +ErrorModuleRequireDolibarrVersion=Грешка, този модул изисква Dolibarr версия %s или по-висока. ErrorDecimalLargerThanAreForbidden=Грешка, точност по-висока от %s не се поддържа. -DictionarySetup=Dictionary setup -Dictionary=Dictionaries -ErrorReservedTypeSystemSystemAuto=Стойност 'система' и 'автосистема' за типа са запазени. Може да използвате за стойност 'потребител' при добавяне на ваш личен запис. -ErrorCodeCantContainZero=Кода не може да съдържа стойност 0 +DictionarySetup=Настройка на речници +Dictionary=Речници +ErrorReservedTypeSystemSystemAuto=Стойностите "system" и "systemauto" за тип са резервирани. Може да използвате "user" като стойност, за да добавите свой собствен запис. +ErrorCodeCantContainZero=Кодът не може да съдържа стойност 0 DisableJavascript=Изключване на Java скрипт и Ajax функции DisableJavascriptNote=Забележка: За тестови цели или за отстраняване на грешки. За оптимизация за слепи хора или текстови браузъри може използвате настройката в потребителския профил -UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. -UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. +UseSearchToSelectCompanyTooltip=Също така, ако имате голям брой контрагенти (> 100 000) може да увеличите скоростта като зададете стойност 1 за константата COMPANY_DONOTSEARCH_ANYWHERE в Настройки -> Други настройки. След това търсенето ще бъде ограничено до началото на низ. +UseSearchToSelectContactTooltip=Също така, ако имате голям брой контакти (> 100 000) може да увеличите скоростта като зададете стойност 1 за константата CONTACT_DONOTSEARCH_ANYWHERE в Настройки -> Други настройки. След това търсенето ще бъде ограничено до началото на низ. DelaiedFullListToSelectCompany=Изчаква натискането на клавиш, преди да зареди съдържание в списъка с контрагенти.
Това може да увеличи производителността, ако имате голям брой контрагенти, но е по-малко удобно. DelaiedFullListToSelectContact=Изчаква натискането на клавиш, преди да зареди съдържание в списъка с контакти.
Това може да увеличи производителността, ако имате голям брой контакти, но е по-малко удобно NumberOfKeyToSearch=Брой знаци предизвикващи търсене: %s NumberOfBytes=Брой байтове SearchString=Низ за търсене -NotAvailableWhenAjaxDisabled=Не е налично, когато Аякс инвалиди +NotAvailableWhenAjaxDisabled=Не е налице, когато Ajax е деактивиран AllowToSelectProjectFromOtherCompany=В документ на контрагент може да бъде избран проект, свързан с друг контрагент -JavascriptDisabled=Java скрипт е забранен -UsePreviewTabs=Използвайте Преглед раздели -ShowPreview=Покажи преглед -PreviewNotAvailable=Preview не е наличен -ThemeCurrentlyActive=Тема активни в момента -CurrentTimeZone=TimeZone PHP (сървър) -MySQLTimeZone=TimeZone MySql (database) +JavascriptDisabled=JavaScript е деактивиран +UsePreviewTabs=Използвайте разделите за преглед +ShowPreview=Показване на преглед +PreviewNotAvailable=Прегледът не е налице +ThemeCurrentlyActive=Темата е активна в момента +CurrentTimeZone=Времева зона на PHP (сървър) +MySQLTimeZone=Времева зона на MySql (база данни) TZHasNoEffect=Датите се съхраняват и връщат от сървъра на базата данни така, сякаш се съхраняват като подаден низ. Часовата зона има ефект само когато се използва функцията UNIX_TIMESTAMP (която не трябва да се използва от Dolibarr, така че базата данни TZ не трябва да има ефект, дори ако бъде променена след въвеждането на данните). Space=Пространство Table=Таблица -Fields=Полетата +Fields=Полета Index=Индекс Mask=Маска NextValue=Следваща стойност NextValueForInvoices=Следваща стойност (фактури) NextValueForCreditNotes=Следваща стойност (кредитни известия) -NextValueForDeposit=Следваща стойност (авансово плащане) -NextValueForReplacements=Next value (replacements) -MustBeLowerThanPHPLimit=Забележка: Вашата PHP конфигурация понастоящем ограничава максималния размер на файловете за качване до %s %s, независимо от стойността на този параметър -NoMaxSizeByPHPLimit=Забележка: Не срокът се определя в конфигурацията на вашия PHP -MaxSizeForUploadedFiles=Максимален размер за качените файлове (0 за да забраните качване) -UseCaptchaCode=Използвайте графичен код (CAPTCHA) на страницата за вход -AntiVirusCommand= Пълна пътека до антивирусен команда -AntiVirusCommandExample= Пример за ClamWin: C: \\ програма ~ 1 \\ ClamWin \\ Bin \\ clamscan.exe
Пример за ClamAV: / ЮЕсАр / хамбар / clamscan -AntiVirusParam= Още параметри на командния ред -AntiVirusParamExample= Пример за ClamWin: - база данни = "C: \\ Program Files (x86) \\ ClamWin \\ ИЪ" -ComptaSetup=Настройка на счетоводния модул -UserSetup=Настройки за управление на потребителите -MultiCurrencySetup=Настройки на няколко валути +NextValueForDeposit=Следваща стойност (авансови плащания) +NextValueForReplacements=Следваща стойност (замествания) +MustBeLowerThanPHPLimit=Забележка: Вашата PHP конфигурация понастоящем ограничава максималния размер на файловете за качване до %s %s, независимо от стойността на този параметър. +NoMaxSizeByPHPLimit=Забележка: Не е зададено ограничение във вашата PHP конфигурация +MaxSizeForUploadedFiles=Максимален размер за качени файлове (0 за забрана на качването) +UseCaptchaCode=Използване на графичен код (CAPTCHA) на страницата за вход +AntiVirusCommand= Пълен път към антивирусна команда +AntiVirusCommandExample= Пример за ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe
Пример за ClamAv: /usr/bin/clamscan +AntiVirusParam= Още параметри в командния ред +AntiVirusParamExample= Пример за ClamWin: --database="C:\\Programm Files (x86)\\ClamWin\\lib" +ComptaSetup=Настройка на модул Счетоводство +UserSetup=Настройка за управление на потребители +MultiCurrencySetup=Настройки на различни валути MenuLimits=Граници и точност -MenuIdParent=ID майка меню -DetailMenuIdParent=ID на основното меню (0 за горното меню) -DetailPosition=Брой Сортиране, за да определи позицията на менюто +MenuIdParent=Идентификатор на основно меню +DetailMenuIdParent=Идентификатор на основно меню (празно за главно меню) +DetailPosition=Номер за сортиране, за определяне на позицията на менюто AllMenus=Всички NotConfigured=Модулът / приложението не е конфигуриран(о) Active=Активен -SetupShort=Настройки +SetupShort=Настройка OtherOptions=Други опции OtherSetup=Други настройки CurrentValueSeparatorDecimal=Десетичен разделител -CurrentValueSeparatorThousand=Thousand сепаратор -Destination=Destination -IdModule=Module ID -IdPermissions=Permissions ID +CurrentValueSeparatorThousand=Хиляден разделител +Destination=Дестинация +IdModule=Идентификатор на модул +IdPermissions=Идентификатор на разрешения LanguageBrowserParameter=Параметър %s LocalisationDolibarrParameters=Параметри на локализация ClientTZ=Часова зона на клиента (потребител) -ClientHour=Час на клиента (потребител) -OSTZ=Часова зона на Операционната Система -PHPTZ=Часова зона на PHP Сървъра -DaylingSavingTime=Лятното часово време -CurrentHour=Час на PHP (сървър) -CurrentSessionTimeOut=Продължителност на текущата сесия +ClientHour=Клиентско време (потребител) +OSTZ=Часова зона на ОС на сървъра +PHPTZ=Часова зона на PHP сървъра +DaylingSavingTime=Лятно часово време +CurrentHour=Време на PHP (сървър) +CurrentSessionTimeOut=Продължителност на текуща сесия YouCanEditPHPTZ=За да зададете различна PHP часова зона (не се изисква), може да опитате да добавите .htaccess файл с ред като този 'SetEnv TZ Europe/Paris' HoursOnThisPageAreOnServerTZ=Внимание, в противоречие с други екрани, часовете на тази страница не са в местната часова зона, а в часовата зона на сървъра. Box=Джаджа Boxes=Джаджи MaxNbOfLinesForBoxes=Максимален брой редове за джаджи AllWidgetsWereEnabled=Всички налични джаджи са активирани -PositionByDefault=Default order +PositionByDefault=Позиция по подразбиране Position=Длъжност MenusDesc=Меню мениджърите определят съдържанието на двете ленти с менюта (хоризонтална и вертикална). MenusEditorDesc=Редакторът на менюто ви позволява да дефинирате потребителски менюта. Използвайте го внимателно, за да избегнете нестабилност и трайно недостъпни менюта.
Някои модули добавят менюта (най-вече в менюто Всички). Ако премахнете някои от тези менюта по погрешка, можете да ги възстановите като деактивирате и да активирате отново модула. @@ -144,64 +144,64 @@ LangFile=.lang файл Language_en_US_es_MX_etc=Език (en_US, es_MX, ...) System=Система SystemInfo=Системна информация -SystemToolsArea=Системни инструменти +SystemToolsArea=Секция със системни инструменти SystemToolsAreaDesc=Тази секция осигурява административни функции. Използвайте менюто, за да изберете необходимата функционалност. -Purge=Изчистване +Purge=Разчистване PurgeAreaDesc=Тази страница ви позволява да изтриете всички файлове, генерирани или съхранени от Dolibarr (временни файлове или всички файлове в директорията %s). Използването на тази функция обикновено не е необходимо. Той се предоставя като решение за потребители, чиито Dolibarr се хоства от доставчик, който не предлага разрешения за изтриване на файлове, генерирани от уеб сървъра. PurgeDeleteLogFile=Изтриване на лог файлове, включително %s генериран от Debug Logs модула (няма риск от загуба на данни) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Изтриване на всички временни файлове (няма риск от загуба на данни). Забележка: Изтриването се извършва, само ако директорията temp е създадена преди 24 часа. PurgeDeleteTemporaryFilesShort=Изтриване на временни файлове PurgeDeleteAllFilesInDocumentsDir=Изтриване на всички файлове в директорията: %s.
Това ще изтрие всички генерирани документи, свързани с елементи (контрагенти, фактури и т.н.), файлове, качени чрез ECM модула, архиви на базата данни и временни файлове. -PurgeRunNow=Изчистване сега +PurgeRunNow=Разчисти сега PurgeNothingToDelete=Няма директория или файлове за изтриване. PurgeNDirectoriesDeleted=%s изтрити файлове или директории. PurgeNDirectoriesFailed=Неуспешно изтриване на %s файлове или директории. -PurgeAuditEvents=Поръси всички събития по сигурността +PurgeAuditEvents=Разчистване на всички събития свързани със сигурността ConfirmPurgeAuditEvents=Сигурни ли сте, че искате да изчистите всички събития свързани със сигурността? Всички записи за сигурността ще бъдат изтрити, други данни няма да бъдат премахнати. -GenerateBackup=Генериране на бекъп -Backup=Бекъп +GenerateBackup=Генериране на архивно копие +Backup=Архивиране Restore=Възстановяване -RunCommandSummary=Backup стартира със следната команда -BackupResult=Backup резултат -BackupFileSuccessfullyCreated=Backup файл, генериран успешно +RunCommandSummary=Архивирането е стартирано със следната команда +BackupResult=Резултат от архивиране +BackupFileSuccessfullyCreated=Архивиращият файл е успешно генериран YouCanDownloadBackupFile=Генерираният файл вече може да бъде изтеглен -NoBackupFileAvailable=Няма налични бекъпи. -ExportMethod=Тип на експортирането -ImportMethod=Внос метод -ToBuildBackupFileClickHere=За изграждането на резервно копие на файла, натиснете тук . +NoBackupFileAvailable=Няма налични архивни копия +ExportMethod=Метод за експортиране +ImportMethod=Метод за импортиране +ToBuildBackupFileClickHere=За да създадете архивен файл, кликнете тук. ImportMySqlDesc=За да импортирате архив на MySQL може да използвате phpMyAdmin, чрез вашия хостинг или да използвате MySQL команда в терминала.
Например: -ImportPostgreSqlDesc=За да импортирате архивния файл, трябва да използвате pg_restore команда от командния ред: +ImportPostgreSqlDesc=За да импортирате архивен файл, трябва да използвате pg_restore команда от командния ред: ImportMySqlCommand=%s %s < mybackupfile.sql ImportPostgreSqlCommand=%s %s mybackupfile.sql FileNameToGenerate=Име на архивния файл: Compression=Компресия -CommandsToDisableForeignKeysForImport=Command to disable foreign keys on import -CommandsToDisableForeignKeysForImportWarning=Задължително, ако искате да сте в състояние да възстановите SQL дъмп по-късно -ExportCompatibility=Compatibility of generated export file -MySqlExportParameters=Параметри на MySQL експортирането -PostgreSqlExportParameters= Параметрите на PostgreSQL износ -UseTransactionnalMode=Use transactional mode -FullPathToMysqldumpCommand=Пълния път до mysqldump командата -FullPathToPostgreSQLdumpCommand=Пълна пътека до pg_dump команда -AddDropDatabase=Добави DROP DATABASE команда -AddDropTable=Add DROP TABLE command +CommandsToDisableForeignKeysForImport=Команда за деактивиране на външните ключове при импортиране +CommandsToDisableForeignKeysForImportWarning=Задължително, ако искате да възстановите по-късно вашия SQL dump +ExportCompatibility=Съвместимост на генерирания експортиран файл +MySqlExportParameters=Параметри за експортиране на MySQL +PostgreSqlExportParameters= Параметри за експортиране на PostgreSQL +UseTransactionnalMode=Използване на транзакционен режим +FullPathToMysqldumpCommand=Пълен път до командата mysqldump +FullPathToPostgreSQLdumpCommand=Пълен път до командата pg_dump +AddDropDatabase=Добавяне на команда DROP DATABASE +AddDropTable=Добавяне на команда DROP TABLE ExportStructure=Структура -NameColumn=Name columns -ExtendedInsert=Extended INSERT -NoLockBeforeInsert=No lock commands around INSERT -DelayedInsert=Delayed insert -EncodeBinariesInHexa=Encode binary data in hexadecimal +NameColumn=Имена на колони +ExtendedInsert=Разширен INSERT +NoLockBeforeInsert=Няма команди за заключване около INSERT +DelayedInsert=Закъснял INSERT +EncodeBinariesInHexa=Кодиране на двоични данни в шестнадесетичен формат IgnoreDuplicateRecords=Игнориране на грешки при дублиране на записите (INSERT IGNORE) AutoDetectLang=Автоматично (език на браузъра) -FeatureDisabledInDemo=Feature инвалиди в демо +FeatureDisabledInDemo=Функцията е деактивирана в демо режим FeatureAvailableOnlyOnStable=Функцията се предлага само в официални стабилни версии BoxesDesc=Джаджите са компоненти, показващи информация, които може да добавите, за да персонализирате някои страници. Можете да избирате между показване на джаджата или не, като изберете целевата страница и кликнете върху 'Активиране', или като кликнете върху кошчето, за да я деактивирате. -OnlyActiveElementsAreShown=Показани са само елементи от активирани модули. +OnlyActiveElementsAreShown=Показани са само елементи от активни модули. ModulesDesc=Модулите / приложенията определят кои функции са налични в системата. Някои модули изискват да се предоставят съответните разрешения на потребителите след активиране на модула. Кликнете върху бутона за включване / изключване (в края на реда с името на модула), за да активирате / деактивирате модул / приложение. ModulesMarketPlaceDesc=Може да намерите още модули за изтегляне от външни уеб сайтове в интернет... ModulesDeployDesc=Ако разрешенията във вашата файлова система го позволяват, можете да използвате този инструмент за инсталиране на външен модул. След това модулът ще се вижда в раздела %s. -ModulesMarketPlaces=Намиране на външно приложение/модул -ModulesDevelopYourModule=Разработване на собствено приложение/модул +ModulesMarketPlaces=Намиране на външно приложение / модул +ModulesDevelopYourModule=Разработване на собствено приложение / модул ModulesDevelopDesc=Може също така да разработите свой собствен модул или да намерите партньор, който да го разработи за вас. DOLISTOREdescriptionLong=Вместо да превключите към www.dolistore.com уебсайта, за да намерите външен модул, може да използвате този вграден инструмент, който ще извърши търсенето в страницата вместо вас (може да е бавно, нуждаете се от интернет достъп) ... NewModule=Нов @@ -209,50 +209,50 @@ FreeModule=Свободен CompatibleUpTo=Съвместим с версия %s NotCompatible=Този модул не изглежда съвместим с Dolibarr %s (Мин. %s - Макс. %s). CompatibleAfterUpdate=Този модул изисква актуализация на вашия Dolibarr %s (Min %s - Max %s). -SeeInMarkerPlace=Вижте в сайта за покупка +SeeInMarkerPlace=Вижте в онлайн магазина Updated=Актуализиран Nouveauté=Новост AchatTelechargement=Купуване / Изтегляне GoModuleSetupArea=За да разположите / инсталирате нов модул, отидете в секцията за настройка на модул: %s. -DoliStoreDesc=DoliStore, официалният пазар за външни модули за Dolibarr ERP/CRM +DoliStoreDesc=DoliStore, официалният пазар за Dolibarr ERP / CRM външни модули DoliPartnersDesc=Списък на компаниите, които предоставят разработване по поръчка модули или функции.
Забележка: тъй като Dolibarr е приложение с отворен код, всеки , който има опит в програмирането на PHP, може да разработи модул. WebSiteDesc=Външни уебсайтове за повече модули за добавки (които не са основни)... DevelopYourModuleDesc=Някои решения за разработване на ваш собствен модул... URL=Връзка BoxesAvailable=Налични джаджи BoxesActivated=Активирани джаджи -ActivateOn=Активиране на -ActiveOn=Активирана -SourceFile=Изходният файл -AvailableOnlyIfJavascriptAndAjaxNotDisabled=Предлага се само ако JavaScript не е забранен +ActivateOn=Активирай на +ActiveOn=Активирано на +SourceFile=Изходен файл +AvailableOnlyIfJavascriptAndAjaxNotDisabled=На разположение е само, ако JavaScript не е деактивиран Required=Задължително -UsedOnlyWithTypeOption=Used by some agenda option only +UsedOnlyWithTypeOption=Използва се само от някаква опция на календара Security=Сигурност Passwords=Пароли DoNotStoreClearPassword=Криптиране на пароли, съхранявани в базата данни (НЕ като обикновен текст). Силно се препоръчва да активирате тази опция. MainDbPasswordFileConfEncrypted=Криптиране на паролата за базата данни, съхранена в conf.php. Силно се препоръчва да активирате тази опция. -InstrucToEncodePass=To have password encoded into the conf.php file, replace the line
$dolibarr_main_db_pass="...";
by
$dolibarr_main_db_pass="crypted:%s"; -InstrucToClearPass=To have password decoded (clear) into the conf.php file, replace the line
$dolibarr_main_db_pass="crypted:...";
by
$dolibarr_main_db_pass="%s"; +InstrucToEncodePass=За да кодирате парола, във файла conf.php заменете реда
$dolibarr_main_db_pass="...";
с
$dolibarr_main_db_pass="crypted:%s"; +InstrucToClearPass=За да декодирате парола, във файла conf.php заменете реда
$dolibarr_main_db_pass="crypted:...";
с
$dolibarr_main_db_pass="%s"; ProtectAndEncryptPdfFiles=Защитаване на генерирани PDF файлове. Това НЕ се препоръчва, тъй като прекъсва генерирането на общ PDF. ProtectAndEncryptPdfFilesDesc=Защитата на PDF документ го запазва за четене и печат с всеки PDF браузър. Редактирането и копирането обаче вече не са възможни. Имайте предвид, че използването на тази функция прави изграждането на глобално обединени PDF файлове невъзможно. Feature=Особеност DolibarrLicense=Лиценз -Developpers=Разработчици/сътрудници +Developpers=Разработчици / сътрудници OfficialWebSite=Официален уеб сайт на Dolibarr -OfficialWebSiteLocal=Local web site (%s) +OfficialWebSiteLocal=Локален уеб сайт (%s) OfficialWiki=Документация за Dolibarr / Wiki OfficialDemo=Dolibarr онлайн демо -OfficialMarketPlace=Официален магазин за външни модули/добавки -OfficialWebHostingService=Препоръчителен уеб хостинг услуги (хостинг в интернет облак) -ReferencedPreferredPartners=Preferred Partners +OfficialMarketPlace=Официален онлайн магазин за външни модули / добавки +OfficialWebHostingService=Уеб хостинг услуги (облачни услуги) +ReferencedPreferredPartners=Предпочитани партньори OtherResources=Други ресурси ExternalResources=Външни ресурси SocialNetworks=Социални мрежи -ForDocumentationSeeWiki=Документация за потребител или разработчик (Doc, често задавани въпроси ...),
можете да намерите в Dolibarr Wiki:
%s -ForAnswersSeeForum=За всякакви други въпроси / Помощ, можете да използвате форума Dolibarr:
%s +ForDocumentationSeeWiki=За потребителска документация и такава за разработчици (документи, често задавани въпроси,...),
погледнете в Dolibarr Wiki:
%s +ForAnswersSeeForum=За всякакви други въпроси / помощ може да използвате Dolibarr форума:
%s HelpCenterDesc1=Ето някои ресурси за получаване на помощ и подкрепа с Dolibarr. HelpCenterDesc2=Някои от тези ресурси са налице само на английски . -CurrentMenuHandler=Текущото меню манипулатор +CurrentMenuHandler=Текущ манипулатор на менюто MeasuringUnit=Мерна единица LeftMargin=Лява граница TopMargin=Горна граница @@ -293,27 +293,27 @@ MAIN_MAIL_SMS_FROM=Телефонен номер по подразбиране MAIN_MAIL_DEFAULT_FROMTYPE=Имейл на подателя по подразбиране при ръчно изпращане на имейли (имейл на потребител или имейл на фирмата) UserEmail=Имейл на потребител CompanyEmail=Имейл на фирмата -FeatureNotAvailableOnLinux=Функцията не е на разположение на Unix подобни системи. Тествайте вашата програма Sendmail на местно ниво. +FeatureNotAvailableOnLinux=Функцията не е налична в Unix подобни системи. Тествайте вашата програма Sendmail локално. SubmitTranslation=Ако преводът за този език не е завършен или сте открили грешки, може да ги коригирате като редактирате файловете в директорията langs/ %s и предоставите вашите промени в www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Ако преводът за този език не е завършен или ако сте открили грешки, може да коригирате това, като редактирате файлове в директорията langs/ %s и предоставите вашите промени на dolibarr.org/forum или за разработчици на github.com/Dolibarr/dolibarr. -ModuleSetup=Настройки на модул +ModuleSetup=Настройка на модул ModulesSetup=Настройка на Модули / Приложения ModuleFamilyBase=Система ModuleFamilyCrm=Управление на взаимоотношения с клиенти (CRM) ModuleFamilySrm=Управление на взаимоотношения с доставчици (VRM) ModuleFamilyProducts=Управление на продукти (PM) -ModuleFamilyHr=Управление на човешките ресурси -ModuleFamilyProjects=Проекти / съвместна работа -ModuleFamilyOther=Друг -ModuleFamilyTechnic=Mutli модули инструменти +ModuleFamilyHr=Управление на човешки ресурси (ЧР) +ModuleFamilyProjects=Проекти / Съвместна работа +ModuleFamilyOther=Други +ModuleFamilyTechnic=Мулти-модулни инструменти ModuleFamilyExperimental=Експериментални модули -ModuleFamilyFinancial=Финансови Модули (Счетоводство/Каса) -ModuleFamilyECM=Електронно Управление на Съдържанието (ECM) +ModuleFamilyFinancial=Финансови модули (Счетоводство / Каса) +ModuleFamilyECM=Управление на електронно съдържание (ECM) ModuleFamilyPortal=Уеб сайтове и други фронтални приложения -ModuleFamilyInterface=Интерфейси със външни системи. -MenuHandlers=Меню работещи -MenuAdmin=Menu Editor -DoNotUseInProduction=Не използвайте на продукшън платформа +ModuleFamilyInterface=Интерфейси с външни системи +MenuHandlers=Меню манипулатори +MenuAdmin=Меню редактор +DoNotUseInProduction=Да не се използва в производство ThisIsProcessToFollow=Процедура за актуализация: ThisIsAlternativeProcessToFollow=Това е алтернативна настройка за ръчно обработване: StepNb=Стъпка %s @@ -332,52 +332,52 @@ LastStableVersion=Последна стабилна версия LastActivationDate=Последна дата на активиране LastActivationAuthor=Последен автор на активирането LastActivationIP=Последно активиране от IP адрес -UpdateServerOffline=Update server offline +UpdateServerOffline=Актуализиране на сървъра офлайн WithCounter=Управление на брояч -GenericMaskCodes=Можете да въведете всяка маска за номериране. В тази маска, могат да се използват следните тагове:
{000000} съответства на номер, който се увеличава на всеки %s. Влез като много нули като желаната дължина на брояча. Броячът ще бъде завършен с нули от ляво, за да има колкото се може повече нули като маска.
{000000 000} същата като предишната, но компенсира, съответстваща на броя на правото на знака + се прилага започва на първи %s.
{000000 @} същата като предишната, но броячът се нулира, когато месеца Х е достигнал (Х между 1 и 12, или 0, за да използвате началото на месеца на фискалната година, определени в вашата конфигурация). Ако тази опция се използва и х е 2 или по-висока, тогава последователност {гг} {mm} или {гггг} {mm} също е задължително.
{DD} ден (01 до 31).
{Mm} месец (01 до 12).
{Гг} {гггг} или {Y} година над 2, 4 или 1 брой.
+GenericMaskCodes=Може да въведете всяка маска за номериране. В тази маска, могат да се използват следните тагове:
{000000} съответства на номер, който ще се увеличава на всеки %s. Въведете толкова нули, колкото е желаната дължина на брояча. Броячът ще бъде запълнен с нули от ляво, за да има толкова нули, колкото и в маската.
{000000+000} същото като в предишния случай, но започва отместване, съответстващо на номера отдясно на знака +, считано от първия %s.
{000000@x} същото като в предишния случай, но броячът се нулира, когато месецът Х е достигнат (Х между 1 и 12, или 0, за да използвате началото на месеца на фискалната година, определени в вашата конфигурация или 99, за да нулирате брояча всеки месец). Ако тази опция се използва и X е 2 или по-висока, to тогава последователностa {гг}{mm} или {гггг}{mm} също е задължителна.
{дд} ден (01 до 31).
{мм} месец (01 до 12).
{гг}, {гггг} година от 2 или 4 цифри.
GenericMaskCodes2= {cccc} клиентският код на n знака
{cccc000} клиентският код на n знака е последван от брояч, предназначен за клиента. Този брояч е предназначен за клиента и се нулира едновременно от глобалния брояч.
{tttt} Кодът на контрагента с n знака (вижте менюто Начало - Настройка - Речник - Видове контрагенти). Ако добавите този таг, броячът ще бъде различен за всеки тип контрагент.
-GenericMaskCodes3=Всички други символи на маската ще останат непокътнати.
Интервалите не са разрешени.
+GenericMaskCodes3=Всички други символи в маската ще останат непокътнати.
Не са разрешени интервали.
GenericMaskCodes4a= Пример за 99-я %s контрагент TheCompany, с дата 2007-01-31:
-GenericMaskCodes4b=Пример за контрагент е създаден на 2007-03-01:
+GenericMaskCodes4b=Пример за контрагент, създаден на 2007-03-01:
GenericMaskCodes4c=Пример за продукт, създаден на 2007-03-01:
GenericMaskCodes5=ABC{yy}{mm}-{000000} ще даде ABC0701-000099
{0000+100@1}-ZZZ/{dd}/XXX ще даде 0199-ZZZ/31/XXX
IN{yy}{mm}-{0000}-{t} ще даде IN0701-0099-A Ако типа на фирмата е 'Responsable Inscripto' с код за този тип, който е 'A_RI' -GenericNumRefModelDesc=Върнете адаптивни номер според определен маска. -ServerAvailableOnIPOrPort=Сървъра е достъпен на адрес %s , порт %s -ServerNotAvailableOnIPOrPort=Сървъра не е достъпен на адрес %s , порт %s -DoTestServerAvailability=Тестване на сързаността със сървъра -DoTestSend=Тестване изпращането -DoTestSendHTML=Тестване изпращането на HTML -ErrorCantUseRazIfNoYearInMask=Error, can't use option @ to reset counter each year if sequence {yy} or {yyyy} is not in mask. -ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Грешка, не могат да използват @ опция, ако последователност {гг} {mm} или {гггг} {mm} не е маска. -UMask=Umask параметър за нови файлове в Unix / Linux / BSD файловата система. -UMaskExplanation=Този параметър ви позволи да се определят правата, определени по подразбиране на файлове, създадени от Dolibarr на сървъра (по време на качването например).
Тя трябва да бъде осмична стойност (например, 0666 средства четат и пишат за всеки).
Този параметър е безполезно на предприятието на сървъра на Windows. +GenericNumRefModelDesc=Връща персонализирано число според определена маска. +ServerAvailableOnIPOrPort=Сървърът е достъпен на адрес %s с порт %s +ServerNotAvailableOnIPOrPort=Сървърът не е достъпен на адрес %s с порт %s +DoTestServerAvailability=Тестване на връзката със сървъра +DoTestSend=Тестово изпращане +DoTestSendHTML=Тестово изпращане на HTML +ErrorCantUseRazIfNoYearInMask=Грешка, не може да се използва опция @, за да нулирате брояча всяка година, ако последователността {yy} или {yyyy} не е в маската. +ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Грешка, не може да се използва опция @, ако последователността {yy}{mm} или {yyyy}{mm} не са в маската. +UMask=UMask параметър за нови файлове на Unix / Linux / BSD / Mac файлова система. +UMaskExplanation=Този параметър ви позволява да дефинирате права, зададени по подразбиране на файлове, които са създадени от Dolibarr на сървъра (например при качване).
Необходимо е да бъде в осмична стойност (например 0666 означава четене и запис за всички).
Този параметър е безполезен на Windows сървър. SeeWikiForAllTeam=Разгледайте страницата на Wiki за списък на сътрудниците и тяхната организация -UseACacheDelay= Забавяне за кеширане износ отговор в секунда (0 или празно за не кеш) -DisableLinkToHelpCenter=Скриване на връзката Нуждаете се от помощ или поддръжка от страницата за вход -DisableLinkToHelp=Скриване на линка към онлайн помощ "%s" +UseACacheDelay= Забавяне при кеширане на отговора за експорт в секунди (0 или празно, за да не се използва кеш) +DisableLinkToHelpCenter=Скриване на връзка „Нуждаете се от помощ или поддръжка?“ в страницата за вход +DisableLinkToHelp=Скриване на връзка към онлайн помощ "%s" AddCRIfTooLong=Няма автоматично пренасяне на текст, текстът, който е твърде дълъг, няма да се показва на документи. Моля, добавете нови редове в текста, ако е необходимо. ConfirmPurge=Наистина ли искате да изпълните това прочистване?
Това ще изтрие за постоянно всичките ви файлове с данни без начин да ги възстановите (ECM файлове, прикачени файлове ...). MinLength=Минимална дължина -LanguageFilesCachedIntoShmopSharedMemory=Файлове. Lang заредени в споделена памет +LanguageFilesCachedIntoShmopSharedMemory=Файлове .lang са заредени в споделена памет LanguageFile=Езиков файл ExamplesWithCurrentSetup=Примери с текуща конфигурация -ListOfDirectories=Списък на OpenDocument директории шаблони -ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. +ListOfDirectories=Списък на директории с OpenDocument шаблони +ListOfDirectoriesForModelGenODT=Списък на директории, съдържащи файлове с шаблони във формат OpenDocument.

Попълнете тук пълния път на директориите.
Добавете нов ред за всяка директория.
За да включите директория на GED модула, добавете тук DOL_DATA_ROOT/ecm/yourdirectoryname.

Файловете в тези директории трябва да завършват на .odt или .ods. NumberOfModelFilesFound=Брой файлове с шаблони за ODT/ODS, намерени в тези директории -ExampleOfDirectoriesForModelGen=Примери на синтаксиса:
C: \\ mydir
/ Начало / mydir
DOL_DATA_ROOT / ECM / ecmdir -FollowingSubstitutionKeysCanBeUsed=
За да разберете как да създадете свои ODT шаблони на документи, преди да ги съхранявате в тези указатели, прочетете уики документация: +ExampleOfDirectoriesForModelGen=Примери за синтаксис:
C:\\mydir
/home/mydir
DOL_DATA_ROOT/ecm/ecmdir +FollowingSubstitutionKeysCanBeUsed=
За да узнаете как да създадете вашите ODT шаблони за документи преди да ги съхраните в тези директории прочетете Wiki документацията: FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template -FirstnameNamePosition=Позиция на Име/Фамилия +FirstnameNamePosition=Позиция на име / фамилия DescWeather=Следните изображения ще бъдат показани на таблото, когато броят на закъснелите действия достигне следните стойности: -KeyForWebServicesAccess=Ключът към използване на Web Services (параметър "dolibarrkey" в WebServices) -TestSubmitForm=Формата на входящ тест +KeyForWebServicesAccess=Ключ за използване на уеб услуги (параметър "dolibarrkey" в уеб услуги) +TestSubmitForm=Формуляр за тестване на входа ThisForceAlsoTheme=С използването на този меню мениджър ще се използва и собствената му тема независимо от избора на потребителя. Също така специализирания за смартфони меню мениджър може да не работи на всички смартфони. Използвайте друг мениджър на менюто, ако имате проблеми с вашия. -ThemeDir=Директория с темите +ThemeDir=Директория с теми ConnectionTimeout=Прекъсване на връзката -ResponseTimeout=Отговор изчакване -SmsTestMessage=Тест съобщение от __ PHONEFROM__ __ PHONETO__ -ModuleMustBeEnabledFirst=Модул %s трябва да бъде активиран първо ако се нуждаете от тази опция. -SecurityToken=Ключът за осигуряване на сигурна URL адреси +ResponseTimeout=Таймаут на отговора +SmsTestMessage=Тестово съобщение от __PHONEFROM__ до __PHONETO__ +ModuleMustBeEnabledFirst=Модулът %s трябва да бъде активиран първо, ако имате нужда от тази функция. +SecurityToken=Ключ за защитени URL адреси NoSmsEngine=Няма наличен мениджър за подател на SMS. Мениджърът на подателя на SMS не е инсталиран по подразбиране, защото зависи от външен доставчик, но можете да намерите някои от тях на адрес %s PDF=PDF PDFDesc=Глобални настройки за генериране на PDF. @@ -391,14 +391,14 @@ HideRefOnPDF=Скриване на реф. номер на продукти HideDetailsOnPDF=Скриване на подробности за продуктовите линии PlaceCustomerAddressToIsoLocation=Използвайте френска стандартна позиция (La Poste) за позиция на клиентския адрес Library=Библиотека -UrlGenerationParameters=Параметри за осигуряване на URL адреси -SecurityTokenIsUnique=Използвайте уникална параметър securekey за всеки URL -EnterRefToBuildUrl=Въведете справка за обект %s -GetSecuredUrl=Изчислява URL +UrlGenerationParameters=Параметри за защитени URL адреси +SecurityTokenIsUnique=Използвайте уникален параметър за защитен ключ за всеки URL адрес +EnterRefToBuildUrl=Въведете референция за обект %s +GetSecuredUrl=Получете изчисления URL адрес ButtonHideUnauthorized=Скриване на бутоните за потребители, които не са администратори, вместо показване на сиви бутони. -OldVATRates=Old ставка на ДДС -NewVATRates=Нов ставка на ДДС -PriceBaseTypeToChange=Промяна на цените с база референтна стойност, определена на +OldVATRates=Първоначална ставка на ДДС +NewVATRates=Нова ставка на ДДС +PriceBaseTypeToChange=Промяна на цените с базова референтна стойност, определена на MassConvert=Стартиране на групово превръщане String=Низ TextLong=Дълъг текст @@ -406,22 +406,24 @@ HtmlText=HTML текст Int=Цяло число Float=Десетично число DateAndTime=Дата и час -Unique=Уникално +Unique=Уникален Boolean=Булева (едно квадратче за отметка) ExtrafieldPhone = Телефон ExtrafieldPrice = Цена ExtrafieldMail = Имейл ExtrafieldUrl = URL -ExtrafieldSelect = Избор лист -ExtrafieldSelectList = Избор от таблица +ExtrafieldSelect = Изберете списък +ExtrafieldSelectList = Изберете от таблицата ExtrafieldSeparator=Разделител (не е поле) ExtrafieldPassword=Парола ExtrafieldRadio=Радио бутони (само един избор) ExtrafieldCheckBox=Полета за отметка ExtrafieldCheckBoxFromList=Отметки от таблица -ExtrafieldLink=Link to an object +ExtrafieldLink=Връзка към обект ComputedFormula=Изчислено поле ComputedFormulaDesc=Тук можете да въведете формула, използвайки други свойства на обекта или PHP код, за да получите динамична изчислена стойност. Можете да използвате всички съвместими с PHP формули, включително "?" условен оператор и следния глобален обект: $db, $conf, $langs, $mysoc, $user, $object.
ВНИМАНИЕ: Може да са налице само някои свойства на $object. Ако ви трябват свойства, които не са заредени, просто вземете сами обекта във вашата формула като във втория пример.
Използването на изчислено поле означава, че не можете да въведете никаква стойност от интерфейса. Също така, ако има синтактична грешка, формулата може да не върне нищо.

Пример за формула:
$object->id<10 ? round($object>id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($ mysoc->zip, 1, 2)

Пример за презареждане на обект
(($reloadedobj = new Societe ($db)) && ($reloadedobj->fetch ($obj->id ? $obj->id:($ obj->rowid ? $obj->rowid: $object->id )) > 0)) ? $reloadedobj->array_options ['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Друг пример за формула за натоварване на обекта и неговия главен обект:
(($reloadedobj = new Task ($db)) && ($reloadedobj->fetch ($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch ($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Запазване на изчисленото поле +ComputedpersistentDesc=Изчислените допълнителни полета ще бъдат съхранени в базата данни, но стойността ще бъде преизчислена само когато обектът на това поле бъде променен. Ако изчисленото поле зависи от други обекти или глобални данни, тази стойност може да е грешна!! ExtrafieldParamHelpPassword=Оставяйки това поле празно означава, че тази стойност ще бъде съхранена без криптиране (полето трябва да бъде скрито само със звезда на екрана).
Задайте „auto“, за да използвате правилото за криптиране по подразбиране, за да запазите паролата в базата данни (тогава стойността за четене ще бъде само за хеш, няма начин да извлечете оригиналната стойност) ExtrafieldParamHelpselect=Списъкът със стойности трябва да бъде във формат key,value (където key не може да бъде '0';)

например:
1,value1
2,value2
code3,value3
...

За да имате списъка в зависимост от друг допълнителен списък с атрибути:
1,value1|options_ parent_list_code:parent_key
2,value2|options_ parent_list_code:parent_key

За да имате списъка в зависимост от друг списък:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=Списъкът със стойности трябва да бъде във формат key,value (където key не може да бъде '0')

например:
1,value1
2,value2
3,value3
... @@ -429,24 +431,25 @@ ExtrafieldParamHelpradio=Списъкът със стойности трябва ExtrafieldParamHelpsellist=Списъкът на стойностите идва от таблица
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent: libelle:id::filter

- idfilter е задължително основен int key
- филтърът може да бъде прост тест (например active = 1), за да се покаже само активна стойност
Може също да използвате $ID$ във филтъра, който е текущият идентификатор на текущия обект.
За да направите SELECT във филтъра, използвайте $SEL$
ако искате да филтрирате по допълнителни полета, използвайте синтаксис extra.fieldcode=...(където кодът на полето е кодът на допълнителното поле)

За да имате списъка в зависимост от друг допълнителен списък с атрибути:
c_typent:libelle:id:options_ parent_list_code|parent_column:филтер

За да имате списъка в зависимост от друг списък:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Списъкът на стойностите идва от таблица
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent:libelle:id::filter

филтърът може да бъде прост тест (например active = 1), за да се покаже само активна стойност
Можете също да използвате $ID$ във филтъра, който е текущият идентификатор на текущия обект
За да направите SELECT във филтъра, използвайте $SEL$
ако искате да филтрирате по допълнителни полета, използвайте синтаксис extra.fieldcode=...(където кодът на полето е кодът на екстра полето)

За да имате списъка в зависимост от друг допълнителен списък с атрибути:
c_typent:libelle:id:options_ parent_list_code|parent_column:filter

За да имате списъка в зависимост от друг списък:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Параметрите трябва да са ObjectName:Classpath
Синтаксис: ObjectName:Classpath
Примери:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Оставете празно за обикновен разделител
Задайте това на 1 за разделител, който се свива (отворен по подразбиране)
Задайте това на 2 за разделител, който се свива (свит по подразбиране). LibraryToBuildPDF=Използвана библиотека за създаване на PDF файлове LocalTaxDesc=Някои държави могат да прилагат два или три данъка към всеки ред във фактурата. Ако случаят е такъв, изберете вида на втория и третия данък и съответната данъчна ставка. Възможен тип са:
1: местен данък върху продукти и услуги без ДДС (местния данък се изчислява върху сумата без данък)
2: местен данък върху продукти и услуги с ДДС (местният данък се изчислява върху сумата + основния данък)
3: местен данък върху продукти без ДДС (местният данък се изчислява върху сумата без данък)
4: местен данък върху продукти с ДДС (местният данък се изчислява върху сумата + основния данък)
5: местен данък върху услуги без ДДС (местният данък се изчислява върху сумата без данък)
6: местен данък върху услуги с ДДС (местният данък се изчислява върху сумата + основния данък) SMS=SMS -LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user %s -RefreshPhoneLink=Обнови връзка -LinkToTest=Генерирана е връзка за потребител %s (натиснете телефонния номер за тест) -KeepEmptyToUseDefault=Оставете празно за стойност по подразбиране +LinkToTestClickToDial=Въведете телефонен номер, за да се обадите и да тествате URL адреса на ClickToDial за потребител %s +RefreshPhoneLink=Обновяване на връзка +LinkToTest=Генерирана е връзка за потребител %s (кликнете върху телефонния номер, за да тествате) +KeepEmptyToUseDefault=Оставете празно, за да използвате стойността по подразбиране DefaultLink=Връзка по подразбиране SetAsDefault=Задайте по подразбиране -ValueOverwrittenByUserSetup=Внимание, тази стойност може да бъде презаписана от потребителски настройки (всеки потребител може да зададе собствен натисни-набери адрес) +ValueOverwrittenByUserSetup=Внимание, тази стойност може да бъде презаписана от специфична за потребителя настройка (всеки потребител може да зададе свой собствен URL адрес) ExternalModule=Външен модул - инсталиран в директория %s BarcodeInitForthird-parties=Масова баркод инициализация за контрагенти -BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services +BarcodeInitForProductsOrServices=Масово въвеждане на баркод или зануляване за продукти или услуги CurrentlyNWithoutBarCode=В момента имате %s записа на %s %s без дефиниран баркод. -InitEmptyBarCode=Init value for next %s empty records -EraseAllCurrentBarCode=Erase all current barcode values +InitEmptyBarCode=Първоначална стойност за следващите %s празни записа +EraseAllCurrentBarCode=Изтриване на всички текущи стойности на баркода ConfirmEraseAllCurrentBarCode=Сигурни ли сте че, искате да изтриете всички текущи стойности на баркода? -AllBarcodeReset=All barcode values have been removed +AllBarcodeReset=Всички стойности на баркода са премахнати NoBarcodeNumberingTemplateDefined=Няма активиран баркод шаблон за номериране в настройката на баркод модула. EnableFileCache=Активиране на файлово кеширане ShowDetailsInPDFPageFoot=Добавете още подробности във футъра, като адрес на компанията или името на управителя (в допълнение към професионалните идентификационни номера, капитала на компанията и идентификационния номер по ДДС). @@ -495,16 +498,16 @@ Module0Name=Потребители и групи Module0Desc=Управление на потребители / служители и групи Module1Name=Контрагенти Module1Desc=Управление на фирми и контакти (клиенти, възможности...) -Module2Name=Търговски +Module2Name=Търговия Module2Desc=Търговско управление Module10Name=Счетоводство (опростено) Module10Desc=Опростени счетоводни отчети (дневник, оборот) въз основа на съдържанието в базата данни. Не използва сметкоплан. Module20Name=Предложения -Module20Desc=Търговско предложение управление +Module20Desc=Управление на търговски предложения Module22Name=Масови имейли Module22Desc=Управление на масови имейли Module23Name=Енергия -Module23Desc=Наблюдение на консумацията на енергия +Module23Desc=Мониторинг на потреблението на енергия Module25Name=Поръчки за продажба Module25Desc=Управление на поръчки за продажба Module30Name=Фактури @@ -514,49 +517,49 @@ Module40Desc=Управление на доставчици и покупки ( Module42Name=Журнали за отстраняване на грешки Module42Desc=Инструменти за регистриране (файл, syslog, ...). Дневници за технически цели и отстраняване на грешки. Module49Name=Редактори -Module49Desc=Управление на редактор +Module49Desc=Управление на редактори Module50Name=Продукти Module50Desc=Управление на продукти Module51Name=Масови имейли -Module51Desc=Маса управлението на хартия пощенски -Module52Name=Запаси +Module51Desc=Управление на масови хартиени пощенски пратки +Module52Name=Наличности Module52Desc=Управление на наличности (само за продукти) Module53Name=Услуги Module53Desc=Управление на услуги -Module54Name=Договори/Абонаменти +Module54Name=Договори / Абонаменти Module54Desc=Управление на договори (услуги или периодични абонаменти) Module55Name=Баркодове -Module55Desc=Управление на баркод +Module55Desc=Управление на баркодове Module56Name=Телефония -Module56Desc=Телефония интеграция +Module56Desc=Интеграция на телефония Module57Name=Банкови плащания с директен дебит Module57Desc=Управление на платежни нареждания за директен дебит. Включва генериране на SEPA файл за европейските страни. Module58Name=ClickToDial -Module58Desc=Интеграция на ClickToDial система (Asterisk, ...) +Module58Desc=Интегриране на система ClickToDial (Asterisk, ...) Module59Name=Bookmark4u -Module59Desc=Добавяне на функция за генериране на Bookmark4u сметка от сметка Dolibarr -Module70Name=Интервенциите -Module70Desc=Управление на интервенциите -Module75Name=Разход и пътуване бележки -Module75Desc=Сметка и управление на пътуване бележки -Module80Name=Превозите +Module59Desc=Добавяне на функция за генериране на Bookmark4u профил от Dolibarr профил +Module70Name=Интервенции +Module70Desc=Управление на интервенции +Module75Name=Бележки за разходи и пътувания +Module75Desc=Управление на бележки за разходи и пътувания +Module80Name=Пратки Module80Desc=Управление на пратки и документи за доставка Module85Name=Банки и пари в брой -Module85Desc=Управление на банкови или парични сметки +Module85Desc=Управление на банкови или касови сметки Module100Name=Външен сайт Module100Desc=Добавяне на връзка към външен уебсайт като икона в главното меню. Уебсайтът се показва в рамка под горното меню. -Module105Name=Пощальон и СПИП -Module105Desc=Пощальон или СПИП интерфейс за член модул +Module105Name=Mailman / SPIP +Module105Desc=Mailman / SPIP интерфейс за модул членове Module200Name=LDAP Module200Desc=Синхронизиране на LDAP директория Module210Name=PostNuke -Module210Desc=PostNuke интеграция -Module240Name=Данни износ +Module210Desc=Интегриране на PostNuke +Module240Name=Експорт на данни Module240Desc=Инструмент за експортиране на данни от Dolibarr (с асистенти) -Module250Name=Импортирането на данни +Module250Name=Импорт на данни Module250Desc=Инструмент за импортиране на данни в Dolibarr (с асистенти) Module310Name=Членове -Module310Desc=Управление на членовете на организацията +Module310Desc=Управление на членове на организация Module320Name=RSS емисия Module320Desc=Добавяне на RSS емисия към страниците на Dolibarr Module330Name=Отметки и кратки пътища @@ -564,13 +567,13 @@ Module330Desc=Създаване на достъпни кратки пътища Module400Name=Проекти или възможности Module400Desc=Управление на проекти, възможности / потенциални клиенти и / или задачи. Свързване на елементи (фактури, поръчки, предложения, интервенции, ...) към проект, с цел получаване на общ преглед за проекта Module410Name=Webcalendar -Module410Desc=Webcalendar интеграция +Module410Desc=Интегриране на Webcalendar Module500Name=Данъци и специални разходи Module500Desc=Управление на други разходи (ДДС, социални или фискални данъци, дивиденти, ...) Module510Name=Заплати Module510Desc=Записване и проследяване на плащанията към служители Module520Name=Кредити -Module520Desc=Management of loans +Module520Desc=Управление на кредити Module600Name=Известия Module600Desc=Изпращане на известия по имейл, предизвикани от дадено събитие: за потребител (настройка, определена за всеки потребител), за контакти на контрагенти (настройка, определена за всеки контрагент) или за определени имейли Module600Long=Имайте предвид, че този модул изпраща имейли в реално време, когато настъпи дадено събитие. Ако търсите функция за изпращане на напомняния по имейл за събития от календара отидете в настройката на модула Календар. @@ -582,15 +585,15 @@ Module770Name=Разходни отчети Module770Desc=Управление на искания за разходи (транспорт, храна, ...) Module1120Name=Запитвания към доставчици Module1120Desc=Управление на запитвания към доставчици за цени и условия на доставка -Module1200Name=Богомолка -Module1200Desc=Mantis интеграция -Module1520Name=Document Generation +Module1200Name=Mantis +Module1200Desc=Интегриране на Mantis +Module1520Name=Генериране на документи Module1520Desc=Генериране на документи за масови имейли -Module1780Name=Tags/Categories +Module1780Name=Тагове / Категории Module1780Desc=Създаване на етикети / категории (за продукти, клиенти, доставчици, контакти или членове) Module2000Name=WYSIWYG редактор Module2000Desc=Разрешаване на редактиране / форматиране на текстовите полета с помощта на CKEditor (html) -Module2200Name=Dynamic Prices +Module2200Name=Динамични цени Module2200Desc=Използване на математически изрази за автоматично генериране на цени Module2300Name=Планирани задачи Module2300Desc=Управление на планирани задачи (cron или chrono таблица) @@ -598,24 +601,24 @@ Module2400Name=Събития / Календар Module2400Desc=Проследяване на събития. Регистриране на автоматични събития с цел проследяване или записване на ръчни събития или срещи. Това е основният модул за добро управление на взаимоотношенията с клиенти и доставчици. Module2500Name=Документи / Съдържание Module2500Desc=Система за управление на документи / Управление на електронно съдържание. Автоматична организация на вашите генерирани или съхранени документи. Споделяне на документи. -Module2600Name=API services (Web services SOAP) -Module2600Desc=Enable the Dolibarr SOAP server providing API services -Module2610Name=API services (Web services REST) -Module2610Desc=Enable the Dolibarr REST server providing API services +Module2600Name=API / Web услуги (SOAP сървър) +Module2600Desc=Активиране на Dolibarr SOAP сървър, предоставящ API услуги +Module2610Name=API / Web услуги (REST сървър) +Module2610Desc=Активиране на Dolibarr REST сървър, предоставящ API услуги Module2660Name=Извикване на WebServices (SOAP клиент) Module2660Desc=Активиране на Dollibarr клиент за уеб услуги (Може да се използва за препращане на данни / заявки към външни сървъри. Понастоящем се поддържат само поръчки за покупка.) Module2700Name=Gravatar Module2700Desc=Онлайн услуга Gravatar (www.gravatar.com), която показва снимка на потребители / членове (открита, чрез техните имейли). Нуждае се от достъп до интернет. -Module2800Desc=FTP Клиент +Module2800Desc=FTP клиент Module2900Name=GeoIPMaxmind -Module2900Desc=GeoIP MaxMind реализации възможности +Module2900Desc=GeoIP Maxmind възможности за преобразуване Module3200Name=Неизменими архиви Module3200Desc=Непроменлив дневник на бизнес събития. Събитията се архивират в реално време. Дневникът е таблица, достъпна единствено за четене, която съдържа последователни събития, които могат да бъдат експортирани. Този модул може да е задължителен за някои страни. Module4000Name=ЧР Module4000Desc=Управление на човешки ресурси (управление на отдел, договори и настроения на служители) Module5000Name=Няколко фирми -Module5000Desc=Позволява ви да управлявате няколко фирми -Module6000Name=Workflow +Module5000Desc=Управление на няколко фирми +Module6000Name=Работен процес Module6000Desc=Управление на работен процес (автоматично създаване на обект и / или автоматично промяна на неговия статус) Module10000Name=Уебсайтове Module10000Desc=Създаване на уебсайтове (публични) с WYSIWYG редактор. Просто настройте вашия уеб сървър (Apache, Nginx, ...), за да посочите специалната директория на Dolibarr, за да бъдат онлайн в интернет с определеното за целта име на домейн. @@ -625,7 +628,7 @@ Module39000Name=Продуктови партиди Module39000Desc=Управление на партиди, серийни номера, дати използвай преди / продавай до Module40000Name=Различни валути Module40000Desc=Използване на алтернативни валути в цени и документи -Module50000Name=Paybox +Module50000Name=PayBox Module50000Desc=Предлага на клиентите PayBox страница за онлайн плащане (чрез кредитни / дебитни карти). Позволява на клиентите да извършват необходими плащания или плащания, свързани с определен Dolibarr обект (фактура, поръчка и т.н.) Module50100Name=ПОС SimplePOS Module50100Desc=Точка за продажба SimplePOS (опростен ПОС) @@ -639,99 +642,99 @@ Module50400Name=Счетоводство (двойно записване) Module50400Desc=Управление на счетоводство (двойни вписвания, поддържат се общи и спомагателни счетоводни книги). Експортиране на счетоводната книга в други формати за счетоводен софтуер. Module54000Name=PrintIPP Module54000Desc=Директен печат (без отваряне на документи), чрез използване на Cups IPP интерфейс (Принтерът трябва да се вижда от сървъра, a CUPS трябва да бъде инсталиран на сървъра). -Module55000Name=Poll, Survey or Vote +Module55000Name=Анкети, проучвания и гласоподаване Module55000Desc=Създаване на онлайн анкети, проучвания или гласувания (като Doodle, Studs, RDVz и др.) -Module59000Name=Полета -Module59000Desc=Модул за управление на маржовете -Module60000Name=Комисии -Module60000Desc=Модул за управление на комисии +Module59000Name=Маржове +Module59000Desc=Управление на маржове +Module60000Name=Комисионни +Module60000Desc=Управление на комисионни Module62000Name=Условия на доставка Module62000Desc=Добавяне на функции за управление на Инкотермс (условия на доставка) Module63000Name=Ресурси Module63000Desc=Управление на ресурси (принтери, коли, стаи, ...) с цел разпределяне по събития -Permission11=Клиентите фактури -Permission12=Създаване / промяна на фактури на клиентите -Permission13=Unvalidate клиентите фактури -Permission14=Проверка на клиентите фактури -Permission15=Изпрати на клиентите фактури по имейл -Permission16=Създаване на плащания за клиентите фактури -Permission19=Изтриване на клиентите фактури -Permission21=Търговски предложения +Permission11=Преглед на фактури за продажба +Permission12=Създаване / промяна на фактури на продажба +Permission13=Анулиране на фактури за продажба +Permission14=Валидиране на фактури за продажба +Permission15=Изпращане на фактури за продажба по имейл +Permission16=Създаване на плащания по фактури за продажба +Permission19=Изтриване на фактури за продажба +Permission21=Преглед на търговски предложения Permission22=Създаване / промяна на търговски предложения -Permission24=Проверка на търговски предложения +Permission24=Валидиране на търговски предложения Permission25=Изпращане на търговски предложения -Permission26=Затворете търговски предложения +Permission26=Приключване на търговски предложения Permission27=Изтриване на търговски предложения -Permission28=Износ търговски предложения -Permission31=Прочети продукти +Permission28=Експортиране на търговски предложения +Permission31=Преглед на продукти Permission32=Създаване / промяна на продукти Permission34=Изтриване на продукти Permission36=Преглед / управление на скрити продукти -Permission38=Износ на продукти +Permission38=Експортиране на продукти Permission41=Преглед на проекти и задачи (споделени проекти и проекти, в които съм определен за контакт). Въвеждане на отделено време, за служителя или неговите подчинени, по възложени задачи (График) Permission42=Създаване / редактиране на проекти (споделени проекти и проекти, в които съм определен за контакт). Създаване на задачи и възлагане на проекти и задачи на потребители Permission44=Изтриване на проекти (споделени проекти и проекти, в които съм определен за контакт) Permission45=Експортиране на проекти -Permission61=Прочети интервенции +Permission61=Преглед на интервенции Permission62=Създаване / промяна на интервенции Permission64=Изтриване на интервенции -Permission67=Износ интервенции -Permission71=Прочети членове +Permission67=Експортиране на интервенции +Permission71=Преглед на членове Permission72=Създаване / промяна на членове -Permission74=Изтриване на членовете -Permission75=Setup types of membership +Permission74=Изтриване на членове +Permission75=Настройка на видове членство Permission76=Експортиране на данни -Permission78=Прочети абонаменти -Permission79=Създаване/промяна на абонаменти -Permission81=Клиенти поръчки -Permission82=Създаване / промяна клиенти поръчки -Permission84=Проверка на клиенти поръчки -Permission86=Изпрати клиенти поръчки -Permission87=Затваряне на поръчките на клиентите -Permission88=Отказ клиенти поръчки -Permission89=Изтриване на клиенти поръчки -Permission91=Read social or fiscal taxes and vat -Permission92=Create/modify social or fiscal taxes and vat -Permission93=Delete social or fiscal taxes and vat -Permission94=Export social or fiscal taxes -Permission95=Прочети доклада -Permission101=Прочети sendings -Permission102=Създаване / промяна sendings -Permission104=Проверка на sendings -Permission106=Export sendings -Permission109=Изтриване sendings -Permission111=Финансови сметки -Permission112=Създаване / редакция / изтриване и сравни сделки -Permission113=Setup financial accounts (create, manage categories) +Permission78=Преглед на абонаменти +Permission79=Създаване / промяна на абонаменти +Permission81=Преглед на поръчки за продажба +Permission82=Създаване / промяна на поръчки за продажба +Permission84=Валидиране на поръчки за продажба +Permission86=Изпращане на поръчки за продажба +Permission87=Приключване на поръчки за продажба +Permission88=Анулиране на поръчки за продажба +Permission89=Изтриване на поръчки за продажба +Permission91=Преглед на социални или фискални данъци и ДДС +Permission92=Създаване / промяна на социални или фискални данъци и ДДС +Permission93=Изтриване на социални или фискални данъци и ДДС +Permission94=Експортиране на социални или фискални данъци +Permission95=Преглед на справки +Permission101=Преглед на изпращания +Permission102=Създаване / промяна на изпращания +Permission104=Валидиране на изпращания +Permission106=Експортиране на изпращания +Permission109=Изтриване на изпращания +Permission111=Преглед на финансови сметки +Permission112=Създаване / промяна / изтриване и сравняване на транзакции +Permission113=Настройка на финансови сметки (създаване, управление на категории) Permission114=Съгласуване на транзакции -Permission115=Експортни сделки и извлеченията от сметките -Permission116=Трансфери между сметки +Permission115=Експортиране на транзакции и извлечения по сметка +Permission116=Прехвърляне между сметки Permission117=Управление на изпратени чекове -Permission121=Четене на трети лица, свързани с потребителя -Permission122=Създаване / промяна контрагенти, свързани с потребителя -Permission125=Изтриване на трети лица, свързани с потребителя -Permission126=Контрагенти за износ +Permission121=Преглед на контрагенти, свързани с потребителя +Permission122=Създаване / промяна на контрагенти, свързани с потребителя +Permission125=Изтриване на контрагенти, свързани с потребителя +Permission126=Експортиране на контрагенти Permission141=Преглед на всички проекти и задачи (включително частни проекти, в които служителя не е определен за контакт) Permission142=Създаване / редактиране на всички проекти и задачи (включително частни проекти, в които служителя не е определен за контакт) -Permission144=Delete all projects and tasks (also private projects i am not contact for) -Permission146=Прочети доставчици -Permission147=Прочети статистиката +Permission144=Изтриване на всички проекти и задачи (включително частни проекти, в които служителя не е определен за контакт) +Permission146=Преглед на доставчици +Permission147=Преглед на статистически данни Permission151=Преглед на платежни нареждания за директен дебит Permission152=Създаване / редактиране на платежни нареждания за директен дебит Permission153=Изпращане / предаване на платежни нареждания за директен дебит Permission154=Записване на кредити / отхвърляния на платежни нареждания за директен дебит -Permission161=Read contracts/subscriptions -Permission162=Create/modify contracts/subscriptions -Permission163=Activate a service/subscription of a contract -Permission164=Disable a service/subscription of a contract -Permission165=Delete contracts/subscriptions +Permission161=Преглед на договори / абонаменти +Permission162=Създаване / промяна на договори / абонаменти +Permission163=Активиране на услуга / абонамент към договор +Permission164=Прекратяване на услуга / абонамент към договор +Permission165=Изтриване на договори / абонаменти Permission167=Експортиране на договори -Permission171=Read trips and expenses (yours and your subordinates) -Permission172=Create/modify trips and expenses -Permission173=Delete trips and expenses -Permission174=Read all trips and expenses -Permission178=Export trips and expenses -Permission180=Прочети доставчици +Permission171=Преглед на пътувания и разходи (на служителя и неговите подчинени) +Permission172=Създаване / промяна на пътувания и разходи +Permission173=Изтриване на пътувания и разходи +Permission174=Преглед на всички пътувания и разходи +Permission178=Експортиране на пътувания и разходи +Permission180=Преглед на доставчици Permission181=Преглед на поръчки за покупка Permission182=Създаване / редактиране на поръчки за покупка Permission183=Валидиране на поръчки за покупка @@ -741,113 +744,113 @@ Permission186=Получаване на поръчки за покупка Permission187=Затваряне на поръчки за покупка Permission188=Анулиране на поръчки за покупка Permission192=Създаване на линии -Permission193=Отказ линии +Permission193=Анулиране на линии Permission194=Преглед на линиите на честотната лента Permission202=Създаване на ADSL връзки -Permission203=Поръчка връзки поръчки -Permission204=Поръчка връзки -Permission205=Управление на връзките -Permission206=Прочетете Връзки -Permission211=Прочети телефония -Permission212=Поръчка линии +Permission203=Поръчка на поръчки за свързване +Permission204=Поръчка на връзки +Permission205=Управление на връзки +Permission206=Преглед на връзки +Permission211=Преглед на телефония +Permission212=Поръчка на линия Permission213=Активиране на линия -Permission214=Setup телефония -Permission215=Setup доставчици -Permission221=Прочети emailings -Permission222=Създаване/промяна на имейли (тема, получатели ...) -Permission223=Проверка на emailings (позволява изпращане) +Permission214=Настройка на телефония +Permission215=Настройка на доставчици +Permission221=Преглед на имейли +Permission222=Създаване / промяна на имейли (тема, получатели, ...) +Permission223=Валидиране на имейли (позволява изпращане) Permission229=Изтриване на имейли -Permission237=Получатели и информация -Permission238=Ръчно изпрати писма -Permission239=Изтриване на писма след утвърждаване или изпратени -Permission241=Прочети категории +Permission237=Преглед на получатели и информация +Permission238=Ръчно изпращане на имейли +Permission239=Изтриване на писма след валидиране или изпращане +Permission241=Преглед на категории Permission242=Създаване / промяна на категории Permission243=Изтриване на категории -Permission244=Вижте съдържанието на скрити категории -Permission251=Прочетете други потребители и групи -PermissionAdvanced251=Прочетете други потребители -Permission252=Разрешения на други потребители +Permission244=Преглед на съдържание на скрити категории +Permission251=Преглед на други потребители и групи +PermissionAdvanced251=Преглед на други потребители +Permission252=Преглед на права на други потребители Permission253=Създаване / редактиране на други потребители, групи и разрешения -PermissionAdvanced253=Създаване / промяна на вътрешни / външни потребители и разрешения -Permission254=Създаване / промяна на външни потребители -Permission255=Промяна на други потребители парола -Permission256=Изтрий или забраняване на други потребители +PermissionAdvanced253=Създаване / промяна на вътрешни / външни потребители и права +Permission254=Създаване / променя само на външни потребители +Permission255=Промяна на парола на други потребители +Permission256=Изтриване или деактивиране на други потребители Permission262=Разширяване на достъпа до всички контрагенти (не само контрагенти, за които този потребител е търговски представител).
Не е ефективно за външни потребители (винаги са ограничени до своите предложения, поръчки, фактури, договори и т.н.).
Не е ефективно за проекти (имат значение само разрешенията, видимостта и възложенията в проекта). -Permission271=Прочети CA -Permission272=Прочети фактури +Permission271=Преглед на CA +Permission272=Преглед на фактури Permission273=Издаване на фактури -Permission281=Прочети контакти -Permission282=Създаване / Промяна на контактите +Permission281=Преглед на контакти +Permission282=Създаване / промяна на контакти Permission283=Изтриване на контакти Permission286=Експортиране на контакти -Permission291=Прочети тарифи -Permission292=Задаване на разрешения за тарифите +Permission291=Преглед на тарифи +Permission292=Задаване на права за тарифи Permission293=Промяна на тарифите на клиента Permission300=Преглед на баркодове Permission301=Създаване / редактиране на баркодове Permission302=Изтриване на баркодове -Permission311=Прочети услуги -Permission312=Assign service/subscription to contract -Permission331=Прочетете отметките +Permission311=Преглед на услуги +Permission312=Възлагане на услуга / абонамент към договор +Permission331=Преглед на отметки Permission332=Създаване / промяна на отметки Permission333=Изтриване на отметки -Permission341=Прочетете своите разрешения -Permission342=Създаване / промяна на собствената си потребителска информация -Permission343=Промяна на собствената си парола -Permission344=Промяна на свои собствени разрешения -Permission351=Прочети групи -Permission352=Групи разрешения +Permission341=Преглед на собствени права +Permission342=Създаване / промяна на собствена информация за потребителя +Permission343=Промяна на собствена парола +Permission344=Промяна на собствени права +Permission351=Преглед на групи +Permission352=Преглед на групови права Permission353=Създаване / промяна на групи -Permission354=Изтрий или забраняване на групи -Permission358=Износ потребители -Permission401=Прочети отстъпки +Permission354=Изтриване или деактивиране на групи +Permission358=Експортиране на потребители +Permission401=Преглед на отстъпки Permission402=Създаване / промяна на отстъпки -Permission403=Проверка на отстъпки +Permission403=Валидиране на отстъпки Permission404=Изтриване на отстъпки -Permission430=Use Debug Bar +Permission430=Използване на инструменти за отстраняване на грешки Permission511=Преглед на плащания на заплати Permission512=Създаване / редактиране на плащания на заплати Permission514=Изтриване на плащания на заплати -Permission517=Export salaries -Permission520=Read Loans -Permission522=Create/modify loans -Permission524=Delete loans -Permission525=Access loan calculator -Permission527=Export loans -Permission531=Прочети услуги -Permission532=Създаване / промяна услуги +Permission517=Експортиране на заплати +Permission520=Преглед на кредити +Permission522=Създаване / промяна на кредити +Permission524=Изтриване на кредити +Permission525=Достъп до кредитен калкулатор +Permission527=Експортиране на кредити +Permission531=Преглед на услуги +Permission532=Създаване / промяна на услуги Permission534=Изтриване на услуги -Permission536=Вижте / управление скрити услуги -Permission538=Износ услуги -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom -Permission701=Прочети дарения +Permission536=Преглед / управление на скрити услуги +Permission538=Експортиране на услуги +Permission650=Преглед на спецификации +Permission651=Създаване / Промяна на спецификации +Permission652=Изтриване на спецификации +Permission701=Преглед на дарения Permission702=Създаване / промяна на дарения Permission703=Изтриване на дарения -Permission771=Read expense reports (yours and your subordinates) -Permission772=Create/modify expense reports -Permission773=Delete expense reports -Permission774=Read all expense reports (even for user not subordinates) -Permission775=Approve expense reports -Permission776=Pay expense reports -Permission779=Export expense reports -Permission1001=Прочети запаси -Permission1002=Create/modify warehouses -Permission1003=Delete warehouses -Permission1004=Движението на стоковите наличности -Permission1005=Създаване / промяна на движението на стоковите наличности -Permission1101=Поръчките за доставка -Permission1102=Създаване / промяна на поръчките за доставка -Permission1104=Проверка на поръчките за доставка -Permission1109=Изтриване на поръчките за доставка -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests -Permission1181=Прочети доставчици +Permission771=Преглед на разходни отчети (на служителя и неговите подчинени) +Permission772=Създаване / промяна на разходни отчети +Permission773=Изтриване на разходни отчети +Permission774=Преглед на всички разходни отчети (дори на служители които не са подчинени на служителя) +Permission775=Одобряване на разходни отчети +Permission776=Плащане на разходни отчети +Permission779=Експортиране на разходни отчети +Permission1001=Преглед на наличности +Permission1002=Създаване / промяна на складове +Permission1003=Изтриване на складове +Permission1004=Преглед на движения на наличности +Permission1005=Създаване / промяна на движения на наличности +Permission1101=Преглед на поръчки за покупка +Permission1102=Създаване / промяна на поръчки за покупка +Permission1104=Валидиране на поръчки за покупка +Permission1109=Изтриване на поръчки за покупка +Permission1121=Преглед на запитвания към доставчици +Permission1122=Създаване / промяна на запитвания към доставчици +Permission1123=Валидиране на запитвания към доставчици +Permission1124=Изпращане на запитвания към доставчици +Permission1125=Изтриване на запитвания към доставчици +Permission1126=Приключване на запитвания към доставчици +Permission1181=Преглед на доставчици Permission1182=Преглед на поръчки за покупка Permission1183=Създаване / редактиране на поръчки за покупка Permission1184=Валидиране на поръчки за покупка @@ -856,8 +859,8 @@ Permission1186=Поръчка на поръчки за покупка Permission1187=Потвърждаване на получаването на поръчка за покупка Permission1188=Изтриване на поръчки за покупка Permission1190=Одобряване (второ одобрение) на поръчки за покупка -Permission1201=Резултат от износ -Permission1202=Създаване / Промяна на износ +Permission1201=Получава на резултат от експортиране +Permission1202=Създаване / промяна на експортиране Permission1231=Преглед на фактури за доставка Permission1232=Създаване / редактиране на фактури за доставка Permission1233=Валидиране на фактури за доставка @@ -865,64 +868,64 @@ Permission1234=Изтриване на фактури за доставка Permission1235=Изпращане на фактури за доставка по имейл Permission1236=Експортиране на фактури за доставка, атрибути и плащания Permission1237=Експортиране на поръчки за покупка и техните подробности -Permission1251=Пусни масов внос на външни данни в базата данни (данни товара) -Permission1321=Износ на клиентите фактури, атрибути и плащания +Permission1251=Извършване на масово импортиране на външни данни в базата данни (зареждане на данни) +Permission1321=Експортиране на фактури за продажба, атрибути и плащания Permission1322=Повторно отваряне на платена фактура Permission1421=Експортиране на поръчки за продажба и атрибути -Permission2401=Прочетете действия (събития или задачи), свързани с неговата сметка -Permission2402=Създаване/промяна действия (събития или задачи), свързани с неговата сметка -Permission2403=Изтрий действия (събития или задачи), свързани с неговата сметка -Permission2411=Прочетете действия (събития или задачи) на другите -Permission2412=Създаване / промяна действия (събития или задачи) на другите -Permission2413=Изтрий действия (събития или задачи) на другите +Permission2401=Преглед на действия (събития или задачи), свързани с профила на потребителя +Permission2402=Създаване / промяна на действия (събития или задачи), свързани с профила на потребителя +Permission2403=Изтриване на действия (събития или задачи), свързани с профила на потребителя +Permission2411=Преглед на действия (събития или задачи), свързани с профили на други потребители +Permission2412=Създаване / променя на действия (събития или задачи), свързани с профили на други потребители +Permission2413=Изтриване на действия (събития или задачи), свързани с профили на други потребители Permission2414=Експортиране на действия / задачи на други лица -Permission2501=/ Изтегляне документи +Permission2501=Преглед / изтегляне на документи Permission2502=Изтегляне на документи Permission2503=Изпращане или изтриване на документи -Permission2515=Setup документи директории -Permission2801=Използвайте FTP клиент в режим на четене (да преглеждате и сваляте само) -Permission2802=Използвайте FTP клиент в режим на запис (изтриване или качване на файлове) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission2515=Настройка на директории за документи +Permission2801=Използване на FTP клиент в режим на четене (само за преглед и изтегляне) +Permission2802=Използване на FTP клиент в режим на писане (изтриване или качване на файлове) +Permission3200=Преглед на архивирани събития и пръстови отпечатъци +Permission4001=Преглед на служители +Permission4002=Създаване на служители +Permission4003=Изтриване на служители +Permission4004=Експортиране на служители +Permission10001=Преглед на съдържание в уебсайт +Permission10002=Създаване / Промяна на съдържание в уебсайт (html и javascript) +Permission10003=Създаване / Промяна на съдържание в уебсайт (динамичен php код). Опасно, трябва да бъде използвано само за ограничен кръг разработчици. +Permission10005=Изтриване на съдържание в уебсайт Permission20001=Преглед на молби за отпуск (на служителя и неговите подчинени) Permission20002=Създаване / редактиране на молби за отпуск (на служителя и неговите подчинени) -Permission20003=Delete leave requests +Permission20003=Изтриване на молби за отпуск Permission20004=Преглед на всички молби за отпуск (дори на служители които не са подчинени на служителя) Permission20005=Създаване / редактиране на всички молби за отпуск (дори на служители, които не са подчинени на служителя) -Permission20006=Admin leave requests (setup and update balance) -Permission23001=Read Scheduled job -Permission23002=Create/update Scheduled job -Permission23003=Delete Scheduled job -Permission23004=Execute Scheduled job +Permission20006=Администриране на молби за отпуск (настройка и актуализиране на баланса) +Permission23001=Преглед на планирани задачи +Permission23002=Създаване / промяна на планирани задачи +Permission23003=Изтриване на планирани задачи +Permission23004=Стартиране на планирани задачи Permission50101=Използване на точка на продажба -Permission50201=Прочети сделки -Permission50202=Сделки на внос -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset -Permission54001=Print -Permission55001=Read polls -Permission55002=Create/modify polls -Permission59001=Read commercial margins -Permission59002=Define commercial margins -Permission59003=Read every user margin +Permission50201=Преглед на транзакции +Permission50202=Импортиране на транзакции +Permission50401=Свързване на продукти и фактури със счетоводни сметки +Permission50411=Преглед на операции в счетоводна книга +Permission50412=Създаване / Промяна на операции в счетоводна книга +Permission50414=Изтриване на операции в счетоводна книга +Permission50415=Изтриване на всички операции по година и дневник в счетоводна книга +Permission50418=Експортиране на операции от счетоводна книга +Permission50420=Отчитане и справки за експортиране (оборот, баланс, дневници, счетоводна книга) +Permission50430=Определяне и приключване на фискален период +Permission50440=Управление на сметкоплан, настройка на счетоводство +Permission51001=Преглед на активи +Permission51002=Създаване / Промяна на активи +Permission51003=Изтриване на активи +Permission51005=Настройка на типове активи +Permission54001=Принтиране +Permission55001=Преглед на анкети +Permission55002=Създаване / промяна на анкети +Permission59001=Преглед на търговски маржове +Permission59002=Дефиниране на търговски маржове +Permission59003=Преглед на всички потребителски маржове Permission63001=Преглед на ресурси Permission63002=Създаване / редактиране на ресурси Permission63003=Изтриване на ресурси @@ -931,39 +934,39 @@ DictionaryCompanyType=Видове контрагенти DictionaryCompanyJuridicalType=Правна форма на контрагенти DictionaryProspectLevel=Потенциал за перспектива DictionaryCanton=Области / региони -DictionaryRegion=Regions -DictionaryCountry=Countries -DictionaryCurrency=Currencies +DictionaryRegion=Региони +DictionaryCountry=Държави +DictionaryCurrency=Валути DictionaryCivility=Обръщения DictionaryActions=Видове събития в календара DictionarySocialContributions=Видове социални или фискални данъци -DictionaryVAT=VAT Rates or Sales Tax Rates +DictionaryVAT=Ставки на ДДС или Данък върху продажби DictionaryRevenueStamp=Размер на данъчни печати (бандероли) DictionaryPaymentConditions=Условия за плащане DictionaryPaymentModes=Методи за плащане DictionaryTypeContact=Видове контакти / адреси DictionaryTypeOfContainer=Уебсайт - Видове страници / контейнери DictionaryEcotaxe=Ecotax (WEEE) -DictionaryPaperFormat=Paper formats +DictionaryPaperFormat=Хартиени формати DictionaryFormatCards=Формати на карти DictionaryFees=Разходен отчет - Видове разходни отчети -DictionarySendingMethods=Shipping methods +DictionarySendingMethods=Методи на доставка DictionaryStaff=Брой служители -DictionaryAvailability=Delivery delay -DictionaryOrderMethods=Ordering methods -DictionarySource=Origin of proposals/orders +DictionaryAvailability=Забавяне на доставка +DictionaryOrderMethods=Методи за поръчка +DictionarySource=Произход на предложения / поръчки DictionaryAccountancyCategory=Персонализирани групи за отчети -DictionaryAccountancysystem=Models for chart of accounts +DictionaryAccountancysystem=Модели за сметкоплан DictionaryAccountancyJournal=Счетоводни дневници DictionaryEMailTemplates=Шаблони за имейли -DictionaryUnits=Units +DictionaryUnits=Единици DictionaryMeasuringUnits=Измервателни единици DictionaryProspectStatus=Статус на перспективи DictionaryHolidayTypes=Видове отпуск DictionaryOpportunityStatus=Статус на възможността за проект / възможност DictionaryExpenseTaxCat=Разходен отчет - Транспортни категории DictionaryExpenseTaxRange=Разходен отчет - Обхват на транспортни категории -SetupSaved=Setup спаси +SetupSaved=Настройката е запазена SetupNotSaved=Настройката не е запазена BackToModuleList=Назад към списъка с модули BackToDictionaryList=Назад към списъка с речници @@ -974,37 +977,37 @@ VATIsNotUsedDesc=По подразбиране предложената став VATIsUsedExampleFR=Във Франция това означава дружества или организации, които имат реална фискална система (опростена реална или нормална реална). Система, в която е деклариран ДДС. VATIsNotUsedExampleFR=Във Франция това означава асоциации, които не декларират данък върху продажбите или компании, организации, или свободни професии, които са избрали фискалната система за микропредприятия (данък върху продажбите във франчайз) и са платили франчайз данък върху продажбите без декларация за данък върху продажбите. Този избор ще покаже информация за "Неприложим данък върху продажбите - art-293B от CGI" във фактурите. ##### Local Taxes ##### -LTRate=Курс -LocalTax1IsNotUsed=Do not use second tax +LTRate=Ставка +LocalTax1IsNotUsed=Да не се използва втори данък LocalTax1IsUsedDesc=Използване на втори тип данък (различен от първия) LocalTax1IsNotUsedDesc=Да не се използва друг тип данък (различен от първия) -LocalTax1Management=Second type of tax +LocalTax1Management=Втори вид данък LocalTax1IsUsedExample= LocalTax1IsNotUsedExample= -LocalTax2IsNotUsed=Do not use third tax +LocalTax2IsNotUsed=Да не се използва трети данък LocalTax2IsUsedDesc=Използване на трети тип данък (различен от първия) LocalTax2IsNotUsedDesc=Да не се използва друг тип данък (различен от първия) -LocalTax2Management=Third type of tax +LocalTax2Management=Трети вид данък LocalTax2IsUsedExample= LocalTax2IsNotUsedExample= -LocalTax1ManagementES=RE Управление +LocalTax1ManagementES=Управление на RE LocalTax1IsUsedDescES=Ставката на RE по подразбиране при създаване на перспективи, фактури, поръчки и т.н. следва активното стандартно правило:
Ако купувачът не е подложен на RE, RE по подразбиране = 0. Край на правилото.
Ако купувачът е подложен на RE, тогава RE е по подразбиране. Край на правилото.
-LocalTax1IsNotUsedDescES=По подразбиране предложения RE е 0. Край на правило. -LocalTax1IsUsedExampleES=В Испания те са професионалисти, подлежащи на някои специфични части на испанската IAE. -LocalTax1IsNotUsedExampleES=В Испания те са професионални и общества и при спазване на определени сектори на испанската IAE. -LocalTax2ManagementES=IRPF Management +LocalTax1IsNotUsedDescES=По подразбиране предложената RE е 0. Край на правилото. +LocalTax1IsUsedExampleES=В Испания те са професионалисти, подчинени на някои специфични раздели на испанската IAE. +LocalTax1IsNotUsedExampleES=В Испания те са професионалисти и общества и подлежат на определени раздели на испанската IAE. +LocalTax2ManagementES=Управление на IRPF LocalTax2IsUsedDescES=Ставката на IRPF по подразбиране при създаване на перспективи, фактури, поръчки и т.н. следва активното стандартно правило:
Ако продавачът не е подложен на IRPF, то по подразбиране IRPF = 0. Край на правилото.
Ако продавачът е подложен на IRPF, тогава IRPF е по подразбиране. Край на правилото.
-LocalTax2IsNotUsedDescES=По подразбиране предложения IRPF е 0. Край на правило. -LocalTax2IsUsedExampleES=В Испания, на свободна практика и независими специалисти, които предоставят услуги и фирми, които са избрани на данъчната система от модули. +LocalTax2IsNotUsedDescES=По подразбиране предложената IRPF е 0. Край на правилото. +LocalTax2IsUsedExampleES=В Испания, професионалистите на свободна практика и независимите професионалисти, които предоставят услуги и фирми, които са избрали данъчната система от модули. LocalTax2IsNotUsedExampleES=В Испания те са предприятия, които не подлежат на данъчна система от модули. -CalcLocaltax=Reports on local taxes -CalcLocaltax1=Sales - Purchases -CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases -CalcLocaltax2=Purchases -CalcLocaltax2Desc=Local Taxes reports are the total of localtaxes purchases -CalcLocaltax3=Sales -CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales -LabelUsedByDefault=Label used by default if no translation can be found for code +CalcLocaltax=Справки за местни данъци +CalcLocaltax1=Продажби - Покупки +CalcLocaltax1Desc=Справките за местни данъци се изчисляват с разликата между размера местни данъци от продажби и размера местни данъци от покупки. +CalcLocaltax2=Покупки +CalcLocaltax2Desc=Справки за местни данъци се определят, чрез размера на местни данъци от общи покупки +CalcLocaltax3=Продажби +CalcLocaltax3Desc=Справки за местни данъци се определят, чрез размера на местни данъци от общи продажби +LabelUsedByDefault=Етикет, използван по подразбиране, ако не може да бъде намерен превод за кода LabelOnDocuments=Етикет на документи LabelOrTranslationKey=Етикет или ключ за превод ValueOfConstantKey=Стойност на константа @@ -1013,62 +1016,62 @@ AtEndOfMonth=В края на месеца CurrentNext=Текущ/Следващ Offset=Офсет AlwaysActive=Винаги активна -Upgrade=Обновяване -MenuUpgrade=Обновяване/Удължаване +Upgrade=Актуализация +MenuUpgrade=Актуализиране / разширяване AddExtensionThemeModuleOrOther=Внедряване / инсталиране на външно приложение / модул WebServer=Уеб сървър -DocumentRootServer=Главната директория на уеб сървъра -DataRootServer=Файлове с данни +DocumentRootServer=Основна директория на уеб сървъра +DataRootServer=Директория за файлове с данни IP=IP Port=Порт -VirtualServerName=Име на виртуалния сървър -OS=OS -PhpWebLink=Web-Php връзка +VirtualServerName=Име на виртуален сървър +OS=Операционна система +PhpWebLink=Връзка с уеб-php Server=Сървър Database=База данни -DatabaseServer=Хост базата данни -DatabaseName=Име на базата данни -DatabasePort=Database порт -DatabaseUser=Потребители на бази данни -DatabasePassword=Database парола -Tables=Маси -TableName=Таблица име +DatabaseServer=Хост на база данни +DatabaseName=Име на база данни +DatabasePort=Порт на база данни +DatabaseUser=Потребител на база данни +DatabasePassword=Парола на база данни +Tables=Таблици +TableName=Име на таблица NbOfRecord=Брой записи Host=Сървър -DriverType=Шофьор тип -SummarySystem=Резюме на информационна система -SummaryConst=Списък на всички параметри за настройка Dolibarr +DriverType=Тип драйвер +SummarySystem=Резюме на системна информация +SummaryConst=Списък на всички параметри за настройка на Dolibarr MenuCompanySetup=Компания / Организация -DefaultMenuManager= Стандартно меню мениджър -DefaultMenuSmartphoneManager=Smartphone Menu Manager -Skin=Кожата тема +DefaultMenuManager= Стандартен мениджър на меню +DefaultMenuSmartphoneManager=Мениджър на меню за смартфон +Skin=Тема на интерфейса DefaultSkin=Тема по подразбиране -MaxSizeList=Максимална дължина за списъка -DefaultMaxSizeList=Макс. дължина за списъци по подразбиране +MaxSizeList=Максимална дължина за списък +DefaultMaxSizeList=Максимална дължина по подразбиране за списъци DefaultMaxSizeShortList=Максимална дължина по подразбиране за кратки списъци (т.е. в карта на клиента) MessageOfDay=Послание на деня -MessageLogin=Съобщение на страницата за вход +MessageLogin=Съобщение в страницата за вход LoginPage=Входна страница BackgroundImageLogin=Фоново изображение -PermanentLeftSearchForm=Постоянна форма за търсене в лявото меню +PermanentLeftSearchForm=Формуляр за постоянно търсене в лявото меню DefaultLanguage=Език по подразбиране EnableMultilangInterface=Активиране на многоезикова поддръжка -EnableShowLogo=Показване на логото в лявото меню +EnableShowLogo=Показване на лого в лявото меню CompanyInfo=Фирма / Организация CompanyIds=Идентификационни данни на фирма / организация CompanyName=Име CompanyAddress=Адрес -CompanyZip=П. код +CompanyZip=Пощ. код CompanyTown=Град CompanyCountry=Държава -CompanyCurrency=Основната валута -CompanyObject=Object of the company -Logo=Logo -DoNotSuggestPaymentMode=Да не предполагат -NoActiveBankAccountDefined=Не е активна банкова сметка на определени -OwnerOfBankAccount=Собственик на %s банкови сметки -BankModuleNotActive=Банкови сметки модул не е активиран -ShowBugTrackLink=Show link "%s" +CompanyCurrency=Основна валута +CompanyObject=Предмет на фирмата +Logo=Лого +DoNotSuggestPaymentMode=Да не се предлага +NoActiveBankAccountDefined=Няма дефинирана активна банкова сметка +OwnerOfBankAccount=Титуляр на банкова сметка %s +BankModuleNotActive=Модулът за банкови сметки не е активиран +ShowBugTrackLink=Показване на връзка "%s" Alerts=Сигнали DelaysOfToleranceBeforeWarning=Закъснение преди показване на предупредителен сигнал за: DelaysOfToleranceDesc=Задаване на закъснение, преди на екрана да се покаже иконата за предупреждение %s на закъснелия елемент. @@ -1092,7 +1095,7 @@ SetupDescription2=Следните две секции са задължител SetupDescription3=%s ->%s
Основни параметри, използвани за персонализиране на поведението по подразбиране на вашето приложение (например за функции, свързани със държавата). SetupDescription4=%s ->%s
Този софтуер е набор от много модули / приложения, всички повече или по-малко независими. Модулите, съответстващи на вашите нужди, трябва да бъдат активирани и конфигурирани. В менютата се добавят нови елементи / опции с активирането на модул. SetupDescription5=Менюто "Други настройки" управлява допълнителни параметри. -LogEvents=Събития одит на сигурността +LogEvents=Събития за одит на сигурността Audit=Проверка InfoDolibarr=За Dolibarr InfoBrowser=За браузъра @@ -1101,60 +1104,60 @@ InfoWebServer=За уеб сървъра InfoDatabase=За базата данни InfoPHP=За PHP InfoPerf=За производителността -BrowserName=Browser name -BrowserOS=Browser OS -ListOfSecurityEvents=Списък на събитията Dolibarr сигурност -SecurityEventsPurged=Събития по сигурността прочиства +BrowserName=Име на браузъра +BrowserOS=OS на браузъра +ListOfSecurityEvents=Списък на събития за сигурност в Dolibarr +SecurityEventsPurged=Събитията със сигурността са премахнати LogEventDesc=Активиране на регистрирането за конкретни събития за сигурност. Администриране на записаните събития, чрез меню %s - %s. Внимание, тази функция може да генерира голямо количество данни в базата данни. AreaForAdminOnly=Параметрите за настройка могат да се задават само от Администратори. -SystemInfoDesc=Информационна система Разни техническа информация можете да получите в режим само за четене и видими само за администратори. +SystemInfoDesc=Системната информация е различна техническа информация, която получавате в режим само за четене и е видима само за администратори. SystemAreaForAdminOnly=Тази секция е достъпна само за администратори. Потребителските права в Dolibarr не могат да променят това ограничение. CompanyFundationDesc=Редактирайте информацията за фирма / организация като кликнете върху бутона '%s' или '%s' в долната част на страницата. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Ако имате външен счетоводител, тук може да редактирате неговата информация. AccountantFileNumber=Счетоводен код DisplayDesc=Тук могат да се променят параметрите, които влияят на външния вид и поведението на Dolibarr. AvailableModules=Налични приложения / модули -ToActivateModule=За да активирате модули, отидете на настройка пространство (Начало-> Setup-> модули). -SessionTimeOut=Време за сесията +ToActivateModule=За да активирате модули, отидете на в секцията за настройка (Начало -> Настройки -> Модули / Приложения). +SessionTimeOut=Време за сесия SessionExplanation=Това число гарантира, че сесията никога няма да изтече преди това закъснение, ако чистачът на сесии се извършва от вътрешен PHP чистач на сесии (и нищо друго). Вътрешният PHP чистач на сесии не гарантира, че сесията ще изтече след това закъснение. Тя ще изтече, след това закъснение и когато се задейства чистачът на сесии на всеки %s / %s идентифицирания в системата, но само по време на достъп от други сесии (ако стойността е 0, това означава, че почистването на сесията се извършва само от външен процес).
Забележка: на някои сървъри с външен механизъм за почистване на сесиите (cron под debian, ubuntu ...), сесиите могат да бъдат унищожени след период, определен от външна настройка, независимо от въведената тук стойност. TriggersAvailable=Налични тригери TriggersDesc=Тригерите са файлове, които ще променят поведението на Dolibarr след като бъдат копирани в директорията htdocs/core/triggers. Те реализират нови действия, активирани при събития в Dolibarr (създаване на нов контрагент, валидиране на фактура, ...). -TriggerDisabledByName=Тригерите в този файл са изключени от NORUN наставка в името си. -TriggerDisabledAsModuleDisabled=Тригерите в този файл са забранени като модул %s е забранено. -TriggerAlwaysActive=Тригерите в този файл са винаги активни,, каквото са активирани модули Dolibarr. -TriggerActiveAsModuleActive=Тригерите в този файл са активни, като модул %s е активирана. +TriggerDisabledByName=Тригерите в този файл са деактивирани от суфикса -NORUN в името му. +TriggerDisabledAsModuleDisabled=Тригерите в този файл са деактивирани, тъй като модулът %s е деактивиран. +TriggerAlwaysActive=Тригерите в този файл са винаги активни, каквито и да са активираните Dolibarr модули. +TriggerActiveAsModuleActive=Тригерите в този файл са активни, когато е активиран модул %s. GeneratedPasswordDesc=Изберете метода, който ще се използва за автоматично генерирани пароли. DictionaryDesc=Определете всички референтни данни. Може да добавите стойности по подразбиране. ConstDesc=Тази страница позволява да редактирате (презаписвате) параметри, които не са достъпни в други страници. Това са параметри предимно запазени за разработчици / разширено отстраняване на неизправности. За пълен списък на наличните параметри вижте тук. MiscellaneousDesc=Тук са дефинирани всички параметри, свързани със сигурността. -LimitsSetup=Граници / Прецизно настройване +LimitsSetup=Граници / Прецизна настройка LimitsDesc=Тук може да дефинирате ограничения използвани от Dolibarr за по-голяма прецизност и оптимизация MAIN_MAX_DECIMALS_UNIT=Максимален брой десетични знаци за единични цени MAIN_MAX_DECIMALS_TOT=Максимален брой десетични знаци за общи суми MAIN_MAX_DECIMALS_SHOWN=Максимален брой десетични знаци за цени, показани на екрана. Добавете многоточие ... след този параметър (напр. 2...), ако искате да видите "..." суфикс след съкратената (закръглена) цена. MAIN_ROUNDING_RULE_TOT=Диапазон на закръгляване (за страни, в които закръгляването се извършва на нещо различно от стандартното 10. Например поставете 0.05, ако закръгляването се извършва с 0.05 стъпки) -UnitPriceOfProduct=Нетен единичната цена на даден продукт +UnitPriceOfProduct=Нетна единична цена на продукт TotalPriceAfterRounding=Обща цена (без ДДС / ДДС / с ДДС) след закръгляване -ParameterActiveForNextInputOnly=Параметър ефективно само за следващия вход +ParameterActiveForNextInputOnly=Параметърът е ефективен само за следващия вход NoEventOrNoAuditSetup=Не е регистрирано събитие свързано със сигурността. Това е нормално, ако проверката не е активирана в страницата "Настройки - Сигурност - Събития". NoEventFoundWithCriteria=Не е намерено събитие свързано със сигурността по тези параметри за търсене. -SeeLocalSendMailSetup=Вижте настройка Sendmail +SeeLocalSendMailSetup=Вижте локалната си настройка за Sendmail BackupDesc=Пълното архивиране на Dolibarr инсталация се извършва в две стъпки. BackupDesc2=Архивиране на съдържанието в директорията "documents" (%s), съдържаща всички ръчно добавени и генерирани файлове. Това също така ще включва всички архивирани файлове, генерирани в Стъпка 1. BackupDesc3=Архивиране на структурата и съдържанието на база данни (%s) в архивен файл. За тази цел може да използвате следния асистент. BackupDescX=Архивиращата директория трябва да се съхранява на сигурно място. -BackupDescY=Генерирания дъмп файл трябва да се съхранява на сигурно място. +BackupDescY=Генерираният дъмп файл трябва да се съхранява на сигурно място. BackupPHPWarning=Архивирането не може да бъде гарантирано с този метод. Препоръчва се предходният. RestoreDesc=Възстановяването на Dolibarr от архивно копие се извършва в две стъпки. RestoreDesc2=Възстановете от архивният файл (например zip файл) директорията "documents" в нова Dolibarr инсталация или в "documents" директорията на текущата инсталация (%s). RestoreDesc3=Възстановете структурата на базата данни и данните от архивния файл в базата данни на новата Dolibarr инсталация или в базата данни (%s) на настоящата инсталация. Внимание, след като възстановяването приключи, трябва да използвате потребителско име и парола, които са били налични по време на архивирането / инсталацията, за да се свържете отново.
За да възстановите архивирана база данни в тази текущата инсталация, може да използвате следния асистент. -RestoreMySQL=MySQL внос -ForcedToByAModule= Това правило е принуден да %s от активиран модул +RestoreMySQL=Импортиране на MySQL +ForcedToByAModule= Това правило е принудено да %s, чрез активиран модул PreviousDumpFiles=Съществуващи архивни файлове WeekStartOnDay=Първи ден от седмицата RunningUpdateProcessMayBeRequired=Актуализацията изглежда задължителна (версията на програмата %s се различава от версията на базата данни %s) -YouMustRunCommandFromCommandLineAfterLoginToUser=Трябва да изпълните тази команда от командния ред след влизане на черупката с потребителски %s или трябва да добавите опцията-W в края на командния ред, за да предоставят %s парола. -YourPHPDoesNotHaveSSLSupport=SSL функции не са налични във вашата PHP +YouMustRunCommandFromCommandLineAfterLoginToUser=Трябва да изпълните тази команда от командния ред след влизане в shell с потребител %s или трябва да добавите опция -W в края на командния ред, за да се предостави %s парола. +YourPHPDoesNotHaveSSLSupport=SSL функциите не са налични във вашия PHP DownloadMoreSkins=Изтегляне на повече теми SimpleNumRefModelDesc=Връща референтен номер във формат %syymm-nnnn, където yy е година, mm е месец и nnnn е последователност от номера без връщане към нула ShowProfIdInAddress=Показване на идентификационни данни в полетата с адреси @@ -1166,7 +1169,7 @@ MeteoStdModEnabled=Стандартният режим е активиран MeteoPercentageMod=Процентен режим MeteoPercentageModEnabled=Процентният режим е активиран MeteoUseMod=Кликнете, за да използвате %s -TestLoginToAPI=Тествайте влезете в API +TestLoginToAPI=Тест за вход в API ProxyDesc=Някои функции на Dolibarr изискват достъп до интернет. Определете тук параметрите на интернет връзката за достъп през прокси сървър, ако е необходимо. ExternalAccess=Външен / Интернет достъп MAIN_PROXY_USE=Използване на прокси сървър (в противен случай достъпът към интернет е директен) @@ -1176,23 +1179,23 @@ MAIN_PROXY_USER=Прокси сървър: Потребител MAIN_PROXY_PASS=Прокси сървър: Парола DefineHereComplementaryAttributes=Определете тук всички допълнителни / персонализирани атрибути, които искате да бъдат включени за: %s ExtraFields=Допълнителни атрибути -ExtraFieldsLines=Complementary attributes (lines) +ExtraFieldsLines=Допълнителни атрибути (редове) ExtraFieldsLinesRec=Допълнителни атрибути (шаблонни редове на фактури) -ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines) -ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines) +ExtraFieldsSupplierOrdersLines=Допълнителни атрибути (редове в поръчки за покупка) +ExtraFieldsSupplierInvoicesLines=Допълнителни атрибути (редове във фактури за покупка) ExtraFieldsThirdParties=Допълнителни атрибути (контрагенти) ExtraFieldsContacts=Допълнителни атрибути (контакти / адреси) -ExtraFieldsMember=Complementary attributes (member) -ExtraFieldsMemberType=Complementary attributes (member type) -ExtraFieldsCustomerInvoices=Complementary attributes (invoices) +ExtraFieldsMember=Допълнителни атрибути (член) +ExtraFieldsMemberType=Допълнителни атрибути (тип член) +ExtraFieldsCustomerInvoices=Допълнителни атрибути (фактури за продажба) ExtraFieldsCustomerInvoicesRec=Допълнителни атрибути (шаблони на фактури) -ExtraFieldsSupplierOrders=Complementary attributes (orders) -ExtraFieldsSupplierInvoices=Complementary attributes (invoices) -ExtraFieldsProject=Complementary attributes (projects) -ExtraFieldsProjectTask=Complementary attributes (tasks) -ExtraFieldHasWrongValue=Attribute %s has a wrong value. -AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters without space -SendmailOptionNotComplete=Внимание, на някои системи Linux, за да изпратите имейл от електронната си поща, Sendmail изпълнение настройка трябва conatins опция-ба (параметър mail.force_extra_parameters във вашия php.ini файл). Ако някои получатели никога не получават имейли, опитайте се да редактирате тази PHP параметър с mail.force_extra_parameters = ба). +ExtraFieldsSupplierOrders=Допълнителни атрибути (поръчки за покупка) +ExtraFieldsSupplierInvoices=Допълнителни атрибути (фактури за покупка) +ExtraFieldsProject=Допълнителни атрибути (проекти) +ExtraFieldsProjectTask=Допълнителни атрибути (задачи) +ExtraFieldHasWrongValue=Атрибут %s има грешна стойност. +AlphaNumOnlyLowerCharsAndNoSpace=само буквено-цифрови символи с малки букви без интервал +SendmailOptionNotComplete=Внимание, в някои Linux системи, за да изпращате имейли от вашият имейл, в настройката на Sendmail трябва да имате опция -ba (параметър mail.force_extra_parameters във вашия php.ini файл). Ако някои получатели никога не получават имейли, опитайте да промените този PHP параметър на mail.force_extra_parameters = -ba). PathToDocuments=Път до документи PathDirectory=Директория SendmailOptionMayHurtBuggedMTA=Функцията за изпращане на имейли, чрез метода "PHP mail direct" ще генерира имейл съобщение, което може да не бъде правилно анализирано от някои пощенски сървъри за входяща поща. Резултатът ще бъде, че някои писма няма да бъдат прочетени от хората, хоствани на тези подслушвани платформи. Такъв е случаят с някои интернет доставчици (напр. Orange във Франция). Това не е проблем с Dolibarr или PHP, а с пощенския сървър за входяща поща. Може обаче да добавите опция MAIN_FIX_FOR_BUGGED_MTA със стойност "1" в Настройки - Други настройки, за да промените и избегнете това в Dolibarr. Възможно е обаче да имате проблеми с други сървъри, които стриктно използват SMTP стандарта. Другото (препоръчително) решение е да се използва методът "SMTP socket library", който няма недостатъци. @@ -1209,42 +1212,42 @@ NewTranslationStringToShow=Нов преводен низ, който да се OriginalValueWas=Оригиналния превод е презаписан. Първоначалната стойност е:

%s TransKeyWithoutOriginalValue=Наложихте нов превод за ключа за превод "%s", който не съществува в нито един от езиковите файлове TotalNumberOfActivatedModules=Активирани приложения / модули: %s / %s -YouMustEnableOneModule=Трябва да даде възможност на най-малко 1 модул +YouMustEnableOneModule=Трябва да активирате поне 1 модул ClassNotFoundIntoPathWarning=Не е намерен клас %s в описания PHP път -YesInSummer=Yes in summer +YesInSummer=Да през лятото OnlyFollowingModulesAreOpenedToExternalUsers=Забележка: Само следните модули са достъпни за външни потребители (независимо от правата им), ако са им предоставени съответните права.
-SuhosinSessionEncrypt=Session storage encrypted by Suhosin -ConditionIsCurrently=Condition is currently %s +SuhosinSessionEncrypt=Съхраняването на сесии е кодирано от Suhosin +ConditionIsCurrently=Понастоящем състоянието е %s YouUseBestDriver=Използвате драйвер %s, който е най-добрият драйвер в момента. YouDoNotUseBestDriver=Използвате драйвер %s, но драйвер %s е препоръчителен. NbOfProductIsLowerThanNoPb=Вие имате само %s продукти / услуги в базата данни. Това не изисква специално оптимизиране. -SearchOptim=Search optimization +SearchOptim=Оптимизация на търсене YouHaveXProductUseSearchOptim=В базата данни имате %s продукти. Трябва да добавите константата PRODUCT_DONOTSEARCH_ANYWHERE със стойност "1" в страницата Начало - Настройки - Други настройки. Ограничете търсенето до началото на низове, което позволява базата данни да използва индекси, а вие да получите незабавен отговор. BrowserIsOK=Използвате уеб браузъра %s. Този браузър е добър от гледна точка на сигурност и производителност. BrowserIsKO=Използвате уеб браузъра %s. Известно е, че този браузър е лош избор от гледна точка на сигурност, производителност и надеждност. Препоръчително е да използвате Firefox, Chrome, Opera или Safari. -XDebugInstalled=XDebug is loaded. -XCacheInstalled=XCache is loaded. +XDebugInstalled=XDebug е зареден. +XCacheInstalled=XCache е зареден. AddRefInList=Показване на кода на клиента / доставчика в списъка (select list или combobox) и повечето от хипервръзките.
Контрагентите ще се появят с формат на името "CC12345 - SC45678 - Голяма фирма ЕООД", вместо "Голяма фирма ЕООД" AddAdressInList=Показване на списъка с информация за адреса на клиента / доставчика (изборен списък или комбиниран списък).
Контрагентите ще се появят с формат на името на "Голяма фирма ЕООД - ул. Първа № 2 П. код Град - България, вместо "Голяма фирма ЕООД" AskForPreferredShippingMethod=Запитване към контрагенти за предпочитан начин на доставка -FieldEdition=Edition of field %s -FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced) -GetBarCode=Get barcode +FieldEdition=Издание на поле %s +FillThisOnlyIfRequired=Пример: +2 (попълнете само ако има проблеми с компенсирането на часовата зона) +GetBarCode=Получаване на баркод ##### Module password generation -PasswordGenerationStandard=Върнете парола, генерирана в съответствие с вътрешен алгоритъм Dolibarr: 8 символа, съдържащи общи цифри и символи с малки. +PasswordGenerationStandard=Връщане на парола, генерирана според вътрешния Dolibarr алгоритъм: 8 символа, съдържащи споделени числа и символи с малки букви PasswordGenerationNone=Да не се предлага генерирана парола. Паролата трябва да бъде въведена ръчно. -PasswordGenerationPerso=Връщане на парола съответно вашата лично определена конфигурация. -SetupPerso=Съответно по вашата конфигурация +PasswordGenerationPerso=Връщане на парола според вашата лично дефинирана конфигурация +SetupPerso=Според вашата конфигурация PasswordPatternDesc=Описание на модел за парола ##### Users setup ##### RuleForGeneratedPasswords=Правила за генериране и валидиране на пароли DisableForgetPasswordLinkOnLogonPage=Да не се показва връзката "Забравена парола" на страницата за вход -UsersSetup=Потребители модул за настройка +UsersSetup=Настройка на модула за потребители UserMailRequired=Необходим е имейл при създаване на нов потребител ##### HRM setup ##### HRMSetup=Настройка на модула ЧР ##### Company setup ##### -CompanySetup=Фирми модул за настройка +CompanySetup=Настройка на модула за фирми CompanyCodeChecker=Опции за автоматично генериране на кодове на клиент / доставчик AccountCodeManager=Опции за автоматично генериране на счетоводни кодове на клиент / доставчик NotificationsDesc=Автоматично изпращане на имейл известия за някои събития в Dolibarr.
Получателите на известия могат да бъдат дефинирани: @@ -1253,8 +1256,8 @@ NotificationsDescContact=* за контакти на контрагенти (к NotificationsDescGlobal=* или чрез задаване на глобални имейл адреси в тази страница за настройка. ModelModules=Шаблони за документи DocumentModelOdt=Генериране на документи от шаблоните на OpenDocument (файлове .ODT / .ODS от LibreOffice, OpenOffice, KOffice, TextEdit, ...) -WatermarkOnDraft=Воден знак върху проект на документ -JSOnPaimentBill=Activate feature to autofill payment lines on payment form +WatermarkOnDraft=Воден знак върху чернова на документ +JSOnPaimentBill=Активиране на функция за автоматично попълване на платежни редове в платежния формуляр CompanyIdProfChecker=Правила за идентификационните данни (проф. IDs) MustBeUnique=Трябва да е уникално? MustBeMandatory=Задължително при създаване на контрагенти (ако ДДС номера или вида на фирмата са определени)? @@ -1264,30 +1267,30 @@ TechnicalServicesProvided=Предоставени технически услу WebDAVSetupDesc=Това е връзката за достъп до WebDAV директорията. Тя съдържа „публична“ директория, отворена за всеки потребител, който знае URL адреса (ако е разрешен достъпът до публичната директория) и „лична“ директория, която изисква съществуващо потребителско име и парола за достъп. WebDavServer=Основен URL адрес на %s сървъра: %s ##### Webcal setup ##### -WebCalUrlForVCalExport=За износ на линк към %s формат е на разположение на следния линк: %s +WebCalUrlForVCalExport=Връзка за експортиране към %s формат може да намерите на следния адрес: %s ##### Invoices ##### -BillsSetup=Фактури модул за настройка -BillsNumberingModule=Фактури и кредитни известия, номериране модул -BillsPDFModules=Фактура модели документи +BillsSetup=Настройка на модула за фактури +BillsNumberingModule=Модел за номериране на фактури и кредитни известия +BillsPDFModules=Модели на документи за фактури BillsPDFModulesAccordindToInvoiceType=Модели на фактури в зависимост от вида на фактурата PaymentsPDFModules=Модели на платежни документи -ForceInvoiceDate=Принудително датата на фактурата датата на валидиране -SuggestedPaymentModesIfNotDefinedInInvoice=Предложени плащания режим на фактура по подразбиране, ако не са определени за фактура +ForceInvoiceDate=Принуждаване на датата на фактурата да се синхронизира с датата на валидиране +SuggestedPaymentModesIfNotDefinedInInvoice=Предлагане на плащания по подразбиране, ако не са определени такива във фактурата SuggestPaymentByRIBOnAccount=Да се предлага плащане по сметка SuggestPaymentByChequeToAddress=Да се предлага плащане с чек -FreeLegalTextOnInvoices=Свободен текст на фактури -WatermarkOnDraftInvoices=Watermark on draft invoices (none if empty) -PaymentsNumberingModule=Модел на номериране на плащания +FreeLegalTextOnInvoices=Свободен текст във фактури +WatermarkOnDraftInvoices=Воден знак върху чернови фактури (няма, ако е празно) +PaymentsNumberingModule=Модел за номериране на плащания SuppliersPayment=Плащания към доставчици SupplierPaymentSetup=Настройка на плащания към доставчици ##### Proposals ##### -PropalSetup=Модул за настройка на търговски предложения -ProposalsNumberingModules=Търговско предложение за номериране на модули -ProposalsPDFModules=Търговски предложение документи модели +PropalSetup=Настройка на модула за търговски предложения +ProposalsNumberingModules=Модели за номериране на търговски предложения +ProposalsPDFModules=Модели на документи за търговски предложения SuggestedPaymentModesIfNotDefinedInProposal=Препоръчителен вид плащане по търговско предложение по подразбиране, ако не е определен -FreeLegalTextOnProposal=Свободен текст на търговски предложения -WatermarkOnDraftProposal=Watermark on draft commercial proposals (none if empty) -BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Ask for bank account destination of proposal +FreeLegalTextOnProposal=Свободен текст в търговски предложения +WatermarkOnDraftProposal=Воден знак върху черновите търговски предложения (няма, ако е празно) +BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Питане за данни на банкова сметка в търговски предложения ##### SupplierProposal ##### SupplierProposalSetup=Настройка на модул Запитвания към доставчици SupplierProposalNumberingModules=Модели за номериране на запитвания към доставчици @@ -1295,121 +1298,121 @@ SupplierProposalPDFModules=Модели за документи на запит FreeLegalTextOnSupplierProposal=Свободен текст в запитвания към доставчици WatermarkOnDraftSupplierProposal=Воден знак върху черновите запитвания към доставчици (няма, ако празно) BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Да се пита за детайли на банковата сметка в запитванията към доставчици -WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Питане за Складов източник за поръчка +WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Питане за изходен склад в поръчки ##### Suppliers Orders ##### BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Да се пита за детайли на банковата сметка в поръчките за покупка ##### Orders ##### OrdersSetup=Настройка на модул Поръчки за продажба -OrdersNumberingModules=Поръчки номериране модули -OrdersModelModule=Поръчка документи модели -FreeLegalTextOnOrders=Свободен текст на поръчки -WatermarkOnDraftOrders=Watermark on draft orders (none if empty) -ShippableOrderIconInList=Add an icon in Orders list which indicate if order is shippable -BANK_ASK_PAYMENT_BANK_DURING_ORDER=Ask for bank account destination of order +OrdersNumberingModules=Модели за номериране на поръчки +OrdersModelModule=Модели на документи за поръчка +FreeLegalTextOnOrders=Свободен текст в поръчки +WatermarkOnDraftOrders=Воден знак върху чернови поръчки (няма, ако е празно) +ShippableOrderIconInList=Добавяне на икона в списъка с поръчки, която показва дали поръчката може да се изпрати +BANK_ASK_PAYMENT_BANK_DURING_ORDER=Питане за данни на банкова сметка в поръчки ##### Interventions ##### -InterventionsSetup=Интервенциите модул за настройка -FreeLegalTextOnInterventions=Свободен текст на интервенционни документи -FicheinterNumberingModules=Модули за намеса номериране -TemplatePDFInterventions=Намеса карти документи модели -WatermarkOnDraftInterventionCards=Watermark on intervention card documents (none if empty) +InterventionsSetup=Настройка на модула за интервенции +FreeLegalTextOnInterventions=Свободен текст в интервенции +FicheinterNumberingModules=Модели за номериране на интервенции +TemplatePDFInterventions=Модели на документи за интервенции +WatermarkOnDraftInterventionCards=Воден знак върху интервенции (няма, ако е празно) ##### Contracts ##### -ContractsSetup=Contracts/Subscriptions module setup -ContractsNumberingModules=Договори за номериране модули -TemplatePDFContracts=Contracts documents models -FreeLegalTextOnContracts=Free text on contracts -WatermarkOnDraftContractCards=Watermark on draft contracts (none if empty) +ContractsSetup=Настройка на модула за договори / абонаменти +ContractsNumberingModules=Модели за номериране на договори +TemplatePDFContracts=Модели на документи за договори +FreeLegalTextOnContracts=Свободен текст в договори +WatermarkOnDraftContractCards=Воден знак върху чернови договори (няма, ако е празно) ##### Members ##### -MembersSetup=Потребители модул за настройка +MembersSetup=Настройка на модула за членове MemberMainOptions=Основни параметри -AdherentLoginRequired= Управление на Login за всеки член +AdherentLoginRequired= Управление на входни данни за всеки член AdherentMailRequired=Необходим е имейл при създаване на нов член -MemberSendInformationByMailByDefault=Checkbox да изпрати потвърждение поща на членовете (валидиране или нов абонамент) е включена по подразбиране +MemberSendInformationByMailByDefault=По подразбиране е активирано изпращането на потвърждение, чрез имейл до членове (валидиране или нов абонамент) VisitorCanChooseItsPaymentMode=Посетителят може да избира от наличните начини на плащане MEMBER_REMINDER_EMAIL=Активиране на автоматично напомняне, чрез имейл за изтекли абонаменти. Забележка: Модул %s трябва да е активиран и правилно настроен за изпращане на напомняния. ##### LDAP setup ##### -LDAPSetup=LDAP Setup +LDAPSetup=Настройка на LDAP LDAPGlobalParameters=Глобални параметри LDAPUsersSynchro=Потребители LDAPGroupsSynchro=Групи LDAPContactsSynchro=Контакти -LDAPMembersSynchro=Потребители +LDAPMembersSynchro=Членове LDAPMembersTypesSynchro=Видове членове -LDAPSynchronization=LDAP синхронизация -LDAPFunctionsNotAvailableOnPHP=LDAP функции не са налични на вашия PHP +LDAPSynchronization=Синхронизация на LDAP +LDAPFunctionsNotAvailableOnPHP=LDAP функциите не са достъпни за вашия PHP LDAPToDolibarr=LDAP -> Dolibarr DolibarrToLDAP=Dolibarr -> LDAP -LDAPNamingAttribute=Въведете LDAP -LDAPSynchronizeUsers=Организацията на потребителите в LDAP +LDAPNamingAttribute=Ключ в LDAP +LDAPSynchronizeUsers=Организиране на потребители в LDAP LDAPSynchronizeGroups=Организиране на групи в LDAP LDAPSynchronizeContacts=Организиране на контакти в LDAP -LDAPSynchronizeMembers=Организация на членовете на организацията в LDAP +LDAPSynchronizeMembers=Организиране на членове на организацията в LDAP LDAPSynchronizeMembersTypes=Организация на видовете членове на фондацията в LDAP -LDAPPrimaryServer=Основно сървъра -LDAPSecondaryServer=Средно сървъра -LDAPServerPort=Порта на сървъра +LDAPPrimaryServer=Основен сървър +LDAPSecondaryServer=Вторичен сървър +LDAPServerPort=Порт на сървъра LDAPServerPortExample=Порт по подразбиране: 389 -LDAPServerProtocolVersion=Протокол версия +LDAPServerProtocolVersion=Версия на протокола LDAPServerUseTLS=Използване на TLS -LDAPServerUseTLSExample=LDAP сървъра използване TLS -LDAPServerDn=Сървър DN -LDAPAdminDn=Administrator DN +LDAPServerUseTLSExample=Вашият LDAP сървър използва TLS +LDAPServerDn=DN на сървър +LDAPAdminDn=DN на администратор LDAPAdminDnExample=Пълна DN (напр. cn = admin, dc = example, dc = com или cn = Administrator, cn = Users, dc = example, dc = com за активна директория) -LDAPPassword=Администраторската парола -LDAPUserDn=Потребителя DN -LDAPUserDnExample=Пълна DN (EX: OU = потребители, DC = общество, DC = COM) -LDAPGroupDn=Групи "DN -LDAPGroupDnExample=Пълна DN (: ОУ = групи, DC = общество, DC = COM) -LDAPServerExample=Адрес на сървъра (например: Localhost, 192.168.0.2, ldaps :/ / ldap.example.com /) -LDAPServerDnExample=Пълна DN (: DC = компания, DC = COM) +LDAPPassword=Парола на администратор +LDAPUserDn=DN на потребители +LDAPUserDnExample=Цялостен DN (например: ou=users, dc=example, dc=com) +LDAPGroupDn=DN на групи +LDAPGroupDnExample=Цялостен DN (например: ou=groups, dc=example, dc=com) +LDAPServerExample=Адрес на сървъра (например: localhost, 192.168.0.2, ldaps://ldap.example.com/) +LDAPServerDnExample=Цялостен DN (например: dc=example, dc=com) LDAPDnSynchroActive=Потребители и групи синхронизация -LDAPDnSynchroActiveExample=LDAP Dolibarr или Dolibarr LDAP синхронизация -LDAPDnContactActive=Контакти "синхронизация -LDAPDnContactActiveExample=Активира / Неактивирани синхронизация -LDAPDnMemberActive=Членовете синхронизация -LDAPDnMemberActiveExample=Активира / Неактивирани синхронизация +LDAPDnSynchroActiveExample=LDAP към Dolibarr или Dolibarr към LDAP синхронизация +LDAPDnContactActive=Синхронизация на контакти +LDAPDnContactActiveExample=Активирана / Неактивирана синхронизация +LDAPDnMemberActive=Синхронизация на членове +LDAPDnMemberActiveExample=Активирана / Неактивирана синхронизация LDAPDnMemberTypeActive=Синхронизиране на видове членове LDAPDnMemberTypeActiveExample=Активирана / Неактивирана синхронизация -LDAPContactDn=Dolibarr контакти "DN -LDAPContactDnExample=Пълна DN (бивши: ОУ = контакти, DC = общество, DC = COM) -LDAPMemberDn=Dolibarr членове DN -LDAPMemberDnExample=Пълна DN (EX: OU = потребители, DC = общество, DC = COM) -LDAPMemberObjectClassList=Списък на objectClass -LDAPMemberObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (напр. върха, inetOrgPerson или отгоре, ръководство за активна директория) +LDAPContactDn=DN на контакти от Dolibarr +LDAPContactDnExample=Цялостен DN (например: ou=contacts, dc=example, dc=com) +LDAPMemberDn=DN на членове от Dolibarr +LDAPMemberDnExample=Цялостен DN (например: ou=members, dc=example, dc=com) +LDAPMemberObjectClassList=Списък на objectClass за членове +LDAPMemberObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, inetOrgPerson или top, user за активна директория) LDAPMemberTypeDn=Dolibarr видове членове DN LDAPMemberTypepDnExample=Пълна DN (напр. ou = memberstypes, dc = example, dc = com) LDAPMemberTypeObjectClassList=Списък на objectClass LDAPMemberTypeObjectClassListExample=Списък на objectClass определящи атрибути на запис (напр. top, groupOfUniqueNames) -LDAPUserObjectClassList=Списък на objectClass -LDAPUserObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (напр. върха, inetOrgPerson или отгоре, ръководство за активна директория) -LDAPGroupObjectClassList=Списък на objectClass -LDAPGroupObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (: отгоре, groupOfUniqueNames) -LDAPContactObjectClassList=Списък на objectClass -LDAPContactObjectClassListExample=Списък на атрибути за определяне на objectClass рекордни (напр. върха, inetOrgPerson или отгоре, ръководство за активна директория) -LDAPTestConnect=Тествайте LDAP връзка -LDAPTestSynchroContact=Тест за синхронизация на контактите -LDAPTestSynchroUser=Синхронизация тест на потребителя -LDAPTestSynchroGroup=Синхронизация Test група -LDAPTestSynchroMember=Член на синхронизация Test +LDAPUserObjectClassList=Списък на objectClass за потребители +LDAPUserObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, inetOrgPerson или top, user за активна директория) +LDAPGroupObjectClassList=Списък на objectClass за групи +LDAPGroupObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, groupOfUniqueNames) +LDAPContactObjectClassList=Списък на objectClass за контакти +LDAPContactObjectClassListExample=Списък на objectClass определящи атрибути на запис (например: top, inetOrgPerson или top, user за активна директория) +LDAPTestConnect=Тестово свързване с LDAP +LDAPTestSynchroContact=Тестово синхронизиране на контакти +LDAPTestSynchroUser=Тестово синхронизиране на потребители +LDAPTestSynchroGroup=Тестово синхронизиране на групи +LDAPTestSynchroMember=Тестово синхронизиране на членове LDAPTestSynchroMemberType=Тест за синхронизиране на вид член -LDAPTestSearch= Test a LDAP search -LDAPSynchroOK=Синхронизация тест успешно -LDAPSynchroKO=Неуспешно синхронизиране тест +LDAPTestSearch= Тестово търсене в LDAP +LDAPSynchroOK=Тестът за синхронизация е успешен +LDAPSynchroKO=Неуспешен тест за синхронизация LDAPSynchroKOMayBePermissions=Неуспешен тест за синхронизация. Проверете дали връзката към сървъра е правилно конфигурирана и позволява актуализации на LDAP -LDAPTCPConnectOK=TCP свърже с LDAP сървъра успешни (сървър = %s, Порт = %s) -LDAPTCPConnectKO=TCP се свърже с LDAP сървъра не успя (Server = %s, Port = %s) +LDAPTCPConnectOK=Успешното свързване на TCP към LDAP сървъра (Сървър = %s, Порт = %s) +LDAPTCPConnectKO=Неуспешно свързване на TCP към LDAP сървър (Сървър = %s, Порт = %s) LDAPBindOK=Свързването / удостоверяване с LDAP сървъра е успешно (Сървър = %s, Порт = %s, Администратор = %s, Парола = %s) LDAPBindKO=Свързването / удостоверяването с LDAP сървъра е неуспешно (Сървър = %s, Порт = %s, Администратор = %s, Парола = %s) LDAPSetupForVersion3=LDAP сървър, конфигуриран за версия 3 LDAPSetupForVersion2=LDAP сървър, конфигуриран за версия 2 -LDAPDolibarrMapping=Dolibarr Mapping -LDAPLdapMapping=LDAP Mapping -LDAPFieldLoginUnix=Вход (UNIX) +LDAPDolibarrMapping=Съпоставяне в Dolibarr +LDAPLdapMapping=Съпоставяне в LDAP +LDAPFieldLoginUnix=Входни данни (unix) LDAPFieldLoginExample=Пример: uid -LDAPFilterConnection=Търсене филтър +LDAPFilterConnection=Филтър за търсене LDAPFilterConnectionExample=Пример: &(objectClass=inetOrgPerson) -LDAPFieldLoginSamba=Вход (самба, activedirectory) +LDAPFieldLoginSamba=Входни данни (samba, activedirectory) LDAPFieldLoginSambaExample=Пример: СамбаПотребителскоИме -LDAPFieldFullname=Пълното име +LDAPFieldFullname=Пълно име LDAPFieldFullnameExample=Пример: cn LDAPFieldPasswordNotCrypted=Паролата не е криптирана LDAPFieldPasswordCrypted=Паролата е криптирана @@ -1421,64 +1424,64 @@ LDAPFieldFirstName=Собствено име LDAPFieldFirstNameExample=Пример: СобственоИме LDAPFieldMail=Имейл адрес LDAPFieldMailExample=Пример: ИмейлАдрес -LDAPFieldPhone=Професионален телефонен номер +LDAPFieldPhone=Служебен телефонен номер LDAPFieldPhoneExample=Пример: ТелефоненНомер LDAPFieldHomePhone=Личен телефонен номер LDAPFieldHomePhoneExample=Пример: ДомашенНомер -LDAPFieldMobile=Мобилен телефон +LDAPFieldMobile=Мобилен номер LDAPFieldMobileExample=Пример: МобиленНомер LDAPFieldFax=Номер на факс LDAPFieldFaxExample=Пример: ФаксНомер LDAPFieldAddress=Улица LDAPFieldAddressExample=Пример: Улица -LDAPFieldZip=Цип +LDAPFieldZip=Пощенски код LDAPFieldZipExample=Пример: ПощенскиКод LDAPFieldTown=Град LDAPFieldTownExample=Пример: Град LDAPFieldCountry=Държава LDAPFieldDescription=Описание LDAPFieldDescriptionExample=Пример: Описание -LDAPFieldNotePublic=Public Note +LDAPFieldNotePublic=Публична бележка LDAPFieldNotePublicExample=Пример: ПубличнаБележка -LDAPFieldGroupMembers= Членовете на групата +LDAPFieldGroupMembers= Членове на групата LDAPFieldGroupMembersExample= Пример: УникаленЧлен LDAPFieldBirthdate=Рождена дата LDAPFieldCompany=Фирма LDAPFieldCompanyExample=Пример: Фирма LDAPFieldSid=SID LDAPFieldSidExample=Пример: objectsid -LDAPFieldEndLastSubscription=Дата на абонамент края +LDAPFieldEndLastSubscription=Дата на приключване на абонамента LDAPFieldTitle=Длъжност -LDAPFieldTitleExample=Example: title -LDAPSetupNotComplete=LDAP настройка не е пълна (отидете на други раздели) -LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Не администратор или парола. LDAP достъп ще бъдат анонимни и в режим само за четене. -LDAPDescContact=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки намерени данни за контактите на Dolibarr. -LDAPDescUsers=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки намерени данни на потребителите Dolibarr. -LDAPDescGroups=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки данни, намиращи се на групи Dolibarr. -LDAPDescMembers=Тази страница ви позволява да дефинирате LDAP атрибути име в LDAP дърво за всеки намерени данни на Dolibarr членове модул. +LDAPFieldTitleExample=Пример: титла +LDAPSetupNotComplete=Настройката за LDAP не е завършена (преминете през другите раздели) +LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Не е предоставен администратор или парола. LDAP достъпът ще бъде анонимен и в режим само за четене. +LDAPDescContact=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни намерени за Dolibarr контакти. +LDAPDescUsers=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни намерени в Dolibarr потребители. +LDAPDescGroups=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни намерени в Dolibarr групи. +LDAPDescMembers=Тази страница позволява да се дефинира името на LDAP атрибути в LDAP дървото за всички данни, намерени в Dolibarr членове. LDAPDescMembersTypes=Тази страница ви позволява да дефинирате името на LDAP атрибутите в LDAP дърво за всяка информация, намерена във видовете членове в Dolibarr. -LDAPDescValues=Примерни стойности са предназначени за OpenLDAP със следните заредени схеми: core.schema, cosine.schema, inetorgperson.schema). Ако използвате thoose ценности и OpenLDAP, променете LDAP slapd.conf конфигурационен файл, за да има всички thoose схеми натоварени. -ForANonAnonymousAccess=За заверено достъп (достъп за писане например) -PerfDolibarr=Performance setup/optimizing report +LDAPDescValues=Примерните стойности са предназначени за OpenLDAP със следните заредени схеми: core.schema, cosine.schema, inetorgperson.schema ). Ако използвате тези стойности и OpenLDAP, променете вашия LDAP конфигурационен файл slapd.conf, за да бъдат заредени всички тези схеми. +ForANonAnonymousAccess=За удостоверен достъп (например за достъп за писане) +PerfDolibarr=Настройка за производителност / отчет за оптимизация YouMayFindPerfAdviceHere=Тази страница предоставя някои проверки или съвети, свързани с производителността. NotInstalled=Не е инсталирано, така че вашият сървър не се забавя от това. -ApplicativeCache=Applicative cache -MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.
More information here http://wiki.dolibarr.org/index.php/Module_MemCached_EN.
Note that a lot of web hosting provider does not provide such cache server. -MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete. -MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled. -OPCodeCache=OPCode cache +ApplicativeCache=Приложим кеш +MemcachedNotAvailable=Не е намерен приложим кеш. Може да подобрите производителността, чрез инсталиране на кеш сървър Memcached и модул, който може да използва този кеш сървър.
Повече информация може да откриете тук http://wiki.dolibarr.org/index.php/Module_MemCached_EN.
Имайте предвид, че много уеб хостинг доставчици не предоставят такъв кеш сървър. +MemcachedModuleAvailableButNotSetup=Намерен е модул Memcached за приложим кеш, но настройката на модула не е завършена. +MemcachedAvailableAndSetup=Модулът Memcached, предназначен за използване на Memcached сървър, е активиран. +OPCodeCache=OPCode кеш NoOPCodeCacheFound=Не е намерен OPCode кеш. Може би използвате OPCode кеш, различен от XCache или eAccelerator (добър) или може би нямате OPCode кеш (много лошо). -HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript) -FilesOfTypeCached=Files of type %s are cached by HTTP server -FilesOfTypeNotCached=Files of type %s are not cached by HTTP server -FilesOfTypeCompressed=Files of type %s are compressed by HTTP server -FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server -CacheByServer=Cache by server +HTTPCacheStaticResources=HTTP кеш за статични ресурси (css, img, javascript) +FilesOfTypeCached=Файлове от тип %s се кешират от HTTP сървър +FilesOfTypeNotCached=Файлове от тип %s не се кешират от HTTP сървър +FilesOfTypeCompressed=Файлове от тип %s се компресират от HTTP сървър +FilesOfTypeNotCompressed=Файлове от тип %s не се компресират от HTTP сървър +CacheByServer=Кеш от сървъра CacheByServerDesc=Например с помощта на Apache директивата "ExpiresByType image/gif A2592000" -CacheByClient=Cache by browser -CompressionOfResources=Compression of HTTP responses +CacheByClient=Кеш от браузъра +CompressionOfResources=Компресиране на HTTP отговори CompressionOfResourcesDesc=Например с помощта на Apache директивата "AddOutputFilterByType DEFLATE" -TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers +TestNotPossibleWithCurrentBrowsers=Такова автоматично откриване не е възможно с настоящите браузъри DefaultValuesDesc=Тук може да дефинирате стойността по подразбиране, която искате да използвате, когато създавате нов запис заедно с филтрите по подразбиране или реда за сортиране на записите в списъка. DefaultCreateForm=Стойности по подразбиране (за използване в формуляри) DefaultSearchFilters=Филтри за търсене по подразбиране @@ -1486,158 +1489,158 @@ DefaultSortOrder=Поръчки за сортиране по подразбир DefaultFocus=Полета за фокусиране по подразбиране DefaultMandatory=Задължителни полета по подразбиране във формуляри ##### Products ##### -ProductSetup=Настройка на модул Продукти -ServiceSetup=Услуги модул за настройка -ProductServiceSetup=Продукти и услуги модули за настройка +ProductSetup=Настройка на модулa за продукти +ServiceSetup=Настройка на модулa за услуги +ProductServiceSetup=Настройка на модула за продукти и услуги NumberOfProductShowInSelect=Максимален брой продукти за показване в комбинирани списъци за избор (0 = без ограничение) ViewProductDescInFormAbility=Показване на описанията на продуктите във формуляри (в противен случай се показват в изскачащи подсказки) -MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal +MergePropalProductCard=Активиране на опция за обединяване на продуктови PDF документи налични в секцията "Прикачени файлове и документи" в раздела "Свързани файлове" на търговско предложение, ако се продукт / услуга в предложението и модел за документи Azur ViewProductDescInThirdpartyLanguageAbility=Показване на описанията на продуктите в езика на контрагента UseSearchToSelectProductTooltip=Също така, ако имате голям брой продукти (> 100 000) може да увеличите скоростта като зададете константата PRODUCT_DONOTSEARCH_ANYWHERE да бъде със стойност "1" в Настройки - Други настройки. След това търсенето ще бъде ограничено до началото на низ. UseSearchToSelectProduct=Изчакване, докато бъде натиснат клавиш преди да се зареди съдържанието на комбинирания списък с продукти (това може да увеличи производителността, ако имате голям брой продукти, но е по-малко удобно) -SetDefaultBarcodeTypeProducts=Тип баркод по подразбиране за продукти -SetDefaultBarcodeTypeThirdParties=Тип баркод по подразбиране за контрагенти -UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition -ProductCodeChecker= Модул за генериране и проверка на кода на продукта (продукт или услуга) -ProductOtherConf= Продукт / услуга конфигурация +SetDefaultBarcodeTypeProducts=Тип баркод по подразбиране, който да се използва за продукти +SetDefaultBarcodeTypeThirdParties=Тип баркод по подразбиране, който се използва за контрагенти +UseUnits=Определете мерна единица за количество, която да се използва в поръчки, предложения или фактури +ProductCodeChecker= Модул за генериране и проверка на продуктовия код (продукт или услуга) +ProductOtherConf= Конфигуриране на продукт / услуга IsNotADir=не е директория! ##### Syslog ##### -SyslogSetup=Настройки на модул Системен дневниk -SyslogOutput=Логове изходи +SyslogSetup=Настройка на модула за отстраняване на грешки +SyslogOutput=Изходни регистри SyslogFacility=Механизъм SyslogLevel=Ниво -SyslogFilename=Име на файла и пътя -YouCanUseDOL_DATA_ROOT=Можете да използвате DOL_DATA_ROOT / dolibarr.log за лог файл в Dolibarr директория "документи". Можете да зададете различен път, за да се съхранява този файл. -ErrorUnknownSyslogConstant=Постоянни %s не е известен Syslog постоянно +SyslogFilename=Име на файла и път +YouCanUseDOL_DATA_ROOT=Може да използвате DOL_DATA_ROOT/dolibarr.log за регистрационен файл в Dolibarr "documents" директорията. Може да зададете различен път за съхранение на този файл. +ErrorUnknownSyslogConstant=Константата %s не е известна константа на Syslog OnlyWindowsLOG_USER=Windows поддържа само LOG_USER CompressSyslogs=Компресиране и архивиране на журнали за грешки (генерирани от модула Журнали за отстраняване на грешки) SyslogFileNumberOfSaves=Архивирани журнали ConfigureCleaningCronjobToSetFrequencyOfSaves=Конфигурирайте планираната задача за почистване, за да зададете честотата на архивиране на журнала ##### Donations ##### -DonationsSetup=Настройка на модул Дарение -DonationsReceiptModel=Шаблон на получаване на дарение +DonationsSetup=Настройка на модула за дарения +DonationsReceiptModel=Шаблон за получаване на дарение ##### Barcode ##### -BarcodeSetup=Настройки на модул Баркод -PaperFormatModule=Печат модул формат +BarcodeSetup=Настройка на модула за баркод +PaperFormatModule=Модул за печат BarcodeEncodeModule=Тип кодиране на баркод CodeBarGenerator=Баркод генератор -ChooseABarCode=Не е зададен генератор -FormatNotSupportedByGenerator=Format not supported by this generator -BarcodeDescEAN8=Баркод на типа EAN8 +ChooseABarCode=Не е определен генератор +FormatNotSupportedByGenerator=Форматът не се поддържа от този генератор +BarcodeDescEAN8=Баркод от тип EAN8 BarcodeDescEAN13=Баркод от тип EAN13 BarcodeDescUPC=Баркод от тип UPC BarcodeDescISBN=Баркод от тип ISBN -BarcodeDescC39=Баркод от типа С39 +BarcodeDescC39=Баркод от тип C39 BarcodeDescC128=Баркод от тип C128 BarcodeDescDATAMATRIX=Баркод от тип Datamatrix BarcodeDescQRCODE=Баркод от тип QR код -GenbarcodeLocation=Баркод генериране с инструмент от командния ред (използван от вътрешния генератор за някои видове баркод). Трябва да е съвместима с"genbarcode".
За пример: /usr/local/bin/genbarcode -BarcodeInternalEngine=Вътрешен генератор -BarCodeNumberManager=Менажер за автоматично дефиниране на баркод номера +GenbarcodeLocation=Инструмент за генериране на баркод, чрез за команден ред (използван от вътрешен механизъм за някои видове баркодове). Трябва да е съвместим с "genbarcode".
Например: /usr/local/bin/genbarcode +BarcodeInternalEngine=Вътрешен механизъм +BarCodeNumberManager=Мениджър за автоматично определяне на номерата на баркода ##### Prelevements ##### WithdrawalsSetup=Настройка на модул Директни дебитни плащания ##### ExternalRSS ##### -ExternalRSSSetup=Настройки на внасянето на външен RSS -NewRSS=Нова RSS хранилка -RSSUrl=RSS URL +ExternalRSSSetup=Настройка за импортиране на външни RSS +NewRSS=Нова RSS емисия +RSSUrl=RSS URL връзка RSSUrlExample=Интересна RSS емисия ##### Mailing ##### -MailingSetup=Настройка на модул Имейли +MailingSetup=Настройка на модула за имейл известия MailingEMailFrom=Подател на имейли (From), изпратени от модула Електронна поща MailingEMailError=Обратен имейл адрес (Errors-to) за имейли с грешки -MailingDelay=Seconds to wait after sending next message +MailingDelay=Секунди за изчакване преди изпращане на следващото съобщение ##### Notification ##### NotificationSetup=Настройка на модул Имейл известяване NotificationEMailFrom=Подател на имейли (From), изпратени от модула за известяване FixedEmailTarget=Получател ##### Sendings ##### SendingsSetup=Настройка на модула Експедиция -SendingsReceiptModel=Изпращане получаване модел -SendingsNumberingModules=Sendings номериране модули -SendingsAbility=Support shipping sheets for customer deliveries +SendingsReceiptModel=Модели на документи за изпращания +SendingsNumberingModules=Модели за номериране на изпращания +SendingsAbility=Поддържани листове за доставки към клиенти NoNeedForDeliveryReceipts=В повечето случаи експедиционните формуляри се използват както за формуляри за доставка на клиенти (списък на продуктите, които трябва да бъдат изпратени), така и за формуляри, които са получени и подписани от клиента. Следователно разписката за доставка на продукти е дублираща функция и рядко се активира. -FreeLegalTextOnShippings=Free text on shipments +FreeLegalTextOnShippings=Свободен текст в изпращания ##### Deliveries ##### -DeliveryOrderNumberingModules=Продукти доставки получаване номерацията модул -DeliveryOrderModel=Продукти доставки получаване модел -DeliveriesOrderAbility=Поддръжка продукти доставки постъпления -FreeLegalTextOnDeliveryReceipts=Свободен текст на разписки за доставка +DeliveryOrderNumberingModules=Модели за номериране на разписки за доставка +DeliveryOrderModel=Модели на документи за разписки за доставка +DeliveriesOrderAbility=Поддръжка на разписки за доставка +FreeLegalTextOnDeliveryReceipts=Свободен текст в разписки за доставка ##### FCKeditor ##### -AdvancedEditor=Разширено редактор -ActivateFCKeditor=Активирайте разширен редактор за: -FCKeditorForCompany=WYSIWIG създаване / редактиране на елементи на описание и бележка (с изключение на продукти / услуги) -FCKeditorForProduct=WYSIWIG създаване / редактиране на продукти / услуги описание и бележка +AdvancedEditor=Разширен редактор +ActivateFCKeditor=Активиране на разширен редактор за: +FCKeditorForCompany=WYSIWIG създаване / промяна на описание на елементите и бележки (с изключение на продукти / услуги) +FCKeditorForProduct=WYSIWIG създаване / промяна на описание на продукти / услуги FCKeditorForProductDetails=WYSIWIG създаване / редактиране на продуктови редове за всички обекти (предложения, поръчки, фактури и др.). Внимание: Използването на тази опция не се препоръчва, тъй като може да създаде проблеми с някои специални символи и при форматиране на страниците, по време на генериране на PDF файловете. -FCKeditorForMailing= WYSIWIG създаване / редактиране на писма -FCKeditorForUserSignature=WYSIWIG creation/edition of user signature +FCKeditorForMailing= WYSIWIG създаване / промяна на масови имейли (Инструменти -> Масови имейли) +FCKeditorForUserSignature=WYSIWIG създаване / промяна на подпис на потребители FCKeditorForMail=WYSIWIG създаване / редактиране на цялата поща (с изключение на Настройки - Електронна поща) ##### Stock ##### StockSetup=Настройка на модул Наличности IfYouUsePointOfSaleCheckModule=Ако използвате модула Точка за продажби (POS), предоставен по подразбиране или чрез външен модул, тази настройка може да бъде игнорирана от вашия POS модул. Повечето POS модули по подразбиране са разработени да създават веднага фактура, след което да намаляват наличностите, независимо от опциите тук. В случай, че имате нужда или не от автоматично намаляване на наличностите при регистриране на продажба от POS проверете и настройката на вашия POS модул. ##### Menu ##### -MenuDeleted=Меню заличават +MenuDeleted=Менюто е изтрито Menus=Менюта TreeMenuPersonalized=Персонализирани менюта NotTopTreeMenuPersonalized=Персонализирани менюта, които не са свързани с главното меню NewMenu=Ново меню Menu=Избор на меню -MenuHandler=Меню манипулатор -MenuModule=Източник модул -HideUnauthorizedMenu= Скриване на неоторизирани менюта (сива) -DetailId=Id меню -DetailMenuHandler=Манипулатор меню, където да покаже ново меню -DetailMenuModule=Модул име, ако меню влизането идват от модул -DetailType=Вид на менюто (горната или лявата) -DetailTitre=Меню етикет или код на етикета за превод +MenuHandler=Манипулатор на меню +MenuModule=Модул източник +HideUnauthorizedMenu= Скриване на неоторизирани менюта (сиво) +DetailId=Идентификатор на меню +DetailMenuHandler=Манипулатор на меню, в който да се покаже новото меню +DetailMenuModule=Име на модула, ако входните данни на менюто идват от модул +DetailType=Тип меню (горе или вляво) +DetailTitre=Етикет на менюто или етикет на кода за превод DetailUrl=URL адрес, където менюто ви изпратя (Absolute на URL линк или външна връзка с http://) -DetailEnabled=Състояние да покаже или не влизането -DetailRight=Условие, за да се покаже неразрешени менюта сиви -DetailLangs=Lang името на файла за превод на етикета код -DetailUser=Intern / EXTERN / +DetailEnabled=Условие за показване или не на вписване +DetailRight=Условие за показване на неоторизирани (сиви) менюта +DetailLangs=Име на .lang файла с етикет на кода на превод +DetailUser=Вътрешен / Външен / Всички Target=Цел DetailTarget=Насочване за връзки (_blank top отваря нов прозорец) -DetailLevel=Level (-1: горното меню, 0: хедър, меню> 0 меню и подменю) -ModifMenu=Меню промяна -DeleteMenu=Изтриване на елемент от менюто +DetailLevel=Ниво (-1:top menu, 0:header menu, >0 menu and sub menu) +ModifMenu=Промяна на менюто +DeleteMenu=Изтриване на менюто ConfirmDeleteMenu=Сигурни ли сте, че искате да изтриете записа в менюто %s ? -FailedToInitializeMenu=Неуспешно инициализиране на меню +FailedToInitializeMenu=Неуспешно инициализиране на менюто ##### Tax ##### -TaxSetup=Taxes, social or fiscal taxes and dividends module setup -OptionVatMode=Дължимия ДДС +TaxSetup=Настройка на модул за данъци, социални или фискални данъци и дивиденти +OptionVatMode=Изискуемост на ДДС OptionVATDefault=Стандартна основа -OptionVATDebitOption=Accrual basis +OptionVATDebitOption=Основа за начисляване OptionVatDefaultDesc=ДДС се дължи:
- при доставка на стоки (въз основа на датата на фактурата)
- при плащания на услуги OptionVatDebitOptionDesc=ДДС се дължи:
- при доставка на стоки (въз основа на датата на фактурата)
- по фактура (дебит) за услуги OptionPaymentForProductAndServices=Парична база за продукти и услуги OptionPaymentForProductAndServicesDesc=ДДС се дължи:
- при плащане на стоки
- при плащания за услуги SummaryOfVatExigibilityUsedByDefault=ДДС се изисква по подразбиране според избраната опция: OnDelivery=При доставка -OnPayment=На плащане -OnInvoice=На фактура -SupposedToBePaymentDate=Дата на плащане, използвани -SupposedToBeInvoiceDate=Дата на фактура използва -Buy=Купувам +OnPayment=При плащане +OnInvoice=При фактуриране +SupposedToBePaymentDate=Използва се дата на плащането +SupposedToBeInvoiceDate=Използва се дата на фактурата +Buy=Покупка Sell=Продажба -InvoiceDateUsed=Дата на фактура използва +InvoiceDateUsed=Използва се дата на фактурата YourCompanyDoesNotUseVAT=Вашата фирма не е определила да използва ДДС (Начало - Настройки - Фирма / Организация), така че няма опции за настройка на ДДС. AccountancyCode=Счетоводен код -AccountancyCodeSell=Sale account. code -AccountancyCodeBuy=Purchase account. code +AccountancyCodeSell=Счетоводен код за продажба +AccountancyCodeBuy=Счетоводен код за покупка ##### Agenda ##### -AgendaSetup=Събития и натъкмяване на дневен ред модул -PasswordTogetVCalExport=, За да разреши износ връзка -PastDelayVCalExport=Не изнася случай по-стари от +AgendaSetup=Настройка на модула за събития и календар +PasswordTogetVCalExport=Ключ за оторизация на връзката за експортиране +PastDelayVCalExport=Да не се експортират събития по-стари от AGENDA_USE_EVENT_TYPE=Използване на видове събития (управлявани в меню Настройка - Речници - Видове събития в календара) AGENDA_USE_EVENT_TYPE_DEFAULT=Автоматично задаване на стойност по подразбиране за вид събитие във формуляра при създаване на събитие AGENDA_DEFAULT_FILTER_TYPE=Автоматично задаване на стойност по подразбиране за вид събитие във филтъра за търсене на календара AGENDA_DEFAULT_FILTER_STATUS=Автоматично задаване на стойност по подразбиране за статус на събитие във филтъра за търсене на календара -AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda +AGENDA_DEFAULT_VIEW=Кой раздел да се зарежда по подразбиране, когато се отваря календара AGENDA_REMINDER_EMAIL=Активиране на напомняне за събития, чрез имейли (опцията за напомняне / закъснение може да бъде определена за всяко събитие). Забележка: Модулът %s трябва да бъде активиран и правилно настроен, за да се изпращат напомняния в определеното време. AGENDA_REMINDER_BROWSER=Активиране на напомняне за събития в браузъра на потребителя (когато бъде достигната датата на събитието, всеки потребител може да отхвърли известието от браузъра) AGENDA_REMINDER_BROWSER_SOUND=Активиране на звуково известяване AGENDA_SHOW_LINKED_OBJECT=Показване на свързания обект в календара ##### Clicktodial ##### -ClickToDialSetup=Кликнете, за да наберете настройка модул +ClickToDialSetup=Настройка на модула за набиране (ClickToDial) ClickToDialUrlDesc=URL, който се извиква при кликване върху телефонен номер. В URL адреса може да използвате маркери
__PHONETO__, който ще бъде заменен с телефонния номер на лицето, на което ще се обаждате
__PHONEFROM__, който ще бъде заменен с телефонния номер на обаждащия се (вашият)
__LOGIN__, който ще бъде заменен с clicktodial потребителско име (дефиниран в картата на потребителя)
__PASS__, който ще бъде заменен с clicktodial парола (дефинирана в картата на потребителя). ClickToDialDesc=Този модул прави възможно кликването върху телефонни номера. С едно щракване върху иконата ще наберете телефонният номер. Това може да се използва за извикване на Call-Center система от Dolibarr, която може да избере например телефонен номер в SIP система. ClickToDialUseTelLink=Просто използвайте връзката "tel:" за телефонни номера @@ -1646,61 +1649,61 @@ ClickToDialUseTelLinkDesc=Използвайте този метод, ако в CashDesk=Точка за продажба CashDeskSetup=Настройка на модул Точка за продажби CashDeskThirdPartyForSell=Стандартен контрагент по подразбиране, който да се използва за продажби -CashDeskBankAccountForSell=Акаунт по подразбиране да се използва за получаване на парични плащания +CashDeskBankAccountForSell=Сметка по подразбиране, която да се използва за получаване на плащания в брой CashDeskBankAccountForCheque= Банкова сметка по подразбиране, която да се използва за получаване на плащания с чек -CashDeskBankAccountForCB= Акаунт по подразбиране да се използва за получаване на парични плащания с кредитни карти +CashDeskBankAccountForCB= Сметка по подразбиране, която да се използва за получаване на плащания с кредитни карти CashDeskDoNotDecreaseStock=Изключване на намаляването на наличности, когато продажбата се извършва от точка за продажби (ако стойността е "НЕ", намаляването на наличности се прави за всяка продажба, извършена от POS, независимо от опцията, определена в модула Наличности). -CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease +CashDeskIdWareHouse=Принуждаване и ограничаване използването на склад при намаляване на наличностите StockDecreaseForPointOfSaleDisabled=Намаляването на наличности от точка за продажби е деактивирано StockDecreaseForPointOfSaleDisabledbyBatch=Намаляването на наличности в POS не е съвместимо с модула Продуктови партиди (активен в момента), така че намаляването на наличности е деактивирано. CashDeskYouDidNotDisableStockDecease=Не сте деактивирали намаляването на запасите при продажбата от точка за продажби, поради тази причина се изисква наличие на склад. ##### Bookmark ##### -BookmarkSetup=Bookmark настройка модул +BookmarkSetup=Настройка на модула на отметки BookmarkDesc=Този модул позволява да се управляват отметки. Може също да добавяте преки пътища към всички страници на Dolibarr или външни уеб сайтове в лявото меню. NbOfBoomarkToShow=Максимален брой отметки, които да се показват в лявото меню ##### WebServices ##### -WebServicesSetup=WebServices модул за настройка -WebServicesDesc=С активирането на този модул, Dolibarr се превърне в уеб сървъра на услугата за предоставяне на различни уеб услуги. -WSDLCanBeDownloadedHere=WSDL ЕВРОВОК файлове на предоставяните услуги може да изтеглите от тук +WebServicesSetup=Настройка на модул за уеб услуги +WebServicesDesc=Чрез активирането на този модул, Dolibarr се превръща в сървър за уеб услуги, който осигурява различни уеб услуги. +WSDLCanBeDownloadedHere=WSDL дескрипторните файлове на предоставените услуги могат да бъдат свалени тук EndPointIs=SOAP клиентите трябва да изпращат заявките си до крайна точка на Dolibarr, достъпна чрез URL ##### API #### -ApiSetup=API module setup -ApiDesc=By enabling this module, Dolibarr become a REST server to provide miscellaneous web services. +ApiSetup=Настройка на модула API +ApiDesc=Чрез активирането на този модул Dolibarr става REST сървър за предоставяне на различни уеб услуги. ApiProductionMode=Активиране на производствен режим (това ще активира използването на кеш при управление на услуги) ApiExporerIs=Можете да изследвате и тествате API на URL адрес -OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed -ApiKey=Key for API +OnlyActiveElementsAreExposed=Изложени са само елементи от активираните модули +ApiKey=Ключ за API WarningAPIExplorerDisabled=API Explorer е деактивиран. API Explorer не се изисква да предоставя API услуги. Той е инструмент за разработчици за намиране / тестване на REST API. Ако имате нужда от този инструмент, влезте в настройките на модула API REST, за да го активирате. ##### Bank ##### -BankSetupModule=Модул за настройка на банката +BankSetupModule=Настройка на модула за банки и парични сметки FreeLegalTextOnChequeReceipts=Свободен текст в чековите разписки -BankOrderShow=Показване ред на банкови сметки за страни, които използват "подробен номер на банкова +BankOrderShow=Ред на показване на банкови сметки за държави, използващи "подробен банков номер" BankOrderGlobal=Общ -BankOrderGlobalDesc=Обща дисплей за +BankOrderGlobalDesc=Общ ред на показване BankOrderES=Испански -BankOrderESDesc=Испански дисплей за +BankOrderESDesc=Испански ред за показване ChequeReceiptsNumberingModule=Модел за номериране на чекови разписки ##### Multicompany ##### -MultiCompanySetup=Multi-модул за настройка компания +MultiCompanySetup=Настройка на модула за няколко фирми ##### Suppliers ##### SuppliersSetup=Настройка на модул Доставчици SuppliersCommandModel=Пълен шаблон на поръчка за покупка (лого ...) SuppliersInvoiceModel=Пълен шаблон на фактура за доставка (лого ...) SuppliersInvoiceNumberingModel=Модели за номериране на фактури за доставка -IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval +IfSetToYesDontForgetPermission=Ако е избрано ДА, не забравяйте да предоставите права на групи или потребители, от които се очаква второто одобрение. ##### GeoIPMaxmind ##### -GeoIPMaxmindSetup=GeoIP MaxMind модул за настройка -PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.
Examples:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat -NoteOnPathLocation=Имайте предвид, че ИП в страната файла с данни трябва да е в директория PHP ви да прочетете (Проверете PHP open_basedir настройка и разрешения файловата система). -YouCanDownloadFreeDatFileTo=Можете да изтеглите безплатна демо версия на файла GeoIP MaxMind страната в %s. -YouCanDownloadAdvancedDatFileTo=Можете също да изтеглите по-пълна версия, с актуализации на файла GeoIP MaxMind страната в %s. -TestGeoIPResult=Тест на преобразуване IP -> страната +GeoIPMaxmindSetup=Настройка на модула GeoIP Maxmind +PathToGeoIPMaxmindCountryDataFile=Път до файл, съдържащ Maxmind IP за превод на държава.
Примери:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat +NoteOnPathLocation=Обърнете внимание, че вашият IP файл с данни за държавата трябва да е в директория, която може да се чете от PHP (проверете настройките на вашата PHP open_basedir и правата на файловата система). +YouCanDownloadFreeDatFileTo=Може да изтеглите безплатна демо версия на Maxmind GeoIP файла за държавата от %s. +YouCanDownloadAdvancedDatFileTo=Може също така да изтеглите по-пълна версия, с актуализации на Maxmind GeoIP файла за държавата от %s. +TestGeoIPResult=Тест за конвертиране IP -> Държава ##### Projects ##### -ProjectsNumberingModules=Проекти номериране модул -ProjectsSetup=Инсталационния проект модул -ProjectsModelModule=Проект доклади документ модел -TasksNumberingModules=Tasks numbering module -TaskModelModule=Tasks reports document model +ProjectsNumberingModules=Модел за номериране на проекти +ProjectsSetup=Настройка на модула за проекти +ProjectsModelModule=Модели на документи за справки по проекти +TasksNumberingModules=Модел за номериране на задачи +TaskModelModule=Модели на документи за справки по задачи UseSearchToSelectProject=Изчакване, докато се натисне клавиш, преди да се зареди съдържанието на комбинирания списък с проекти.
Това може да подобри производителността при по-голям брой проекти, но е по-малко удобно. ##### ECM (GED) ##### ##### Fiscal Year ##### @@ -1712,70 +1715,70 @@ CloseFiscalYear=Затваряне на счетоводен период DeleteFiscalYear=Изтриване на счетоводен период ConfirmDeleteFiscalYear=Сигурни ли сте, че искате да изтриете този счетоводен период? ShowFiscalYear=Преглед на счетоводен период -AlwaysEditable=Can always be edited -MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application) -NbMajMin=Minimum number of uppercase characters -NbNumMin=Minimum number of numeric characters -NbSpeMin=Minimum number of special characters -NbIteConsecutive=Maximum number of repeating same characters -NoAmbiCaracAutoGeneration=Do not use ambiguous characters ("1","l","i","|","0","O") for automatic generation -SalariesSetup=Setup of module salaries -SortOrder=Sort order -Format=Format +AlwaysEditable=Винаги може да се редактира +MAIN_APPLICATION_TITLE=Промяна на визуалното име на Dolibarr (Внимание: Задаването на персонализирано име тук може да наруши функцията за автоматично попълване на входни данни при използване на мобилното приложение DoliDroid) +NbMajMin=Минимален брой главни букви +NbNumMin=Минимален брой цифрови символи +NbSpeMin=Минимален брой специални символи +NbIteConsecutive=Максимален брой повтарящи се символи +NoAmbiCaracAutoGeneration=Да не се използват двусмислени символи ("1","l","i","|","0","O") за автоматично генериране +SalariesSetup=Настройка на модула за заплати +SortOrder=Ред на сортиране +Format=Формат TypePaymentDesc=0: Вид на плащане за клиент, 1: Вид плащане за доставчик, 2: Вид на плащане за клиенти и доставчици -IncludePath=Include path (defined into variable %s) -ExpenseReportsSetup=Setup of module Expense Reports -TemplatePDFExpenseReports=Document templates to generate expense report document +IncludePath=Включва път (дефиниран в променлива %s) +ExpenseReportsSetup=Настройка на модула за разходни отчети +TemplatePDFExpenseReports=Модели на документи за разходни отчети ExpenseReportsIkSetup=Настройка на модул Разходни отчети - Показания на километража ExpenseReportsRulesSetup=Настройка на модул Разходни отчети - Правила ExpenseReportNumberingModules=Модул за номериране на разходни отчети -NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only. +NoModueToManageStockIncrease=Не е активиран модул, способен да управлява автоматичното увеличаване на наличности. Увеличаването на наличности ще се извършва само при ръчно въвеждане. YouMayFindNotificationsFeaturesIntoModuleNotification=Може да откриете опции за известия по имейл като активирате и конфигурирате модула "Известия". ListOfNotificationsPerUser=Списък с известия за потребител* ListOfNotificationsPerUserOrContact=Списък с известия (събития), налични за потребител* или за контакт** ListOfFixedNotifications=Списък с фиксирани известия GoOntoUserCardToAddMore=Отидете в раздела „Известия“ на съответния потребител, за да добавите или премахнете известия за този потребител GoOntoContactCardToAddMore=Отидете в раздела „Известия“ на съответния контрагент, за да добавите или премахнете известия за съответните контакти / адреси -Threshold=Threshold +Threshold=Граница BackupDumpWizard=Асистент за създаване на архивния файл -SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason: +SomethingMakeInstallFromWebNotPossible=Инсталирането на външен модул не е възможно от уеб интерфейса, поради следната причина: SomethingMakeInstallFromWebNotPossible2=Поради тази причина описаният тук процес за актуализация е ръчен процес, който може да се изпълнява само от потребител със съответните права. -InstallModuleFromWebHasBeenDisabledByFile=Install of external module from application has been disabled by your administrator. You must ask him to remove the file %s to allow this feature. +InstallModuleFromWebHasBeenDisabledByFile=Инсталирането на външен модул в приложението е деактивирано от администратора на системата. Трябва да го помолите да премахне файла %s, за да разреши тази функция. ConfFileMustContainCustom=Инсталирането или създаването на външен модул в приложението е необходимо да съхрани файловете на модула в директорията %s. За да се обработва тази директория от Dolibarr, трябва да настроите вашият conf/conf.php файл да съдържа двете директивни линии:
$dolibarr_main_url_root_alt = '/custom';
$dolibarr_main_document_root_alt = '%s/custom'; -HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over +HighlightLinesOnMouseHover=Маркиране на редове в таблица, когато мишката преминава отгоре HighlightLinesColor=Цвят на подчертания ред при преминаване на мишката отгоре (използвайте 'ffffff', ако не искате да се подчертава) HighlightLinesChecked=Цвят на подчертания ред, когато е маркиран (използвайте 'ffffff',ако не искате да се подчертава) TextTitleColor=Цвят на текста в заглавието на страницата LinkColor=Цвят на връзките PressF5AfterChangingThis=Натиснете CTRL + F5 на клавиатурата или изчистете кеша на браузъра си след като промените тази стойност, за да стане ефективна. NotSupportedByAllThemes=Ще работи с основните теми, но може да не се поддържат външни теми. -BackgroundColor=Background color -TopMenuBackgroundColor=Background color for Top menu +BackgroundColor=Цвят на фона +TopMenuBackgroundColor=Цвят на фона в горното меню TopMenuDisableImages=Скриване на изображения в горното меню -LeftMenuBackgroundColor=Background color for Left menu -BackgroundTableTitleColor=Background color for Table title line +LeftMenuBackgroundColor=Цвят на фона в лявото меню +BackgroundTableTitleColor=Цвят на фона в реда със заглавието на таблица BackgroundTableTitleTextColor=Цвят на текста в заглавието на таблиците -BackgroundTableLineOddColor=Background color for odd table lines -BackgroundTableLineEvenColor=Background color for even table lines -MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay) -NbAddedAutomatically=Number of days added to counters of users (automatically) each month -EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters. +BackgroundTableLineOddColor=Цвят на фона в нечетните редове на таблица +BackgroundTableLineEvenColor=Цвят на фона в четните редове на таблица +MinimumNoticePeriod=Минимален срок за известяване (вашата молба за отпуск трябва да бъде изпратена преди този срок) +NbAddedAutomatically=Брой дни, добавени към броячите на потребителите (автоматично) всеки месец +EnterAnyCode=Това поле съдържа референция за идентифициране на реда. Въведете стойност по ваш избор, но без специални символи. UnicodeCurrency=Въведете тук между скобите, десетичен код, който представлява символа на валутата. Например: за $, въведете [36] - за Бразилски Реал R$ [82,36] - за €, въведете [8364] ColorFormat=RGB цвета е в HEX формат, например: FF0000 -PositionIntoComboList=Position of line into combo lists -SellTaxRate=Sale tax rate +PositionIntoComboList=Позиция на реда в комбинирани списъци +SellTaxRate=Ставка на данъка върху продажби RecuperableOnly=Да за ДДС "Не възприеман, но възстановим", предназначен за някои области във Франция. Запазете стойността "Не" във всички останали случаи. UrlTrackingDesc=Ако доставчикът или транспортната услуга предлага страница или уеб сайт за проверка на статуса на вашите пратки, то може да ги въведете тук. Може да използвате ключа {TRACKID} в URL параметрите, така че системата да го замени с проследяващия номер, който потребителят е въвел в картата на пратката. OpportunityPercent=Когато създавате нова възможност определяте приблизително очакваната сума от проекта / възможността. Според статуса на възможността тази сума ще бъде умножена по определения му процент, за да се оцени общата сума, която всичките ви възможности могат да генерират. Стойността е в проценти (между 0 и 100). -TemplateForElement=This template record is dedicated to which element -TypeOfTemplate=Type of template +TemplateForElement=Този шаблон е специализиран за елемент +TypeOfTemplate=Тип шаблон TemplateIsVisibleByOwnerOnly=Шаблонът е видим само за собственика му VisibleEverywhere=Видим навсякъде VisibleNowhere=Не се вижда никъде -FixTZ=TimeZone fix -FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced) -ExpectedChecksum=Expected Checksum -CurrentChecksum=Current Checksum +FixTZ=Поправка на времева зона +FillFixTZOnlyIfRequired=Пример: +2 (попълнете само при проблем) +ExpectedChecksum=Очаквана контролна сума +CurrentChecksum=Текуща контролна сума ForcedConstants=Необходими постоянни стойности MailToSendProposal=Клиентски предложения MailToSendOrder=Поръчки за продажба @@ -1790,7 +1793,7 @@ MailToThirdparty=Контрагенти MailToMember=Членове MailToUser=Потребители MailToProject=Страница "Проекти" -ByDefaultInList=Показване по подразбиране при показа на списък +ByDefaultInList=Показване по подразбиране в списъчен изглед YouUseLastStableVersion=Използвате последната стабилна версия TitleExampleForMajorRelease=Пример за съобщение, което може да използвате, за да обявите това главно издание (не се колебайте да го използвате на уебсайтовете си) TitleExampleForMaintenanceRelease=Пример за съобщение, което може да използвате, за да обявите това издание за поддръжка (не се колебайте да го използвате на уебсайтовете си) @@ -1923,5 +1926,5 @@ IFTTTDesc=Този модул е предназначен да задейств UrlForIFTTT=URL адрес за IFTTT YouWillFindItOnYourIFTTTAccount=Ще го намерите във вашият IFTTT акаунт EndPointFor=Крайна точка за %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Изтриване на имейл колекционер +ConfirmDeleteEmailCollector=Сигурни ли те, че искате да изтриете този колекционер на имейли? diff --git a/htdocs/langs/bg_BG/agenda.lang b/htdocs/langs/bg_BG/agenda.lang index 198781d303e..74975f5a6e7 100644 --- a/htdocs/langs/bg_BG/agenda.lang +++ b/htdocs/langs/bg_BG/agenda.lang @@ -1,9 +1,9 @@ # Dolibarr language file - Source file is en_US - agenda -IdAgenda=ID на събитие +IdAgenda=Идентификатор на събитие Actions=Събития -Agenda=Дневен ред +Agenda=Календар TMenuAgenda=Календар -Agendas=Дневен ред +Agendas=Календари LocalAgenda=Вътрешен календар ActionsOwnedBy=Събитие принадлежащо на ActionsOwnedByShort=Собственик @@ -11,74 +11,74 @@ AffectedTo=Възложено на Event=Събитие Events=Събития EventsNb=Брой събития -ListOfActions=Списък на събитията +ListOfActions=Списък на събития EventReports=Отчети за събития -Location=Място -ToUserOfGroup=За всеки потребител в група -EventOnFullDay=Събитие по цял ден (дни) +Location=Местоположение +ToUserOfGroup=на всеки потребител от група +EventOnFullDay=Целодневно събитие MenuToDoActions=Всички незавършени събития MenuDoneActions=Всички прекратени събития MenuToDoMyActions=Моите незавършени събития MenuDoneMyActions=Моите прекратени събития -ListOfEvents=Списък на събитията (Вътрешен календар) -ActionsAskedBy=Събития създадени от -ActionsToDoBy=Събития възложени на -ActionsDoneBy=Събития извършени от -ActionAssignedTo=Събитие определено на +ListOfEvents=Списък на събития (Вътрешен календар) +ActionsAskedBy=Събития, съобщени от +ActionsToDoBy=Събития, възложени на +ActionsDoneBy=Събития, извършени от +ActionAssignedTo=Събитие, възложено на ViewCal=Месечен изглед ViewDay=Дневен изглед ViewWeek=Седмичен изглед ViewPerUser=Изглед по потребител -ViewPerType=Преглед по тип +ViewPerType=Изглед по тип AutoActions= Автоматично попълване -AgendaAutoActionDesc= Тук можете да дефинирате събития, които искате Dolibarr да създаде автоматично в бележника. Ако нищо не е отметнато, в регистрите ще бъдат включени само ръчни добавените събития и ще се показват в бележника. Автоматично проследяваните събития, извършени върху обекти (валидиране, промяна на състоянието), няма да бъдат запазени. +AgendaAutoActionDesc= Тук може да дефинирате събития, които искате Dolibarr да създаде автоматично в календара. Ако нищо не е отметнато, в регистрите ще бъдат включени само ръчно добавените събития и ще се показват в календара. Автоматично проследяваните събития, извършени върху обекти (валидиране, промяна на състояние) няма да бъдат запазени. AgendaSetupOtherDesc= Тази страница предлага опции, позволяващи експортирането на вашите Dolibarr събития във външен календар (Thunderbird, Google Calendar и др.) -AgendaExtSitesDesc=Тази страница позволява да се обяви външните източници на календари, за да видят своите събития в дневния ред Dolibarr. -ActionsEvents=Събития, за които Dolibarr ще създаде действие в дневния ред автоматично -EventRemindersByEmailNotEnabled=Напомнянията за събития по имейл не са активирани в настройката на модула %s. +AgendaExtSitesDesc=Тази страница позволява да се декларират външни източници на календари, за да се видят техните събития в календара на Dolibarr. +ActionsEvents=Събития, за които Dolibarr ще създаде автоматично събитие в календара +EventRemindersByEmailNotEnabled=Напомнянията за събития по имейл не са активирани в настройката на модул %s. ##### Agenda event labels ##### NewCompanyToDolibarr=Контрагент %s е създаден COMPANY_DELETEInDolibarr=Контрагент %s е изтрит -ContractValidatedInDolibarr=Контакт %s е валидиран +ContractValidatedInDolibarr=Договор %s е валидиран CONTRACT_DELETEInDolibarr=Договор %s е изтрит PropalClosedSignedInDolibarr=Предложение %s е подписано -PropalClosedRefusedInDolibarr=Предложение %s е отказано -PropalValidatedInDolibarr=Предложение %s валидирано +PropalClosedRefusedInDolibarr=Предложение %s е отхвърлено +PropalValidatedInDolibarr=Предложение %s е валидирано PropalClassifiedBilledInDolibarr=Предложение %s е фактурирано -InvoiceValidatedInDolibarr=Фактура %s валидирани -InvoiceValidatedInDolibarrFromPos=Фактура %s валидирана от POS -InvoiceBackToDraftInDolibarr=Фактура %s се върнете в състояние на чернова -InvoiceDeleteDolibarr=Фактура %s изтрита +InvoiceValidatedInDolibarr=Фактура %s е валидирана +InvoiceValidatedInDolibarrFromPos=Фактура %s е валидирана от POS +InvoiceBackToDraftInDolibarr=Фактура %s е върната в статус на чернова +InvoiceDeleteDolibarr=Фактура %s е изтрита InvoicePaidInDolibarr=Фактура %s е платена InvoiceCanceledInDolibarr=Фактура %s е анулирана MemberValidatedInDolibarr=Член %s е валидиран MemberModifiedInDolibarr=Член %s е променен MemberResiliatedInDolibarr=Член %s е прекратен MemberDeletedInDolibarr=Член %s е изтрит -MemberSubscriptionAddedInDolibarr=Абонамент %s за член %s е добавен -MemberSubscriptionModifiedInDolibarr=Абонамент %s за член %s е променен -MemberSubscriptionDeletedInDolibarr=Абонамент %s за член %s е изтрит +MemberSubscriptionAddedInDolibarr=Членски внос %s за член %s е добавен +MemberSubscriptionModifiedInDolibarr=Членски внос %s за член %s е променен +MemberSubscriptionDeletedInDolibarr=Членски внос %s за член %s е изтрит ShipmentValidatedInDolibarr=Пратка %s е валидирана ShipmentClassifyClosedInDolibarr=Пратка %s е фактурирана ShipmentUnClassifyCloseddInDolibarr=Пратка %s е повторно отворена -ShipmentBackToDraftInDolibarr=Пратка %s е върната в чернова +ShipmentBackToDraftInDolibarr=Пратка %s е върната в статус чернова ShipmentDeletedInDolibarr=Пратка %s е изтрита OrderCreatedInDolibarr=Поръчка %s е създадена -OrderValidatedInDolibarr=Поръчка %s валидирани -OrderDeliveredInDolibarr=Поръчка %s класифицирана доставена -OrderCanceledInDolibarr=Поръчка %s отменен -OrderBilledInDolibarr=Поръчка %s класифицирана таксувана -OrderApprovedInDolibarr=Поръчка %s одобрен -OrderRefusedInDolibarr=Поръчка %s отказана -OrderBackToDraftInDolibarr=Поръчка %s се върне в състояние на чернова +OrderValidatedInDolibarr=Поръчка %s е валидирана +OrderDeliveredInDolibarr=Поръчка %s е класифицирана като доставена +OrderCanceledInDolibarr=Поръчка %s е анулирана +OrderBilledInDolibarr=Поръчка %s е класифицирана като фактурирана +OrderApprovedInDolibarr=Поръчка %s е одобрена +OrderRefusedInDolibarr=Поръчка %s е отхвърлена +OrderBackToDraftInDolibarr=Поръчка %s е върната в статус на чернова ProposalSentByEMail=Търговско предложение %s е изпратено по имейл ContractSentByEMail=Договор %s е изпратен по имейл OrderSentByEMail=Клиентска поръчка %s е изпратена по имейл -InvoiceSentByEMail=Клиентска фактура %s е изпратена по имейл +InvoiceSentByEMail=Фактура за продажба %s е изпратена по имейл SupplierOrderSentByEMail=Поръчка за покупка %s е изпратена по имейл -SupplierInvoiceSentByEMail=Доставна фактура %s е изпратена по имейл +SupplierInvoiceSentByEMail=Фактура за покупка %s е изпратена по имейл ShippingSentByEMail=Пратка %s е изпратена по имейл -ShippingValidated= Пратка %s валидирана +ShippingValidated= Пратка %s е валидирана InterventionSentByEMail=Интервенция %s е изпратена по имейл ProposalDeleted=Предложението е изтрито OrderDeleted=Поръчката е изтрита @@ -90,46 +90,46 @@ EXPENSE_REPORT_CREATEInDolibarr=Разходен отчет %s е създаде EXPENSE_REPORT_VALIDATEInDolibarr=Разходен отчет %s е валидиран EXPENSE_REPORT_APPROVEInDolibarr=Разходен отчет %s е одобрен EXPENSE_REPORT_DELETEInDolibarr=Разходен отчет %s е изтрит -EXPENSE_REPORT_REFUSEDInDolibarr=Разходен отчет %s е отказан +EXPENSE_REPORT_REFUSEDInDolibarr=Разходен отчет %s е отхвърлен PROJECT_CREATEInDolibarr=Проект %s е създаден PROJECT_MODIFYInDolibarr=Проект %s е променен PROJECT_DELETEInDolibarr=Проект %s е изтрит TICKET_CREATEInDolibarr=Тикет %s е създаден TICKET_MODIFYInDolibarr=Тикет %s е променен TICKET_ASSIGNEDInDolibarr=Тикет %s е възложен -TICKET_CLOSEInDolibarr=Тикет %s е затворен +TICKET_CLOSEInDolibarr=Тикет %s е приключен TICKET_DELETEInDolibarr=Тикет %s е изтрит ##### End agenda events ##### -AgendaModelModule=Шаблони на документи за събитие +AgendaModelModule=Шаблони за събитие DateActionStart=Начална дата DateActionEnd=Крайна дата -AgendaUrlOptions1=Можете да добавите и следните параметри, за да филтрирате изход: -AgendaUrlOptions3=logina=%s за да ограничи показването до действия притежавани от потребител %s. -AgendaUrlOptionsNotAdmin=  logina =! %s за ограничаване на изхода до събития, които не са собственост на потребителя %s . -AgendaUrlOptions4=  logint = %s за ограничаване на изхода до събития, възложени на потребителя %s (собственик and други). -AgendaUrlOptionsProject=  project = __ PROJECT_ID__ за ограничаване на изхода до събития свързани с проект __PROJECT_ID__ . -AgendaUrlOptionsNotAutoEvent= notactiontype = systemauto за изключване на автоматични събития. +AgendaUrlOptions1=Може също да добавите следните параметри за филтриране на резултата: +AgendaUrlOptions3=logina=%s, за да ограничи показването до събития притежавани от потребител %s. +AgendaUrlOptionsNotAdmin=logina=!%s, за да ограничи показването до събития, които не са собственост на потребител %s. +AgendaUrlOptions4=logint=%s, за да ограничи показването до събития, които са възложени на потребител %s (като собственик и не). +AgendaUrlOptionsProject=project=__PROJECT_ID__, за да ограничи показването до събития, които са свързани с проект __PROJECT_ID__. +AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto за изключване на автоматични събития. AgendaShowBirthdayEvents=Показване на рождени дни на контактите AgendaHideBirthdayEvents=Скриване на рождени дни на контактите Busy=Зает -ExportDataset_event1=Списък на събитията в дневния ред -DefaultWorkingDays=По подразбиране диапазон на работни дни в седмица (Пример: 1-5, 1-6) -DefaultWorkingHours=По подразбиране диапазон на работни часове в ден (Пример: 9-18) +ExportDataset_event1=Списък на събития в календар +DefaultWorkingDays=Диапазон на работните дни по подразбиране в седмицата (Пример: 1-5, 1-6) +DefaultWorkingHours=Работно време по подразбиране в рамките на един ден (Пример: 9-18) # External Sites ical -ExportCal=Изнасяне на календар +ExportCal=Експортиране на календар ExtSites=Импортиране на външни календари -ExtSitesEnableThisTool=Покажете външни календари (дефинирани в глобалната настройка) в бележника. Не засяга външните календари, дефинирани от потребители. +ExtSitesEnableThisTool=Показване на външни календари (дефинирани в глобалната настройка) в календара. Не засяга външни календари, дефинирани от потребители. ExtSitesNbOfAgenda=Брой календари AgendaExtNb=Календар № %s -ExtSiteUrlAgenda=URL адрес за достъп до файла .Ical +ExtSiteUrlAgenda=URL адрес за достъп до .ical файл ExtSiteNoLabel=Няма описание VisibleTimeRange=Видим времеви диапазон VisibleDaysRange=Видим диапазон от дни -AddEvent=Създаване събитие -MyAvailability=Моето разположение +AddEvent=Създаване на събитие +MyAvailability=Моята наличност ActionType=Тип събитие DateActionBegin=Начална дата на събитие -ConfirmCloneEvent=Сигурни ли сте че, искате да клонирате събитието %s ? +ConfirmCloneEvent=Сигурни ли сте, че искате да клонирате събитие %s? RepeatEvent=Повтаряне на събитие EveryWeek=Всяка седмица EveryMonth=Всеки месец diff --git a/htdocs/langs/bg_BG/banks.lang b/htdocs/langs/bg_BG/banks.lang index 2197dda55ff..e56b8c5deb8 100644 --- a/htdocs/langs/bg_BG/banks.lang +++ b/htdocs/langs/bg_BG/banks.lang @@ -7,15 +7,15 @@ BankName=Име на банката FinancialAccount=Сметка BankAccount=Банкова сметка BankAccounts=Банкови сметки -BankAccountsAndGateways=Банкови сметки | Портал +BankAccountsAndGateways=Банкови сметки | Портали ShowAccount=Показване на сметка AccountRef=Финансова сметка реф. -AccountLabel=Финансова сметка етикет +AccountLabel=Етикет на финансова сметка CashAccount=Сметка в брой CashAccounts=Парични сметки CurrentAccounts=Разплащателни сметки SavingAccounts=Спестовни сметки -ErrorBankLabelAlreadyExists=Етикета на финансовата сметка вече съществува +ErrorBankLabelAlreadyExists=Етикетът на финансовата сметка вече съществува BankBalance=Баланс BankBalanceBefore=Баланс преди BankBalanceAfter=Баланс след @@ -23,42 +23,42 @@ BalanceMinimalAllowed=Минимален разрешен баланс BalanceMinimalDesired=Минимален желан баланс InitialBankBalance=Начален баланс EndBankBalance=Краен баланс -CurrentBalance=Текущо салдо +CurrentBalance=Текущ баланс FutureBalance=Бъдещ баланс -ShowAllTimeBalance=Показване на баланса от началото +ShowAllTimeBalance=Показване на баланса от начало AllTime=От начало -Reconciliation=Помирение +Reconciliation=Съгласуване RIB=Номер на банкова сметка IBAN=IBAN номер -BIC=BIC/SWIFT Код -SwiftValid=BIC/SWIFT валиден -SwiftVNotalid=BIC/SWIFT невалиден -IbanValid=BAN валиден -IbanNotValid=BAN невалиден +BIC=BIC / SWIFT код +SwiftValid=BIC / SWIFT е валиден +SwiftVNotalid=BIC / SWIFT не е валиден +IbanValid=BAN е валиден +IbanNotValid=BAN не е валиден StandingOrders=Поръчки за директен дебит StandingOrder=Поръчка за директен дебит -AccountStatement=Отчет по сметка -AccountStatementShort=Отчет +AccountStatement=Извлечение по сметка +AccountStatementShort=Извлечение AccountStatements=Извлечения по сметки LastAccountStatements=Последни извлечения IOMonthlyReporting=Месечно отчитане BankAccountDomiciliation=Адрес на банката -BankAccountCountry=Профил страната -BankAccountOwner=Името на собственика на сметката -BankAccountOwnerAddress=Притежател на сметката адрес -RIBControlError=Проверката за достоверност на стойностите е неуспешна. Това означава, че информацията за този номер на сметката не е пълна или е неправилна (проверете страната, номерата и IBAN). +BankAccountCountry=Държава по местонахождение +BankAccountOwner=Титуляр на сметката +BankAccountOwnerAddress=Адрес на титуляра на сметката +RIBControlError=Проверката за достоверност на стойностите е неуспешна. Това означава, че информацията за този номер на сметка не е пълна или е неправилна (проверете страната, номерата и IBAN). CreateAccount=Създаване на сметка NewBankAccount=Нова сметка NewFinancialAccount=Нова финансова сметка MenuNewFinancialAccount=Нова финансова сметка -EditFinancialAccount=Редактиране на сметка -LabelBankCashAccount=Банка или етикета пари -AccountType=Тип на профила +EditFinancialAccount=Промяна на сметка +LabelBankCashAccount=Банков или паричен етикет +AccountType=Тип на сметката BankType0=Спестовна сметка BankType1=Разплащателна или картова сметка BankType2=Парична сметка -AccountsArea=Сметки -AccountCard=Картова сметка +AccountsArea=Секция със сметки +AccountCard=Карта на сметката DeleteAccount=Изтриване на акаунт ConfirmDeleteAccount=Сигурни ли сте, че искате да изтриете тази сметка? Account=Сметка @@ -67,103 +67,103 @@ BankTransactionForCategory=Банкови транзакции по катего RemoveFromRubrique=Премахване на връзката с категория RemoveFromRubriqueConfirm=Сигурни ли сте, че желаете да премахнете връзката между операцията и категорията? ListBankTransactions=Списък с банкови транзакции -IdTransaction=Transaction ID -BankTransactions=Банкови записи -BankTransaction=Банков запис -ListTransactions=Списък записи -ListTransactionsByCategory=Списък записи/категории -TransactionsToConciliate=Записи за равнение -Conciliable=Може да се примири -Conciliate=Reconcile -Conciliation=Помирение +IdTransaction=Идентификатор на транзакция +BankTransactions=Банкови транзакции +BankTransaction=Банкова транзакция +ListTransactions=Списък транзакции +ListTransactionsByCategory=Списък транзакции по категория +TransactionsToConciliate=Транзакции за съгласуване +Conciliable=Може да се съгласува +Conciliate=Съгласуване +Conciliation=Съгласуване SaveStatementOnly=Запазете само извлечението ReconciliationLate=Късно съгласуване -IncludeClosedAccount=Включват затворени сметки -OnlyOpenedAccount=Само открити сметки -AccountToCredit=Профил на кредитен +IncludeClosedAccount=Включва затворени сметки +OnlyOpenedAccount=Само отворени сметки +AccountToCredit=Сметка за кредитиране AccountToDebit=Сметка за дебитиране -DisableConciliation=Деактивирате функцията помирение за тази сметка -ConciliationDisabled=Помирение функция инвалиди -LinkedToAConciliatedTransaction=Свързан е със съгласуван запис -StatusAccountOpened=Отворен -StatusAccountClosed=Затворен +DisableConciliation=Деактивиране на функцията за съгласуване за тази сметка +ConciliationDisabled=Функцията за съгласуване е деактивирана +LinkedToAConciliatedTransaction=Свързано със съгласувана транзакция +StatusAccountOpened=Отворена +StatusAccountClosed=Затворена AccountIdShort=Номер LineRecord=Транзакция -AddBankRecord=Добавяне на запис -AddBankRecordLong=Ръчно добавяне на запис +AddBankRecord=Добавяне на транзакция +AddBankRecordLong=Ръчно добавяне на транзакция Conciliated=Съгласувано -ConciliatedBy=Съгласуват от -DateConciliating=Reconcile дата -BankLineConciliated=Записите са съгласувани +ConciliatedBy=Съгласувано от +DateConciliating=Дата на съгласуване +BankLineConciliated=Транзакцията е съгласувана Reconciled=Съгласувано NotReconciled=Не е съгласувано -CustomerInvoicePayment=Клиентско плащане -SupplierInvoicePayment=Плащане на доставчик +CustomerInvoicePayment=Плащане от клиент +SupplierInvoicePayment=Плащане към доставчик SubscriptionPayment=Плащане на членски внос WithdrawalPayment=Платежно нареждане за дебит -SocialContributionPayment=Social/fiscal tax payment +SocialContributionPayment=Плащане на социални / фискални такси BankTransfer=Банков превод BankTransfers=Банкови преводи MenuBankInternalTransfer=Вътрешен превод -TransferDesc=Прехвърляне от един акаунт в друг, Dolibarr ще направи два записа (дебитна сметка в източник и кредит в целевата сметка). За тази транзакция ще се използва същата сума (с изключение на знак), етикет и дата) +TransferDesc=Прехвърляне от един акаунт в друг, Dolibarr ще направи два записа (дебит от сметката на източника и кредит в целевата сметка). За тази транзакция ще се използва същата сума (с изключение на подписа), етикет и дата. TransferFrom=От TransferTo=За -TransferFromToDone=Прехвърлянето от %s на %s на %s %s беше записано. +TransferFromToDone=Прехвърлянето от %s към %s на %s %s беше записано. CheckTransmitter=Предавател ValidateCheckReceipt=Валидиране на тази чекова разписка? -ConfirmValidateCheckReceipt=Сигурни ли сте, че искате да потвърдите получаването на чека, няма да е възможна промяна след като това бъде направено? -DeleteCheckReceipt=Да се изтрие ли тази чекова разписка? +ConfirmValidateCheckReceipt=Сигурни ли сте, че искате да валидирате тази чекова разписка, няма да е възможна промяна след като това бъде направено? +DeleteCheckReceipt=Изтриване на тази чекова разписка? ConfirmDeleteCheckReceipt=Сигурни ли сте, че искате да изтриете тази чекова разписка? -BankChecks=Банката проверява +BankChecks=Банкови чекове BankChecksToReceipt=Чекове чакащи депозит -ShowCheckReceipt=Покажи проверете получаване депозит +ShowCheckReceipt=Покажи разписка за получаване на чеков депозит NumberOfCheques=Брой чекове -DeleteTransaction=Изтриване на запис -ConfirmDeleteTransaction=Сигурни ли сте че искате да изтриете този запис ? -ThisWillAlsoDeleteBankRecord=Това ще изтрие генерирания банков запис +DeleteTransaction=Изтриване на транзакция +ConfirmDeleteTransaction=Сигурни ли сте, че искате да изтриете тази транзакция? +ThisWillAlsoDeleteBankRecord=Това ще изтрие и генерираната банкова транзакция BankMovements=Движения -PlannedTransactions=Планирани записи +PlannedTransactions=Планирани транзакции Graph=Графики -ExportDataset_banque_1=Банкови записи и извлечение по сметка +ExportDataset_banque_1=Банкови транзакции и извлечение по сметка ExportDataset_banque_2=Депозитна разписка -TransactionOnTheOtherAccount=Транзакциите по друга сметка +TransactionOnTheOtherAccount=Транзакции по друга сметка PaymentNumberUpdateSucceeded=Номерът на плащането е актуализиран успешно -PaymentNumberUpdateFailed=Плащане брой не може да бъде актуализиран +PaymentNumberUpdateFailed=Номерът на плащането не можа да бъде актуализиран PaymentDateUpdateSucceeded=Датата на плащането е актуализирана успешно -PaymentDateUpdateFailed=Дата на плащане не може да бъде актуализиран -Transactions=Сделки -BankTransactionLine=Банков запис +PaymentDateUpdateFailed=Датата на плащане не можа да бъде актуализирана +Transactions=Транзакции +BankTransactionLine=Банкова транзакция AllAccounts=Всички банкови и касови сметки BackToAccount=Обратно към сметка ShowAllAccounts=Покажи за всички сметки -FutureTransaction=Бъдещи транзакции. Невъзможно равнение. -SelectChequeTransactionAndGenerate=Изберете / филтрирайте чековете, които включва разписка за депозит и кликнете върху "Create". +FutureTransaction=Бъдеща транзакция. Не може да се съгласува. +SelectChequeTransactionAndGenerate=Изберете / Филтрирайте чековете, които да включите в депозитна разписка и кликнете върху "Създаване". InputReceiptNumber=Изберете банковото извлечение, свързано със съгласуването. Използвайте числова стойност, която е във вида: YYYYMM или YYYYMMDD -EventualyAddCategory=В крайна сметка, да посочите категорията, в която да се класифицират записи +EventualyAddCategory=В крайна сметка, определете категория, в която да класифицирате транзакциите ToConciliate=Да се съгласува ли? -ThenCheckLinesAndConciliate=След това проверете линии в отчета на банката и кликнете -DefaultRIB=По подразбиране BAN +ThenCheckLinesAndConciliate=След това проверете редовете в банковото извлечение и кликнете +DefaultRIB=BAN по подразбиране AllRIB=Всички BAN LabelRIB=BAN етикет NoBANRecord=Няма BAN запис -DeleteARib=Изтри BAN запис +DeleteARib=Изтриване на BAN запис ConfirmDeleteRib=Сигурни ли сте, че искате да изтриете този BAN запис? RejectCheck=Чекът е върнат ConfirmRejectCheck=Сигурни ли сте, искате да маркирате този чек като е отхвърлен? RejectCheckDate=Дата, на която чекът е върнат CheckRejected=Чекът е върнат -CheckRejectedAndInvoicesReopened=Чекът е върнат и фактурата е отворена +CheckRejectedAndInvoicesReopened=Чекът е върнат и фактурата е повторно отворена BankAccountModelModule=Шаблони на документи за банкови сметки -DocumentModelSepaMandate=Шаблон за SEPA нареждания . Полезно само за европейските страни в ЕИО. -DocumentModelBan=Шаблон на който да се принтира страница с BAN информация -NewVariousPayment=Ново смесено плащане -VariousPayment=Смесено плащане +DocumentModelSepaMandate=Шаблон за SEPA нареждания. Полезно само за европейските страни в ЕИО. +DocumentModelBan=Шаблон за отпечатване на страница с информация за BAN. +NewVariousPayment=Ново разнородно плащане +VariousPayment=Разнородно плащане VariousPayments=Разнородни плащания -ShowVariousPayment=Показване на смесено плащане -AddVariousPayment=Добавяне на смесено плащане +ShowVariousPayment=Показване на разнородно плащане +AddVariousPayment=Добавяне на разнородно плащане SEPAMandate=SEPA нареждане YourSEPAMandate=Вашите SEPA нареждания -FindYourSEPAMandate=Това е вашето SEPA нареждане да упълномощите нашата компания да направи поръчка за директен дебит към вашата банка. Върнете го подписано (сканиране на подписания документ) или го изпратете по пощата на -AutoReportLastAccountStatement=Автоматично попълнете полето „номер на банково извлечение“ с последния номер на извлечение, когато правите равнение +FindYourSEPAMandate=Това е вашето SEPA нареждане, с което да упълномощите нашата компания да направи поръчка за директен дебит към вашата банка. Върнете го подписано (сканиран подписан документ) или го изпратете по пощата на +AutoReportLastAccountStatement=Автоматично попълване на полето „номер на банково извлечение“ с последния номер на извлечение, когато правите съгласуване. CashControl=Лимит за плащане в брой на POS NewCashFence=Нов лимит за плащане в брой diff --git a/htdocs/langs/bg_BG/bills.lang b/htdocs/langs/bg_BG/bills.lang index 8a70a7d26d0..cd16caffcc6 100644 --- a/htdocs/langs/bg_BG/bills.lang +++ b/htdocs/langs/bg_BG/bills.lang @@ -9,34 +9,34 @@ BillsCustomersUnpaidForCompany=Неплатени фактури за прода BillsSuppliersUnpaid=Неплатени фактури за доставка BillsSuppliersUnpaidForCompany=Неплатени фактури за доставка за %s BillsLate=Забавени плащания -BillsStatistics=Статистика за продажни фактури +BillsStatistics=Статистика от фактури за продажба BillsStatisticsSuppliers=Статистика за фактури на доставка DisabledBecauseDispatchedInBookkeeping=Деактивирано, защото фактурата е изпратена за осчетоводяване DisabledBecauseNotLastInvoice=Деактивирано, защото фактурата не може да се изтрие. Има регистрирани следващи фактури с поредни номера и това ще създаде дупки в брояча. DisabledBecauseNotErasable=Деактивирано, защото не може да бъде изтрито InvoiceStandard=Стандартна фактура InvoiceStandardAsk=Стандартна фактура -InvoiceStandardDesc=Тази фактурата е фактура от най-общ вид. +InvoiceStandardDesc=Този вид фактура се използва като стандартна фактура. InvoiceDeposit=Фактура за авансово плащане InvoiceDepositAsk=Фактура за авансово плащане InvoiceDepositDesc=Този вид фактура се използва, когато е получено авансово плащане. InvoiceProForma=Проформа фактура InvoiceProFormaAsk=Проформа фактура InvoiceProFormaDesc=Проформа фактура е първообраз на една истинска фактура, но няма счетоводна стойност. -InvoiceReplacement=Подменяща фактура -InvoiceReplacementAsk=Фактура подменяща друга фактура -InvoiceReplacementDesc=Подменяща фактура се използва за анулиране и пълно заменяне на фактура без получено плащане.

Забележка: Само фактури без плащания по тях могат да бъдат заменяни. Ако фактурата, която заменяте, все още не е приключена, то тя ще бъде автоматично приключена като „Изоставена“. +InvoiceReplacement=Заменяща фактура +InvoiceReplacementAsk=Фактура заменяща друга фактура +InvoiceReplacementDesc=Заменяща фактура се използва за анулиране и пълно заменяне на фактура без получено плащане.

Забележка: Само фактури без плащания по тях могат да бъдат заменяни. Ако фактурата, която заменяте, все още не е приключена, то тя ще бъде автоматично приключена като „Изоставена“. InvoiceAvoir=Кредитно известие InvoiceAvoirAsk=Кредитно известие за коригиране на фактура InvoiceAvoirDesc=Кредитното известие е отрицателна фактура, използвана за коригиране на факта, че фактурата показва сума, която се различава от действително платената сума (например клиентът е платил твърде много по грешка или няма да плати пълната сума, тъй като някои продукти са върнати). invoiceAvoirWithLines=Създаване на кредитно известие с редове от оригиналната фактура invoiceAvoirWithPaymentRestAmount=Създаване на кредитно известие с неплатения остатък от оригиналната фактура -invoiceAvoirLineWithPaymentRestAmount=Кредитно известие с неплатен остатък -ReplaceInvoice=Подмяна на фактура %s -ReplacementInvoice=Подменяща фактура +invoiceAvoirLineWithPaymentRestAmount=Кредитно известие за неплатен остатък +ReplaceInvoice=Заменяне на фактура %s +ReplacementInvoice=Заменяща фактура ReplacedByInvoice=Заменена с фактура %s ReplacementByInvoice=Заменена с фактура -CorrectInvoice=Правилна фактура %s +CorrectInvoice=Коректна фактура %s CorrectionInvoice=Коригираща фактура UsedByInvoice=Използва се за плащане на фактура %s ConsumedBy=Консумирана от @@ -44,19 +44,19 @@ NotConsumed=Не е консумирана NoReplacableInvoice=Няма заменими фактури NoInvoiceToCorrect=Няма фактура за коригиране InvoiceHasAvoir=Източник на едно или няколко кредитни известия -CardBill=Фактурна карта -PredefinedInvoices=Предварително-дефинирани Фактури +CardBill=Карта на фактура +PredefinedInvoices=Предварително дефинирани фактури Invoice=Фактура PdfInvoiceTitle=Фактура Invoices=Фактури InvoiceLine=Фактурен ред -InvoiceCustomer=Продажна фактура -CustomerInvoice=Продажна фактура -CustomersInvoices=Продажни фактури +InvoiceCustomer=Фактура за продажба +CustomerInvoice=Фактура за продажба +CustomersInvoices=Фактури за продажба SupplierInvoice=Фактура за доставка SuppliersInvoices=Фактури за доставка SupplierBill=Фактура за доставка -SupplierBills=Доставни фактури +SupplierBills=Фактури за доставка Payment=Плащане PaymentBack=Обратно плащане CustomerInvoicePaymentBack=Обратно плащане @@ -64,7 +64,7 @@ Payments=Плащания PaymentsBack=Обратни плащания paymentInInvoiceCurrency=във валутата на фактурите PaidBack=Платено обратно -DeletePayment=Изтрий плащане +DeletePayment=Изтриване на плащане ConfirmDeletePayment=Сигурни ли сте че, искате да изтриете това плащане? ConfirmConvertToReduc=Искате ли да конвертирате това %s в абсолютна отстъпка? ConfirmConvertToReduc2=Сумата ще бъде запазена измежду всички отстъпки и може да се използва като отстъпка за текуща или бъдеща фактура за този клиент. @@ -74,7 +74,7 @@ SupplierPayments=Плащания към доставчици ReceivedPayments=Получени плащания ReceivedCustomersPayments=Плащания получени от клиенти PayedSuppliersPayments=Направени плащания към доставчици -ReceivedCustomersPaymentsToValid=Получени плащания от клиенти за валидация +ReceivedCustomersPaymentsToValid=Получени плащания от клиенти за валидиране PaymentsReportsForYear=Отчети за плащания за %s PaymentsReports=Отчети за плащания PaymentsAlreadyDone=Вече направени плащания @@ -91,33 +91,33 @@ PaymentTerm=Условие за плащане PaymentConditions=Условия за плащане PaymentConditionsShort=Условия за плащане PaymentAmount=Сума за плащане -PaymentHigherThanReminderToPay=Плащането е по-високо от напомнянето за плащане +PaymentHigherThanReminderToPay=Плащането е с по-висока стойност в сравнение с това в напомнянето HelpPaymentHigherThanReminderToPay=Внимание, сумата за плащане на една или повече фактури е по-висока от дължимата сума за плащане.
Редактирайте записа си, в противен случай потвърдете и обмислете създаването на кредитно известие за получената сума за всяка надплатена фактура. HelpPaymentHigherThanReminderToPaySupplier=Внимание, сумата за плащане на една или повече фактури е по-висока от дължимата сума за плащане.
Редактирайте записа си, в противен случай потвърдете и обмислете създаването на кредитно известие за излишъка, платен за всяка надплатена фактура. -ClassifyPaid=Класифицирай 'Платено' -ClassifyPaidPartially=Класифицирай 'Платено частично' -ClassifyCanceled=Класифицирай 'Изоставено' -ClassifyClosed=Класифицирай 'Затворено' -ClassifyUnBilled=Класифицирай 'Нетаксувано' -CreateBill=Създай фактура +ClassifyPaid=Класифициране като 'Платена' +ClassifyPaidPartially=Класифициране като 'Частично платена' +ClassifyCanceled=Класифициране като 'Изоставена' +ClassifyClosed=Класифициране като 'Приключена' +ClassifyUnBilled=Класифициране като 'Не таксувана' +CreateBill=Създаване на фактура CreateCreditNote=Създаване на кредитно известие AddBill=Създаване на фактура или кредитно известие -AddToDraftInvoices=Добави към фактура чернова -DeleteBill=Изтрий фактура -SearchACustomerInvoice=Търсене за продажна фактура +AddToDraftInvoices=Добавяне към чернова фактура +DeleteBill=Изтриване на фактура +SearchACustomerInvoice=Търсене на фактура за продажба SearchASupplierInvoice=Търсене на фактура за доставка -CancelBill=Отказване на фактура +CancelBill=Анулиране на фактура SendRemindByMail=Изпращане на напомняне по имейл DoPayment=Въвеждане на плащане DoPaymentBack=Въвеждане на възстановяване ConvertToReduc=Маркиране като наличен кредит ConvertExcessReceivedToReduc=Превръщане на получения излишък в наличен кредит ConvertExcessPaidToReduc=Превръщане на платения излишък в налична отстъпка -EnterPaymentReceivedFromCustomer=Въведете плащане получено от клиент -EnterPaymentDueToCustomer=Дължимото плащане на клиента -DisabledBecauseRemainderToPayIsZero=Деактивирано понеже остатъка за плащане е нула +EnterPaymentReceivedFromCustomer=Въведете плащане, получено от клиент +EnterPaymentDueToCustomer=Извършване на плащане от клиента +DisabledBecauseRemainderToPayIsZero=Деактивирано, тъй като остатъка за плащане е нула PriceBase=Базова цена -BillStatus=Статус на фактурата +BillStatus=Статус на фактура StatusOfGeneratedInvoices=Състояние на генерираните фактури BillStatusDraft=Чернова (трябва да се валидира) BillStatusPaid=Платена @@ -128,7 +128,7 @@ BillStatusValidated=Валидирана (трябва да се плати) BillStatusStarted=Започната BillStatusNotPaid=Неплатена BillStatusNotRefunded=Не възстановено -BillStatusClosedUnpaid=Затворена (неплатена) +BillStatusClosedUnpaid=Приключена (неплатена) BillStatusClosedPaidPartially=Платена (частично) BillShortStatusDraft=Чернова BillShortStatusPaid=Платена @@ -140,7 +140,7 @@ BillShortStatusValidated=Валидирана BillShortStatusStarted=Започната BillShortStatusNotPaid=Неплатена BillShortStatusNotRefunded=Не възстановено -BillShortStatusClosedUnpaid=Затворена +BillShortStatusClosedUnpaid=Приключена BillShortStatusClosedPaidPartially=Платена (частично) PaymentStatusToValidShort=За валидиране ErrorVATIntraNotConfigured=Все още не е определен вътреобщностен ДДС номер @@ -150,7 +150,7 @@ ErrorBillNotFound=Фактура %s не съществува ErrorInvoiceAlreadyReplaced=Грешка, опитахте да валидирате фактура, за да замените фактура %s, но тя вече е заменена с фактура %s. ErrorDiscountAlreadyUsed=Грешка, вече се използва отстъпка ErrorInvoiceAvoirMustBeNegative=Грешка, коригиращата фактура трябва да има отрицателна сума -ErrorInvoiceOfThisTypeMustBePositive=Грешка, този тип фактура трябва да има положителна стойност, +ErrorInvoiceOfThisTypeMustBePositive=Грешка, този тип фактура трябва да има положителна стойност ErrorCantCancelIfReplacementInvoiceNotValidated=Грешка, не може да се анулира фактура, която е била заменена от друга фактура, която все още е в състояние на чернова ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Тази или друга част вече е използвана, така че сериите с отстъпки не могат да бъдат премахнати. BillFrom=От @@ -173,7 +173,7 @@ OtherBills=Други фактури DraftBills=Чернови фактури CustomersDraftInvoices=Чернови фактури за продажба SuppliersDraftInvoices=Чернови фактури за доставка -Unpaid=Неплатен +Unpaid=Неплатено ConfirmDeleteBill=Сигурни ли сте, че искате да изтриете тази фактура? ConfirmValidateBill=Сигурни ли сте че, искате да валидирате тази фактура %s ? ConfirmUnvalidateBill=Сигурен ли сте, че искате да върнете фактура %s в състояние на чернова? @@ -184,8 +184,8 @@ ConfirmClassifyPaidPartially=Сигурни ли сте че, искате да ConfirmClassifyPaidPartiallyQuestion=Тази фактура не е платена изцяло. Каква е причината за приключване на тази фактура? ConfirmClassifyPaidPartiallyReasonAvoir=Неплатения остатък (%s %s) е предоставена отстъпка, тъй като плащането е извършено преди срока за плащане. Уреждам ДДС с кредитно известие. ConfirmClassifyPaidPartiallyReasonDiscount=Неплатения остатък (%s %s) е предоставена отстъпка, тъй като плащането е извършено преди срока за плащане. -ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Неплатеният остатък (%s %s) е дадена отстъпка, защото плащането е направено преди срока за плащане. Приемам да се загуби ДДС по тази отстъпка. -ConfirmClassifyPaidPartiallyReasonDiscountVat=Неплатеният остатък (%s %s) е дадена отстъпка, защото плащането е направено преди срока за плащане Възстановявам ДДС по тази отстъпка без кредитно известие. +ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Неплатеният остатък (%s %s) е предоставена отстъпка, защото плащането е направено преди срока за плащане. Приемам да се загуби ДДС по тази отстъпка. +ConfirmClassifyPaidPartiallyReasonDiscountVat=Неплатеният остатък (%s %s) е предоставена отстъпка, защото плащането е направено преди срока за плащане. Възстановявам ДДС по тази отстъпка без кредитно известие. ConfirmClassifyPaidPartiallyReasonBadCustomer=Лош клиент ConfirmClassifyPaidPartiallyReasonProductReturned=Продукти частично върнати ConfirmClassifyPaidPartiallyReasonOther=Сумата е изоставена по друга причина @@ -195,19 +195,19 @@ ConfirmClassifyPaidPartiallyReasonAvoirDesc=Използвайте този из ConfirmClassifyPaidPartiallyReasonBadCustomerDesc= Лош клиент е клиент, който отказва да плати дълга си. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Този избор се използва, когато плащането не е пълно, тъй като някои от продуктите са били върнати ConfirmClassifyPaidPartiallyReasonOtherDesc=Използвайте този избор, ако всички останали не са подходящи, например в следната ситуация:\n- плащането не е завършено, защото някои продукти са изпратени обратно\n- предявената сума е задължителна, понеже отстъпката е забравена\nВъв всички случаи, надхвърлената сума трябва да бъде коригирана в счетоводната система, чрез създаване на кредитно известие. -ConfirmClassifyAbandonReasonOther=Друг -ConfirmClassifyAbandonReasonOtherDesc=Този избор ще бъде използван във всички останали случаи. За пример, защото имате намерение да създадете заменяща фактура. +ConfirmClassifyAbandonReasonOther=Друго +ConfirmClassifyAbandonReasonOtherDesc=Този избор ще се използва във всички останали случаи. Например, защото планирате да създадете заместваща фактура. ConfirmCustomerPayment=Потвърждавате ли това входящо плащане за %s %s? ConfirmSupplierPayment=Потвърждавате ли това изходящо плащане за %s %s? ConfirmValidatePayment=Сигурни ли сте, че искате да валидирате това плащане? Не се допуска промяна след валидиране на плащането. -ValidateBill=Валидирай фактура -UnvalidateBill=Отвалидирай фактура +ValidateBill=Валидиране на фактура +UnvalidateBill=Повторно отваряне на фактура NumberOfBills=Брой фактури NumberOfBillsByMonth=Брой фактури на месец AmountOfBills=Сума на фактури AmountOfBillsHT=Сума на фактури (без ДДС) AmountOfBillsByMonthHT=Сума на фактури по месец (без данък) -ShowSocialContribution=Покажи социален/фискален данък +ShowSocialContribution=Показване на социален / фискален данък ShowBill=Покажи фактура ShowInvoice=Покажи фактура ShowInvoiceReplace=Покажи заменяща фактура @@ -215,12 +215,12 @@ ShowInvoiceAvoir=Покажи кредитно известие ShowInvoiceDeposit=Показване на авансова фактура ShowInvoiceSituation=Показване на ситуационна фактура ShowPayment=Покажи плащане -AlreadyPaid=Вече е платена -AlreadyPaidBack=Вече е платена обратно +AlreadyPaid=Вече платено +AlreadyPaidBack=Вече платено обратно AlreadyPaidNoCreditNotesNoDeposits=Вече платено (без кредитни известия и авансови плащания) -Abandoned=Изоставен +Abandoned=Изоставена RemainderToPay=Неплатен остатък -RemainderToTake=Остатъчна сума за взимане +RemainderToTake=Остатъчна сума за получаване RemainderToPayBack=Оставаща сума за възстановяване Rest=Чакаща AmountExpected=Претендирана сума @@ -235,19 +235,19 @@ StandingOrder=Нареждане за директен дебит NoDraftBills=Няма чернови фактури NoOtherDraftBills=Няма други чернови фактури NoDraftInvoices=Няма чернови фактури -RefBill=Фактура код +RefBill=Реф. фактура ToBill=За фактуриране RemainderToBill=Напомняне за фактуриране SendBillByMail=Изпращане на фактура по имейл SendReminderBillByMail=Изпращане на напомняне по имейл RelatedCommercialProposals=Свързани търговски предложения RelatedRecurringCustomerInvoices=Свързани повтарящи се фактури за продажба -MenuToValid=За валидни +MenuToValid=За валидиране DateMaxPayment=Плащането се дължи на DateInvoice=Дата на фактура DatePointOfTax=Дата на данъчно събитие NoInvoice=Няма фактура -ClassifyBill=Класифицирай фактурата +ClassifyBill=Класифициране на фактура SupplierBillsToPay=Неплатени фактури за доставка CustomerBillsUnpaid=Неплатени фактури за продажба NonPercuRecuperable=Невъзстановими @@ -256,31 +256,31 @@ SetMode=Задайте видът на плащане SetRevenuStamp=Задайте гербова марка (бандерол) Billed=Фактурирано RecurringInvoices=Повтарящи се фактури -RepeatableInvoice=Шаблон за фактура -RepeatableInvoices=Шаблони за фактури +RepeatableInvoice=Шаблонна фактура +RepeatableInvoices=Шаблонни фактури Repeatable=Шаблон Repeatables=Шаблони -ChangeIntoRepeatableInvoice=Превърни в шаблон за фактура -CreateRepeatableInvoice=Създай шаблон за фактура -CreateFromRepeatableInvoice=Създай от шаблон за фактура +ChangeIntoRepeatableInvoice=Конвертиране в шаблонна фактура +CreateRepeatableInvoice=Създаване на шаблонна фактура +CreateFromRepeatableInvoice=Създаване от шаблонна фактура CustomersInvoicesAndInvoiceLines=Фактури клиенти и техните детайли -CustomersInvoicesAndPayments=Продажни фактури и плащания +CustomersInvoicesAndPayments=Фактури за продажба и плащания ExportDataset_invoice_1=Фактури за продажба и техните детайли -ExportDataset_invoice_2=Продажни фактури и плащания -ProformaBill=Проформа фактура: -Reduction=Намаляване +ExportDataset_invoice_2=Фактури за продажба и плащания +ProformaBill=Проформа Фактура +Reduction=Отстъпка ReductionShort=Отст. -Reductions=Намаления +Reductions=Отстъпки ReductionsShort=Отст. Discounts=Отстъпки -AddDiscount=Създай отстъпка -AddRelativeDiscount=Създай относителна отстъпка -EditRelativeDiscount=Редактирй относителна отстъпка -AddGlobalDiscount=Създай абсолютна отстъпка -EditGlobalDiscounts=Редактирай абсолютна отстъпка -AddCreditNote=Създавай кредитно известие +AddDiscount=Създаване на отстъпка +AddRelativeDiscount=Създаване на относителна отстъпка +EditRelativeDiscount=Промяна на относителна отстъпка +AddGlobalDiscount=Създаване на абсолютна отстъпка +EditGlobalDiscounts=Промяна на абсолютна отстъпка +AddCreditNote=Създаване на кредитно известие ShowDiscount=Покажи отстъпка -ShowReduc=Покажи приспадане +ShowReduc=Покажи намалението RelativeDiscount=Относителна отстъпка GlobalDiscount=Глобална отстъпка CreditNote=Кредитно известие @@ -297,30 +297,30 @@ CreditNoteDepositUse=Фактурата трябва да бъде валиди NewGlobalDiscount=Нова абсолютна отстъпка NewRelativeDiscount=Нова относителна отстъпка DiscountType=Тип отстъпка -NoteReason=Бележка/Причина +NoteReason=Бележка / Причина ReasonDiscount=Причина -DiscountOfferedBy=Предоставено от +DiscountOfferedBy=Предоставена от DiscountStillRemaining=Налични отстъпки или кредити DiscountAlreadyCounted=Изразходвани отстъпки или кредити CustomerDiscounts=Отстъпки за клиенти SupplierDiscounts=Отстъпки на доставчици -BillAddress=Фактурен адрес +BillAddress=Адрес за фактуриране HelpEscompte=Тази отстъпка представлява отстъпка, предоставена на клиента, тъй като плащането е извършено преди срока на плащане. HelpAbandonBadCustomer=Тази сума е изоставена (поради некоректен (лош) клиент) и се счита за изключителна загуба. HelpAbandonOther=Тази сума е изоставена, тъй като е била грешка (Например: неправилен клиент или фактура заменена от друга) -IdSocialContribution=Id за плащане на социален/фискален данък +IdSocialContribution=Идентификатор за плащане на социален / фискален данък PaymentId=Плащане ID PaymentRef=Реф. плащане InvoiceId=Фактура ID -InvoiceRef=Фактура код -InvoiceDateCreation=Фактура дата създаване -InvoiceStatus=Фактурата статус -InvoiceNote=Фактура бележка -InvoicePaid=Фактура плащане +InvoiceRef=Реф. фактура +InvoiceDateCreation=Дата на създаване на фактура +InvoiceStatus=Статус на фактура +InvoiceNote=Бележка за фактура +InvoicePaid=Фактурата е платена OrderBilled=Поръчката е фактурирана DonationPaid=Дарението е платено -PaymentNumber=Плащане номер -RemoveDiscount=Премахни отстъпка +PaymentNumber=Номер на плащане +RemoveDiscount=Премахване на отстъпка WatermarkOnDraftBill=Воден знак върху чернови фактури (няма ако е празно) InvoiceNotChecked=Не е избрана фактура ConfirmCloneInvoice=Сигурни ли сте, че искате да клонирате тази фактура %s ? @@ -334,11 +334,11 @@ TotalOfTwoDiscountMustEqualsOriginal=Общата сума на двете но ConfirmRemoveDiscount=Сигурни ли сте, че искате да премахнете тази отстъпка? RelatedBill=Свързана фактура RelatedBills=Свързани фактури -RelatedCustomerInvoices=Свързани продажни фактури +RelatedCustomerInvoices=Свързани фактури за продажба RelatedSupplierInvoices=Свързани фактури за доставка LatestRelatedBill=Последна свързана фактура WarningBillExist=Внимание, вече съществуват една или повече фактури -MergingPDFTool=Инструмент за sliwane на PDF +MergingPDFTool=Инструмент за обединяване на PDF документи AmountPaymentDistributedOnInvoice=Сума на плащане, разпределена по фактура PaymentOnDifferentThirdBills=Позволява плащания по различни фактури на контрагенти, но от едно и също дружество (фирма майка) PaymentNote=Бележка за плащане @@ -388,7 +388,7 @@ PaymentConditionPT_DELIVERY=При доставка PaymentConditionShortPT_ORDER=Поръчка PaymentConditionPT_ORDER=При поръчка PaymentConditionShortPT_5050=50-50 -PaymentConditionPT_5050=50% авансово, 50% при доставка +PaymentConditionPT_5050=50%% авансово, 50%% при доставка PaymentConditionShort10D=10 дни PaymentCondition10D=10 дни PaymentConditionShort10DENDMONTH=10 дни от края на месеца @@ -398,27 +398,27 @@ PaymentCondition14D=14 дни PaymentConditionShort14DENDMONTH=14 дни от края на месеца PaymentCondition14DENDMONTH=В рамките на 14 дни след края на месеца FixAmount=Фиксирана сума -VarAmount=Променлива сума (%% общ.) +VarAmount=Променлива сума (%% общо) VarAmountOneLine=Променлива сума (%% общ.) - 1 ред с етикет "%s" # PaymentType PaymentTypeVIR=Банков превод PaymentTypeShortVIR=Банков превод PaymentTypePRE=Платежно нареждане за директен дебит PaymentTypeShortPRE=Платежно нареждане за дебит -PaymentTypeLIQ=Касово плащане в брой +PaymentTypeLIQ=Плащане в брой PaymentTypeShortLIQ=В брой PaymentTypeCB=Плащане с карта PaymentTypeShortCB=С карта -PaymentTypeCHQ=Чек -PaymentTypeShortCHQ=Чек +PaymentTypeCHQ=Плащане с чек +PaymentTypeShortCHQ=С чек PaymentTypeTIP=TIP (Документи срещу плащане) PaymentTypeShortTIP=Плащане по TIP PaymentTypeVAD=Онлайн плащане PaymentTypeShortVAD=Онлайн плащане PaymentTypeTRA=Банково извлечение PaymentTypeShortTRA=Чернова -PaymentTypeFAC=Factor -PaymentTypeShortFAC=Factor +PaymentTypeFAC=Фактор +PaymentTypeShortFAC=Фактор BankDetails=Банкови данни BankCode=Банков код DeskCode=Код на клон @@ -427,17 +427,17 @@ BankAccountNumberKey=Контролната сума Residence=Адрес IBANNumber=IBAN номер на сметка IBAN=IBAN -BIC=BIC/SWIFT +BIC=BIC / SWIFT BICNumber=BIC/SWIFT код ExtraInfos=Допълнителна информация -RegulatedOn=Регулация на -ChequeNumber=Чек NВ° -ChequeOrTransferNumber=Чек/трансфер NВ° +RegulatedOn=Регулирано на +ChequeNumber=Чек № +ChequeOrTransferNumber=Чек / Трансфер № ChequeBordereau=Чек график ChequeMaker=Чек/трансфер предавател ChequeBank=Банка на чека CheckBank=Чек -NetToBePaid=Нетно за плащане +NetToBePaid=Нето за плащане PhoneNumber=Тел FullPhoneNumber=Телефон TeleFax=Факс @@ -445,17 +445,17 @@ PrettyLittleSentence=Приемене на размера на плащания IntracommunityVATNumber=ДДС № PaymentByChequeOrderedTo=Чекови плащания (с ДДС) се извършват до %s, изпратени на адрес PaymentByChequeOrderedToShort=Чекови плащания (с ДДС) се извършват до -SendTo=изпратено на +SendTo=изпратено до PaymentByTransferOnThisBankAccount=Плащане, чрез превод по следната банкова сметка -VATIsNotUsedForInvoice=* Неприложим ДДС, art-293BB от CGI +VATIsNotUsedForInvoice=* Неприложим ДДС, art-293B от CGI LawApplicationPart1=Чрез прилагането на закон 80.335 от 12/05/80 LawApplicationPart2=стоките остават собственост на LawApplicationPart3=продавача до пълното плащане на -LawApplicationPart4=цената им. -LimitedLiabilityCompanyCapital=SARL със столица +LawApplicationPart4=тяхната цена. +LimitedLiabilityCompanyCapital=SARL с капитал от UseLine=Приложи -UseDiscount=Използвай отстъпка -UseCredit=Използвай кредит +UseDiscount=Използване на отстъпка +UseCredit=Използване на кредит UseCreditNoteInInvoicePayment=Намаляване на сумата за плащане с този кредит MenuChequeDeposits=Чекови депозити MenuCheques=Чекове @@ -465,60 +465,60 @@ ChequesReceipts=Чекови разписки ChequesArea=Секция за чекови депозити ChequeDeposits=Чекови депозити Cheques=Чекове -DepositId=Id депозит +DepositId=Идентификатор на депозит NbCheque=Брой чекове CreditNoteConvertedIntoDiscount=Това %s е преобразувано в %s UsBillingContactAsIncoiveRecipientIfExist=Използване на контакт/адрес с тип "контакт за фактуриране" вместо адрес на контрагента като получател на фактури ShowUnpaidAll=Покажи всички неплатени фактури -ShowUnpaidLateOnly=Покажи само неплатените фактури с просрочено плащане -PaymentInvoiceRef=Платежна фактуре %s -ValidateInvoice=Валидирай фактура +ShowUnpaidLateOnly=Покажи само забавените неплатени фактури +PaymentInvoiceRef=Плащане по фактура %s +ValidateInvoice=Валидиране на фактура ValidateInvoices=Потвърждаване на фактури -Cash=Пари в брой -Reported=Закъснение +Cash=В брой +Reported=Закъснели DisabledBecausePayments=Не е възможно, тъй като има някои плащания -CantRemovePaymentWithOneInvoicePaid=Не може да се премахне плащането, тъй като има най-малко една фактура, класифицирана като платена +CantRemovePaymentWithOneInvoicePaid=Не може да се премахне плащането, тъй като има най-малко една фактура класифицирана като платена. ExpectedToPay=Очаквано плащане CantRemoveConciliatedPayment=Съгласуваното плащане не може да се премахне -PayedByThisPayment=Плаща от това плащане +PayedByThisPayment=Платено от това плащане ClosePaidInvoicesAutomatically=Класифицирайте "Платени" всички стандартни, авансови или заместващи фактури, които са платени напълно. -ClosePaidCreditNotesAutomatically=Класифицирай "Платени" всички кредитни известия изцяло обратно платени. +ClosePaidCreditNotesAutomatically=Класифицирай 'Платени' всички кредитни известия, които са изцяло платени обратно. ClosePaidContributionsAutomatically=Класифицирайте "Платени" всички социални или фискални вноски, които са платени напълно. AllCompletelyPayedInvoiceWillBeClosed=Всички фактури без остатък за плащане ще бъдат автоматично приключени със статус "Платени". ToMakePayment=Плати ToMakePaymentBack=Плати обратно ListOfYourUnpaidInvoices=Списък с неплатени фактури -NoteListOfYourUnpaidInvoices=Бележка: Този списък съдържа само фактури за контрагенти, които са свързани като търговски представители. -RevenueStamp=Приходен печат +NoteListOfYourUnpaidInvoices=Забележка: Този списък съдържа само фактури за контрагенти, с които сте свързан като търговски представител. +RevenueStamp=Приходен печат (бандерол) YouMustCreateInvoiceFromThird=Тази опция е налична само при създаване на фактура от раздел "Клиент" на контрагента YouMustCreateInvoiceFromSupplierThird=Тази опция е налична само при създаването на фактура от раздел "Доставчик" на контрагента YouMustCreateStandardInvoiceFirstDesc=Първо трябва да създадете стандартна фактура и да я конвертирате в „шаблон“, за да създадете нова шаблонна фактура -PDFCrabeDescription=Фактурен PDF шаблон. Пълен шаблон за фактура (препоръчителен шаблон) +PDFCrabeDescription=Шаблонна PDF фактура Crabe. Пълен шаблон за фактура (препоръчителен шаблон) PDFSpongeDescription=PDF шаблон за фактура. Пълен шаблон за фактура PDFCrevetteDescription=PDF шаблон за фактура. Пълен шаблон за ситуационни фактури -TerreNumRefModelDesc1=Върнете номер с формат %syymm-nnnn за стандартни фактури и %syymm-nnnn за кредитни известия, където уу е година, mm е месец и NNNN е последователност, без прекъсване и без 0 +TerreNumRefModelDesc1=Връща номер с формат %syymm-nnnn за стандартни фактури и %syymm-nnnn за кредитни бележки, където yy е година, mm е месец и nnnn е последователност без прекъсване и няма връщане към 0 MarsNumRefModelDesc1=Връща номер с формат %syymm-nnnn за стандартни фактури, %syymm-nnnn за заместващи фактури, %syymm-nnnn за фактури за авансово плащане и %syymm-nnnn за кредитни известия, където yy е година, mm е месец и nnnn е последователност без прекъсване и без връщане към 0 -TerreNumRefModelError=Документ започващ с $syymm вече съществува и не е съвместим с този модел на последователност. Извадете го или го преименувайте за да се активира този модул. +TerreNumRefModelError=Документ, започващ с $syymm, вече съществува и не е съвместим с този модел на последователност. Премахнете го или го преименувайте, за да активирате този модул. CactusNumRefModelDesc1=Връща номер с формат %syymm-nnnn за стандартни фактури, %syymm-nnnn за кредитни известия и %syymm-nnnn за фактури за авансово плащане, където yy е година, mm е месец и nnnn е последователност без прекъсване и без връщане към 0 ##### Types de contacts ##### -TypeContact_facture_internal_SALESREPFOLL=Представител свързан с продажна фактура -TypeContact_facture_external_BILLING=Контакт по продажна фактура -TypeContact_facture_external_SHIPPING=Контакт за доставка на клиента -TypeContact_facture_external_SERVICE=Контакт за обслужване на клиента +TypeContact_facture_internal_SALESREPFOLL=Представител свързан с фактура за продажба +TypeContact_facture_external_BILLING=Контакт по фактура за продажба +TypeContact_facture_external_SHIPPING=Контакт по доставка +TypeContact_facture_external_SERVICE=Контакт по обслужване TypeContact_invoice_supplier_internal_SALESREPFOLL=Представител по фактура за покупка TypeContact_invoice_supplier_external_BILLING=Контакт на доставчик по фактура TypeContact_invoice_supplier_external_SHIPPING=Контакт на доставчик по доставка TypeContact_invoice_supplier_external_SERVICE=Контакт на доставчик по услуга # Situation invoices InvoiceFirstSituationAsk=Първа ситуационна фактура -InvoiceFirstSituationDesc=ситуационни фактури са вързани към ситуации отнасящи се до процес, например конструиране. Всяка ситуация е свързана с една фактура. +InvoiceFirstSituationDesc=Ситуационните фактури са вързани към ситуации отнасящи се до прогрес, например процес на конструиране. Всяка ситуация е свързана с една фактура. InvoiceSituation=Ситуационна фактура -InvoiceSituationAsk=Фактура следваща ситуацията -InvoiceSituationDesc=Създай нова ситуация, следваща съществуваща такава -SituationAmount=Сума за ситуационна фактура (нето) +InvoiceSituationAsk=Фактура свързана със ситуацията +InvoiceSituationDesc=Създаване на нова ситуация, следваща съществуваща такава. +SituationAmount=Сума на ситуационна фактура (нето) SituationDeduction=Ситуационно изваждане ModifyAllLines=Промени всички линии -CreateNextSituationInvoice=Създай следваща ситуация +CreateNextSituationInvoice=Създаване на следваща ситуация ErrorFindNextSituationInvoice=Грешка, неуспех при намирането на следващия цикъл на реф. ситуация ErrorOutingSituationInvoiceOnUpdate=Фактурата за тази ситуация не може да бъде публикувана. ErrorOutingSituationInvoiceCreditNote=Невъзможно е да се изпрати свързано кредитно известие. diff --git a/htdocs/langs/bg_BG/bookmarks.lang b/htdocs/langs/bg_BG/bookmarks.lang index 102d8e6b722..379bd67d808 100644 --- a/htdocs/langs/bg_BG/bookmarks.lang +++ b/htdocs/langs/bg_BG/bookmarks.lang @@ -3,18 +3,18 @@ AddThisPageToBookmarks=Добавяне на тази страница към о Bookmark=Отметка Bookmarks=Отметки ListOfBookmarks=Списък с отметки -EditBookmarks=List/edit bookmarks +EditBookmarks=Списък / промяна на отметки NewBookmark=Нова отметка -ShowBookmark=Показване на отметката -OpenANewWindow=Отваряне в нов прозорец -ReplaceWindow=Отваряне в текущия прозорец -BookmarkTargetNewWindowShort=Нов прозорец -BookmarkTargetReplaceWindowShort=Текущия прозорец -BookmarkTitle=Заглавие на отметката -UrlOrLink=URL -BehaviourOnClick=Поведение когато се кликне на URL-а -CreateBookmark=Създаване -SetHereATitleForLink=Настройте заглавие на отметката -UseAnExternalHttpLinkOrRelativeDolibarrLink=Използвайте външен http URL или релативен Dolibarr URL -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Choose if linked page must open in new window or not -BookmarksManagement=Управление на отметките +ShowBookmark=Показване на отметка +OpenANewWindow=Отваряне на нов раздел +ReplaceWindow=Заменяне на текущ раздел +BookmarkTargetNewWindowShort=Нов раздел +BookmarkTargetReplaceWindowShort=Текущ раздел +BookmarkTitle=Име на отметка +UrlOrLink=URL връзка +BehaviourOnClick=Поведение при кликване върху URL връзка на отметка +CreateBookmark=Създаване на отметка +SetHereATitleForLink=Задайте име на отметката +UseAnExternalHttpLinkOrRelativeDolibarrLink=Използвайте външна / абсолютна връзка (https://URL) или вътрешна / относителна връзка (/DOLIBARR_ROOT/htdocs/...) +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Изберете дали страницата да бъде отворена в текущия или в нов раздел +BookmarksManagement=Управление на отметки diff --git a/htdocs/langs/bg_BG/cashdesk.lang b/htdocs/langs/bg_BG/cashdesk.lang index 6ed0a2faeb3..cccc3f92130 100644 --- a/htdocs/langs/bg_BG/cashdesk.lang +++ b/htdocs/langs/bg_BG/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Терминал NumberOfTerminals=Брой терминали TerminalSelect=Изберете терминал, който искате да използвате: POSTicket=POS тикет -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Използване на просто оформление за телефони diff --git a/htdocs/langs/bg_BG/categories.lang b/htdocs/langs/bg_BG/categories.lang index 21a09d93634..8d4de56caad 100644 --- a/htdocs/langs/bg_BG/categories.lang +++ b/htdocs/langs/bg_BG/categories.lang @@ -1,90 +1,90 @@ # Dolibarr language file - Source file is en_US - categories -Rubrique=Етикет/Категория -Rubriques=Етикети/Категории -RubriquesTransactions=Етикети/Категории на транзакции -categories=етикети/категории -NoCategoryYet=Няма етикет/категория създаден от този тип -In=В +Rubrique=Таг / Категория +Rubriques=Тагове / Категории +RubriquesTransactions=Тагове / Категории транзакции +categories=тагове / категории +NoCategoryYet=Няма създаден таг / категория от този тип +In=в AddIn=Добавяне в modify=промяна -Classify=Добавяне -CategoriesArea=Зона етикети/категории -ProductsCategoriesArea=Зона етикети/категории Продукти -SuppliersCategoriesArea=Секция с етикети / категории на доставчици -CustomersCategoriesArea=Зона етикети/категории Клиенти -MembersCategoriesArea=Зона етикети/категории Членове -ContactsCategoriesArea=Зона етикети/категории Контакти -AccountsCategoriesArea=Секция с етикети / категории на сметки -ProjectsCategoriesArea=Секция с етикети / категории на проекти -UsersCategoriesArea=Секция с етикети / категории на потребители +Classify=Класифициране +CategoriesArea=Секция с тагове / категории +ProductsCategoriesArea=Секция с тагове / категории за продукти / услуги +SuppliersCategoriesArea=Секция с тагове / категории за доставчици +CustomersCategoriesArea=Секция с тагове / категории за клиенти +MembersCategoriesArea=Секция с тагове / категории за членове +ContactsCategoriesArea=Секция с тагове / категории за контакти +AccountsCategoriesArea=Секция с тагове / категории за сметки +ProjectsCategoriesArea=Секция с тагове / категории за проекти +UsersCategoriesArea=Секция с тагове / категории за потребители SubCats=Подкатегории -CatList=Списък на етикети/категории -NewCategory=Нов етикет/категория -ModifCat=Редактиране етикет/категория -CatCreated=Етикет/категория създаден -CreateCat=Създаване етикет/категория -CreateThisCat=Създаване на този етикет/категория -NoSubCat=Няма подкатегория. +CatList=Списък с тагове / категории +NewCategory=Нов таг / категория +ModifCat=Промяна на таг / категория +CatCreated=Създаден е таг / категория +CreateCat=Създаване на таг / категория +CreateThisCat=Създаване на този таг / категория +NoSubCat=Няма подкатегория SubCatOf=Подкатегория -FoundCats=Намерени етикети/категории -ImpossibleAddCat=Не е възможно да добавите етикет / категория %s +FoundCats=Намерени тагове / категории +ImpossibleAddCat=Невъзможно е да добавите таг / категория %s WasAddedSuccessfully=%s е добавен успешно. -ObjectAlreadyLinkedToCategory=Елементът вече е към този етикет/категория. -ProductIsInCategories=Продукта/услугата е в следните етикети/категории -CompanyIsInCustomersCategories=Контагентът е свързан към следните клиенти/потециални/категории -CompanyIsInSuppliersCategories=Този контрагент е свързан към следните етикети / категории на доставчици -MemberIsInCategories=Този член е в следните етикети/категории Членове -ContactIsInCategories=Този конктакт не в етикети/категории Контакти -ProductHasNoCategory=Този продукт/услуга не е в нито един етикет/категория -CompanyHasNoCategory=Този контрагент не е в нито един етикет / категория -MemberHasNoCategory=Този член не е в нито един етикет/категория -ContactHasNoCategory=Този контакт не е в никои етикети/категории -ProjectHasNoCategory=Този проект не е в нито един етикет / категория -ClassifyInCategory=Добавяне в етикет/категория -NotCategorized=Без етикет/категория -CategoryExistsAtSameLevel=Тази категория вече съществува с този код +ObjectAlreadyLinkedToCategory=Елементът вече е свързан с този таг / категория. +ProductIsInCategories=Продуктът / услугата са свързани със следните тагове / категории +CompanyIsInCustomersCategories=Този контрагент е свързан със следните тагове / категории за клиенти / потенциални клиенти +CompanyIsInSuppliersCategories=Този контрагент е свързан със следните тагове / категории за доставчици +MemberIsInCategories=Този член е свързан със следните тагове / категории за членове +ContactIsInCategories=Този контакт е свързан със следните тагове / категории за контакти +ProductHasNoCategory=Този продукт / услуга не е свързан с нито един таг / категория +CompanyHasNoCategory=Този контрагент не е свързан с нито един таг / категория +MemberHasNoCategory=Този член не е свързан с нито един таг / категория +ContactHasNoCategory=Този контакт не е свързан с нито един таг / категория +ProjectHasNoCategory=Този проект не е свързан с нито един таг / категория +ClassifyInCategory=Добавяне към таг / категория +NotCategorized=Без таг / категория +CategoryExistsAtSameLevel=Тази категория вече съществува ContentsVisibleByAllShort=Съдържанието е видимо от всички ContentsNotVisibleByAllShort=Съдържанието не е видимо от всички -DeleteCategory=Изтриване на етикет/категория -ConfirmDeleteCategory=Сигурни ли сте, че искате да изтриете този етикет / категория? -NoCategoriesDefined=Няма създадени етикети/категории -SuppliersCategoryShort=Етикет/категория Доставчици -CustomersCategoryShort=Етикет/категория Клиенти -ProductsCategoryShort=Етикет/категория Продукти -MembersCategoryShort=Етикет/категория Членове -SuppliersCategoriesShort=Етикети/категории Доставчици -CustomersCategoriesShort=Етикети/категории Клиенти -ProspectsCategoriesShort=Етикети/категории Перспективи -CustomersProspectsCategoriesShort=Етикети/категории Клиенти / Перспективи -ProductsCategoriesShort=Етикети/категории Продукти -MembersCategoriesShort=Етикети/категории Членове -ContactCategoriesShort=Етикети/категории Контакти -AccountsCategoriesShort=Етикети/категории Сметки -ProjectsCategoriesShort=Етикети/категории Проекти -UsersCategoriesShort=Етикети/категории Потребители -ThisCategoryHasNoProduct=Тази категория не съдържа никакъв продукт. -ThisCategoryHasNoSupplier=Тази категория не съдържа никакви доставчици. -ThisCategoryHasNoCustomer=Тази категория не съдържа никакъв клиент. -ThisCategoryHasNoMember=Тази категория не съдържа никакъв член. -ThisCategoryHasNoContact=Тази категория не съдържа никакъв контакт -ThisCategoryHasNoAccount=Тази категория не съдържа никакви сметки. -ThisCategoryHasNoProject=Тази категория не съдържа никакви проекти. -CategId=Етикет/категория id -CatSupList=Списък на етикети / категории Доставчици -CatCusList=Списък на етикети/категории Клиенти/Потенциални Клиенти -CatProdList=Списък на етикети/категории Продукти -CatMemberList=Списък на етикети/категории Членове -CatContactList=Списък на етикети/категории Контакти -CatSupLinks=Връзки между доставчици и етикети/категории -CatCusLinks=Връзки между клиенти/потенциални клиенти и етикети/категории -CatProdLinks=Връзки между продукти/услуги и етикети/категории -CatProJectLinks=Връзки между проекти и етикети / категории -DeleteFromCat=Изтриване от етикети/категории +DeleteCategory=Изтриване на таг / категория +ConfirmDeleteCategory=Сигурни ли сте, че искате да изтриете този таг / категория? +NoCategoriesDefined=Няма определен таг / категория +SuppliersCategoryShort=Таг / категория доставчици +CustomersCategoryShort=Таг / категория клиенти +ProductsCategoryShort=Таг / категория продукти +MembersCategoryShort=Таг / категория членове +SuppliersCategoriesShort=Категории доставчици +CustomersCategoriesShort=Категории клиенти +ProspectsCategoriesShort=Категории потенциални клиенти +CustomersProspectsCategoriesShort=Категории клиенти / потенциални +ProductsCategoriesShort=Категории продукти +MembersCategoriesShort=Категории членове +ContactCategoriesShort=Категории контакти +AccountsCategoriesShort=Категории сметки +ProjectsCategoriesShort=Категории проекти +UsersCategoriesShort=Категории потребители +ThisCategoryHasNoProduct=Тази категория не съдържа нито един продукт +ThisCategoryHasNoSupplier=Тази категория не съдържа нито един доставчик +ThisCategoryHasNoCustomer=Тази категория не съдържа нито един клиент +ThisCategoryHasNoMember=Тази категория не съдържа нито един член +ThisCategoryHasNoContact=Тази категория не съдържа нито един контакт +ThisCategoryHasNoAccount=Тази категория не съдържа нито една сметка +ThisCategoryHasNoProject=Тази категория не съдържа нито един проект +CategId=Идентификатор на таг / категория +CatSupList=Списък на тагове / категории за доставчици +CatCusList=Списък на тагове / категории за клиенти / потенциални клиенти +CatProdList=Списък на тагове / категории за продукти +CatMemberList=Списък на тагове / категории за членове +CatContactList=Списък на тагове / категории за контакти +CatSupLinks=Връзки между доставчици и тагове / категории +CatCusLinks=Връзки между клиенти / потенциални клиенти и тагове / категории +CatProdLinks=Връзки между продукти / услуги и тагове / категории +CatProJectLinks=Връзки между проекти и тагове / категории +DeleteFromCat=Изтриване от таг / категория ExtraFieldsCategories=Допълнителни атрибути -CategoriesSetup=Етикети/категории настройка -CategorieRecursiv=Автоматично свързване с родителския етикет/категория -CategorieRecursivHelp=Ако опцията е включена, когато добавите продукт в подкатегория, продуктът също ще бъде добавен и в главната категория. -AddProductServiceIntoCategory=Добавяне на следния продукт/услуга -ShowCategory=Показване на етикет/категория -ByDefaultInList=По подразбиране в списък +CategoriesSetup=Настройка на тагове / категории +CategorieRecursiv=Автоматично свързване с главния таг / категория +CategorieRecursivHelp=Ако опцията е включена, когато добавите продукт в подкатегория, продуктът ще бъде добавен също и в главната категория. +AddProductServiceIntoCategory=Добавяне на следния продукт / услуга +ShowCategory=Показване на таг / категория +ByDefaultInList=По подразбиране в списъка ChooseCategory=Избиране на категория diff --git a/htdocs/langs/bg_BG/commercial.lang b/htdocs/langs/bg_BG/commercial.lang index ab324ca5102..d49a5ac4f69 100644 --- a/htdocs/langs/bg_BG/commercial.lang +++ b/htdocs/langs/bg_BG/commercial.lang @@ -1,80 +1,80 @@ # Dolibarr language file - Source file is en_US - commercial -Commercial=Търговски -CommercialArea=Търговска площ +Commercial=Търговия +CommercialArea=Секция за търговия Customer=Клиент Customers=Клиенти -Prospect=Потенциален -Prospects=Потенциални +Prospect=Потенциален клиент +Prospects=Потенциални клиенти DeleteAction=Изтриване на събитие NewAction=Ново събитие -AddAction=Създай събитие +AddAction=Създаване на събитие AddAnAction=Създаване на събитие -AddActionRendezVous=Създаване на Рандеву събитие +AddActionRendezVous=Създаване на събитие - среща ConfirmDeleteAction=Сигурни ли сте, че искате да изтриете това събитие? -CardAction=Карта на/за събитие +CardAction=Карта на събитие ActionOnCompany=Свързана компания ActionOnContact=Свързан контакт TaskRDVWith=Среща с %s -ShowTask=Покажи задача -ShowAction=Покажи събитие -ActionsReport=доклад от събитие +ShowTask=Преглед на задача +ShowAction=Преглед на събитие +ActionsReport=Справка за събития ThirdPartiesOfSaleRepresentative=Контрагенти с търговски представител -SaleRepresentativesOfThirdParty=Търговски представител за контрагента +SaleRepresentativesOfThirdParty=Търговски представители за контрагента SalesRepresentative=Търговски представител SalesRepresentatives=Търговски представители -SalesRepresentativeFollowUp=Търговски представител (продължение) -SalesRepresentativeSignature=Търговски представител (подпис) -NoSalesRepresentativeAffected=Няма особен продажби засегнати представител -ShowCustomer=Покажи клиента -ShowProspect=Покажи перспектива -ListOfProspects=Списък на потенциални +SalesRepresentativeFollowUp=Търговски представител (последващ) +SalesRepresentativeSignature=Търговски представител (подписващ) +NoSalesRepresentativeAffected=Не е определен търговски представител +ShowCustomer=Преглед на клиент +ShowProspect=Преглед на потенциален клиент +ListOfProspects=Списък на потенциални клиенти ListOfCustomers=Списък на клиенти LastDoneTasks=Действия: %s последно завършени LastActionsToDo=Действия: %s най-стари незавършени DoneAndToDoActions=Завършени и предстоящи събития DoneActions=Завършени събития -ToDoActions=Непълни събития +ToDoActions=Незавършени събития SendPropalRef=Изпращане на търговско предложение %s SendOrderRef=Изпращане на поръчка %s -StatusNotApplicable=Не е приложимо -StatusActionToDo=За да направите -StatusActionDone=Пълен +StatusNotApplicable=Не се прилага +StatusActionToDo=Да се направи +StatusActionDone=Завършено StatusActionInProcess=В процес TasksHistoryForThisContact=Събития за този контакт -LastProspectDoNotContact=Не се свържете -LastProspectNeverContacted=Никога контакт -LastProspectToContact=За да се свържете -LastProspectContactInProcess=Контакт в процес -LastProspectContactDone=Свържи се направи -ActionAffectedTo=Събитие определено на -ActionDoneBy=Събитие, извършена от +LastProspectDoNotContact=Да не се контактува +LastProspectNeverContacted=Не е контактувано +LastProspectToContact=Да се контактува +LastProspectContactInProcess=В процес на контактуване +LastProspectContactDone=Осъществен контакт +ActionAffectedTo=Събитие, възложено на +ActionDoneBy=Събитие, извършено от ActionAC_TEL=Телефонно обаждане ActionAC_FAX=Изпращане на факс -ActionAC_PROP=Изпрати предложение по пощата +ActionAC_PROP=Изпращане на предложение по имейл ActionAC_EMAIL=Изпращане на имейл -ActionAC_EMAIL_IN=Приемане на имейл +ActionAC_EMAIL_IN=Получаване на имейл ActionAC_RDV=Срещи ActionAC_INT=Интервенция на място -ActionAC_FAC=Изпращане на клиента фактура по пощата -ActionAC_REL=Изпращане на клиента фактура по пощата (напомняне) -ActionAC_CLO=Близо +ActionAC_FAC=Изпращане на фактура за продажба по пощата +ActionAC_REL=Изпращане на фактура за продажба по пощата (напомняне) +ActionAC_CLO=Приключване ActionAC_EMAILING=Изпращане на масов имейл -ActionAC_COM=Изпращане на поръчка за продажба по имейл -ActionAC_SHIP=Изпрати доставка по пощата -ActionAC_SUP_ORD=Изпращане на поръчка за покупка по имейл -ActionAC_SUP_INV=Изпращане на фактура на доставка по имейл -ActionAC_OTH=Друг +ActionAC_COM=Изпращане на поръчка за продажба по пощата +ActionAC_SHIP=Изпращане на пратка по пощата +ActionAC_SUP_ORD=Изпращане на поръчка за покупка по пощата +ActionAC_SUP_INV=Изпращане на фактура за доставка по пощата +ActionAC_OTH=Друго ActionAC_OTH_AUTO=Автоматично добавени ActionAC_MANUAL=Ръчно добавени ActionAC_AUTO=Автоматично добавени ActionAC_OTH_AUTOShort=Автоматично -Stats=Статистика на продажбите -StatusProsp=Prospect статус -DraftPropals=Проектът на търговски предложения +Stats=Статистика от продажби +StatusProsp=Статус на клиента +DraftPropals=Чернови търговски предложения NoLimit=Няма лимит ToOfferALinkForOnlineSignature=Връзка за онлайн подпис WelcomeOnOnlineSignaturePage=Добре дошли на страницата за приемане на търговски предложения от %s -ThisScreenAllowsYouToSignDocFrom=Този екран Ви позволява да приемете и подпишете или да отхвърлите оферта/търговско предложение -ThisIsInformationOnDocumentToSign=Това е информация за документа, който да приемете или отхвърлите -SignatureProposalRef=Подписване на оферта/търговско предложение %s +ThisScreenAllowsYouToSignDocFrom=Този екран позволява да приемете и подпишете или да отхвърлите оферта / търговско предложение +ThisIsInformationOnDocumentToSign=Това е информация за документа, който да приемете или отхвърлите. +SignatureProposalRef=Подписване на оферта / търговско предложение %s FeatureOnlineSignDisabled=Функцията за онлайн подписване е деактивирана или документът е генериран преди активирането на функцията diff --git a/htdocs/langs/bg_BG/companies.lang b/htdocs/langs/bg_BG/companies.lang index df6f5990b91..9f839183654 100644 --- a/htdocs/langs/bg_BG/companies.lang +++ b/htdocs/langs/bg_BG/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Абсолютни отстъпки от дос SupplierAbsoluteDiscountMy=Абсолютни отстъпки от доставчик (зададени от вас) DiscountNone=Няма Vendor=Доставчик +Supplier=Доставчик AddContact=Създай контакт AddContactAddress=Създй контакт/адрес EditContact=Редактиране на контакт diff --git a/htdocs/langs/bg_BG/compta.lang b/htdocs/langs/bg_BG/compta.lang index bae5b09070f..7df1d397b09 100644 --- a/htdocs/langs/bg_BG/compta.lang +++ b/htdocs/langs/bg_BG/compta.lang @@ -1,37 +1,37 @@ # Dolibarr language file - Source file is en_US - compta MenuFinancial=Фактури | Плащания -TaxModuleSetupToModifyRules=Отидете на Настройка модул данъци за да промените правилата за изчисляване -TaxModuleSetupToModifyRulesLT=Отидете на Настройка на фирмата за да промените правилата за изчисляване -OptionMode=Опция за счетоводство -OptionModeTrue=Опция приходи-разходи -OptionModeVirtual=Опция вземания-дългове -OptionModeTrueDesc=В този контекст, оборотът се изчислява по плащания (дата на плащанията). Валидността на цифрите е гарантирана само ако счетоводството се разглежда през входа/изхода на сметките чрез фактури. -OptionModeVirtualDesc=В този контекст, оборотът се изчислява върху фактури (датата на валидиране). Когато тези фактури са дължими, независимо дали са платени или не, те присъстват в оборота. -FeatureIsSupportedInInOutModeOnly=Функцията е достъпна само в счетоводството в режим кредит-дебит (Вижте настройките на модула за счетоводство) -VATReportBuildWithOptionDefinedInModule=Сумите показани тук са изчислени въз основа на правилата, определени в настройките на модул за данъци. -LTReportBuildWithOptionDefinedInModule=Сумите показани тук са изчислени въз основа на правилата, определени в настройките на модул за фирмата -Param=Структура +TaxModuleSetupToModifyRules=Отидете в Настройка на модула за данъци, за да промените правилата за изчисляване +TaxModuleSetupToModifyRulesLT=Отидете в Настройка на фирма / организация, за да промените правилата за изчисляване +OptionMode=Режим за счетоводство +OptionModeTrue=Режим приходи - разходи +OptionModeVirtual=Режим вземания - задължения +OptionModeTrueDesc=В този контекст, оборотът се изчислява върху плащанията (по дата на плащане). Валидността на цифрите е гарантирана, само ако счетоводството е разгледано, чрез фактурите на входа / изхода по съответните сметки. +OptionModeVirtualDesc=В този контекст, оборотът се изчислява върху фактурите (по дата на валидиране). Когато тези фактури са дължими, независимо дали са платени или не, те са включени в оборота. +FeatureIsSupportedInInOutModeOnly=Функцията е налична само в режим на счетоводство Вземания - Задължения (вижте конфигурацията на модул счетоводство) +VATReportBuildWithOptionDefinedInModule=Сумите показани тук се изчисляват с помощта на правилата, определени от настройката на модула за данъци. +LTReportBuildWithOptionDefinedInModule=Сумите показани тук се изчисляват като се използват правилата, определени в настройката за фирма / организация. +Param=Настройка RemainingAmountPayment=Оставаща сума за плащане: Account=Сметка Accountparent=Главна сметка Accountsparent=Главни сметки -Income=Доход +Income=Приход Outcome=Разход MenuReportInOut=Приход / Разход -ReportInOut=Баланс на приходите и разходите +ReportInOut=Баланс на приходи и разходи ReportTurnover=Фактуриран оборот ReportTurnoverCollected=Натрупан оборот -PaymentsNotLinkedToInvoice=Плащания, които не са свързани с никоя фактура, така че не свързани с никой контрагент -PaymentsNotLinkedToUser=Плащанията, които не са свързани с никой потребител +PaymentsNotLinkedToInvoice=Плащанията не са свързани с нито една фактура, така че не са свързани с нито един контрагент +PaymentsNotLinkedToUser=Плащанията не са свързани с нито един потребител Profit=Печалба AccountingResult=Счетоводен резултат BalanceBefore=Баланс (преди) Balance=Баланс Debit=Дебит Credit=Кредит -Piece=Счетоводен док. -AmountHTVATRealReceived=Нето събрани -AmountHTVATRealPaid=Нето платени +Piece=Счетоводен документ +AmountHTVATRealReceived=Получен (нето) +AmountHTVATRealPaid=Платен (нето) VATToPay=Данък върху продажби VATReceived=Получен данък VATToCollect=Данък върху покупки @@ -62,54 +62,54 @@ LT2CustomerES=IRPF продажби LT2SupplierES=IRPF покупки LT2CustomerIN=SGST продажби LT2SupplierIN=SGST покупки -VATCollected=ДДС събран +VATCollected=Получен ДДС ToPay=За плащане SpecialExpensesArea=Секция за всички специални плащания -SocialContribution=Социални или фискални данъци +SocialContribution=Социален или фискален данък SocialContributions=Социални или фискални данъци SocialContributionsDeductibles=Приспадащи се социални или фискални данъци SocialContributionsNondeductibles=Не приспадащи се социални или данъчни данъци -LabelContrib=Label contribution -TypeContrib=Type contribution +LabelContrib=Етикет на вноска +TypeContrib=Тип вноска MenuSpecialExpenses=Специални разходи MenuTaxAndDividends=Данъци и дивиденти -MenuSocialContributions=Social/fiscal taxes -MenuNewSocialContribution=New social/fiscal tax -NewSocialContribution=New social/fiscal tax -AddSocialContribution=Добавяне на социален/фискален данък -ContributionsToPay=Social/fiscal taxes to pay +MenuSocialContributions=Социални / фискални данъци +MenuNewSocialContribution=Нов социален / фискален данък +NewSocialContribution=Нов социален / фискален данък +AddSocialContribution=Добавяне на социален / фискален данък +ContributionsToPay=Социални / фискални данъци за плащане AccountancyTreasuryArea=Секция за фактуриране и плащания NewPayment=Ново плащане -PaymentCustomerInvoice=Плащане на продажна фактура -PaymentSupplierInvoice=плащане на фактура от доставчик -PaymentSocialContribution=Social/fiscal tax payment -PaymentVat=Плащането на ДДС -ListPayment=Списък на плащанията +PaymentCustomerInvoice=Плащане на фактура за продажба +PaymentSupplierInvoice=Плащане на фактура за покупка +PaymentSocialContribution=Плащане на социален / фискален данък +PaymentVat=Плащане на ДДС +ListPayment=Списък на плащания ListOfCustomerPayments=Списък на клиентски плащания -ListOfSupplierPayments=Списък на плащания от доставчик -DateStartPeriod=Date start period -DateEndPeriod=Date end period +ListOfSupplierPayments=Списък на плащания към доставчици +DateStartPeriod=Начална дата на период +DateEndPeriod=Крайна дата на период newLT1Payment=Ново плащане на данък 2 newLT2Payment=Ново плащане на данък 3 LT1Payment=Плащане на данък 2 LT1Payments=Плащания на данък 2 LT2Payment=Плащане на данък 3 LT2Payments=Плащания на данък 3 -newLT1PaymentES=New RE payment -newLT2PaymentES=Нова IRPF плащане -LT1PaymentES=RE Payment -LT1PaymentsES=RE Payments +newLT1PaymentES=Ново RE плащане +newLT2PaymentES=Ново IRPF плащане +LT1PaymentES=RE плащане +LT1PaymentsES=RE плащания LT2PaymentES=IRPF плащане -LT2PaymentsES=IRPF Плащания +LT2PaymentsES=IRPF плащания VATPayment=Плащане на данък върху продажбите VATPayments=Плащания на данък върху продажбите -VATRefund=Възстановяване на данък върху продажбите -NewVATPayment=Ново плащане на данък върху продажбите +VATRefund=Възстановяване на данък върху продажби +NewVATPayment=Ново плащане на данък върху продажби NewLocalTaxPayment=Ново плащане на данък %s -Refund=Refund -SocialContributionsPayments=Social/fiscal taxes payments +Refund=Възстановяване +SocialContributionsPayments=Плащания на социални / фискални данъци ShowVatPayment=Покажи плащане на ДДС -TotalToPay=Всичко за плащане +TotalToPay=Общо за плащане BalanceVisibilityDependsOnSortAndFilters=Балансът е видим в този списък само ако таблицата е сортирана възходящо на %s и филтрирана за 1 банкова сметка CustomerAccountancyCode=Счетоводен код на клиента SupplierAccountancyCode=Счетоводен код на доставчика @@ -122,43 +122,43 @@ TurnoverCollected=Натрупан оборот SalesTurnoverMinimum=Минимален оборот ByExpenseIncome=По разходи и приходи ByThirdParties=По контрагенти -ByUserAuthorOfInvoice=С фактура автор -CheckReceipt=Проверете депозит -CheckReceiptShort=Проверете депозит +ByUserAuthorOfInvoice=По автор на фактура +CheckReceipt=Чеков депозит +CheckReceiptShort=Чеков депозит LastCheckReceiptShort=Чекове: %s последно приети -NewCheckReceipt=Нов отстъпка -NewCheckDeposit=Нова проверка депозит +NewCheckReceipt=Нова отстъпка +NewCheckDeposit=Нов чеков депозит NewCheckDepositOn=Създаване на разписка за депозит по сметка: %s NoWaitingChecks=Няма чекове, които да очакват депозит. -DateChequeReceived=Проверете датата рецепция +DateChequeReceived=Дата на приемане на чек NbOfCheques=Брой чекове -PaySocialContribution=Pay a social/fiscal tax -ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid? -DeleteSocialContribution=Delete a social or fiscal tax payment -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment? -ExportDataset_tax_1=Social and fiscal taxes and payments -CalcModeVATDebt=Mode %sVAT on commitment accounting%s. -CalcModeVATEngagement=Mode %sVAT on incomes-expenses%s. +PaySocialContribution=Платете социален / фискален данък +ConfirmPaySocialContribution=Сигурни ли сте, че искате да класифицирате този социален или фискален данък като платен? +DeleteSocialContribution=Изтриване на плащане за социален или фискален данък +ConfirmDeleteSocialContribution=Сигурни ли сте, че искате да изтриете това плащане на социален / фискален данък? +ExportDataset_tax_1=Социални / фискални данъци и плащания +CalcModeVATDebt=Режим %sДДС върху осчетоводени задължения%s +CalcModeVATEngagement=Режим %sДДС върху приходи - разходи%s CalcModeDebt=Анализ на регистрираните фактури, дори ако те все още не са осчетоводени в книгата. CalcModeEngagement=Анализ на регистрираните плащания, дори ако те все още не са осчетоводени в книгата. CalcModeBookkeeping=Анализ на данни, регистрирани в таблицата на счетоводната книга. -CalcModeLT1= Mode %sRE on customer invoices - suppliers invoices%s -CalcModeLT1Debt=Mode %sRE on customer invoices%s -CalcModeLT1Rec= Mode %sRE on suppliers invoices%s -CalcModeLT2= Mode %sIRPF on customer invoices - suppliers invoices%s -CalcModeLT2Debt=Mode %sIRPF on customer invoices%s -CalcModeLT2Rec= Mode %sIRPF on suppliers invoices%s -AnnualSummaryDueDebtMode=Balance of income and expenses, annual summary -AnnualSummaryInputOutputMode=Balance of income and expenses, annual summary +CalcModeLT1= Режим %sRE върху фактури за продажба - фактури за доставка%s +CalcModeLT1Debt=Режим %sRE върху фактури за продажба%s +CalcModeLT1Rec= Режим %sRE върху фактури за доставка%s +CalcModeLT2= Режим %sIRPF върху фактури за продажба - фактури за доставка%s +CalcModeLT2Debt=Режим %sIRPF върху фактури за продажба%s +CalcModeLT2Rec= Режим %sIRPF върху фактури за доставка%s +AnnualSummaryDueDebtMode=Баланс на приходи и разходи, годишно обобщение +AnnualSummaryInputOutputMode=Баланс на приходи и разходи, годишно обобщение AnnualByCompanies=Баланс на приходите и разходите, по предварително определени групи сметки AnnualByCompaniesDueDebtMode=Баланс на приходите и разходите, по предварително определени групи, режим %sВземания-Дългове%s или казано още Осчетоводяване на вземания. AnnualByCompaniesInputOutputMode=Баланс на приходи и разходи, по предварително определени групи, режим %sПриходи - Разходи%s или казано още касова отчетност. SeeReportInInputOutputMode=Вижте %sанализа на плащанията%s за изчисляване на действителните плащания, дори и ако те все още не са осчетоводени в книгата. SeeReportInDueDebtMode=Вижте %sанализа на фактурите%s за изчисляване, който е базиран на регистираните фактури, дори и ако те все още не са осчетоводени в книгата. SeeReportInBookkeepingMode=Вижте %sСчетоводния доклад%s за изчисляване на таблицата в счетоводната книга -RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included -RulesResultDue=- Показани Сумите са с включени всички такси
- Тя включва неплатените фактури, разходи и ДДС, независимо дали са платени или не.
- Тя се основава на датата на утвърждаване на фактури и ДДС и на датата на падежа за разходи. -RulesResultInOut=- It includes the real payments made on invoices, expenses and VAT.
- It is based on the payment dates of the invoices, expenses and VAT. +RulesAmountWithTaxIncluded=- Посочените суми са с включени всички данъци +RulesResultDue=- Включва неизплатени фактури, разходи, ДДС, дарения, независимо дали са платени или не. Включва също платени заплати.
- Основава се на датата на валидиране на фактурите и ДДС и на датата на падежа на разходите. За заплати, определени с модула заплати се използва датата на плащането. +RulesResultInOut=- Включва реалните плащания по фактури, разходи, ДДС и заплати.
- Основава се на датите на плащане на фактурите, разходите, ДДС и заплатите. Датата на дарение за дарения. RulesCADue=- Включва дължимите фактури на клиента, независимо дали са платени или не.
- Базирани на датата на валидиране на тези фактури.
RulesCAIn=- Включва всички ефективни плащания по фактури, получени от клиенти.
- Базирани на датата на плащане на тези фактури
RulesCATotalSaleJournal=Включва всички кредитни линии от журнала за продажба. @@ -168,60 +168,60 @@ RulesResultBookkeepingPersonalized=Показва запис във вашата SeePageForSetup=Вижте менюто %s за настройка DepositsAreNotIncluded=- Фактурите за авансови плащания не са включени DepositsAreIncluded=- Фактурите за авансови плащания са включени -LT1ReportByCustomers=Отчет за данък 2 по контрагент -LT2ReportByCustomers=Отчет за данък 3 по контрагент -LT1ReportByCustomersES=Отчет по контрагент RE -LT2ReportByCustomersES=Отчет по контрагент IRPF -VATReport=Отчет за данъка върху продажбите -VATReportByPeriods=Отчет за данъка върху продажбите по периоди -VATReportByRates=Отчет за данъка върху продажбите по ставки -VATReportByThirdParties=Отчет за данъка върху продажбите по контрагенти -VATReportByCustomers=Отчет за данъка върху продажбите по клиенти -VATReportByCustomersInInputOutputMode=Report by the customer VAT collected and paid -VATReportByQuartersInInputOutputMode=Отчет по данъчна ставка върху продажбите за натрупания и платен данък -LT1ReportByQuarters=Отчет за данък 2 по ставки -LT2ReportByQuarters=Отчет за данък 3 по ставки -LT1ReportByQuartersES=Отчет по RE ставки -LT2ReportByQuartersES=Отчет по IRPF ставки -SeeVATReportInInputOutputMode=Виж да докладва %sVAT encasement%s за изчислението на стандартната -SeeVATReportInDueDebtMode=Виж доклада %sVAT за flow%s за изчисление, с опция върху потока -RulesVATInServices=- For services, the report includes the VAT regulations actually received or issued on the basis of the date of payment. -RulesVATInProducts=- За материалните активи отчетът включва получения или издаден ДДС въз основа на датата на плащане. -RulesVATDueServices=- Услуги, в доклада се включва ДДС фактури дължи платена или не, въз основа на датата на фактурата. -RulesVATDueProducts=- За материалните активи, отчетът включва фактурите по ДДС въз основа на датата на фактурата. -OptionVatInfoModuleComptabilite=Забележка: За материални активи, трябва да използват датата на доставка, за да бъде по-справедлива. -ThisIsAnEstimatedValue=Това е преглед, базиран на бизнес събития, а не на финалната счетоводна таблица, така че крайните резултати може да се различават от тези стойности за предварителен преглед -PercentOfInvoice=% / Фактура -NotUsedForGoods=Не се използва върху стоки -ProposalStats=Статистика за представяне на предложения +LT1ReportByCustomers=Справка за данък 2 по контрагент +LT2ReportByCustomers=Справка за данък 3 по контрагент +LT1ReportByCustomersES=Справка за RE по контрагент +LT2ReportByCustomersES=Справка за IRPF по контрагент +VATReport=Справка за данък върху продажби +VATReportByPeriods=Справка за данък върху продажби по периоди +VATReportByRates=Справка за данък върху продажби по ставки +VATReportByThirdParties=Справка за данък върху продажби по контрагенти +VATReportByCustomers=Справка за данък върху продажби по клиенти +VATReportByCustomersInInputOutputMode=Справка за получен и платен ДДС от клиент +VATReportByQuartersInInputOutputMode=Справка по данъчна ставка върху продажби за получен и платен данък +LT1ReportByQuarters=Справка за данък 2 по ставки +LT2ReportByQuarters=Справка за данък 3 по ставки +LT1ReportByQuartersES=Справка за RE по ставки +LT2ReportByQuartersES=Справка за IRPF по ставки +SeeVATReportInInputOutputMode=Вижте справка %sобхват на ДДС%s за стандартно изчисление +SeeVATReportInDueDebtMode=Вижте справка %sпоток на ДДС%s за изчисление с опция за потока +RulesVATInServices=- За услуги, докладът включва действително получените или издадени регламенти за ДДС въз основа на датата на плащане. +RulesVATInProducts=- За материални активи справка включва получения или издаден ДДС въз основа на датата на плащане. +RulesVATDueServices=- За услуги, докладът включва дължими фактури по ДДС, платени или не, въз основа на датата на фактурата. +RulesVATDueProducts=- За материални активи справката включва фактурите по ДДС въз основа на датата на фактурата. +OptionVatInfoModuleComptabilite=Забележка: За материални активи, трябва да се използва датата на доставка, за да бъде по-справедливо. +ThisIsAnEstimatedValue=Това е преглед, базиран на бизнес събития, а не на финалния сметкоплан, така че крайните резултати може да се различават от тези стойности за предварителен преглед +PercentOfInvoice=%% / фактура +NotUsedForGoods=Не се използва за стоки +ProposalStats=Статистика за предложения OrderStats=Статистика за поръчки -InvoiceStats=Статистически данни за сметки -Dispatch=Диспечерско +InvoiceStats=Статистика за фактури +Dispatch=Изпращане Dispatched=Изпратени ToDispatch=За изпращане -ThirdPartyMustBeEditAsCustomer=От контрагент трябва да бъдат определени като клиент -SellsJournal=Продажби вестник -PurchasesJournal=Покупките вестник -DescSellsJournal=Продажби вестник -DescPurchasesJournal=Покупките вестник -CodeNotDef=Не е определена +ThirdPartyMustBeEditAsCustomer=Контрагентът трябва да бъде дефиниран като клиент +SellsJournal=Журнал за продажби +PurchasesJournal=Журнал за покупки +DescSellsJournal=Журнал за продажби +DescPurchasesJournal=Журнал за покупки +CodeNotDef=Не е дефинирано WarningDepositsNotIncluded=Фактурите за авансови плащания не са включени в тази версия с този модул за счетоводство. -DatePaymentTermCantBeLowerThanObjectDate=Payment term date can't be lower than object date. -Pcg_version=Таблица на сметките +DatePaymentTermCantBeLowerThanObjectDate=Датата на плащане не може да бъде преди датата на обекта. +Pcg_version=Модели за сметкоплан Pcg_type=PCG тип Pcg_subtype=PCG подтип -InvoiceLinesToDispatch=Invoice lines to dispatch +InvoiceLinesToDispatch=Редове от фактура за изпращане ByProductsAndServices=По продукт и услуга -RefExt=External ref -ToCreateAPredefinedInvoice=За да създадете шаблонна фактура, създайте стандартна фактура, след което преди да я валидирате кликнете върху бутона "%s". -LinkedOrder=Link to order -Mode1=Method 1 -Mode2=Method 2 -CalculationRuleDesc=To calculate total VAT, there is two methods:
Method 1 is rounding vat on each line, then summing them.
Method 2 is summing all vat on each line, then rounding result.
Final result may differs from few cents. Default mode is mode %s. +RefExt=Външна референция +ToCreateAPredefinedInvoice=За да създадете шаблонна фактура създайте стандартна фактура, след което преди да я валидирате кликнете върху бутона "%s". +LinkedOrder=Връзка към поръчка +Mode1=Метод 1 +Mode2=Метод 2 +CalculationRuleDesc=За изчисляване на общия ДДС има два метода:
Метод 1 закръгля ДДС за всеки ред, след което ги сумира.
Метод 2 сумира ДДС от всеки ред, след което закръглява резултатът.
Крайните резултати може да се различават в известна степен. Метод по подразбиране е метод %s. CalculationRuleDescSupplier=Според доставчика, изберете подходящ метод, за да приложите същото правило за изчисление и да получите същия резултат, очакван от вашия доставчик. -TurnoverPerProductInCommitmentAccountingNotRelevant=Отчетът за оборот, натрупан от продукт, не е наличен. Този отчет е налице само за фактуриран оборот. -TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=Отчетът за оборот, натрупан от данък върху продажбите, не е наличен. Този отчет е налице само за фактуриран оборот. -CalculationMode=Calculation mode +TurnoverPerProductInCommitmentAccountingNotRelevant=Справката за оборот, натрупан от продукт, не е наличен. Тази справка е налице само за фактуриран оборот. +TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=Справката за оборот, натрупан от данък върху продажбите, не е наличен. Тази справка е налице само за фактуриран оборот. +CalculationMode=Режим на изчисление AccountancyJournal=Счетоводен код на журнала ACCOUNTING_VAT_SOLD_ACCOUNT=Счетоводна сметка по подразбиране за ДДС при продажби (използва се, ако не е определена при настройка на речника за ДДС) ACCOUNTING_VAT_BUY_ACCOUNT=Счетоводна сметка по подразбиране за ДДС при покупки (използва се, ако не е определена при настройка на речника за ДДС) @@ -232,14 +232,14 @@ ACCOUNTING_ACCOUNT_SUPPLIER=Счетоводна сметка, използва ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Специализираната счетоводна сметка, определена в картата на контрагента, ще се използва само за счетоводно отчитане на подсметка. Този ще бъде използван за главната книга и като стойност по подразбиране на подсметката за счетоводното отчитане, ако не е дефинирана специализирана счетоводна сметка за доставчика. ConfirmCloneTax=Потвърдете клонирането на социален/фискален данък CloneTaxForNextMonth=Клониране за следващ месец -SimpleReport=Simple report -AddExtraReport=Допълнителни отчети (добавете чуждестранен и национален клиентски отчет) -OtherCountriesCustomersReport=Foreign customers report -BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code -SameCountryCustomersWithVAT=National customers report -BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Based on the two first letters of the VAT number being the same as your own company's country code +SimpleReport=Обикновена справка +AddExtraReport=Допълнителни справки (добавя справка за чуждестранни и локални клиенти) +OtherCountriesCustomersReport=Справка за чуждестранни клиенти +BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Въз основа на първите две букви от номера по ДДС, различен от кода на държавата на вашата фирма +SameCountryCustomersWithVAT=Справка за локални клиенти +BasedOnTwoFirstLettersOfVATNumberBeingTheSameAsYourCompanyCountry=Въз основа на първите две букви от номера по ДДС, които са същите като в кода на държавата на вашата фирма LinkedFichinter=Връзка към интервенция -ImportDataset_tax_contrib=Социални/фискални данъци +ImportDataset_tax_contrib=Социални / фискални данъци ImportDataset_tax_vat=Плащания на ДДС ErrorBankAccountNotFound=Грешка: Банковата сметка не е намерена FiscalPeriod=Период на осчетоводяване @@ -250,7 +250,7 @@ LastDayTaxIsRelatedTo=Последен ден от периода, с който VATDue=Заявен данък върху продажбите ClaimedForThisPeriod=Заявен за периода PaidDuringThisPeriod=Платен през този период -ByVatRate=По ставка на данък върху продажбите -TurnoverbyVatrate=Оборот, фактуриран по данъчна ставка върху продажбите -TurnoverCollectedbyVatrate=Оборот, натрупан по данъчна ставка върху продажбите -PurchasebyVatrate=Покупка по данъчна ставка за продажба +ByVatRate=По ставка на ДДС +TurnoverbyVatrate=Оборот, фактуриран по ставка на ДДС +TurnoverCollectedbyVatrate=Оборот, натрупан по ставка на ДДС +PurchasebyVatrate=Покупка по ставка на ДДС diff --git a/htdocs/langs/bg_BG/contracts.lang b/htdocs/langs/bg_BG/contracts.lang index 346d8e3aad3..97a5594bab1 100644 --- a/htdocs/langs/bg_BG/contracts.lang +++ b/htdocs/langs/bg_BG/contracts.lang @@ -1,98 +1,98 @@ # Dolibarr language file - Source file is en_US - contracts -ContractsArea=Договори област -ListOfContracts=Списък на договорите +ContractsArea=Секция за договори +ListOfContracts=Списък на договори AllContracts=Всички договори -ContractCard=Карта на договор -ContractStatusNotRunning=Не работи -ContractStatusDraft=Проект -ContractStatusValidated=Утвърден -ContractStatusClosed=Затворен -ServiceStatusInitial=Не работи -ServiceStatusRunning=Бягане -ServiceStatusNotLate=Работещи, изтекъл -ServiceStatusNotLateShort=Не е изтекъл -ServiceStatusLate=Спринт, изтекъл +ContractCard=Карта +ContractStatusNotRunning=Не се изпълнява +ContractStatusDraft=Чернова +ContractStatusValidated=Валидиран +ContractStatusClosed=Прекратен +ServiceStatusInitial=Неактивна +ServiceStatusRunning=Активна +ServiceStatusNotLate=Активна, неизтекла +ServiceStatusNotLateShort=Неизтекла +ServiceStatusLate=Активна, изтекла ServiceStatusLateShort=Изтекла -ServiceStatusClosed=Затворен -ShowContractOfService=Показване на договора за услугата +ServiceStatusClosed=Прекратена +ShowContractOfService=Показване на договор за услуга Contracts=Договори ContractsSubscriptions=Договори / Абонаменти ContractsAndLine=Договори и договорни линии Contract=Договор ContractLine=Договорна линия -Closing=Затваряне -NoContracts=Не договори +Closing=Прекратяване +NoContracts=Няма договори MenuServices=Услуги -MenuInactiveServices=Услуги, които не са активни -MenuRunningServices=Текущи услуги +MenuInactiveServices=Неактивни услуги +MenuRunningServices=Активни услуги MenuExpiredServices=Изтекли услуги -MenuClosedServices=Затворени услуги +MenuClosedServices=Прекратени услуги NewContract=Нов договор NewContractSubscription=Нов договор / абонамент AddContract=Създаване на договор -DeleteAContract=Изтриване на договора -ActivateAllOnContract=Активиране всички услуги -CloseAContract=Затваряне на договора +DeleteAContract=Изтриване на договор +ActivateAllOnContract=Активиране на всички услуги +CloseAContract=Прекратяване на договор ConfirmDeleteAContract=Сигурни ли сте, че искате да изтриете този договор с всички предоставени услуги? -ConfirmValidateContract=Сигурни ли сте, че искате да валидирате този договор под името %s? -ConfirmActivateAllOnContract=Това ще отвори всички услуги (които са все още неактивни). Наистина ли искате да отворите всички услуги? -ConfirmCloseContract=Това ще затвори всички услуги (активни или не). Сигурни ли сте, че искате да прекратите този договор? -ConfirmCloseService=Сигурни ли сте, че искате да затворите тази услуга с дата %s ? -ValidateAContract=Одобряване на договор -ActivateService=Активиране на услугата +ConfirmValidateContract=Сигурни ли сте, че искате да валидирате този договор с № %s? +ConfirmActivateAllOnContract=Това ще активира всички услуги, които са все още неактивни. Наистина ли искате да активирате всички услуги? +ConfirmCloseContract=Това ще прекрати всички услуги (активни или не). Сигурни ли сте, че искате да прекратите този договор? +ConfirmCloseService=Сигурни ли сте, че искате да прекратите тази услуга с дата %s ? +ValidateAContract=Валидиране на договор +ActivateService=Активиране на услуга ConfirmActivateService=Сигурни ли сте, че искате да активирате тази услуга с дата %s ? -RefContract=Договор препратка +RefContract=Реф. договор DateContract=Дата на договора -DateServiceActivate=Датата на активиране на услугата -ListOfServices=Списък на услугите -ListOfInactiveServices=Списък на не е активен услуги -ListOfExpiredServices=Списък на изтекъл активни услуги -ListOfClosedServices=Списък на затворените услуги -ListOfRunningServices=Списък на стартираните услуги -NotActivatedServices=Неактивни услуги (сред валидирани договори) -BoardNotActivatedServices=Услуги за да активирате сред утвърдени договори +DateServiceActivate=Дата на активиране на услуга +ListOfServices=Списък на услуги +ListOfInactiveServices=Списък на неактивни услуги +ListOfExpiredServices=Списък на изтекли активни услуги +ListOfClosedServices=Списък на прекратени услуги +ListOfRunningServices=Списък на активни услуги +NotActivatedServices=Неактивни услуги (измежду валидирани договори) +BoardNotActivatedServices=Услуги за активиране (измежду валидирани договори) LastContracts=Договори: %s последни LastModifiedServices=Услуги: %s последно променени ContractStartDate=Начална дата ContractEndDate=Крайна дата DateStartPlanned=Планирана начална дата DateStartPlannedShort=Планирана начална дата -DateEndPlanned=Планиран крайната дата -DateEndPlannedShort=Планиран крайната дата -DateStartReal=Недвижими началната дата -DateStartRealShort=Недвижими началната дата -DateEndReal=Недвижими крайната дата -DateEndRealShort=Недвижими крайната дата -CloseService=Затворете услуга -BoardRunningServices=Услуги в ход -BoardExpiredServices=Услуги с изтекъл срок -ServiceStatus=Състояние на услугата +DateEndPlanned=Планирана крайна дата +DateEndPlannedShort=Планирана крайна дата +DateStartReal=Реална начална дата +DateStartRealShort=Реална начална дата +DateEndReal=Реална крайна дата +DateEndRealShort=Реална крайна дата +CloseService=Приключване на услуга +BoardRunningServices=Активни услуги +BoardExpiredServices=Изтекли услуги +ServiceStatus=Статус на услуга DraftContracts=Чернови договори -CloseRefusedBecauseOneServiceActive=Договорът не може да бъде затворен, тъй като има най-малко една отворена услуга в него +CloseRefusedBecauseOneServiceActive=Договорът не може да бъде прекратен, тъй като има най-малко една активна услуга в него. ActivateAllContracts=Активиране на всички договорни линии -CloseAllContracts=Затворете всички договорни линии -DeleteContractLine=Изтриване на линия договор +CloseAllContracts=Прекратяване на всички договорни линии +DeleteContractLine=Изтриване на договорна линия ConfirmDeleteContractLine=Сигурни ли сте, че искате да изтриете тази договорна линия? -MoveToAnotherContract=Преместване на службата в друг договор. -ConfirmMoveToAnotherContract=Избра новата цел на договора и потвърдете, искам да се движат тази услуга в този договор. +MoveToAnotherContract=Преместване на услуга в друг договор. +ConfirmMoveToAnotherContract=Избрах нов целеви договор и потвърждавам, че искам да преместя тази услуга в този договор. ConfirmMoveToAnotherContractQuestion=Изберете в кой съществуващ договор (на същия контрагент) искате да преместите тази услуга? -PaymentRenewContractId=Поднови договора линия (брой %s) -ExpiredSince=Срок на годност -NoExpiredServices=Не изтекъл активни услуги -ListOfServicesToExpireWithDuration=Списък на Услуги изтичащи в %s дни -ListOfServicesToExpireWithDurationNeg=Списък на услуги изтекли повече от %s дни -ListOfServicesToExpire=Списък на изтичащи Услуги -NoteListOfYourExpiredServices=Този списък съдържа само услуги от договори с контрагенти, с които сте свързани като търговски представител. +PaymentRenewContractId=Подновяване на договорна линия (№ %s) +ExpiredSince=Дата на изтичане +NoExpiredServices=Няма изтекли активни услуги +ListOfServicesToExpireWithDuration=Списък на услуги изтичащи в следващите %s дни +ListOfServicesToExpireWithDurationNeg=Списък на услуги изтекли преди повече от %s дни +ListOfServicesToExpire=Списък на изтичащи услуги +NoteListOfYourExpiredServices=Този списък съдържа само услуги от договори с контрагенти, за които сте посочен като търговски представител. StandardContractsTemplate=Стандартен шаблон за договори ContactNameAndSignature=За %s, име и подпис: -OnlyLinesWithTypeServiceAreUsed=Само линии с тип "Услуга" ще бъдат клонирани. -ConfirmCloneContract=Сигурни ли сте, че искате да клонирате договора %s ? -LowerDateEndPlannedShort=По-ранна планирана крайна дата на активните услуги +OnlyLinesWithTypeServiceAreUsed=Само договорни линии тип 'Услуга' ще бъдат клонирани. +ConfirmCloneContract=Сигурни ли сте, че искате да клонирате договор %s ? +LowerDateEndPlannedShort=По-ранна планирана крайна дата на активни услуги SendContractRef=Информация за договор __REF__ OtherContracts=Други договори ##### Types de contacts ##### -TypeContact_contrat_internal_SALESREPSIGN=Търговски представител подписване на договора -TypeContact_contrat_internal_SALESREPFOLL=Търговски представител проследяване договор -TypeContact_contrat_external_BILLING=Контакт с клиента за фактуриране -TypeContact_contrat_external_CUSTOMER=Следвайте контакт с клиентите -TypeContact_contrat_external_SALESREPSIGN=Подписване на договор клиента контакт +TypeContact_contrat_internal_SALESREPSIGN=Търговски представител (подписващ) +TypeContact_contrat_internal_SALESREPFOLL=Търговски представител (проследяващ) +TypeContact_contrat_external_BILLING=Контакт на клиента за фактуриране +TypeContact_contrat_external_CUSTOMER=Контакт на клиента (проследяващ) +TypeContact_contrat_external_SALESREPSIGN=Контакт на клиента (подписващ) diff --git a/htdocs/langs/bg_BG/deliveries.lang b/htdocs/langs/bg_BG/deliveries.lang index a1a7e459b09..5147633f5c9 100644 --- a/htdocs/langs/bg_BG/deliveries.lang +++ b/htdocs/langs/bg_BG/deliveries.lang @@ -1,30 +1,31 @@ # Dolibarr language file - Source file is en_US - deliveries Delivery=Доставка -DeliveryRef=Ref Delivery -DeliveryCard=Receipt card -DeliveryOrder=Доставка за +DeliveryRef=Реф. доставка +DeliveryCard=Карта на разписка +DeliveryOrder=Разписка за доставка DeliveryDate=Дата на доставка -CreateDeliveryOrder=Generate delivery receipt -DeliveryStateSaved=Състояние на доставката е записано -SetDeliveryDate=Дата на изпращане -ValidateDeliveryReceipt=Одобряване на разписка -ValidateDeliveryReceiptConfirm=Are you sure you want to validate this delivery receipt? -DeleteDeliveryReceipt=Изтриване на разписка -DeleteDeliveryReceiptConfirm=Are you sure you want to delete delivery receipt %s? -DeliveryMethod=Начин +CreateDeliveryOrder=Генериране на разписка за доставка +DeliveryStateSaved=Състоянието на доставката е записано +SetDeliveryDate=Задаване на дата за доставка +ValidateDeliveryReceipt=Валидиране на разписка за доставка +ValidateDeliveryReceiptConfirm=Сигурни ли сте, че искате да валидирате тази разписка за доставка? +DeleteDeliveryReceipt=Изтриване на разписка за доставка +DeleteDeliveryReceiptConfirm=Сигурни ли сте, че искате да изтриете тази разписка %s? +DeliveryMethod=Начин на доставка TrackingNumber=Проследяващ номер -DeliveryNotValidated=Доставката не валидирани -StatusDeliveryCanceled=Отменен +DeliveryNotValidated=Доставката не е валидирана +StatusDeliveryCanceled=Анулирана StatusDeliveryDraft=Чернова -StatusDeliveryValidated=Получено +StatusDeliveryValidated=Получена # merou PDF model NameAndSignature=Име и подпис: -ToAndDate=To___________________________________ на ____ / _____ / __________ -GoodStatusDeclaration=Стоките са получили по-горе в добро състояние, -Deliverer=Избавител: +ToAndDate=От ___________________________________ на ____ / _____ / __________ +GoodStatusDeclaration=Получих стоките (артикулите) описани по-горе в добро състояние, +Deliverer=Доставчик: Sender=Подател Recipient=Получател ErrorStockIsNotEnough=Няма достатъчна наличност Shippable=Годно за изпращане NonShippable=Негодно за изпращане -ShowReceiving=Show delivery receipt +ShowReceiving=Показване на разписка за доставка +NonExistentOrder=Несъществуваща поръчка diff --git a/htdocs/langs/bg_BG/dict.lang b/htdocs/langs/bg_BG/dict.lang index 95f8d38c216..2c3a9ecbe8e 100644 --- a/htdocs/langs/bg_BG/dict.lang +++ b/htdocs/langs/bg_BG/dict.lang @@ -21,7 +21,7 @@ CountryNL=Холандия CountryHU=Унгария CountryRU=Русия CountrySE=Швеция -CountryCI=Ivoiry Coast +CountryCI=Кот д'Ивоар CountrySN=Сенегал CountryAR=Аржентина CountryCM=Камерун @@ -31,19 +31,19 @@ CountryMC=Монако CountryAU=Австралия CountrySG=Сингапур CountryAF=Афганистан -CountryAX=Аландските острови +CountryAX=Аландски острови CountryAL=Албания CountryAS=Американска Самоа CountryAD=Андора CountryAO=Ангола -CountryAI=Anguilla +CountryAI=Ангуила CountryAQ=Антарктида CountryAG=Антигуа и Барбуда CountryAM=Армения CountryAW=Аруба CountryAT=Австрия CountryAZ=Азербайджан -CountryBS=Бахамските острови +CountryBS=Бахамски острови CountryBH=Бахрейн CountryBD=Бангладеш CountryBB=Барбадос @@ -54,7 +54,7 @@ CountryBM=Бермуда CountryBT=Бутан CountryBO=Боливия CountryBA=Босна и Херцеговина -CountryBW=Ботсуана +CountryBW=Ботсвана CountryBV=Остров Буве CountryBR=Бразилия CountryIO=Британска територия в Индийския океан @@ -64,16 +64,16 @@ CountryBF=Буркина Фасо CountryBI=Бурунди CountryKH=Камбоджа CountryCV=Кабо Верде -CountryKY=Каймановите острови +CountryKY=Кайманови острови CountryCF=Централноафриканска република CountryTD=Чад CountryCL=Чили CountryCX=Остров Рождество -CountryCC=Cocos (Keeling) Islands +CountryCC=Кокосови острови CountryCO=Колумбия -CountryKM=Коморските острови +CountryKM=Коморски острови CountryCG=Конго -CountryCD=Конго, Демократична република +CountryCD=Демократична република Конго CountryCK=Острови Кук CountryCR=Коста Рика CountryHR=Хърватия @@ -91,8 +91,8 @@ CountryGQ=Екваториална Гвинея CountryER=Еритрея CountryEE=Естония CountryET=Етиопия -CountryFK=Фолкландските острови -CountryFO=Фарьорските острови +CountryFK=Фолклендски острови +CountryFO=Фарьорски острови CountryFJ=Фиджи CountryFI=Финландия CountryGF=Френска Гвиана @@ -112,10 +112,10 @@ CountryGN=Гвинея CountryGW=Гвинея-Бисау CountryGY=Гвиана CountryHT=Хаити -CountryHM=Хърд и Макдоналд +CountryHM=Острови Хърд и Макдоналд CountryVA=Светия престол (Ватикана) CountryHN=Хондурас -CountryHK=Хонконг +CountryHK=Хонгконг CountryIS=Исландия CountryIN=Индия CountryID=Индонезия @@ -137,19 +137,19 @@ CountryLV=Латвия CountryLB=Ливан CountryLS=Лесото CountryLR=Либерия -CountryLY=Либийски +CountryLY=Либия CountryLI=Лихтенщайн CountryLT=Литва CountryLU=Люксембург CountryMO=Макао -CountryMK=Македония, Бивша югославска +CountryMK=Северна Македония CountryMG=Мадагаскар CountryMW=Малави CountryMY=Малайзия -CountryMV=Малдивите +CountryMV=Малдиви CountryML=Мали CountryMT=Малта -CountryMH=Маршаловите острови +CountryMH=Маршалови острови CountryMQ=Мартиника CountryMR=Мавритания CountryMU=Мавриций @@ -158,20 +158,20 @@ CountryMX=Мексико CountryFM=Микронезия CountryMD=Молдова CountryMN=Монголия -CountryMS=Monserrat +CountryMS=Монсерат CountryMZ=Мозамбик CountryMM=Мианмар (Бирма) CountryNA=Намибия CountryNR=Науру CountryNP=Непал -CountryAN=Нидерландските Антили +CountryAN=Нидерландски Антили CountryNC=Нова Каледония CountryNZ=Нова Зеландия CountryNI=Никарагуа CountryNE=Нигер CountryNG=Нигерия CountryNU=Ниуе -CountryNF=Норфолк +CountryNF=Остров Норфолк CountryMP=Северни Мариански острови CountryNO=Норвегия CountryOM=Оман @@ -179,15 +179,15 @@ CountryPK=Пакистан CountryPW=Палау CountryPS=Палестинска територия, окупирана CountryPA=Панама -CountryPG=Папуа-Нова Гвинея +CountryPG=Папуа Нова Гвинея CountryPY=Парагвай CountryPE=Перу CountryPH=Филипини -CountryPN=Питкерн острови +CountryPN=Острови Питкерн CountryPL=Полша CountryPR=Пуерто Рико CountryQA=Катар -CountryRE=Повторно обединяване +CountryRE=Реюнион CountryRO=Румъния CountryRW=Руанда CountrySH=Света Елена @@ -199,11 +199,11 @@ CountryWS=Самоа CountrySM=Сан Марино CountryST=Сао Томе и Принсипи CountryRS=Сърбия -CountrySC=Сейшелите +CountrySC=Сейшели CountrySL=Сиера Леоне CountrySK=Словакия CountrySI=Словения -CountrySB=Соломоновите острови +CountrySB=Соломонови острови CountrySO=Сомалия CountryZA=Южна Африка CountryGS=Южна Джорджия и Южни Сандвичеви острови @@ -212,14 +212,14 @@ CountrySD=Судан CountrySR=Суринам CountrySJ=Свалбард и Ян Майен CountrySZ=Свазиленд -CountrySY=Сирийски +CountrySY=Сирия CountryTW=Тайван CountryTJ=Таджикистан CountryTZ=Танзания CountryTH=Тайланд CountryTL=Източен Тимор CountryTK=Токелау -CountryTO=Лека индийска двуколка +CountryTO=Тонга CountryTT=Тринидад и Тобаго CountryTR=Турция CountryTM=Туркменистан @@ -227,8 +227,8 @@ CountryTC=Острови Търкс и Кайкос CountryTV=Тувалу CountryUG=Уганда CountryUA=Украйна -CountryAE=Обединените арабски емирства -CountryUM=САЩ Малки далечни острови +CountryAE=Обединени арабски емирства +CountryUM=Отдалечени острови на САЩ CountryUY=Уругвай CountryUZ=Узбекистан CountryVU=Вануату @@ -241,55 +241,55 @@ CountryEH=Западна Сахара CountryYE=Йемен CountryZM=Замбия CountryZW=Зимбабве -CountryGG=Вълнена фланела +CountryGG=Гърнзи CountryIM=Остров Ман CountryJE=Жарсе CountryME=Черна гора -CountryBL=Сен Бартелеми -CountryMF=Saint Martin +CountryBL=Сен Бартелми +CountryMF=Свети Мартин ##### Civilities ##### -CivilityMME=Г-жа -CivilityMR=Г-н -CivilityMLE=Г-ца -CivilityMTRE=Майстор -CivilityDR=Доктор +CivilityMME=г-жа +CivilityMR=г-н +CivilityMLE=г-ца +CivilityMTRE=м-р +CivilityDR=д-р ##### Currencies ##### Currencyeuros=Евро -CurrencyAUD=AU долара -CurrencySingAUD=AU долар -CurrencyCAD=CAN долара -CurrencySingCAD=CAN долар +CurrencyAUD=Австралийски долара +CurrencySingAUD=Австралийски долар +CurrencyCAD=Канадски долара +CurrencySingCAD=Канадски долар CurrencyCHF=Швейцарски франкове CurrencySingCHF=Швейцарски франк CurrencyEUR=Евро CurrencySingEUR=Евро CurrencyFRF=Френски франкове CurrencySingFRF=Френския франк -CurrencyGBP=GB лири -CurrencySingGBP=GB лира +CurrencyGBP=Британски лири +CurrencySingGBP=Британска лира CurrencyINR=Индийски рупии CurrencySingINR=Индийска рупия CurrencyMAD=Дирхам CurrencySingMAD=Дирхам -CurrencyMGA=Ariary -CurrencySingMGA=Ariary -CurrencyMUR=Мавриций рупии -CurrencySingMUR=Мавриций рупии -CurrencyNOK=Норвежките Кронес +CurrencyMGA=Ариари +CurrencySingMGA=Ариари +CurrencyMUR=Маврицийски рупии +CurrencySingMUR=Маврицийска рупия +CurrencyNOK=Норвежки крони CurrencySingNOK=Норвежка крона -CurrencyTND=Тунизийски динара +CurrencyTND=Тунизийски динари CurrencySingTND=Тунизийски динар CurrencyUSD=Щатски долари CurrencySingUSD=Щатски долар CurrencyUAH=Хривня CurrencySingUAH=Хривня -CurrencyXAF=CFA франка BEAC -CurrencySingXAF=CFA Franc BEAC +CurrencyXAF=CFA франкове BEAC +CurrencySingXAF=CFA франк BEAC CurrencyXOF=CFA франкове BCEAO CurrencySingXOF=CFA франк BCEAO -CurrencyXPF=ОПОР франкове -CurrencySingXPF=CFP франк +CurrencyXPF=Френски тихоокеански франкове +CurrencySingXPF=Френски тихоокеански франк CurrencyCentEUR=центa CurrencyCentSingEUR=цент CurrencyCentINR=пайса @@ -298,12 +298,12 @@ CurrencyThousandthSingTND=хиляден #### Input reasons ##### DemandReasonTypeSRC_INTE=Интернет DemandReasonTypeSRC_CAMP_MAIL=Пощенска кампания -DemandReasonTypeSRC_CAMP_EMAIL=Кампания по имейл +DemandReasonTypeSRC_CAMP_EMAIL=Имейл кампания DemandReasonTypeSRC_CAMP_PHO=Телефонна кампания DemandReasonTypeSRC_CAMP_FAX=Факс кампания DemandReasonTypeSRC_COMM=Търговски контакт -DemandReasonTypeSRC_SHOP=Контакт с магазин -DemandReasonTypeSRC_WOM=Уста на уста +DemandReasonTypeSRC_SHOP=Контакт от магазин +DemandReasonTypeSRC_WOM=От уста на уста DemandReasonTypeSRC_PARTNER=Партньор DemandReasonTypeSRC_EMPLOYEE=Служител DemandReasonTypeSRC_SPONSORING=Спонсорство diff --git a/htdocs/langs/bg_BG/ecm.lang b/htdocs/langs/bg_BG/ecm.lang index 20b6c024577..160f2dcc5ca 100644 --- a/htdocs/langs/bg_BG/ecm.lang +++ b/htdocs/langs/bg_BG/ecm.lang @@ -1,52 +1,52 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=No. of documents in directory +ECMNbOfDocs=Брой документи в директорията ECMSection=Директория ECMSectionManual=Ръчно създадена директория ECMSectionAuto=Автоматично създадена директория ECMSectionsManual=Ръчно създадено дърво ECMSectionsAuto=Автоматично създадено дърво ECMSections=Директории -ECMRoot=ECM Root +ECMRoot=Основна директория ECMNewSection=Нова директория ECMAddSection=Добавяне на директория ECMCreationDate=Дата на създаване -ECMNbOfFilesInDir=Брой на файловете в директорията -ECMNbOfSubDir=Брой на под-директориите -ECMNbOfFilesInSubDir=Брой на файловете в под-директориите +ECMNbOfFilesInDir=Брой файлове в директорията +ECMNbOfSubDir=Брой поддиректории +ECMNbOfFilesInSubDir=Брой файлове в поддиректориите ECMCreationUser=Създател -ECMArea=DMS/ECM area -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr. -ECMAreaDesc2=* Автоматично създадените директории се запълват автоматично при добавяне на документи в картата на даден елемент.
* Ръчно създадените директории могат да бъдат използвани, за да запазите документи, които не са свързани с определен елемент. -ECMSectionWasRemoved=Директорията %s беше изтрита. -ECMSectionWasCreated=Directory %s has been created. +ECMArea=Документи +ECMAreaDesc=Секцията DMS / ECM (Система за управление на документи / Електронно управление на съдържание) позволява да съхранявате, споделяте и бързо да откривате всички видове документи в системата. +ECMAreaDesc2=* Автоматично създадените директории се попълват автоматично при добавяне на документи в картата на даден елемент.
* Ръчно създадените директории могат да бъдат използвани, за да съхранявате документи, които не са свързани с определен елемент. +ECMSectionWasRemoved=Директорията %s е изтрита. +ECMSectionWasCreated=Директорията %s е създадена. ECMSearchByKeywords=Търсене по ключови думи ECMSearchByEntity=Търсене по обект -ECMSectionOfDocuments=Директории на документи +ECMSectionOfDocuments=Директории с документи ECMTypeAuto=Автоматично ECMDocsBySocialContributions=Документи свързани със социални или фискални такси -ECMDocsByThirdParties=Документи, свързани с контрагенти -ECMDocsByProposals=Документи, свързани с предложения -ECMDocsByOrders=Документи, свързани с поръчки на клиенти -ECMDocsByContracts=Документи, свързани с договори -ECMDocsByInvoices=Документи, свързани с клиентите фактури -ECMDocsByProducts=Документи, свързани с продуктите -ECMDocsByProjects=Документи свързани към проекти -ECMDocsByUsers=Документи свързани към потребители -ECMDocsByInterventions=Документи свързани към интервенции -ECMDocsByExpenseReports=Documents linked to expense reports -ECMDocsByHolidays=Documents linked to holidays -ECMDocsBySupplierProposals=Documents linked to supplier proposals -ECMNoDirectoryYet=Не е създадена директория -ShowECMSection=Покажи директория +ECMDocsByThirdParties=Документи свързани с контрагенти +ECMDocsByProposals=Документи свързани с предложения +ECMDocsByOrders=Документи свързани с поръчки за продажба +ECMDocsByContracts=Документи свързани с договори +ECMDocsByInvoices=Документи свързани с фактури за продажба +ECMDocsByProducts=Документи свързани с продукти +ECMDocsByProjects=Документи свързани с проекти +ECMDocsByUsers=Документи свързани с потребители +ECMDocsByInterventions=Документи свързани с интервенции +ECMDocsByExpenseReports=Документи свързани с разходни отчети +ECMDocsByHolidays=Документи свързани с отпуски +ECMDocsBySupplierProposals=Документи свързани със запитвания към доставчици +ECMNoDirectoryYet=Няма създадена директория +ShowECMSection=Показване на директория DeleteSection=Изтриване на директория -ConfirmDeleteSection=Can you confirm you want to delete the directory %s? -ECMDirectoryForFiles=Относителна директория за файловете -CannotRemoveDirectoryContainsFilesOrDirs=Removal not possible because it contains some files or sub-directories -CannotRemoveDirectoryContainsFiles=Removal not possible because it contains some files +ConfirmDeleteSection=Сигурни ли сте, че искате да изтриете директорията %s? +ECMDirectoryForFiles=Относителна директория за файлове +CannotRemoveDirectoryContainsFilesOrDirs=Изтриването не е възможно, защото съдържа файлове или поддиректории +CannotRemoveDirectoryContainsFiles=Изтриването не е възможно, защото съдържа файлове ECMFileManager=Файлов мениджър -ECMSelectASection=Select a directory in the tree... -DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Resync" button first to synchronize disk and database to get content of this directory. -ReSyncListOfDir=Resync list of directories -HashOfFileContent=Hash of file content -NoDirectoriesFound=No directories found -FileNotYetIndexedInDatabase=File not yet indexed into database (try to re-upload it) +ECMSelectASection=Изберете директория от дървото... +DirNotSynchronizedSyncFirst=Тази директория изглежда е създадена или модифицирана извън модула DMS / ECM. За синхронизиране на диска и базата данни първо трябва да кликнете върху бутона за синхронизиране на списъка, за да получите съдържанието на тази директория. +ReSyncListOfDir=Синхронизиране на списъка с директории +HashOfFileContent=Хеш код на файла +NoDirectoriesFound=Няма намерени директории +FileNotYetIndexedInDatabase=Файлът все още не е индексиран в базата данни (опитайте да го качите отново) diff --git a/htdocs/langs/bg_BG/help.lang b/htdocs/langs/bg_BG/help.lang index ef4733a4662..912fd2b2171 100644 --- a/htdocs/langs/bg_BG/help.lang +++ b/htdocs/langs/bg_BG/help.lang @@ -5,19 +5,19 @@ RemoteControlSupport=Онлайн в реално време / дистанци OtherSupport=Друга поддръжка ToSeeListOfAvailableRessources=За да се свържете/вижте наличните ресурси: HelpCenter=Помощен център -DolibarrHelpCenter=Dolibarr Help and Support Center -ToGoBackToDolibarr=Otherwise, click here to continue to use Dolibarr. -TypeOfSupport=Type of support +DolibarrHelpCenter=Dolibarr център за помощ и поддръжка +ToGoBackToDolibarr=В противен случай, кликнете тук, за да продължите да използвате Dolibarr. +TypeOfSupport=Тип поддръжка TypeSupportCommunauty=Общност (безплатно) TypeSupportCommercial=Търговски TypeOfHelp=Тип -NeedHelpCenter=Need help or support? +NeedHelpCenter=Нуждаете се от помощ или поддръжка? Efficiency=Ефективност TypeHelpOnly=Само помощ TypeHelpDev=Помощ + развитие -TypeHelpDevForm=Help+Development+Training -BackToHelpCenter=Otherwise, go back to Help center home page. -LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for your language (%s) by clicking their Widget (status and maximum price are automatically updated): +TypeHelpDevForm=Помощ + развитие + обучение +BackToHelpCenter=В противен случай се върнете в началната страница на помощния център. +LinkToGoldMember=Можете да се обадите на някой от обучаващите, предварително избрани от Dolibarr за вашия език (%s), като кликнете върху тяхната джаджа (статуса и максималната цена са автоматично актуализирани): PossibleLanguages=Поддържани езици -SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation +SubscribeToFoundation=Помогнете на проекта Dolibarr, като се присъедините към фондацията SeeOfficalSupport=За официална поддръжка на Dolibarr за Вашият език:
%s diff --git a/htdocs/langs/bg_BG/holiday.lang b/htdocs/langs/bg_BG/holiday.lang index e0194788563..615a1b6e0ad 100644 --- a/htdocs/langs/bg_BG/holiday.lang +++ b/htdocs/langs/bg_BG/holiday.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - holiday HRM=ЧР -Holidays=Отпуск -CPTitreMenu=Отпуск +Holidays=Отпуски +CPTitreMenu=Отпуски MenuReportMonth=Месечно извлечение MenuAddCP=Нова молба за отпуск NotActiveModCP=Необходимо е да активирате модула 'Отпуски', за да видите тази страница. @@ -9,93 +9,93 @@ AddCP=Кандидатстване за отпуск DateDebCP=Начална дата DateFinCP=Крайна дата DateCreateCP=Дата на създаване -DraftCP=Проект +DraftCP=Чернова ToReviewCP=Очаква одобрение -ApprovedCP=Утвърден -CancelCP=Отменен -RefuseCP=Отказ -ValidatorCP=Утвърждаващ -ListeCP=Списък с отпуски -LeaveId=№ на отпуск -ReviewedByCP=Ще бъде утвърден от +ApprovedCP=Одобрена +CancelCP=Анулирана +RefuseCP=Отхвърлена +ValidatorCP=Одобряващ +ListeCP=Списък с молби за отпуск +LeaveId=Идентификатор на молба за отпуск +ReviewedByCP=Ще бъде одобрена от UserForApprovalID=Одобряващ потребител UserForApprovalFirstname=Собствено име на одобряващия потребител UserForApprovalLastname=Фамилия на одобряващия потребител -UserForApprovalLogin=Входна информация за одобряващия потребител +UserForApprovalLogin=Потребителско име на одобряващия потребител DescCP=Описание SendRequestCP=Създаване на молба за отпуск -DelayToRequestCP=Молбите за отпуски трябва да бъдат направени най-малко %s ден(а) преди началната им дата. -MenuConfCP=Баланс на отпуските +DelayToRequestCP=Молбите за отпуск трябва да бъдат направени най-малко %s ден(а) преди началната им дата. +MenuConfCP=Баланс на отпуски SoldeCPUser=Баланса на отпуските е %s дни. -ErrorEndDateCP=Трябва да изберете крайната дата, по-голяма от началната дата. +ErrorEndDateCP=Трябва да изберете крайна дата, която е по-голяма от началната дата. ErrorSQLCreateCP=Възникна SQL грешка по време на създаването: ErrorIDFicheCP=Възникна грешка, молбата за отпуск не съществува. ReturnCP=Назад към предишната страница -ErrorUserViewCP=Не сте упълномощени да четете тази молба за отпуск. -InfosWorkflowCP=Информация Workflow -RequestByCP=По искане на +ErrorUserViewCP=Не сте упълномощен да прочетете тази молба за отпуск. +InfosWorkflowCP=Информационен работен процес +RequestByCP=По молба на TitreRequestCP=Молба за отпуск -TypeOfLeaveId=№ на отпускът -TypeOfLeaveCode=Код за вида на отпускът -TypeOfLeaveLabel=Вид на отпускът -NbUseDaysCP=Брой на дните на използваните отпуски +TypeOfLeaveId=Идентификатор за вид отпуск +TypeOfLeaveCode=Код за вид отпуск +TypeOfLeaveLabel=Етикет за вид отпуск +NbUseDaysCP=Брой дни използвани за отпуск NbUseDaysCPShort=Използвани дни NbUseDaysCPShortInMonth=Използвани дни в месеца DateStartInMonth=Начална дата в месеца DateEndInMonth=Крайна дата в месеца -EditCP=Редактиране +EditCP=Промяна DeleteCP=Изтриване -ActionRefuseCP=Отказване -ActionCancelCP=Отказ -StatutCP=Състояние -TitleDeleteCP=Изтриване на молбата за отпуск -ConfirmDeleteCP=Потвърждаване на изтриването на тази молба за отпуск? -ErrorCantDeleteCP=Грешка: нямате необходимите права за да изтриете тази молба за отпуск. -CantCreateCP=Вие нямате право да кандидатствате за отпуск. -InvalidValidatorCP=Трябва да изберете лице одобрява молба ви за отпуск. -NoDateDebut=Трябва да изберете началната дата. -NoDateFin=Трябва да изберете крайна дата. +ActionRefuseCP=Отхвърляне +ActionCancelCP=Анулиране +StatutCP=Статус +TitleDeleteCP=Изтриване на молба за отпуск +ConfirmDeleteCP=Сигурни ли сте, че искате да изтриете тази молба за отпуск? +ErrorCantDeleteCP=Грешка: нямате необходимите права, за да изтриете тази молба за отпуск. +CantCreateCP=Нямате право да създавате молби за отпуск. +InvalidValidatorCP=Трябва да изберете потребител, който да одобри вашата молба за отпуск. +NoDateDebut=Необходимо е да изберете начална дата. +NoDateFin=Необходимо е да изберете крайна дата. ErrorDureeCP=Вашата молба за отпуск не съдържа работен ден. -TitleValidCP=Одобряване на молбата за отпуск -ConfirmValidCP=Сигурни ли сте, че желаете да одобрите тази молба за отпуск? -DateValidCP=Дата на утвърждаване +TitleValidCP=Одобряване на молба за отпуск +ConfirmValidCP=Сигурни ли сте, че искате да одобрите тази молба за отпуск? +DateValidCP=Дата на одобрение TitleToValidCP=Изпращане на молба за отпуск -ConfirmToValidCP=Сигурни ли сте, че желаете да изпратите молбата за отпуск? -TitleRefuseCP=Отхвърляне на молбата за отпуск -ConfirmRefuseCP=Сигурни ли сте, че желаете да отхвърлите молбата за отпуск? -NoMotifRefuseCP=Вие трябва да изберете причина за отказ на искането. -TitleCancelCP=Анулиране на молбата за отпуск +ConfirmToValidCP=Сигурни ли сте, че искате да изпратите молбата за отпуск? +TitleRefuseCP=Отхвърляне на молба за отпуск +ConfirmRefuseCP=Сигурни ли сте, че искате да отхвърлите молбата за отпуск? +NoMotifRefuseCP=Необходимо е да посочите причина за отхвърляне на молбата. +TitleCancelCP=Анулиране на молба за отпуск ConfirmCancelCP=Сигурни ли сте, че искате да анулирате молбата за отпуск? -DetailRefusCP=Причина за отказа -DateRefusCP=Дата на отказ -DateCancelCP=Дата на анулирането -DefineEventUserCP=Присвояване изключително отпуск за потребителя -addEventToUserCP=Присвояване напусне -NotTheAssignedApprover=Вие не сте назначен да одобрявате това +DetailRefusCP=Причина за отхвърляне +DateRefusCP=Дата на отхвърляне +DateCancelCP=Дата на анулиране +DefineEventUserCP=Възлагане на извънреден отпуск за потребител +addEventToUserCP=Възлагане на отпуск +NotTheAssignedApprover=Вие не сте определен като одобряващ потребител MotifCP=Причина UserCP=Потребител -ErrorAddEventToUserCP=Възникна грешка при добавяне на изключително отпуск. -AddEventToUserOkCP=Добавянето на извънредния отпуск е завършена. +ErrorAddEventToUserCP=Възникна грешка при добавяне на извънреден отпуск. +AddEventToUserOkCP=Добавянето на извънредния отпуск е завършено. MenuLogCP=История на промените -LogCP=Списък на актуализациите на наличните почивни дни -ActionByCP=В изпълнение на -UserUpdateCP=За потребителя +LogCP=Списък с актуализации на наличните почивни дни +ActionByCP=Изпълнено от +UserUpdateCP=За потребител PrevSoldeCP=Предишен баланс NewSoldeCP=Нов баланс -alreadyCPexist=Вече е направена молба за отпуск за този период. -FirstDayOfHoliday=Първи ден от отпуска -LastDayOfHoliday=Последен ден на отпуска +alreadyCPexist=Вече е създадена молба за отпуск в този период. +FirstDayOfHoliday=Първи ден от отпуск +LastDayOfHoliday=Последен ден от отпуск BoxTitleLastLeaveRequests=Молби за отпуск: %s последно променени HolidaysMonthlyUpdate=Месечна актуализация -ManualUpdate=Ръчна акуализация -HolidaysCancelation=Отказване на молба за отпуск +ManualUpdate=Ръчна актуализация +HolidaysCancelation=Анулиране на молба за отпуск EmployeeLastname=Фамилия на служителя EmployeeFirstname=Собствено име на служителя TypeWasDisabledOrRemoved=Вида отпуск (%s) беше деактивиран или премахнат LastHolidays=Молби за отпуск: %s последни AllHolidays=Всички молби за отпуск HalfDay=Полудневен -NotTheAssignedApprover=Вие не сте назначен да одобрявате това +NotTheAssignedApprover=Вие не сте определен като одобряващ потребител LEAVE_PAID=Платен отпуск LEAVE_SICK=Болничен отпуск LEAVE_OTHER=Неплатен отпуск @@ -103,28 +103,28 @@ LEAVE_PAID_FR=Платен отпуск ## Configuration du Module ## LastUpdateCP=Последно автоматично актуализиране на разпределението на отпуските MonthOfLastMonthlyUpdate=Месец на последната автоматична актуализация на разпределението на отпуските -UpdateConfCPOK=Актуализира се успешно. -Module27130Name= Управление на молби за отпуск +UpdateConfCPOK=Успешно актуализирано. +Module27130Name= Молби за отпуск Module27130Desc= Управление на молби за отпуск ErrorMailNotSend=Възникна грешка при изпращане на имейл: NoticePeriod=Период на известяване #Messages HolidaysToValidate=Валидиране на молби за отпуск -HolidaysToValidateBody=Отдолу е молба за отпуск за валидиране -HolidaysToValidateDelay=Тази молба за отпуск ще се случи в период от по-малко от %s дни. -HolidaysToValidateAlertSolde=Потребителят, който е подал молбата за отпуск, няма достатъчно налични дни. +HolidaysToValidateBody=По-долу е молба за отпуск за валидиране +HolidaysToValidateDelay=Тази молба за отпуск е за период по-малък от %s дни. +HolidaysToValidateAlertSolde=Потребителят, който е създал молбата за отпуск, няма достатъчно налични дни. HolidaysValidated=Валидирани молби за отпуск -HolidaysValidatedBody=Вашата молба за отпуск от %s до %s е била валидирана. -HolidaysRefused=Молбата отказана -HolidaysRefusedBody=Вашата молба за отпуск от %s до %s е била отказана поради следната причина: -HolidaysCanceled=Отказани молби за отпуск -HolidaysCanceledBody=Вашата молба за отпуск от %s до %s е била отказана. +HolidaysValidatedBody=Вашата молба за отпуск от %s до %s е валидирана. +HolidaysRefused=Молбата е отхвърлена +HolidaysRefusedBody=Вашата молба за отпуск от %s до %s е отхвърлена поради следната причина: +HolidaysCanceled=Анулирани молби за отпуск +HolidaysCanceledBody=Вашата молба за отпуск от %s до %s е анулирана. FollowedByACounter=1: Този вид отпуск е необходимо да бъде проследяван от брояч. Броячът се увеличава ръчно или автоматично, а когато молбата за отпуск е валидирана, броячът се намалява.
0: Не се проследява от брояч. NoLeaveWithCounterDefined=Няма дефинирани видове отпуск, които трябва да бъдат проследявани от брояч -GoIntoDictionaryHolidayTypes=Отидете в Начало - Настройки - Речници - Видове отпуски , за да настроите различните видове отпуски. -HolidaySetup=Настройка на модул Отпуск +GoIntoDictionaryHolidayTypes=Отидете в Начало -> Настройки -> Речници -> Видове отпуски , за да настроите различните видове отпуски. +HolidaySetup=Настройка на модул Молби за отпуск HolidaysNumberingModules=Модели за номериране на молби за отпуск -TemplatePDFHolidays=Шаблон за молби за отпуск PDF -FreeLegalTextOnHolidays=Свободен текст в PDF файла +TemplatePDFHolidays=PDF шаблон за молби за отпуск +FreeLegalTextOnHolidays=Свободен текст в молбите за отпуск WatermarkOnDraftHolidayCards=Воден знак върху черновата на молба за отпуск -HolidaysToApprove=Отпуски за одобрение +HolidaysToApprove=Молби за отпуск за одобрение diff --git a/htdocs/langs/bg_BG/interventions.lang b/htdocs/langs/bg_BG/interventions.lang index 8b4ded3adda..d1aadd1c05d 100644 --- a/htdocs/langs/bg_BG/interventions.lang +++ b/htdocs/langs/bg_BG/interventions.lang @@ -1,66 +1,66 @@ # Dolibarr language file - Source file is en_US - interventions -Intervention=Намеса -Interventions=Интервенциите -InterventionCard=Интервенция карта -NewIntervention=Нов намеса -AddIntervention=Създаване на намеса +Intervention=Интервенция +Interventions=Интервенции +InterventionCard=Протокол за интервенция +NewIntervention=Нова интервенция +AddIntervention=Създаване на интервенция ChangeIntoRepeatableIntervention=Променете на повтаряема интервенция -ListOfInterventions=Списък на интервенциите -ActionsOnFicheInter=Действия на интервенцията +ListOfInterventions=Списък на интервенции +ActionsOnFicheInter=Свързани събития LastInterventions=Интервенции: %s последни AllInterventions=Всички интервенции -CreateDraftIntervention=Създаване на проект -InterventionContact=Интервенция контакт +CreateDraftIntervention=Създаване на чернова +InterventionContact=Свързани контакти DeleteIntervention=Изтриване на интервенция -ValidateIntervention=Проверка на интервенция +ValidateIntervention=Валидиране на интервенция ModifyIntervention=Промяна на интервенция -DeleteInterventionLine=Изтрий ред намеса +DeleteInterventionLine=Изтриване на ред в интервенцията ConfirmDeleteIntervention=Сигурни ли сте, че искате да изтриете тази интервенция? -ConfirmValidateIntervention=Сигурни ли сте, че искате да валидирате тази интервенция под името %s? -ConfirmModifyIntervention=Сигурни ли сте, че искате да редактирате тази интервенция? +ConfirmValidateIntervention=Сигурни ли сте, че искате да валидирате тази интервенция с № %s? +ConfirmModifyIntervention=Сигурни ли сте, че искате да промените тази интервенция? ConfirmDeleteInterventionLine=Сигурни ли сте, че искате да изтриете този ред от интервенцията? ConfirmCloneIntervention=Сигурни ли сте, че искате да клонирате тази интервенция? NameAndSignatureOfInternalContact=Име и подпис на изпълнителя: NameAndSignatureOfExternalContact=Име и подпис на клиента: -DocumentModelStandard=Стандартен документ модел за интервенции -InterventionCardsAndInterventionLines=Интервенции и линии на интервенции -InterventionClassifyBilled=Класифицирай като "Таксувани" -InterventionClassifyUnBilled=Класифицирай като "Нетаксувани" -InterventionClassifyDone=Класифицирайте като изпълнена -StatusInterInvoiced=Таксува -SendInterventionRef=Подаване на намеса %s -SendInterventionByMail=Изпращане на интервенцията по имейл -InterventionCreatedInDolibarr=Намеса %s създадена -InterventionValidatedInDolibarr=Намеса %s валидирана -InterventionModifiedInDolibarr=Намеса %s променена +DocumentModelStandard=Стандартен документ за интервенции +InterventionCardsAndInterventionLines=Интервенции и редове от интервенции +InterventionClassifyBilled=Класифициране като 'Фактурирана' +InterventionClassifyUnBilled=Класифициране като 'Нетаксувана' +InterventionClassifyDone=Класифициране като 'Изпълнена' +StatusInterInvoiced=Фактурирана +SendInterventionRef=Изпращане на интервенция %s +SendInterventionByMail=Изпращане на интервенция по имейл +InterventionCreatedInDolibarr=Интервенция %s е създадена +InterventionValidatedInDolibarr=Интервенция %s е валидирана +InterventionModifiedInDolibarr=Интервенция %s е променена InterventionClassifiedBilledInDolibarr=Интервенция %s е фактурирана -InterventionClassifiedUnbilledInDolibarr=Интервенция %s е нефактурирана +InterventionClassifiedUnbilledInDolibarr=Интервенция %s е нетаксувана InterventionSentByEMail=Интервенция %s е изпратена по имейл -InterventionDeletedInDolibarr=Намеса %s изтрита -InterventionsArea=Зона Намеси -DraftFichinter=Чернови намеси +InterventionDeletedInDolibarr=Интервенция %s е изтрита +InterventionsArea=Секция за интервенции +DraftFichinter=Чернови интервенции LastModifiedInterventions=Интервенции: %s последно променени FichinterToProcess=Интервенции за извършване ##### Types de contacts ##### -TypeContact_fichinter_external_CUSTOMER=Проследяване на контакт с клиентите +TypeContact_fichinter_external_CUSTOMER=Последващ контакт на клиента # Modele numérotation -PrintProductsOnFichinter=Отпечатайте също линиите от типа "Продукт" (не само услуги) в картата на интервенцията -PrintProductsOnFichinterDetails=намеси генерирани от поръчки +PrintProductsOnFichinter=Отпечатване на редове от тип 'Продукт' (не само услуги) в интервенциите +PrintProductsOnFichinterDetails=интервенции, генерирани от поръчки UseServicesDurationOnFichinter=Използване на продължителността на услугите за интервенции генерирани от поръчки UseDurationOnFichinter=Скриване на полето за продължителност при запис на интервенция -UseDateWithoutHourOnFichinter=Скриване на часовете и минутите в полето дата при запис на интервенция -InterventionStatistics=Статистика на интервенциите +UseDateWithoutHourOnFichinter=Скриване на часовете и минутите в полето за дата при запис на интервенция +InterventionStatistics=Статистика на интервенции NbOfinterventions=Брой интервенции -NumberOfInterventionsByMonth=Брой интервенции по месец (от датата на валидиране) -AmountOfInteventionNotIncludedByDefault=Общата продължителност на интервенцията не е включена по подразбиране в печалбата (в повечето случаи графиците се използват за отчитане на времето). Добавете опцията PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT със стойност 1 в Начало - Настройка - Други настройки, за да я включите. +NumberOfInterventionsByMonth=Брой интервенции по месец (по дата на валидиране) +AmountOfInteventionNotIncludedByDefault=Общата продължителност на интервенцията не е включена по подразбиране в печалбата (в повечето случаи за отчитане на времето се използват графиците за отделно време). Добавете опцията PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT със стойност 1 в Начало -> Настройки -> Други настройки, за да я включите. ##### Exports ##### -InterId=№ на интервенцията -InterRef=Код на интервенцията -InterDateCreation=Дата на създаване на намеса -InterDuration=Продължителност на намеса -InterStatus=Статус на намеса -InterNote=Забележка към интервенцията -InterLineId=№ на линията в интервенцията -InterLineDate=Дата на линията в интервенцията -InterLineDuration=Продължителност на линията в интервенцията -InterLineDesc=Описание на линията в интервенцията +InterId=Идентификатор на интервенция +InterRef=Реф. интервенция +InterDateCreation=Дата на създаване на интервенцията +InterDuration=Продължителност на интервенцията +InterStatus=Статус на интервенцията +InterNote=Бележка към интервенцията +InterLineId=Идентификатор на реда в интервенцията +InterLineDate=Дата на реда в интервенцията +InterLineDuration=Продължителност на реда в интервенцията +InterLineDesc=Описание на реда в интервенцията diff --git a/htdocs/langs/bg_BG/languages.lang b/htdocs/langs/bg_BG/languages.lang index 59958660a2f..6030d165af6 100644 --- a/htdocs/langs/bg_BG/languages.lang +++ b/htdocs/langs/bg_BG/languages.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - languages Language_ar_AR=Арабски -Language_ar_EG=Arabic (Egypt) +Language_ar_EG=Арабски (Египет) Language_ar_SA=Арабски Language_bn_BD=Бенгали Language_bg_BG=Български @@ -11,41 +11,41 @@ Language_da_DA=Датски Language_da_DK=Датски Language_de_DE=Немски Language_de_AT=Немски (Австрия) -Language_de_CH=Германски (Шверцария) +Language_de_CH=Немски (Швейцария) Language_el_GR=Гръцки -Language_el_CY=Greek (Cyprus) -Language_en_AU=English (Австралия) +Language_el_CY=Гръцки (Кипър) +Language_en_AU=Английски (Австралия) Language_en_CA=Английски (Канада) -Language_en_GB=English (United Kingdom) -Language_en_IN=English (Индия) -Language_en_NZ=English (Нова Зеландия) -Language_en_SA=English (Саудитска Арабия) -Language_en_US=English (United States) -Language_en_ZA=English (Южна Африка) +Language_en_GB=Английски (Обединено кралство) +Language_en_IN=Английски (Индия) +Language_en_NZ=Английски (Нова Зеландия) +Language_en_SA=Английски (Саудитска Арабия) +Language_en_US=Английски (САЩ) +Language_en_ZA=Английски (Южна Африка) Language_es_ES=Испански Language_es_AR=Испански (Аржентина) Language_es_BO=Испански (Боливия) Language_es_CL=Испански (Чили) Language_es_CO=Испански (Колумбия) -Language_es_DO=Испански (Чили) -Language_es_EC=Spanish (Ecuador) +Language_es_DO=Испански (Доминиканска република) +Language_es_EC=Испански (Еквадор) Language_es_HN=Испански (Хондурас) Language_es_MX=Испански (Мексико) -Language_es_PA=Spanish (Panama) +Language_es_PA=Испански (Панама) Language_es_PY=Испански (Парагвай) Language_es_PE=Испански (Перу) Language_es_PR=Испански (Пуерто Рико) -Language_es_UY=Spanish (Uruguay) -Language_es_VE=Spanish (Venezuela) +Language_es_UY=Испански (Уругвай) +Language_es_VE=Испански (Венецуела) Language_et_EE=Естонски -Language_eu_ES=Баска +Language_eu_ES=Баскски Language_fa_IR=Персийски -Language_fi_FI=Завършване +Language_fi_FI=Фински Language_fr_BE=Френски (Белгия) Language_fr_CA=Френски (Канада) Language_fr_CH=Френски (Швейцария) Language_fr_FR=Френски -Language_fr_NC=French (Нова Каледония) +Language_fr_NC=Френски (Нова Каледония) Language_fy_NL=Фризийски Language_he_IL=Иврит Language_hr_HR=Хърватски @@ -55,18 +55,18 @@ Language_is_IS=Исландски Language_it_IT=Италиански Language_ja_JP=Японски Language_ka_GE=Грузински -Language_km_KH=Khmer +Language_km_KH=Кхмерски Language_kn_IN=Каннада Language_ko_KR=Корейски Language_lo_LA=Лаоски Language_lt_LT=Литовски Language_lv_LV=Латвийски Language_mk_MK=Македонски -Language_mn_MN=Mongolian -Language_nb_NO=Норвежки език (книжовен) +Language_mn_MN=Монголски +Language_nb_NO=Норвежки (Bokmål) Language_nl_BE=Холандски (Белгия) Language_nl_NL=Холандски (Холандия) -Language_pl_PL=Лак +Language_pl_PL=Полски Language_pt_BR=Португалски (Бразилия) Language_pt_PT=Португалски Language_ro_RO=Румънски @@ -80,9 +80,10 @@ Language_sq_AL=Албански Language_sk_SK=Словашки Language_sr_RS=Сръбски Language_sw_SW=Суахили -Language_th_TH=Thai +Language_th_TH=Тайски Language_uk_UA=Украински Language_uz_UZ=Узбекски Language_vi_VN=Виетнамски Language_zh_CN=Китайски -Language_zh_TW=Chinese (Traditional) +Language_zh_TW=Китайски (традиционен) +Language_bh_MY=Малайски diff --git a/htdocs/langs/bg_BG/link.lang b/htdocs/langs/bg_BG/link.lang index 7e61f07501a..e435a9128bc 100644 --- a/htdocs/langs/bg_BG/link.lang +++ b/htdocs/langs/bg_BG/link.lang @@ -1,10 +1,10 @@ # Dolibarr language file - Source file is en_US - languages -LinkANewFile=Свържи нов файл/документ +LinkANewFile=Свързване на нов файл / документ LinkedFiles=Свързани файлове и документи NoLinkFound=Няма регистрирани връзки -LinkComplete=Файлът е свързан успешно +LinkComplete=Файлът е успешно свързан ErrorFileNotLinked=Файлът не може да бъде свързан -LinkRemoved=Връзка %s е премахната -ErrorFailedToDeleteLink= Неуспех при премахване на връзка '%s' -ErrorFailedToUpdateLink= Неуспех при промяна на връзка '%s' -URLToLink=URL за връзка +LinkRemoved=Връзката %s е премахната +ErrorFailedToDeleteLink= Премахването на връзката '%s' не е успешно +ErrorFailedToUpdateLink= Актуализацията на връзката '%s' не е успешна +URLToLink=URL връзка diff --git a/htdocs/langs/bg_BG/mails.lang b/htdocs/langs/bg_BG/mails.lang index a86d997442c..3e0699cfba3 100644 --- a/htdocs/langs/bg_BG/mails.lang +++ b/htdocs/langs/bg_BG/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Групови имейли OneEmailPerRecipient=Един имейл за получател (по подразбиране е избран един имейл за всеки запис) WarningIfYouCheckOneRecipientPerEmail=Внимание, ако поставите отметка в това квадратче, това означава, че само един имейл ще бъде изпратен за няколко различни избрани записа, така че, ако съобщението ви съдържа заместващи променливи, които се отнасят до данни от даден запис, няма да е възможно да ги замените. ResultOfMailSending=Резултат от масовото изпращане на имейл -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Брой избрани +NbIgnored=Брой игнорирани +NbSent=Брой изпратени SentXXXmessages=%s изпратен(о)(и) съобщени(е)(я). ConfirmUnvalidateEmailing=Сигурни ли сте, че искате да превърнете имейла %s в чернова? MailingModuleDescContactsWithThirdpartyFilter=Контакт с клиентски филтри diff --git a/htdocs/langs/bg_BG/main.lang b/htdocs/langs/bg_BG/main.lang index bb9c15de13a..7481d5cd06c 100644 --- a/htdocs/langs/bg_BG/main.lang +++ b/htdocs/langs/bg_BG/main.lang @@ -44,8 +44,8 @@ ErrorConstantNotDefined=Параметър %s не е дефиниран ErrorUnknown=Неизвестна грешка ErrorSQL=Грешка в SQL ErrorLogoFileNotFound=Не е открит файл с лого '%s' -ErrorGoToGlobalSetup=Отворете настройка на „Фирма/Организация“, за да коригирате това -ErrorGoToModuleSetup=Отидете в настройка на модула, за да коригирате това +ErrorGoToGlobalSetup=Отидете в настройката на „Фирма / Организация“, за да коригирате това. +ErrorGoToModuleSetup=Отидете в настройката на модула, за да коригирате това. ErrorFailedToSendMail=Неуспешно изпращане на имейл (подател = %s, получател = %s) ErrorFileNotUploaded=Файлът не беше качен. Уверете се, че размерът му не надвишава максимално допустимия, че е на разположение свободно пространство на диска и че няма файл със същото име в тази директория. ErrorInternalErrorDetected=Открита е грешка @@ -72,7 +72,7 @@ SeeAlso=Вижте също %s SeeHere=Вижте тук ClickHere=Кликнете тук Here=Тук -Apply=Приложи +Apply=Приложете BackgroundColorByDefault=Стандартен цвят на фона FileRenamed=Файлът е успешно преименуван FileGenerated=Файлът е успешно генериран @@ -83,7 +83,7 @@ FilesDeleted=Файлът(овете) е(са) успешно изтрит(и) FileWasNotUploaded=Избран е файл за прикачване, но все още не е качен. Кликнете върху "Прикачване на файл" за това. NbOfEntries=Брой вписвания GoToWikiHelpPage=Прочетете онлайн помощта (необходим е достъп до интернет) -GoToHelpPage=Прочетете помощта +GoToHelpPage=Прочетете помощната информация RecordSaved=Записът е съхранен RecordDeleted=Записът е изтрит RecordGenerated=Записът е генериран @@ -103,18 +103,18 @@ ConnectedOnMultiCompany=Свързан към обект ConnectedSince=Свързан от AuthenticationMode=Режим на удостоверяване RequestedUrl=Заявен URL адрес -DatabaseTypeManager=Управление на видовете бази данни +DatabaseTypeManager=Мениджър на типовете база данни RequestLastAccessInError=Последна грешка в заявката за достъп до базата данни ReturnCodeLastAccessInError=Върнат код за грешка при последната заявка за достъп до базата данни InformationLastAccessInError=Информация за грешка при последната заявка за достъп до базата данни DolibarrHasDetectedError=Dolibarr засече техническа грешка YouCanSetOptionDolibarrMainProdToZero=Можете да прочетете .log файл или да зададете опция $ dolibarr_main_prod на '0' в конфигурационния си файл, за да получите повече информация. -InformationToHelpDiagnose=Тази информация може да бъде полезна за диагностични цели (можете да зададете опция $ dolibarr_main_prod на '1', за да премахнете такива известия) +InformationToHelpDiagnose=Тази информация може да бъде полезна за диагностични цели (може да зададете опция $dolibarr_main_prod на '1', за да премахнете такива известия) MoreInformation=Повече информация TechnicalInformation=Техническа информация -TechnicalID=Техническо ID +TechnicalID=Технически идентификатор NotePublic=Бележка (публична) -NotePrivate=Бележка (частна) +NotePrivate=Бележка (лична) PrecisionUnitIsLimitedToXDecimals=Dolibarr е настроен да ограничи прецизността на единичните цени до %s десетични числа. DoTest=Тест ToFilter=Филтър @@ -145,7 +145,7 @@ NotClosed=Не е затворен Enabled=Включено Enable=Включване Deprecated=Отхвърлено -Disable=Изключи +Disable=Изключване Disabled=Изключено Add=Добавяне AddLink=Добавяне на връзка @@ -159,16 +159,16 @@ ConfirmSendCardByMail=Наистина ли искате да изпратите Delete=Изтриване Remove=Премахване Resiliate=Прекратяване -Cancel=Отказ -Modify=Редактиране +Cancel=Анулиране +Modify=Променяне Edit=Редактиране Validate=Валидиране ValidateAndApprove=Валидиране и одобряване ToValidate=За валидиране NotValidated=Не е валидиран -Save=Запис -SaveAs=Запис като -TestConnection=Проверка на връзката +Save=Съхраняване +SaveAs=Съхраняване като +TestConnection=Проверяване на връзката ToClone=Клониране ConfirmClone=Изберете данни, които искате да клонирате: NoCloneOptionsSpecified=Няма определени данни за клониране. @@ -178,20 +178,20 @@ Run=Изпълни CopyOf=Копие на Show=Покажи Hide=Скрий -ShowCardHere=Покажи картата +ShowCardHere=Показване на карта Search=Търсене SearchOf=Търсене Valid=Валидиран -Approve=Одобри -Disapprove=Не одобрявам -ReOpen=Отвори отново -Upload=Качи -ToLink=Връзка +Approve=Одобряване +Disapprove=Отхвърляне +ReOpen=Повторно отваряне +Upload=Прикачи +ToLink=Свържи Select=Изберете Choose=Избор -Resize=Преоразмери -ResizeOrCrop=Преоразмеряване или Изрязване -Recenter=Възстанови +Resize=Оразмеряване +ResizeOrCrop=Оразмеряване или изрязване +Recenter=Възстановяване Author=Автор User=Потребител Users=Потребители @@ -200,7 +200,7 @@ Groups=Групи NoUserGroupDefined=Няма дефинирана потребителска група Password=Парола PasswordRetype=Повторете паролата -NoteSomeFeaturesAreDisabled=Обърнете внимание, че много функции/модули са изключени при тази демонстрация. +NoteSomeFeaturesAreDisabled=Имайте предвид, че много функции / модули са деактивирани в тази демонстрация. Name=Име NameSlashCompany=Име / Фирма Person=Лице @@ -218,9 +218,9 @@ MultiLanguage=Мултиезичност Note=Бележка Title=Заглавие Label=Етикет -RefOrLabel=Код или етикет +RefOrLabel=Референция или етикет Info=История -Family=Семейство +Family=Фамилия Description=Описание Designation=Описание DescriptionOfLine=Описание на реда @@ -237,9 +237,9 @@ Numero=Брой Limit=Лимит Limits=Лимити Logout=Изход -NoLogoutProcessWithAuthMode=Не се прилага функция за изключване на връзката с режима за удостоверяване %s +NoLogoutProcessWithAuthMode=Няма функция за прекъсване на връзката с режим на удостоверяване %s Connection=Вход -Setup=Настройки +Setup=Настройка Alert=Предупреждение MenuWarnings=Предупреждения Previous=Предишен @@ -258,7 +258,7 @@ DateCreation=Дата на създаване DateCreationShort=Създаване DateModification=Дата на промяна DateModificationShort=Промяна -DateLastModification=Последна дата на промяна +DateLastModification=Дата на последна промяна DateValidation=Дата на валидиране DateClosing=Дата на приключване DateDue=Дата на падеж @@ -315,7 +315,7 @@ HourShort=ч MinuteShort=мин Rate=Курс CurrencyRate=Обменен валутен курс -UseLocalTax=Включи данъци +UseLocalTax=Включи данък Bytes=Байта KiloBytes=Килобайта MegaBytes=Мегабайта @@ -333,7 +333,7 @@ Copy=Копиране Paste=Поставяне Default=По подразбиране DefaultValue=Стойност по подразбиране -DefaultValues=Стандартни стойности / филтри / сортиране +DefaultValues=Стойности / филтри / сортиране Price=Цена PriceCurrency=Цена (валута) UnitPrice=Единична цена @@ -352,17 +352,17 @@ AmountHTShort=Сума (без ДДС) AmountTTCShort=Сума (с ДДС) AmountHT=Сума (без ДДС) AmountTTC=Сума (с ДДС) -AmountVAT=Сума на ДДС +AmountVAT=Размер на ДДС MulticurrencyAlreadyPaid=Вече платено, оригинална валута -MulticurrencyRemainderToPay=Оставащо за плащане, оригиналната валута +MulticurrencyRemainderToPay=Оставащо за плащане, оригинална валута MulticurrencyPaymentAmount=Сума на плащане, оригинална валута MulticurrencyAmountHT=Сума (без ДДС), оригинална валута MulticurrencyAmountTTC=Сума (с ДДС), оригинална валута -MulticurrencyAmountVAT=Сума на ДДС, оригинална валута -AmountLT1=Сума на данък 2 -AmountLT2=Сума на данък 3 -AmountLT1ES=Сума на RE -AmountLT2ES=Сума на IRPF +MulticurrencyAmountVAT=Размер на ДДС, оригинална валута +AmountLT1=Размер на данък 2 +AmountLT2=Размер на данък 3 +AmountLT1ES=Размер на RE +AmountLT2ES=Размер на IRPF AmountTotal=Обща сума AmountAverage=Средна сума PriceQtyMinHT=Цена за минимално количество (без ДДС) @@ -380,32 +380,32 @@ Totalforthispage=Общо за тази страница TotalTTC=Сума за плащане TotalTTCToYourCredit=Общо (с ДДС) към вашия кредит TotalVAT=Начислен ДДС -TotalVATIN=Общо IGST -TotalLT1=Общо данък 2 -TotalLT2=Общо данък 3 -TotalLT1ES=Общо RE -TotalLT2ES=Общо IRPF -TotalLT1IN=Общо CGST -TotalLT2IN=Общо SGST +TotalVATIN=Начислен IGST +TotalLT1=Начислен данък 2 +TotalLT2=Начислен данък 3 +TotalLT1ES=Начислен RE +TotalLT2ES=Начислен IRPF +TotalLT1IN=Начислен CGST +TotalLT2IN=Начислен SGST HT=без ДДС TTC=с ДДС INCVATONLY=с ДДС INCT=с всички данъци VAT=ДДС VATIN=IGST -VATs=Данъци върху продажбите +VATs=Данъци върху продажби VATINs=IGST данъци -LT1=Данък върху продажбите 2 -LT1Type=Данък върху продажбите 2 вид -LT2=Данък върху продажбите 3 -LT2Type=Тип данък върху продажбите 3 вид +LT1=Данък 2 върху продажби +LT1Type=Данък върху продажби 2 вид +LT2=Данък 3 върху продажби +LT2Type=Данък върху продажби 3 вид LT1ES=RE LT2ES=IRPF LT1IN=CGST LT2IN=SGST LT1GC=Допълнителни центове VATRate=Данъчна ставка -VATCode=Код за данъчна ставка +VATCode=Код на данъчна ставка VATNPR=Данъчна ставка NPR DefaultTaxRate=Данъчна ставка по подразбиране Average=Средно @@ -417,7 +417,7 @@ Modules=Модули / Приложения Option=Опция List=Списък FullList=Пълен списък -Statistics=Статистики +Statistics=Статистика OtherStatistics=Други статистически данни Status=Статус Favorite=Фаворит @@ -468,8 +468,8 @@ NoOpenedElementToProcess=Няма отворен елемент за обраб Available=Налично NotYetAvailable=Все още не е налично NotAvailable=Не е налично -Categories=Етикети / Категории -Category=Етикет / Категория +Categories=Тагове / Категории +Category=Таг / Категория By=От From=От to=за @@ -509,16 +509,16 @@ ByCompanies=По контрагенти ByUsers=По потребител Links=Връзки Link=Връзка -Rejects=Откази -Preview=Предв. преглед +Rejects=Отхвърляния +Preview=Преглед NextStep=Следваща стъпка Datas=Данни None=Няма NoneF=Няма NoneOrSeveral=Няма или няколко Late=Закъснели -LateDesc=Елементът се дефинира като Закъснение съгласно системната конфигурация в меню Начало - Настройка - Предупреждения. -NoItemLate=Няма забавен елемент +LateDesc=Елементът се дефинира като закъснял съгласно системната конфигурация в меню Начало -> Настройка -> Предупреждения. +NoItemLate=Няма закъснял елемент Photo=Снимка Photos=Снимки AddPhoto=Добавяне на снимка @@ -590,16 +590,16 @@ Keyword=Ключова дума Origin=Произход Legend=Легенда Fill=Попълване -Reset=Нулиране +Reset=Зануляване File=Файл Files=Файлове NotAllowed=Не е разрешено ReadPermissionNotAllowed=Не са предоставени права за четене -AmountInCurrency=Сума във валута %s +AmountInCurrency=Сума в %s Example=Пример Examples=Примери NoExample=Няма пример -FindBug=Съобщи за грешка +FindBug=Подаване на сигнал за грешка NbOfThirdParties=Брой контрагенти NbOfLines=Брой редове NbOfObjects=Брой обекти @@ -609,21 +609,21 @@ TotalQuantity=Общо количество DateFromTo=от %s до %s DateFrom=От %s DateUntil=До %s -Check=Маркирай -Uncheck=Отмаркирай +Check=Маркиране +Uncheck=Отмаркиране Internal=Вътрешен External=Външен Internals=Вътрешни Externals=Външни -Warning=Внимание +Warning=Предупреждение Warnings=Предупреждения BuildDoc=Създаване на документ -Entity=Субект -Entities=Субекти +Entity=Среда +Entities=Организации CustomerPreview=Преглед на клиент SupplierPreview=Преглед на доставчик -ShowCustomerPreview=Показване на преглед на клиент -ShowSupplierPreview=Показване на преглед на доставчик +ShowCustomerPreview=Преглеждане на клиент +ShowSupplierPreview=Преглеждане на доставчик RefCustomer=Реф. клиент Currency=Валута InfoAdmin=Информация за администратори @@ -634,7 +634,7 @@ UndoExpandAll=Свий всички SeeAll=Виж всички Reason=Причина FeatureNotYetSupported=Функцията все още не се поддържа -CloseWindow=Затвори прозореца +CloseWindow=Затваряне на прозорец Response=Отговор Priority=Приоритет SendByMail=Изпращане по имейл @@ -675,22 +675,22 @@ PartialWoman=Частично TotalWoman=Обща NeverReceived=Никога не е получавано Canceled=Анулирано -YouCanChangeValuesForThisListFromDictionarySetup=Може да промените стойностите за този списък от меню Настройки - Речници +YouCanChangeValuesForThisListFromDictionarySetup=Може да промените стойностите за този списък от меню Настройка - Речници YouCanChangeValuesForThisListFrom=Може да промените стойностите за този списък от меню %s YouCanSetDefaultValueInModuleSetup=Може да зададете стойността по подразбиране, използвана при създаване на нов запис в настройката на модула Color=Цвят Documents=Свързани файлове Documents2=Документи -UploadDisabled=Качването е деактивирано +UploadDisabled=Прикачването е деактивирано MenuAccountancy=Счетоводство MenuECM=Документи MenuAWStats=AWStats MenuMembers=Членове -MenuAgendaGoogle=Google бележник +MenuAgendaGoogle=Google календар ThisLimitIsDefinedInSetup=Ограничение на системата (Меню Начало - Настройка - Сигурност): %s Kb, ограничение на PHP: %s Kb NoFileFound=Няма записани документи в тази директория CurrentUserLanguage=Текущ език -CurrentTheme=Текущата тема +CurrentTheme=Текуща тема CurrentMenuManager=Текущ меню манипулатор Browser=Браузър Layout=Оформление @@ -706,11 +706,11 @@ Root=Начало Informations=Информация Page=Страница Notes=Бележки -AddNewLine=Добави нов ред -AddFile=Добави файл +AddNewLine=Добавяне на нов ред +AddFile=Добавяне на файл FreeZone=Не е предварително определен продукт / услуга -FreeLineOfType=Свободен текст към елемента, въведете: -CloneMainAttributes=Клонира обекта с неговите основни атрибути +FreeLineOfType=Елемент със свободен текст, тип: +CloneMainAttributes=Клониране на обекта с неговите основни атрибути ReGeneratePDF=Повторно генериране на PDF PDFMerge=Обединяване на PDF файлове Merge=Обединяване @@ -733,8 +733,8 @@ Result=Резултат ToTest=Тест ValidateBefore=Картата трябва да бъде валидирана, преди да използвате тази функция Visibility=Видимост -Totalizable=Обобщено -TotalizableDesc=Това поле е обобщено в списъка +Totalizable=Обобщаване +TotalizableDesc=Това поле е обобщаващо в списъка Private=Личен Hidden=Скрит Resources=Ресурси @@ -750,10 +750,10 @@ AttributeCode=Код на атрибут URLPhoto=URL адрес на снимка / лого SetLinkToAnotherThirdParty=Връзка към друг контрагент LinkTo=Връзка към -LinkToProposal=Връзка към търговско предложение +LinkToProposal=Връзка към предложение LinkToOrder=Връзка към поръчка LinkToInvoice=Връзка към фактура -LinkToTemplateInvoice=Връзка към шаблон за фактура +LinkToTemplateInvoice=Връзка към шаблонна фактура LinkToSupplierOrder=Връзка към поръчка за покупка LinkToSupplierProposal=Връзка към запитване към доставчик LinkToSupplierInvoice=Връзка към фактура за доставка @@ -775,7 +775,7 @@ ByYear=По година ByMonth=По месец ByDay=По ден BySalesRepresentative=По търговски представител -LinkedToSpecificUsers=Свързано е с конкретен потребителски контакт +LinkedToSpecificUsers=Свързани с конкретен потребител NoResults=Няма резултати AdminTools=Администрация SystemTools=Системни инструменти @@ -785,7 +785,7 @@ Element=Елемент NoPhotoYet=Все още няма налични снимки Dashboard=Табло MyDashboard=Моето табло -Deductible=Удържаем +Deductible=Начисляем from=от toward=към Access=Достъп @@ -796,7 +796,7 @@ SaveUploadedFileWithMask=Запиши файла на сървъра с име " OriginFileName=Оригинално име на файл SetDemandReason=Задайте източник SetBankAccount=Дефиниране на банкова сметка -AccountCurrency=Валута на профила +AccountCurrency=Валута на сметката ViewPrivateNote=Преглед на бележки XMoreLines=%s ред(а) е(са) скрит(и) ShowMoreLines=Показване на повече / по-малко редове @@ -808,8 +808,8 @@ ShowTransaction=Показване на запис на банкова смет ShowIntervention=Показване на интервенция ShowContract=Показване на договор GoIntoSetupToChangeLogo=Отидете в Начало - Настройка - Фирма / Организация, за да промените логото или в Начало - Настройка - Екран, за да го скриете. -Deny=Забраняване -Denied=Забранено +Deny=Отхвърляне +Denied=Отхвърлено ListOf=Списък на %s ListOfTemplates=Списък с шаблони Gender=Пол @@ -831,9 +831,9 @@ ConfirmMassDeletion=Потвърждение за масово изтриван ConfirmMassDeletionQuestion=Сигурни ли сте, че искате да изтриете избраните %s записа? RelatedObjects=Свързани обекти ClassifyBilled=Класифициране като фактурирано -ClassifyUnbilled=Класифициране като нефактурирано +ClassifyUnbilled=Класифициране като нетаксувано Progress=Прогрес -ProgressShort=Напредък +ProgressShort=Прогрес FrontOffice=Фронт офис BackOffice=Бек офис View=Преглед @@ -849,7 +849,7 @@ AllExportedMovementsWereRecordedAsExported=Всички експортирани NotAllExportedMovementsCouldBeRecordedAsExported=Не всички експортирани движения могат да бъдат записани като експортирани Miscellaneous=Разни Calendar=Календар -GroupBy=Групирай по... +GroupBy=Групиране по... ViewFlatList=Преглед на плосък списък RemoveString=Премахване на низ „%s“ SomeTranslationAreUncomplete=Някои от предлаганите езици могат да бъдат само частично преведени или да съдържат грешки. Моля, помогнете ни да коригираме езика ви като се регистрирате на адрес https://transifex.com/projects/p/dolibarr/ , за да добавите подобренията си. @@ -883,11 +883,11 @@ LeadOrProject=Възможност | Проект LeadsOrProjects=Възможности | Проекти Lead=Възможност Leads=Възможности -ListOpenLeads=Списък с отворени възможности -ListOpenProjects=Списък с отворени проекти +ListOpenLeads=Отворени възможности +ListOpenProjects=Отворени проекти NewLeadOrProject=Нова възможност или проект Rights=Права -LineNb=ред № +LineNb=Ред № IncotermLabel=Условия на доставка TabLetteringCustomer=Абревиатура на клиент TabLetteringSupplier=Абревиатура на доставчик @@ -926,7 +926,7 @@ Select2NotFound=Няма намерени резултати Select2Enter=Въвеждане Select2MoreCharacter=или повече знака Select2MoreCharacters=или повече знаци -Select2MoreCharactersMore= Синтаксис на търсенето:
| ИЛИ (а | б)
* Някакъв знак (а * б)
^ Започнете с (^ аб)
$ Завършете с ( ab $)
+Select2MoreCharactersMore= Синтаксис на търсенето:
| или (a|b)
* Някакъв знак (a*b)
^ Започнете с (^ab)
$ Завършете с (ab$)
Select2LoadingMoreResults=Зараждане на повече резултати... Select2SearchInProgress=В процес на търсене... SearchIntoThirdparties=Контрагенти @@ -957,7 +957,7 @@ Everybody=Всички PayedBy=Платено от PayedTo=Платено на Monthly=Месечно -Quarterly=Тримесечие +Quarterly=Тримесечно Annual=Годишно Local=Локално Remote=Отдалечено @@ -973,7 +973,7 @@ Inventory=Складова наличност AnalyticCode=Аналитичен код TMenuMRP=ПМИ ShowMoreInfos=Показване на повече информация -NoFilesUploadedYet=Моля, първо качете документ +NoFilesUploadedYet=Моля, първо прикачете документ SeePrivateNote=Вижте частната бележка PaymentInformation=Платежна информация ValidFrom=Валидно от diff --git a/htdocs/langs/bg_BG/margins.lang b/htdocs/langs/bg_BG/margins.lang index 09789443a91..e1f60eb1201 100644 --- a/htdocs/langs/bg_BG/margins.lang +++ b/htdocs/langs/bg_BG/margins.lang @@ -1,44 +1,44 @@ # Dolibarr language file - Source file is en_US - marges -Margin=Margin -Margins=Полета -TotalMargin=Total Margin -MarginOnProducts=Margin / Products -MarginOnServices=Margin / Services -MarginRate=Margin rate -MarkRate=Mark rate -DisplayMarginRates=Display margin rates -DisplayMarkRates=Display mark rates -InputPrice=Input price -margin=Profit margins management -margesSetup=Profit margins management setup -MarginDetails=Margin details -ProductMargins=Product margins -CustomerMargins=Customer margins -SalesRepresentativeMargins=Sales representative margins -UserMargins=User margins +Margin=Марж +Margins=Маржове +TotalMargin=Общ марж +MarginOnProducts=Марж / Продукти +MarginOnServices=Марж / Услуги +MarginRate=Брутен марж +MarkRate=Нетен марж +DisplayMarginRates=Показване на брутни маржове +DisplayMarkRates=Показване на нетни маржове +InputPrice=Входна стойност +margin=Управление на маржове за печалба +margesSetup=Настройка на маржове за печалба +MarginDetails=Маржови подробности +ProductMargins=Маржове от продукт +CustomerMargins=Маржове от клиент +SalesRepresentativeMargins=Маржове от търговски представител +UserMargins=Маржове от потребител ProductService=Продукт или услуга AllProducts=Всички продукти и услуги -ChooseProduct/Service=Изберете продукт или услуга -ForceBuyingPriceIfNull=Force buying/cost price to selling price if not defined -ForceBuyingPriceIfNullDetails=If buying/cost price not defined, and this option "ON", margin will be zero on line (buying/cost price = selling price), otherwise ("OFF"), marge will be equal to suggested default. -MARGIN_METHODE_FOR_DISCOUNT=Margin method for global discounts +ChooseProduct/Service=Избиране на продукт или услуга +ForceBuyingPriceIfNull=Форсиране на покупна цена / себестойност да бъде равна на продажната цена, ако не е дефинирана първата +ForceBuyingPriceIfNullDetails=Ако покупната цена / себестойност не е дефинирана и тази опция е включена, маржа ще бъде нула за реда (покупна цена / себестойност = продажна цена), в противен случай, ако е изключена маржа ще бъде равен на предложения по подразбиране. +MARGIN_METHODE_FOR_DISCOUNT=Маржов метод за глобални отстъпки UseDiscountAsProduct=Като продукт UseDiscountAsService=Като услуга -UseDiscountOnTotal=On subtotal -MARGIN_METHODE_FOR_DISCOUNT_DETAILS=Defines if a global discount is treated as a product, a service, or only on subtotal for margin calculation. -MARGIN_TYPE=Buying/Cost price suggested by default for margin calculation -MargeType1=Margin on Best vendor price -MargeType2=Margin on Weighted Average Price (WAP) -MargeType3=Margin on Cost Price -MarginTypeDesc=* Margin on best buying price = Selling price - Best vendor price defined on product card
* Margin on Weighted Average Price (WAP) = Selling price - Product Weighted Average Price (WAP) or best supplier price if WAP not yet defined
* Margin on Cost price = Selling price - Cost price defined on product card or WAP if cost price not defined, or best supplier price if WAP not yet defined -CostPrice=Cost price -UnitCharges=Unit charges -Charges=Charges -AgentContactType=Commercial agent contact type -AgentContactTypeDetails=Define what contact type (linked on invoices) will be used for margin report per sale representative -rateMustBeNumeric=Rate must be a numeric value -markRateShouldBeLesserThan100=Mark rate should be lower than 100 -ShowMarginInfos=Show margin infos -CheckMargins=Margins detail -MarginPerSaleRepresentativeWarning=The report of margin per user use the link between third parties and sale representatives to calculate the margin of each sale representative. Because some thirdparties may not have any ddiated sale representative and some thirdparties may be linked to several, some amounts may not be included into this report (if there is no sale representative) and some may appear on different lines (for each sale representative). +UseDiscountOnTotal=Като междинна сума +MARGIN_METHODE_FOR_DISCOUNT_DETAILS=Определя дали глобалната отстъпка се третира като продукт, услуга или само като междинна сума за изчисление на маржа. +MARGIN_TYPE=Покупна цена / себестойност предложена по подразбиране за изчисление на маржа +MargeType1=Марж по най-добра цена от доставчик +MargeType2=Марж по средно претеглена цена (WAP) +MargeType3=Марж по себестойност +MarginTypeDesc=* Марж по най-добра цена от доставчик = продажна цена - най-добра цена от доставчик, дефинирани в картата на продукта / услугата.
* Марж по средно претеглена цена (WAP) = Продажна цена - Средно претеглена цена (WAP) или най-добра цена от доставчик, ако WAP все още не е дефиниран
* Марж по себестойност = Продажна цена - Себестойност, дефинирани в картата на продукта/услугата или WAP, ако себестойността не е дефинирана, или най-добра цена от доставчик, ако WAP не е дефиниран. +CostPrice=Себестойност +UnitCharges=Единични такси +Charges=Такси +AgentContactType=Тип контакт с търговски представител +AgentContactTypeDetails=Определете какъв тип контакт (свързан към фактурите) ще бъде използван за отчет на маржа за всеки търговски представител +rateMustBeNumeric=Процента трябва да е числова стойност +markRateShouldBeLesserThan100=Нетния марж трябва да бъде по-малък от 100 +ShowMarginInfos=Показване на информация за марж +CheckMargins=Маржови подробности +MarginPerSaleRepresentativeWarning=Справката за изчисляване на маржа от всеки потребител, използва връзката между контрагентите и търговските представители. Тъй като някои контрагенти нямат само по един търговски представител, а някои контрагенти може да бъде свързани с няколко представители, то някои стойности не могат да бъдат включени в тази справка (ако няма търговски представител) и някои може да се появят на различни редове (за всеки търговски представител). diff --git a/htdocs/langs/bg_BG/other.lang b/htdocs/langs/bg_BG/other.lang index 267e68f71f3..0f11fd65898 100644 --- a/htdocs/langs/bg_BG/other.lang +++ b/htdocs/langs/bg_BG/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Брой клиентски фактури NumberOfSupplierProposals=Брой доставни фактури NumberOfSupplierOrders=Брой поръчки за покупка NumberOfSupplierInvoices=Брой доставни фактури +NumberOfContracts=Брой договори NumberOfUnitsProposals=Брой единици по търговски предложения NumberOfUnitsCustomerOrders=Брой единици по клиентски поръчки NumberOfUnitsCustomerInvoices=Брой единици по клиентски фактури NumberOfUnitsSupplierProposals=Брой единици по запитвания към доставчици NumberOfUnitsSupplierOrders=Брой единици по поръчки за покупка NumberOfUnitsSupplierInvoices=Брой единици по доставни фактури +NumberOfUnitsContracts=Брой единици по договори EMailTextInterventionAddedContact=Възложена ви е нова интервенция %s. EMailTextInterventionValidated=Интервенция %s е валидирана. EMailTextInvoiceValidated=Фактура %s е валидирана. @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=Вашата парола е успешно възст ApplicantIpAddress=IP адрес на заявителя SMSSentTo=Изпратен е SMS на %s MissingIds=Липсват идентификатори -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Контрагент, създаден чрез имейл колектор от имейл MSGID %s +ContactCreatedByEmailCollector=Контактът/адресът, създаден чрез имейл колектор от имейл MSGID %s +ProjectCreatedByEmailCollector=Проект, създаден чрез имейл колектор от имейл MSGID %s +TicketCreatedByEmailCollector=Тикет, създаден чрез имейл колектор от имейл MSGID %s ##### Export ##### ExportsArea=Секция за експорт @@ -268,5 +270,5 @@ WEBSITE_IMAGEDesc=Относителен път до изображението. WEBSITE_KEYWORDS=Ключови думи LinesToImport=Редове за импортиране -MemoryUsage=Memory usage -RequestDuration=Duration of request +MemoryUsage=Използване на паметта +RequestDuration=Продължителност на заявката diff --git a/htdocs/langs/bg_BG/products.lang b/htdocs/langs/bg_BG/products.lang index eaa2a6e5fef..751313cdc4d 100644 --- a/htdocs/langs/bg_BG/products.lang +++ b/htdocs/langs/bg_BG/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Доставни цени SuppliersPricesOfProductsOrServices=Доставни цени (на продукти/услуги) CustomCode=Митнически / Стоков / ХС код CountryOrigin=Държава на произход -Nature=Nature of produt (material/finished) +Nature=Естество на продукта (материал / завършен) ShortLabel=Кратък етикет Unit=Мярка p=е. diff --git a/htdocs/langs/bg_BG/resource.lang b/htdocs/langs/bg_BG/resource.lang index 6e187b8709a..085effaa5e7 100644 --- a/htdocs/langs/bg_BG/resource.lang +++ b/htdocs/langs/bg_BG/resource.lang @@ -5,8 +5,8 @@ DeleteResource=Изтриване на ресурс ConfirmDeleteResourceElement=Потвърждаване на изтриване на ресурса за този елемент NoResourceInDatabase=Няма ресурс в базата данни. NoResourceLinked=Няма свързан ресурс - -ResourcePageIndex=Списък ресурси +ActionsOnResource=Събития свързани с този ресурс +ResourcePageIndex=Списък с ресурси ResourceSingular=Ресурс ResourceCard=Карта на ресурс AddResource=Създаване на ресурс @@ -18,19 +18,19 @@ ResourcesLinkedToElement=Ресурси свързани към елемент ShowResource=Показване на ресурс -ResourceElementPage=Ресурси на елемент +ResourceElementPage=Ресурси ResourceCreatedWithSuccess=Ресурсът е успешно създаден -RessourceLineSuccessfullyDeleted=Линията на ресурса е успешно изтрита -RessourceLineSuccessfullyUpdated=Линията на ресурса е успешно обновена -ResourceLinkedWithSuccess=Ресурсът е свързан успешно +RessourceLineSuccessfullyDeleted=Ресурсът е успешно изтрит +RessourceLineSuccessfullyUpdated=Ресурсът е успешно актуализиран +ResourceLinkedWithSuccess=Ресурсът е успешно свързан ConfirmDeleteResource=Потвърждаване на изтриването на този ресурс RessourceSuccessfullyDeleted=Ресурсът е успешно изтрит -DictionaryResourceType=Тип на ресурси +DictionaryResourceType=Типове ресурси SelectResource=Избиране на ресурс -IdResource=Id resource -AssetNumber=Serial number -ResourceTypeCode=Resource type code +IdResource=Идентификатор на ресурс +AssetNumber=Сериен номер +ResourceTypeCode=Код за типа ресурс ImportDataset_resource_1=Ресурси diff --git a/htdocs/langs/bg_BG/salaries.lang b/htdocs/langs/bg_BG/salaries.lang index e69d8b20a81..1648598787a 100644 --- a/htdocs/langs/bg_BG/salaries.lang +++ b/htdocs/langs/bg_BG/salaries.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - salaries -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Счетоводна сметка, използвана за контрагенти -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Специализираната счетоводна сметка, дефинирана в картата на потребителя, ще се използва само за вторично счетоводно отчитане. Тя ще бъде използвана в регистъра на главната книга и като стойност по подразбиране за вторично счетоводно отчитане, ако не е дефинирана специализирана потребителска счетоводна сметка за потребителя. +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Счетоводна сметка, използвана за служители на контрагенти +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Специализираната счетоводна сметка, дефинирана в картата на потребителя, ще се използва само за вторично счетоводно отчитане. Тя ще бъде използвана в регистъра на главната счетоводна книга и като стойност по подразбиране за вторично счетоводно отчитане, ако не е дефинирана специализирана потребителска счетоводна сметка за потребителя. SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Счетоводна сметка по подразбиране за плащане на заплати Salary=Заплата Salaries=Заплати @@ -12,10 +12,10 @@ ShowSalaryPayment=Показване на плащане на заплата THM=Средна почасова ставка TJM=Средна дневна ставка CurrentSalary=Текуща заплата -THMDescription=Тази стойност може да се използва за изчисляване на разходите за времето, изразходвано по проект, ако модула проекти се използва. +THMDescription=Тази стойност може да се използва за изчисляване на разходите за времето, което е отделено по проект, ако модула проекти се използва. TJMDescription=Тази стойност понастоящем е информативна и не се използва за изчисления LastSalaries=Плащания на заплати: %s последни AllSalaries=Всички плащания на заплати SalariesStatistics=Статистика на заплатите # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Заплати и плащания diff --git a/htdocs/langs/bg_BG/stocks.lang b/htdocs/langs/bg_BG/stocks.lang index 3d1e9f84720..27a3b5aa48a 100644 --- a/htdocs/langs/bg_BG/stocks.lang +++ b/htdocs/langs/bg_BG/stocks.lang @@ -22,7 +22,7 @@ LotSerial=Партиди/Серийни номера LotSerialList=Списък на партиди/серийни номера Movements=Движения ErrorWarehouseRefRequired=Изисква се референтно име на склад -ListOfWarehouses=Списък на складовете +ListOfWarehouses=Списък на складове ListOfStockMovements=Списък на движението на стоковите наличности ListOfInventories=Списък на инвентари MovementId=Идент. № за движение @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Избиране на правило за авт DeStockOnBill=Намаляване на реални наличности при валидиране на фактура за продажба / кредитно известие DeStockOnValidateOrder=Намаляване на реални наличности при валидиране на клиентска поръчка DeStockOnShipment=Намаляване на реални наличности при валидиране на доставка -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Намаляване на реалните наличности, когато доставката е класифицирана като приключена ReStockOnBill=Увеличаване на реални наличности при валидиране на фактура за покупка / кредитно известие ReStockOnValidateOrder=Увеличаване на реални наличности при одобряване на поръчка за покупка ReStockOnDispatchOrder=Увеличаване на реални наличности при ръчно изпращане в склад, след получаване на поръчка за покупка на стоки -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Увеличаване на реалните наличности при валидиране на приемането +StockOnReceptionOnClosing=Увеличаване на реалните наличности, когато приемането е класифицирано като приключено OrderStatusNotReadyToDispatch=Поръчка все още не е или не повече статут, който позволява изпращането на продукти на склад складове. StockDiffPhysicTeoric=Обясняване за разликата между физическа и виртуална наличност NoPredefinedProductToDispatch=Няма предварително определени продукти за този обект, така че не се изисква изпращане на наличност. @@ -83,7 +83,7 @@ PhysicalStock=Физическа наличност RealStock=Реална наличност RealStockDesc=Физическа/реална наличност е наличността, която в момента се намира в складовете. RealStockWillAutomaticallyWhen=Реалната наличност ще бъде модифицирана според това правило (както е определено в модула на Наличности): -VirtualStock=Вирт. наличност +VirtualStock=Виртуална наличност VirtualStockDesc=Виртуална наличност е изчислената наличност, която се образува след като всички отворени / предстоящи действия (които засягат наличности) се затворят (получени поръчки за покупка, изпратени клиентски поръчки и т.н.) IdWarehouse=Идент. № на склад DescWareHouse=Описание на склад @@ -114,8 +114,8 @@ UseVirtualStockByDefault=Използване на виртуални налич UseVirtualStock=Използване на виртуални наличности UsePhysicalStock=Използване на физически наличности CurentSelectionMode=Текущ режим на избор -CurentlyUsingVirtualStock=Вирт. наличност -CurentlyUsingPhysicalStock=Факт. наличност +CurentlyUsingVirtualStock=Виртуална наличност +CurentlyUsingPhysicalStock=Фактическа наличност RuleForStockReplenishment=Правило за попълване на наличности SelectProductWithNotNullQty=Избиране на най-малко един продукт с количество различно от 0 и доставчик AlertOnly= Само предупреждения diff --git a/htdocs/langs/bg_BG/supplier_proposal.lang b/htdocs/langs/bg_BG/supplier_proposal.lang index aeda262caa0..bebe7d33843 100644 --- a/htdocs/langs/bg_BG/supplier_proposal.lang +++ b/htdocs/langs/bg_BG/supplier_proposal.lang @@ -9,7 +9,7 @@ DraftRequests=Чернови на запитвания SupplierProposalsDraft=Чернови на запитвания за цени LastModifiedRequests=Запитвания за цени: %s последно променени RequestsOpened=Отворени запитвания за цени -SupplierProposalArea=Зона на Запитвания към доставчици +SupplierProposalArea=Секция за запитвания за оферти SupplierProposalShort=Запитване към доставчик SupplierProposals=Запитвания към доставчик SupplierProposalsShort=Запитвания към доставчик diff --git a/htdocs/langs/bg_BG/suppliers.lang b/htdocs/langs/bg_BG/suppliers.lang index 81f7dec537b..d83eb071c1e 100644 --- a/htdocs/langs/bg_BG/suppliers.lang +++ b/htdocs/langs/bg_BG/suppliers.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - vendors Suppliers=Доставчици SuppliersInvoice=Фактура за доставка -ShowSupplierInvoice=Покажи фактурата от доставчика +ShowSupplierInvoice=Показване на фактура за доставка NewSupplier=Нов доставчик History=История ListOfSuppliers=Списък на доставчици @@ -13,17 +13,17 @@ TotalBuyingPriceMinShort=Обща сума от покупните цени на TotalSellingPriceMinShort=Обща сума от продажните цени на субпродукти SomeSubProductHaveNoPrices=Някои субпродукти нямат дефинирана цена AddSupplierPrice=Добавяне на покупна цена -ChangeSupplierPrice=Променяне на покупна цена +ChangeSupplierPrice=Промяна на покупна цена SupplierPrices=Доставни цени -ReferenceSupplierIsAlreadyAssociatedWithAProduct=Този идентификатор е вече свързан с продукт: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=Този реф. № (SKU) е вече свързан с продукт: %s NoRecordedSuppliers=Няма регистриран доставчик SupplierPayment=Плащане към доставчик -SuppliersArea=Зона на доставчиците -RefSupplierShort=Реф. № на доставчик +SuppliersArea=Секция с доставчици +RefSupplierShort=Реф. № (SKU) Availability=Наличност -ExportDataset_fournisseur_1=Фактури за доставка и подробности за фактурите +ExportDataset_fournisseur_1=Фактури за доставка и подробности за тях ExportDataset_fournisseur_2=Фактури и плащания за доставка -ExportDataset_fournisseur_3=Поръчки за покупка и подробности за поръчките +ExportDataset_fournisseur_3=Поръчки за покупка и подробности за тях ApproveThisOrder=Одобряване на поръчка ConfirmApproveThisOrder=Сигурни ли сте, че искате да одобрите тази поръчка %s? DenyingThisOrder=Отхвърляне на поръчка @@ -32,11 +32,11 @@ ConfirmCancelThisOrder=Сигурни ли сте, че искате да ану AddSupplierOrder=Създаване на поръчка за покупка AddSupplierInvoice=Създаване на фактура за доставка ListOfSupplierProductForSupplier=Списък на продукти и цени за доставчик %s -SentToSuppliers=Изпратено към доставчиците +SentToSuppliers=Изпратено към доставчици ListOfSupplierOrders=Списък на поръчки за покупка MenuOrdersSupplierToBill=Поръчки за покупка за фактуриране -NbDaysToDelivery=Забавяне на доставката (дни) -DescNbDaysToDelivery=Най-дългото забавяне на доставка на продукти от тази поръчка +NbDaysToDelivery=Забавяне на доставка (дни) +DescNbDaysToDelivery=Най-дълго забавяне на доставка за продукти от тази поръчка SupplierReputation=Репутация на доставчика DoNotOrderThisProductToThisSupplier=Не поръчвайте NotTheGoodQualitySupplier=Ниско качество diff --git a/htdocs/langs/bg_BG/trips.lang b/htdocs/langs/bg_BG/trips.lang index bd3046fe9d1..33d8424a659 100644 --- a/htdocs/langs/bg_BG/trips.lang +++ b/htdocs/langs/bg_BG/trips.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - trips -ShowExpenseReport=Показване на разходни отчети +ShowExpenseReport=Показване на разходен отчет Trips=Разходни отчети TripsAndExpenses=Разходни отчети TripsAndExpensesStatistics=Статистика на разходните отчети @@ -19,15 +19,15 @@ ConfirmDeleteTrip=Сигурни ли сте, че искате да изтри ListTripsAndExpenses=Списък с разходни отчети ListToApprove=Очаква одобрение ExpensesArea=Секция за разходни отчети -ClassifyRefunded=Класифициране като 'Рефинансиран' +ClassifyRefunded=Класифициране като 'Възстановен' ExpenseReportWaitingForApproval=Нов разходен отчет е изпратен за одобрение ExpenseReportWaitingForApprovalMessage=Създаден е нов разходен отчет, който очаква одобрение.
- Потребител: %s
- Период: %s
Кликнете тук, за да го одобрите или отхвърлите: %s ExpenseReportWaitingForReApproval=Разходният отчет е изпратен за повторно одобрение -ExpenseReportWaitingForReApprovalMessage=Създаден разходен отчет очаква повторно одобрение.
Отчетът %s, отказахте да одобрите по следната причина: %s.
Предложена е нова версия, която очаква одобрение.
- Потребител: %s
- Период: %s
Кликнете тук, за да одобрите или отхвърлите: %s +ExpenseReportWaitingForReApprovalMessage=Създаден разходен отчет очаква повторно одобрение.
Отчетът %s, отказахте да одобрите по следната причина: %s.
Предложена е нова версия, която очаква одобрение.
- Потребител: %s
- Период: %s
Кликнете тук, за да го одобрите или отхвърлите: %s ExpenseReportApproved=Разходният отчет е одобрен ExpenseReportApprovedMessage=Разходният отчет %s е одобрен.
- Потребител: %s
- Одобрен от: %s
Кликнете тук, за да видите разходният отчет: %s -ExpenseReportRefused=Разходния отчет е отхвърлен -ExpenseReportRefusedMessage=Разходният отчет %s е отхвърлен.
- Потребител: %s
- Отхвърлен от: %s
- Причина за отхвърляне: %s
Кликнете тук, за видите разходния отчет: %s +ExpenseReportRefused=Разходният отчет е отхвърлен +ExpenseReportRefusedMessage=Разходният отчет %s е отхвърлен.
- Потребител: %s
- Отхвърлен от: %s
- Причина за отхвърляне: %s
Кликнете тук, за да видите разходния отчет: %s ExpenseReportCanceled=Разходният отчет е анулиран ExpenseReportCanceledMessage=Разходният отчет %s е анулиран.
- Потребител: %s
- Анулиран от: %s
- Причина за анулиране: %s
Кликнете тук, за да видите разходния отчет: %s ExpenseReportPaid=Разходният отчет е платен @@ -37,7 +37,7 @@ AnyOtherInThisListCanValidate=Лице за информиране, което TripSociete=Информация за фирма TripNDF=Информация за разходен отчет PDFStandardExpenseReports=Стандартен шаблон за генериране на PDF документ на разходния отчет -ExpenseReportLine=№ +ExpenseReportLine=Ред № TF_OTHER=Други TF_TRIP=Транспорт TF_LUNCH=Обяд @@ -73,14 +73,14 @@ EX_PAR_VP=Паркинг за ЛПС EX_CAM_VP=Поддръжка и ремонт на ЛПС DefaultCategoryCar=Режим на транспортиране по подразбиране DefaultRangeNumber=Номер на обхвата по подразбиране -UploadANewFileNow=Качете нов документ сега -Error_EXPENSEREPORT_ADDON_NotDefined=Грешка, правилото за номериране на разходни отчети не е дефинирано в настройката на модула 'Разходни отчети' +UploadANewFileNow=Прикачване на нов документ +Error_EXPENSEREPORT_ADDON_NotDefined=Грешка, правилото за номериране на разходни отчети не е дефинирано в настройката на модула разходни отчети. ErrorDoubleDeclaration=Създали сте друг разходен отчет в същия времеви период. AucuneLigne=Няма деклариран разходен отчет ModePaiement=Начин на плащане VALIDATOR=Потребител отговорен за одобрение VALIDOR=Одобрен от -AUTHOR=Записан от +AUTHOR=Създаден от AUTHORPAIEMENT=Платен от REFUSEUR=Отхвърлен от CANCEL_USER=Изтрит от @@ -112,8 +112,8 @@ ExpenseReportsToPay=Разходни отчети за плащане ConfirmCloneExpenseReport=Сигурни ли сте, че искате да клонирате този разходен отчет? ExpenseReportsIk=Индекс за отчитане на разходите ExpenseReportsRules=Правила за отчитане на разходите -ExpenseReportIkDesc=Можете да променяте изчисляването на разхода по километри, въз основа на категория и обхват, които са определени предварително. км е разстоянието в километри. -ExpenseReportRulesDesc=Можете да създавате или променяте правилата за изчисляване. Тази част ще се използва, когато потребител създаде разходен отчет. +ExpenseReportIkDesc=Може да променяте изчисляването на разхода по километри, въз основа на категория и обхват, които са определени предварително. км е разстоянието в километри. +ExpenseReportRulesDesc=Може да създавате или променяте правилата за изчисляване. Тази част ще се използва, когато потребител създаде разходен отчет. expenseReportOffset=Офсет expenseReportCoef=Коефициент expenseReportTotalForFive=Пример с км = 5 @@ -139,13 +139,13 @@ ExpenseReportConstraintViolationError=Идентификатор за наруш byEX_DAY=по ден (ограничение до %s) byEX_MON=по месец (ограничение до %s) byEX_YEA=по година (ограничение до %s) -byEX_EXP=от ред (ограничение до %s) +byEX_EXP=по ред (ограничение до %s) ExpenseReportConstraintViolationWarning=Идентификатор за нарушение на ограничението [%s]: %s превъзхожда %s %s nolimitbyEX_DAY=по ден (без ограничение) nolimitbyEX_MON=по месец (без ограничение) nolimitbyEX_YEA=по година (без ограничение) -nolimitbyEX_EXP=от ред (няма ограничение) -CarCategory=Категория на автомобила +nolimitbyEX_EXP=по ред (без ограничение) +CarCategory=Категория на автомобил ExpenseRangeOffset=Размер на офсета: %s RangeIk=Обхват на пробега AttachTheNewLineToTheDocument=Прикрепете реда към свързан документ diff --git a/htdocs/langs/bg_BG/website.lang b/htdocs/langs/bg_BG/website.lang index 18dc11e057d..7253e5c8aef 100644 --- a/htdocs/langs/bg_BG/website.lang +++ b/htdocs/langs/bg_BG/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/bg_BG/workflow.lang b/htdocs/langs/bg_BG/workflow.lang index ac65d1382f2..71026fb3062 100644 --- a/htdocs/langs/bg_BG/workflow.lang +++ b/htdocs/langs/bg_BG/workflow.lang @@ -1,20 +1,20 @@ # Dolibarr language file - Source file is en_US - workflow -WorkflowSetup=Настройки на модул Workflow -WorkflowDesc=Този модул е проектиран да редактира поведението на автоматичните действия в приложението. По подразбиране, работния процес е отворен (можете да правите неща в реда, в който желаете). Можете да активирате автоматичните действия, които ви интересуват. +WorkflowSetup=Настройка на модула работен процес +WorkflowDesc=Този модул осигурява някои автоматични действия. По подразбиране работният процес е отворен (можете да правите нещата в реда, по който искате), но тук можете да активирате някои автоматични действия. ThereIsNoWorkflowToModify=Няма налични промени на работния процес с активираните модули. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Създай автоматично клиентска поръчка, след като предложението е подписано (новата поръчка че е на същатата стойност) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Автоматично създа фактура, след като търговското предложение е подписано (новата фактура ще има същата стойност като предложението) -descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след като договора е валидиран -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Автоматично създай фактура, след като клиентската поръчка е затворена (новата фактура ще има същата стойност като поръчката) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Автоматично създаване на клиентска поръчка след подписване на търговско предложение (новата поръчка ще има същата стойност като на предложение) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след подписване на търговско предложение (новата фактура ще има същата стойност като на предложението) +descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след валидиране на договор +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Автоматично създаване на клиентска фактура след затваряне на клиентска поръчка (новата фактура ще има същата стойност като на поръчката) # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Класифицирай свържаното предложение/предложения като платени, когато клиентската поръчка е маркирана като платена (ако стойността на поръчката е същата, като на свързаното предложение) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Класифицирай вързаното предложение/я като платени, когато фактурата е валидирана (ако стойността на фактурата е същата като на подписаното предложение) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Класифицирай вързаната клиенска поръчка/поръчки като платени, когато фактурата е валидирана (ако стойността на фактурата е същата, като на вързаната поръчка) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Класифицирай свързаната клиентска поръчка/поръчки като платена, когато фактурата е маркирана като платена (ако стойността на фактурата е същата, като на вързаната поръчка) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order to shipped when a shipment is validated (and if quantity shipped by all shipments is the same as in the order to update) -# Autoclassify supplier order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked orders) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Класифициране на свързано търговско предложение - първоизточник като фактурирано след класифициране на клиентска поръчка като фактурирана (и ако стойността на поръчката е същата като общата сума на подписаното свързано предложение) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Класифициране на свързано търговско предложение - първоизточник като фактурирано след валидиране на клиентска фактура (и ако стойността на фактурата е същата като общата сума на подписаното свързано предложение) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Класифициране на свързана клиентска поръчка - първоизточник като фактурирана след валидиране на клиентска фактура (и ако стойността на фактурата е същата като общата сума на свързаната поръчка) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Класифициране на свързана клиентска поръчка - първоизточник като фактурирана след плащане на клиентска фактура (и ако стойността на фактурата е същата като общата сума на свързаната поръчка) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Класифициране на свързана клиентска поръчка - първоизточник като изпратена след валидиране на пратка (и ако количеството, изпратено, чрез всички пратки е същото като в поръчката за актуализиране) +# Autoclassify purchase order +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Класифициране на свързаното за запитване към доставчик - първоизточник като фактурираното след валидиране на доставната фактура (и ако стойността на фактурата е същата като общата сума на свързаното запитване) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Класифициране на свързаната поръчка за покупка - първоизточник като фактурирана след валидиране на доставна фактура (и ако стойността на фактурата е същата като общата сума на свързаната поръчка) AutomaticCreation=Автоматично създаване AutomaticClassification=Автоматично класифициране diff --git a/htdocs/langs/bn_BD/accountancy.lang b/htdocs/langs/bn_BD/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/bn_BD/accountancy.lang +++ b/htdocs/langs/bn_BD/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/bn_BD/admin.lang b/htdocs/langs/bn_BD/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/bn_BD/admin.lang +++ b/htdocs/langs/bn_BD/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/bn_BD/bills.lang b/htdocs/langs/bn_BD/bills.lang index 5f39c25daf2..4467e38e1e7 100644 --- a/htdocs/langs/bn_BD/bills.lang +++ b/htdocs/langs/bn_BD/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/bn_BD/companies.lang b/htdocs/langs/bn_BD/companies.lang index 5ebfc8b1564..010d9bc67d7 100644 --- a/htdocs/langs/bn_BD/companies.lang +++ b/htdocs/langs/bn_BD/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/bn_BD/other.lang b/htdocs/langs/bn_BD/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/bn_BD/other.lang +++ b/htdocs/langs/bn_BD/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/bn_BD/website.lang b/htdocs/langs/bn_BD/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/bn_BD/website.lang +++ b/htdocs/langs/bn_BD/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/bs_BA/accountancy.lang b/htdocs/langs/bs_BA/accountancy.lang index 427995e88d0..bf7de1af534 100644 --- a/htdocs/langs/bs_BA/accountancy.lang +++ b/htdocs/langs/bs_BA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/bs_BA/admin.lang b/htdocs/langs/bs_BA/admin.lang index 06471c6fe6b..a8fe248b017 100644 --- a/htdocs/langs/bs_BA/admin.lang +++ b/htdocs/langs/bs_BA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/bs_BA/bills.lang b/htdocs/langs/bs_BA/bills.lang index 6b4f729a832..abe5086202e 100644 --- a/htdocs/langs/bs_BA/bills.lang +++ b/htdocs/langs/bs_BA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Predračun InvoiceProFormaDesc=Predračun izgleda isto kao račun, ali nema računovodstvene vrijednosti. InvoiceReplacement=Zamjenska faktura InvoiceReplacementAsk=Zamjenska faktura za fakturu -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Knjižna obavijest InvoiceAvoirAsk=Knjižna obavijest za korekciju računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/bs_BA/companies.lang b/htdocs/langs/bs_BA/companies.lang index 4a2e08700d5..f4be43431d8 100644 --- a/htdocs/langs/bs_BA/companies.lang +++ b/htdocs/langs/bs_BA/companies.lang @@ -28,7 +28,7 @@ AliasNames=Nadimak (komercijalni, trgovačkim, ...) AliasNameShort=Alias Name Companies=Kompanije CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Apsolutni popusti prodavača (uneseni od strane SupplierAbsoluteDiscountMy=Apsolutni popusti prodavača (uneseni od strane sebe) DiscountNone=Ništa Vendor=Vendor +Supplier=Vendor AddContact=Napravi kontakt AddContactAddress=Napravi kontakt/adresu EditContact=Uredi kontakt diff --git a/htdocs/langs/bs_BA/other.lang b/htdocs/langs/bs_BA/other.lang index 7bd1e35524f..648a6c40933 100644 --- a/htdocs/langs/bs_BA/other.lang +++ b/htdocs/langs/bs_BA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/bs_BA/website.lang b/htdocs/langs/bs_BA/website.lang index 978ed485cd6..8aa3e8d93f8 100644 --- a/htdocs/langs/bs_BA/website.lang +++ b/htdocs/langs/bs_BA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ca_ES/accountancy.lang b/htdocs/langs/ca_ES/accountancy.lang index 529605e4a5f..951da450713 100644 --- a/htdocs/langs/ca_ES/accountancy.lang +++ b/htdocs/langs/ca_ES/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Compte de resultats comptable (pèrdua) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Revista de tancament ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte de comptabilitat de la transferència bancària de transició +TransitionalAccount=Compte de transferència bancària transitòria ACCOUNTING_ACCOUNT_SUSPENSE=Compte comptable d'espera DONATION_ACCOUNTINGACCOUNT=Compte comptable per registrar les donacions @@ -216,8 +217,8 @@ DescThirdPartyReport=Consulteu aquí la llista dels clients i proveïdors de ter ListAccounts=Llistat dels comptes comptables UnknownAccountForThirdparty=Compte comptable de tercer desconeguda, utilitzarem %s UnknownAccountForThirdpartyBlocking=Compte comptable de tercer desconegut. Error de bloqueig -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s -ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Third-party account not defined or third party unknown. Blocking error. +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Compte de tercers no definit o tercer desconegut. Utilitzarem %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Compte de tercers no definit o tercer desconegut. Error de bloqueig. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Compte de tercers desconegut i compte d'espera no definit. Error de bloqueig PaymentsNotLinkedToProduct=Pagament no vinculat a cap producte / servei @@ -230,7 +231,7 @@ TotalMarge=Marge total de vendes DescVentilCustomer=Consulti aquí la llista de línies de factures de client vinculades (o no) a comptes comptables de producte DescVentilMore=En la majoria dels casos, si tu utilitzes productes o serveis predefinits i poses el número de compte a la fitxa de producte/servei, l'aplicació serà capaç de fer tots els vincles entre les línies de factura i els comptes comptables del teu pla comptable, només amb un clic mitjançant el botó "%s". Si el compte no està col·locat a la fitxa del producte/servei o si encara hi ha alguna línia no vinculada a cap compte, hauràs de fer una vinculació manual a partir del menú "%s". -DescVentilDoneCustomer=Consulta aquí la llista de línies de factures de clients i els seus comptes comptables de producte +DescVentilDoneCustomer=Consulta aquí la llista de línies de factures a clients i els seus comptes comptables de producte DescVentilTodoCustomer=Comptabilitza les línies de factura encara no comptabilitzades amb un compte comptable de producte ChangeAccount=Canvia el compte comptable de producte/servei per les línies seleccionades amb el següent compte comptable: Vide=- @@ -292,7 +293,7 @@ Modelcsv_cogilog=Exporta a Cogilog Modelcsv_agiris=Exporta a Agiris Modelcsv_openconcerto=Exporta per a OpenConcerto (Test) Modelcsv_configurable=Exporta CSV configurable -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Exporta FEC Modelcsv_Sage50_Swiss=Exportació per Sage 50 Switzerland ChartofaccountsId=Id pla comptable @@ -317,9 +318,9 @@ WithoutValidAccount=Sense compte dedicada vàlida WithValidAccount=Amb compte dedicada vàlida ValueNotIntoChartOfAccount=Aquest compte comptable no existeix al pla comptable AccountRemovedFromGroup=S'ha eliminat el compte del grup -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Venda local +SaleExport=Venda d’exportació +SaleEEC=Venda en CEE ## Dictionary Range=Rang de compte comptable @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Línies encara no enllaçades, utilitzeu el menú %s). L'ús d'aquesta funció no és necessària. Es dóna per als usuaris que alberguen Dolibarr en un servidor que no ofereix els permisos d'eliminació de fitxers generats pel servidor web. PurgeDeleteLogFile=Suprimeix els fitxers de registre, incloent %s definit per al mòdul Syslog (sense risc de perdre dades) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Elimineu tots els fitxers temporals (no hi ha risc de perdre dades). Nota: La supressió només es fa si el directori temporal es va crear fa 24 hores. PurgeDeleteTemporaryFilesShort=Elimina els fitxers temporals PurgeDeleteAllFilesInDocumentsDir=Elimineu tots els arxius del directori: %s .
Això esborrarà tots documents generats i relacionats amb els elements (Tercers, factures etc ...), arxius carregats al mòdul ECM, còpies de seguretat de la Base de Dades, paperera i arxius temporals. PurgeRunNow=Purgar @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Caselles de verificació des de taula ExtrafieldLink=Enllaç a un objecte ComputedFormula=Camp calculat ComputedFormulaDesc=Podeu introduir aquí una fórmula usant altres propietats d'objecte o qualsevol codi PHP per obtenir un valor calculat dinàmic. Podeu utilitzar qualsevol fórmula compatible amb PHP, inclòs l'operador "?" i els següents objectes globals: $db, $conf, $langs, $mysoc, $user, $object.
AVÍS: Només algunes propietats de $object poden estar disponibles. Si necessiteu una propietat que no s'hagi carregat, tan sols busqueu l'objecte en la formula com en el segon exemple.
L'ús d'un camp calculat significa que no podeu introduir cap valor des de la interfície. A més, si hi ha un error de sintaxi, la fórmula potser no torni res.

Exemple de fórmula:
$object->id <10? round($object->id/2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Exemple de recarrega d'object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Un altre exemple de fórmula per forçar la càrrega de l'objecte i el seu objecte principal:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found' +Computedpersistent=Emmagatzemar el camp computat +ComputedpersistentDesc=Els camps addicionals computats s’emmagatzemaran a la base de dades, però, el valor només es tornarà a calcular quan l’objecte d’aquest camp s’ha canviat. Si el camp calculat depèn d'altres objectes o dades globals, aquest valor podria estar equivocat !! ExtrafieldParamHelpPassword=Mantenir aquest camp buit significa que el valor s'emmagatzema sense xifrar (el camp només ha d'estar amagat amb una estrella sobre la pantalla).
Establiu aquí el valor 'auto' per utilitzar la regla de xifrat per defecte per guardar la contrasenya a la base de dades (el valor llegit serà només el "hash", no hi haurà cap manera de recuperar el valor original) ExtrafieldParamHelpselect=La llista de valors ha de ser un conjunt de línies amb un par del tipus clau,valor (on la clau no pot ser '0')

per exemple :
clau1,valor1
clau2,valor2
clau3,valor3
...

Per tenir la llista depenent d'una altra llista d'atributs complementaris:
1,valor1|options_codi_llista_pare:clau_pare
2,valor2|options_codi_llista_pare:clau_pare

Per tenir la llista depenent d'una altra llista:
1,valor1|codi_llista_pare:clau_pare
2,valor2|codi_llista_pare:clau_pare ExtrafieldParamHelpcheckbox=La llista de valor ha de ser un conjunt de línies del tipus clau,valor (a on la clau no pot ser '0')

per exemple :
1,valor1
2,valor2
3,valor3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=La llista de valor ha de ser un conjunt de línies del ExtrafieldParamHelpsellist=Llista de valors que provenen d'una taula
Sintaxi: nom_taula:nom_camp:id_camp::filtre
Exemple : c_typent:libelle:id::filter

- idfilter ha de ser necessàriament una "primary int key"
- el filtre pot ser una comprovació senzilla (eg active=1) per mostrar només valors actius
També es pot emprar $ID$ al filtre per representar el ID de l'actual objecte en curs
Per fer un SELECT al filtre empreu $SEL$
Si voleu filtrar per algun camp extra ("extrafields") empreu la sintaxi extra.codicamp=... (a on codicamp és el codi del camp extra)

Per tenir la llista depenent d'una altre llista d'atributs complementaris:
c_typent:libelle:id:options_codi_llista_pare|parent_column:filter

Per tenir la llista depenent d'una altra llista:
c_typent:libelle:id:codi_llista_pare|parent_column:filter ExtrafieldParamHelpchkbxlst=La llista de valors prové d'una taula
Sintaxi: nom_taula:nom_camp:id_camp::filtre
Exemple: c_typent:libelle:id::filter

filtre pot ser una comprovació simple (p. ex. active=1) per mostrar només el valor actiu
També podeu utilitzar $ID$ en el filtre per representar l'ID actual de l'objecte en curs
Per fer un SELECT en el filtre utilitzeu $SEL$
si voleu filtrar per camps extra utilitzeu sintaxi extra.fieldcode=... (on el codi de camp és el codi del extrafield)

Per tenir la llista depenent d'una altra llista d'atributs complementaris:
c_typent:libelle:id:options_codi_llista_pare|parent_column: filter

Per tenir la llista depenent d'una altra llista: c_typent:libelle:id:codi_llista_pare|parent_column:filter ExtrafieldParamHelplink=Els paràmetres han de ser ObjectName: Classpath
Sintaxi: ObjectName:Classpath
Exemples :
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Manteniu-vos buits per obtenir un simple separador
Establiu-ho a 1 per a un separador col·lapsat (obert per defecte)
Establiu-ho a 2 per a un separador col·lapsat (col·lapsat per defecte) LibraryToBuildPDF=Llibreria utilitzada per generar PDF LocalTaxDesc=Alguns països apliquen 2 o 3 impostos en cada línia de factura. Si aquest és el cas, escull el tipus pel segon i el tercer impost i el seu valor. Els tipus possibles són:
1: impostos locals aplicats en productes i serveis sense IVA (l'impost local serà calculat en el total sense impostos)
2: impost local aplicat en productes i serveis amb IVA (l'impost local serà calculat amb el total + l'impost principal)
3: impost local aplicat en productes sense IVA (l'impost local serà calculat en el total sense impost)
4: impost local aplicat en productes amb IVA (l'impost local serà calculat amb el total + l'impost principal)
5: impost local aplicat en serveis sense IVA (l'impost local serà calculat amb el total sense impost)
6: impost local aplicat en serveis amb IVA inclòs (l'impost local serà calculat amb el total + IVA) SMS=SMS @@ -508,7 +511,7 @@ Module23Desc=Realitza el seguiment del consum d'energies Module25Name=Comanda de vendes Module25Desc=Gestió de comandes de vendes Module30Name=Factures -Module30Desc=Gestió de factures i abonaments de clients. Gestió de factures i abonaments de proveïdors +Module30Desc=Gestió de factures i abonaments a clients. Gestió de factures i abonaments de proveïdors Module40Name=Proveïdors Module40Desc=Gestió de proveïdors i compres (comandes de compra i facturació) Module42Name=Registre de depuració @@ -654,7 +657,7 @@ Permission12=Crear/Modificar factures Permission13=Devalidar factures Permission14=Validar factures Permission15=Envia factures per e-mail -Permission16=Crear cobraments per factures de clients +Permission16=Crear cobraments per factures de client Permission19=Elimina factures de client Permission21=Consulta pressupostos Permission22=Crear/modificar pressupostos @@ -804,7 +807,7 @@ Permission401=Consultar havers Permission402=Crear/modificar havers Permission403=Validar havers Permission404=Eliminar havers -Permission430=Use Debug Bar +Permission430=Utilitzeu la barra de depuració Permission511=Consulta el pagament dels salaris Permission512=Crea/modifica el pagament dels salaris Permission514=Elimina pagament de salaris @@ -819,9 +822,9 @@ Permission532=Crear/modificar serveis Permission534=Eliminar serveis Permission536=Veure / gestionar els serveis ocults Permission538=Exportar serveis -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Llegiu factures de materials +Permission651=Crear / actualitzar factures de materials +Permission652=Eliminar factures de materials Permission701=Consultar donacions Permission702=Crear/modificar donacions Permission703=Eliminar donacions @@ -841,12 +844,12 @@ Permission1101=Consultar ordres d'enviament Permission1102=Crear/modificar ordres d'enviament Permission1104=Validar ordre d'enviament Permission1109=Eliminar ordre d'enviament -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Llegiu les propostes dels proveïdors +Permission1122=Crear / modificar propostes de proveïdors +Permission1123=Valideu les propostes dels proveïdors +Permission1124=Enviar propostes de proveïdors +Permission1125=Elimineu les propostes dels proveïdors +Permission1126=Sol·licituds de preus dels proveïdors tancats Permission1181=Consultar proveïdors Permission1182=Consulta les comandes de compra Permission1183=Crea/modifica les comandes de compra @@ -866,7 +869,7 @@ Permission1235=Envieu les factures del proveïdor per correu electrònic Permission1236=Exporta les factures, atributs i pagaments del proveïdor Permission1237=Exporta les comandes de compra i els seus detalls Permission1251=Llançar les importacions en massa a la base de dades (càrrega de dades) -Permission1321=Exporta factures de clients, atributs i cobraments +Permission1321=Exporta factures de client, atributs i cobraments Permission1322=Reobrir una factura pagada Permission1421=Exporta ordres de vendes i atributs Permission2401=Llegir accions (esdeveniments o tasques) vinculades al seu compte @@ -882,15 +885,15 @@ Permission2503=Enviar o eliminar documents Permission2515=Configuració carpetes de documents Permission2801=Utilitzar el client FTP en mode lectura (només explorar i descarregar) Permission2802=Utilitzar el client FTP en mode escriptura (esborrar o pujar arxius) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Llegiu els esdeveniments arxivats i les empremtes dactilars +Permission4001=Vegeu empleats +Permission4002=Crea empleats +Permission4003=Suprimeix els empleats +Permission4004=Exporta empleats +Permission10001=Llegiu el contingut del lloc web +Permission10002=Crea / modifica contingut del lloc web (contingut html i javascript) +Permission10003=Creeu / modifiqueu el contingut del lloc web (codi php dinàmic). Perillós, s'ha de reservar per a desenvolupadors restringits. +Permission10005=Suprimeix el contingut del lloc web Permission20001=Consulta els dies de lliure disposició (els propis i els dels teus subordinats) Permission20002=Crea/modifica els teus dies de lliure disposició (els propis i els dels teus subordinats) Permission20003=Elimina les peticions de dies lliures retribuïts @@ -904,19 +907,19 @@ Permission23004=Executar tasca programada Permission50101=Utilitza el punt de venda Permission50201=Consultar les transaccions Permission50202=Importar les transaccions -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Enllaçar productes i factures amb comptes comptables +Permission50411=Llegeix les operacions en el llibre major +Permission50412=Escriure / editar les operacions en el llibre major +Permission50414=Suprimeix les operacions en el llibre major +Permission50415=Elimineu totes les operacions per any i diari en llibre major +Permission50418=Operacions d’exportació del llibre major +Permission50420=Informes d'informe i d'exportació (facturació, saldo, revistes, llibre major) +Permission50430=Definiu i tanqueu un període fiscal +Permission50440=Gestionar el gràfic de comptes, configurar la comptabilitat +Permission51001=Llegiu actius +Permission51002=Crear / actualitzar actius +Permission51003=Suprimeix els actius +Permission51005=Configuració dels tipus d’actius Permission54001=Imprimir Permission55001=Llegir enquestes Permission55002=Crear/modificar enquestes @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Els paràmetres de configuració només poden ser establerts pe SystemInfoDesc=La informació del sistema és informació tècnica accessible només en només lectura als administradors. SystemAreaForAdminOnly=Aquesta àrea només està disponible per als usuaris administradors. Els permisos d'usuari de Dolibarr no poden canviar aquesta restricció. CompanyFundationDesc=Editeu la informació de l'empresa/entitat. Feu clic al botó "%s" o "%s" al final de la pàgina. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Si teniu un comptable extern, podeu editar aquí la seva informació. AccountantFileNumber=Número de fila DisplayDesc=Els paràmetres que afecten l'aspecte i el comportament de Dolibarr es poden modificar aquí. AvailableModules=Mòduls/complements disponibles @@ -1923,5 +1926,5 @@ IFTTTDesc=Aquest mòdul està dissenyat per activar esdeveniments en IFTTT i / o UrlForIFTTT=Punt final d’URL per a IFTTT YouWillFindItOnYourIFTTTAccount=El trobareu al vostre compte IFTTT EndPointFor=Punt final per %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Suprimeix el recollidor de correu electrònic +ConfirmDeleteEmailCollector=Esteu segur que voleu suprimir aquest recollidor de correu electrònic? diff --git a/htdocs/langs/ca_ES/bills.lang b/htdocs/langs/ca_ES/bills.lang index ada8f6a27c0..21384e91364 100644 --- a/htdocs/langs/ca_ES/bills.lang +++ b/htdocs/langs/ca_ES/bills.lang @@ -3,14 +3,14 @@ Bill=Factura Bills=Factures BillsCustomers=Factures a clients BillsCustomer=Factura a client -BillsSuppliers=Factures del proveïdor -BillsCustomersUnpaid=Factures de clients pendents de cobrament +BillsSuppliers=Factures de proveïdor +BillsCustomersUnpaid=Factures de client pendents de cobrament BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s -BillsSuppliersUnpaid=Factures de venda pendents de pagament -BillsSuppliersUnpaidForCompany=Factures de venda pendents de pagament per %s +BillsSuppliersUnpaid=Factures de proveïdor pendents de pagament +BillsSuppliersUnpaidForCompany=Factures de proveïdors pendents de pagament per %s BillsLate=Retard en el pagament BillsStatistics=Estadístiques factures a clients -BillsStatisticsSuppliers=Estadístiques de Factures de Venda +BillsStatisticsSuppliers=Estadístiques de Factures de proveïdors DisabledBecauseDispatchedInBookkeeping=Desactivat perquè la factura s'ha contabilitzat DisabledBecauseNotLastInvoice=Desactivat perque la factura no es pot eliminar. S'han creat factures després d'aquesta i crearia buits al contador. DisabledBecauseNotErasable=Desactivat perque no es pot eliminar @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Factura proforma InvoiceProFormaDesc=La factura proforma és la imatge d'una factura definitiva, però que no té cap valor comptable. InvoiceReplacement=Factura rectificativa InvoiceReplacementAsk=Factura rectificativa de la factura -InvoiceReplacementDesc=La factura rectificativa serveix per a cancel·lar i per substituir una factura existent sobre la qual encara no hi ha pagaments.

Nota: Només una factura sense cap pagament pot rectificar-se. Si aquesta última no està tancada, passarà automàticament al estat 'abandonada'. +InvoiceReplacementDesc=La factura de substitució s’utilitza per substituir completament una factura sense que s’hagi rebut cap pagament.

Nota: Només es poden substituir les factures sense pagament. Si la factura que reemplaça encara no està tancada, es tancarà automàticament a "abandonat". InvoiceAvoir=Abonament InvoiceAvoirAsk=Abonament per factura rectificativa InvoiceAvoirDesc=L'abonament és una factura negativa destinada a compensar un import de factura que difereix de l'import realment pagat (per haver pagat de més o per devolució de productes, per exemple). @@ -52,9 +52,9 @@ Invoices=Factures InvoiceLine=Línia de factura InvoiceCustomer=Factura a client CustomerInvoice=Factura a client -CustomersInvoices=Factures a clientes +CustomersInvoices=Factures a clients SupplierInvoice=Factura del proveïdor -SuppliersInvoices=Factures de Venda +SuppliersInvoices=Factures de proveïdors SupplierBill=Factura del proveïdor SupplierBills=Factures de proveïdors Payment=Pagament @@ -249,7 +249,7 @@ DatePointOfTax=Punt d'impostos NoInvoice=Cap factura ClassifyBill=Classificar la factura SupplierBillsToPay=Factures de proveïdors pendents de pagament -CustomerBillsUnpaid=Factures de clients pendents de cobrament +CustomerBillsUnpaid=Factures de client pendents de cobrament NonPercuRecuperable=No percebut recuperable SetConditions=Indicar les condicions de pagament SetMode=Indicar la forma de pagament diff --git a/htdocs/langs/ca_ES/boxes.lang b/htdocs/langs/ca_ES/boxes.lang index 0518953708d..f90f92e665a 100644 --- a/htdocs/langs/ca_ES/boxes.lang +++ b/htdocs/langs/ca_ES/boxes.lang @@ -6,7 +6,7 @@ BoxProductsAlertStock=Alertes d'estoc per a productes BoxLastProductsInContract=Últims %s productes/serveis contractats BoxLastSupplierBills=Últimes factures de Proveïdor BoxLastCustomerBills=Últimes factures de Client -BoxOldestUnpaidCustomerBills=Factures de clients més antigues pendents de cobrament +BoxOldestUnpaidCustomerBills=Factures de client més antigues pendents de cobrament BoxOldestUnpaidSupplierBills=Factures de Proveïdors més antigues pendents de pagament BoxLastProposals=Últims pressupostos BoxLastProspects=Últims clients potencials modificats @@ -27,7 +27,7 @@ BoxTitleLastModifiedSuppliers=Proveïdors: últims %s modificats BoxTitleLastModifiedCustomers=Clients: últims %s modificats BoxTitleLastCustomersOrProspects=Últims %s clients o clients potencials BoxTitleLastCustomerBills=Últimes %s factures del client -BoxTitleLastSupplierBills=Últimes %s factures del proveïdor +BoxTitleLastSupplierBills=Últimes %s factures de proveïdor BoxTitleLastModifiedProspects=Clients Potencials: últims %s modificats BoxTitleLastModifiedMembers=Últims %s socis BoxTitleLastFicheInter=Últimes %s intervencions modificades @@ -35,7 +35,7 @@ BoxTitleOldestUnpaidCustomerBills=Factures de client: les %s més antigues sense BoxTitleOldestUnpaidSupplierBills=Factures de Proveïdor: el més antic %s sense pagar BoxTitleCurrentAccounts=Comptes oberts: saldos BoxTitleLastModifiedContacts=Adreces i contactes: últims %s modificats -BoxMyLastBookmarks=Bookmarks: latest %s +BoxMyLastBookmarks=Adreces d'interès: últims %s BoxOldestExpiredServices=Serveis antics expirats BoxLastExpiredServices=Últims %s contactes amb serveis actius expirats BoxTitleLastActionsToDo=Últims %s events a realitzar @@ -78,7 +78,7 @@ BoxTitleLatestModifiedSupplierOrders=Comandes a Proveïdor: últimes %s modifica BoxTitleLastModifiedCustomerBills=Factures del client: últimes %s modificades BoxTitleLastModifiedCustomerOrders=Comandes de venda: últimes %s modificades BoxTitleLastModifiedPropals=Últims %s pressupostos modificats -ForCustomersInvoices=Factures a clientes +ForCustomersInvoices=Factures a clients ForCustomersOrders=Comandes de clients ForProposals=Pressupostos LastXMonthRolling=Els últims %s mesos consecutius diff --git a/htdocs/langs/ca_ES/cashdesk.lang b/htdocs/langs/ca_ES/cashdesk.lang index 0f4251de48f..1b0a6e3a957 100644 --- a/htdocs/langs/ca_ES/cashdesk.lang +++ b/htdocs/langs/ca_ES/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Nombre de terminals TerminalSelect=Selecciona el terminal que vols utilitzar: POSTicket=Tiquet TPV -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Utilitzeu el disseny bàsic dels telèfons diff --git a/htdocs/langs/ca_ES/companies.lang b/htdocs/langs/ca_ES/companies.lang index 9721e179a83..90fe74a1d3b 100644 --- a/htdocs/langs/ca_ES/companies.lang +++ b/htdocs/langs/ca_ES/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Descomptes absoluts de proveïdor (introduïts SupplierAbsoluteDiscountMy=Descomptes absoluts del proveïdor (introduït per tu mateix) DiscountNone=Cap Vendor=Proveïdor +Supplier=Proveïdor AddContact=Crear contacte AddContactAddress=Crear contacte/adreça EditContact=Editar contacte diff --git a/htdocs/langs/ca_ES/compta.lang b/htdocs/langs/ca_ES/compta.lang index 35cad091b15..4763033a3fa 100644 --- a/htdocs/langs/ca_ES/compta.lang +++ b/htdocs/langs/ca_ES/compta.lang @@ -142,11 +142,11 @@ CalcModeVATEngagement=Mode d'%sIVA sobre ingressos-despeses%s. CalcModeDebt=Anàlisi de factures conegudes registrades, fins i tot si encara no estan comptabilitzades en el llibre major. CalcModeEngagement=Anàlisi dels pagaments registrats coneguts, fins i tot si encara no estan comptabilitzat en el Llibre Major. CalcModeBookkeeping=Anàlisi de dades publicades a la taula de compilació de llibres. -CalcModeLT1= Metode %sRE factures a clients - factures de proveïdors%s +CalcModeLT1= Metode %sRE factures a client - factures de proveïdor%s CalcModeLT1Debt=Metode %sRE a factures a clients%s CalcModeLT1Rec= Metode %sRE a factures de proveïdors%s -CalcModeLT2= Metode %sIRPF a factures a clients - factures de proveïdors%s -CalcModeLT2Debt=Metode %sIRPF a factures a clients%s +CalcModeLT2= Metode %sIRPF a factures a client - factures de proveïdor%s +CalcModeLT2Debt=Metode %sIRPF a factures a client%s CalcModeLT2Rec= Metode %sIRPF a factures de proveïdors%s AnnualSummaryDueDebtMode=Saldo d'ingressos i despeses, resum anual AnnualSummaryInputOutputMode=Saldo d'ingressos i despeses, resum anual @@ -160,7 +160,7 @@ RulesAmountWithTaxIncluded=- Els imports mostrats són amb tots els impostos inc RulesResultDue=- Inclou les factures pendents, despeses, IVA, donacions estiguen o no pagades. També s'inclou salaris pagats.
- Es basa en la data de la validació de les factures i l'IVA i en la data de venciment per a despeses. Per salaris definits amb el mòdul de Salari, s'utilitza la data de valor del pagament. RulesResultInOut=- Inclou els pagaments reals realitzats en les factures, les despeses, l'IVA i els salaris.
- Es basa en les dates de pagament de les factures, les despeses, l'IVA i els salaris. La data de la donació per a la donació. RulesCADue=- Inclou les factures degudes del client estiguin pagades o no.
- Es basa en la data de la validació d'aquestes factures.
-RulesCAIn=- Inclou tots els pagaments efectius de factures rebudes dels clients.
- Es basa en la data de pagament d'aquestes factures
+RulesCAIn=- Inclou tots els pagaments efectius de factures rebuts dels clients.
- Es basa en la data de pagament d'aquestes factures
RulesCATotalSaleJournal=Inclou totes les línies de crèdit del Diari de venda. RulesAmountOnInOutBookkeepingRecord=Inclou un registre al vostre Llibre Major amb comptes comptables que tenen el grup "DESPESA" o "INGRÉS" RulesResultBookkeepingPredefined=Inclou un registre al vostre Llibre Major amb comptes comptables que tenen el grup "DESPESA" o "INGRÉS" diff --git a/htdocs/langs/ca_ES/errors.lang b/htdocs/langs/ca_ES/errors.lang index d45575cbba1..bbe1bd29076 100644 --- a/htdocs/langs/ca_ES/errors.lang +++ b/htdocs/langs/ca_ES/errors.lang @@ -118,7 +118,7 @@ ErrorLoginHasNoEmail=Aquest usuari no té e-mail. Impossible continuar. ErrorBadValueForCode=Valor incorrecte per codi de seguretat. Torna a intentar-ho amb un nou valor... ErrorBothFieldCantBeNegative=Els camps %s i %s no poden ser negatius ErrorFieldCantBeNegativeOnInvoice=El camp %s no pot ser negatiu en aquest tipus de factura. Si voleu afegir una línia de descompte, primer cal crear el descompte amb l'enllaç %s a la pantalla i aplicar-lo a la factura. També podeu demanar-li al vostre administrador que configureu l'opció FACTURE_ENABLE_NEGATIVE_LINES a 1 per permetre el comportament anterior. -ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a clients no poden ser negatives +ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a client no poden ser negatives ErrorWebServerUserHasNotPermission=El compte d'execució del servidor web %s no disposa dels permisos per això ErrorNoActivatedBarcode=No hi ha activat cap tipus de codi de barres ErrUnzipFails=No s'ha pogut descomprimir el fitxer %s amb ZipArchive diff --git a/htdocs/langs/ca_ES/install.lang b/htdocs/langs/ca_ES/install.lang index 9e9c382b82d..33f9df9b20f 100644 --- a/htdocs/langs/ca_ES/install.lang +++ b/htdocs/langs/ca_ES/install.lang @@ -14,7 +14,7 @@ PHPSupportPOSTGETKo=És possible que aquest PHP no suport les variables POST i/o PHPSupportGD=Aquest PHP és compatible amb les funcions gràfiques GD. PHPSupportCurl=Aquest PHP suporta Curl. PHPSupportUTF8=Aquest PHP és compatible amb les funcions UTF8. -PHPSupportIntl=This PHP supports Intl functions. +PHPSupportIntl=Aquest PHP admet funcions Intl. PHPMemoryOK=La seva memòria màxima de sessió PHP està definida a %s. Això hauria de ser suficient. PHPMemoryTooLow=La seva memòria màxima de sessió PHP està definida a %s bytes. Això és molt poc. Es recomana modificar el paràmetre memory_limit del seu arxiu php.ini a almenys %s octets. Recheck=Faci clic aquí per realitzar un test més exhaustiu @@ -22,7 +22,7 @@ ErrorPHPDoesNotSupportSessions=La vostra instal·lació de PHP no suporta sessio ErrorPHPDoesNotSupportGD=La vostra instal·lació de PHP no és compatible amb les funcions gràfiques de GD. No hi haurà gràfics disponibles. ErrorPHPDoesNotSupportCurl=La teva instal·lació PHP no soporta Curl. ErrorPHPDoesNotSupportUTF8=Aquest PHP no suporta les funcions UTF8. Resolgui el problema abans d'instal lar Dolibarr ja que no funcionarà correctamete. -ErrorPHPDoesNotSupportIntl=Your PHP installation does not support Intl functions. +ErrorPHPDoesNotSupportIntl=La vostra instal·lació de PHP no admet funcions Intl. ErrorDirDoesNotExists=La carpeta %s no existeix o no és accessible. ErrorGoBackAndCorrectParameters=Torneu enrere i verifiqueu / corregiu els paràmetres. ErrorWrongValueForParameter=Ha indicat potser un valor incorrecte per al paràmetre '%s'. @@ -152,7 +152,7 @@ MigrationFixData=Correcció de dades desnormalitzades MigrationOrder=Migració de dades de les comandes clients MigrationSupplierOrder=Migració de dades per a comandes de proveïdors MigrationProposal=Migració de dades de pressupostos -MigrationInvoice=Migració de dades de les factures a clients +MigrationInvoice=Migració de dades de les factures a client MigrationContract=Migració de dades dels contractes MigrationSuccessfullUpdate=Actualització finalitzada MigrationUpdateFailed=L'actualització ha fallat diff --git a/htdocs/langs/ca_ES/mails.lang b/htdocs/langs/ca_ES/mails.lang index 1ec8f7d5687..1828b9c1736 100644 --- a/htdocs/langs/ca_ES/mails.lang +++ b/htdocs/langs/ca_ES/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Correus grupals OneEmailPerRecipient=Un correu per destinatari (per defecte, un correu electrònic per registre seleccionat) WarningIfYouCheckOneRecipientPerEmail=Advertència, si marqueu aquesta casella, significa que només s'enviarà un correu electrònic per a diversos registres seleccionats, de manera que, si el vostre missatge conté variables de substitució que fan referència a dades d'un registre, no és possible reemplaçar-les. ResultOfMailSending=Resultat de l'enviament de correu massiu -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Número seleccionat +NbIgnored=Número ignorat +NbSent=Número enviat SentXXXmessages=%s missatge(s) enviat(s). ConfirmUnvalidateEmailing=Are you sure you want to change email %s to draft status? MailingModuleDescContactsWithThirdpartyFilter=Contacte amb filtres de client diff --git a/htdocs/langs/ca_ES/members.lang b/htdocs/langs/ca_ES/members.lang index 4c1077e8d0f..7b0071dd54c 100644 --- a/htdocs/langs/ca_ES/members.lang +++ b/htdocs/langs/ca_ES/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Tria les estadístiques que vols consultar... MenuMembersStats=Estadístiques LastMemberDate=Data de l'últim soci LatestSubscriptionDate=Data de l'última afiliació -MemberNature=Nature of member +MemberNature=Naturalesa del membre Public=Informació pública NewMemberbyWeb=S'ha afegit un nou soci. A l'espera d'aprovació NewMemberForm=Formulari d'inscripció diff --git a/htdocs/langs/ca_ES/other.lang b/htdocs/langs/ca_ES/other.lang index 925599d9eb8..14b335112d9 100644 --- a/htdocs/langs/ca_ES/other.lang +++ b/htdocs/langs/ca_ES/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Número de factures de client NumberOfSupplierProposals=Nombre de propostes de venedor NumberOfSupplierOrders=Nombre de comandes de compra NumberOfSupplierInvoices=Nombre de factures de venedor +NumberOfContracts=Nombre de contractes NumberOfUnitsProposals=Número d'unitats en pressupostos NumberOfUnitsCustomerOrders=Nombre d'unitats per comandes de venda NumberOfUnitsCustomerInvoices=Número d'unitats en factures de client NumberOfUnitsSupplierProposals=Nombre d'unitats en propostes de venedor NumberOfUnitsSupplierOrders=Nombre d'unitats en comandes de compra NumberOfUnitsSupplierInvoices=Nombre d'unitats a les factures del venedor +NumberOfUnitsContracts=Nombre d’unitats en contractes EMailTextInterventionAddedContact=S'ha assignat una nova intervenció %s. EMailTextInterventionValidated=Fitxa intervenció %s validada EMailTextInvoiceValidated=La factura %s ha estat validada. @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=La teva contrasenya s'ha restablert correctament ApplicantIpAddress=Adreça IP del sol·licitant SMSSentTo=SMS enviat a %s MissingIds=Falta els identificadors -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Tercers creats pel recollidor de correus electrònics MSGID %s +ContactCreatedByEmailCollector=Contacte / adreça creada pel recollidor de correus electrònics MSGID %s +ProjectCreatedByEmailCollector=Projecte creat pel recollidor de correus electrònics MSGID %s +TicketCreatedByEmailCollector=Tiquet creat pel recollidor de correus electrònics MSGID %s ##### Export ##### ExportsArea=Àrea d'exportacions @@ -269,4 +271,4 @@ WEBSITE_KEYWORDS=Paraules clau LinesToImport=Línies per importar MemoryUsage=Ús de memòria -RequestDuration=Duration of request +RequestDuration=Durada de la sol·licitud diff --git a/htdocs/langs/ca_ES/products.lang b/htdocs/langs/ca_ES/products.lang index c16392c2b98..4605e1a6df9 100644 --- a/htdocs/langs/ca_ES/products.lang +++ b/htdocs/langs/ca_ES/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Preus del proveïdor SuppliersPricesOfProductsOrServices=Preus del venedor (de productes o serveis) CustomCode=Duana / mercaderia / codi HS CountryOrigin=País d'origen -Nature=Nature of produt (material/finished) +Nature=Naturalesa del producte (material / acabat) ShortLabel=Etiqueta curta Unit=Unitat p=u. diff --git a/htdocs/langs/ca_ES/projects.lang b/htdocs/langs/ca_ES/projects.lang index 94e82793eae..5518dd13758 100644 --- a/htdocs/langs/ca_ES/projects.lang +++ b/htdocs/langs/ca_ES/projects.lang @@ -85,8 +85,8 @@ GoToGanttView=Vés a la vista de Gantt GanttView=Vista de Gantt ListProposalsAssociatedProject=Llista de propostes comercials relacionades amb el projecte ListOrdersAssociatedProject=Llista de comandes de vendes relacionades amb el projecte -ListInvoicesAssociatedProject=Llista de factures dels clients relacionades amb el projecte -ListPredefinedInvoicesAssociatedProject=Llista de factures dels clients relacionades amb el projecte +ListInvoicesAssociatedProject=Llista de factures a clients relacionades amb el projecte +ListPredefinedInvoicesAssociatedProject=Llista de factures a clients relacionades amb el projecte ListSupplierOrdersAssociatedProject=Llista de comandes de compra relacionades amb el projecte ListSupplierInvoicesAssociatedProject=Llista de factures de venedor relacionades amb el projecte ListContractAssociatedProject=Llista de contractes relacionats amb el projecte diff --git a/htdocs/langs/ca_ES/salaries.lang b/htdocs/langs/ca_ES/salaries.lang index ed8b1cef464..f4567d2fd49 100644 --- a/htdocs/langs/ca_ES/salaries.lang +++ b/htdocs/langs/ca_ES/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Últims %s pagaments de salari AllSalaries=Tots els pagaments de salari SalariesStatistics=Estadístiques de salaris # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Salaris i pagaments diff --git a/htdocs/langs/ca_ES/stocks.lang b/htdocs/langs/ca_ES/stocks.lang index d173d9f2f6c..f2684fdd84c 100644 --- a/htdocs/langs/ca_ES/stocks.lang +++ b/htdocs/langs/ca_ES/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Tria la regla per augmentar l'estoc automàtic (l DeStockOnBill=Disminueix els estocs real en la validació de la factura/abonament de client DeStockOnValidateOrder=Disminueix els estocs reals en la validació de comandes de client DeStockOnShipment=Disminueix l'estoc real al validar l'enviament -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Reduïu les existències reals quan l’enviament s’ha establert com a tancat ReStockOnBill=Augmenta els estocs reals en la validació de la factura/abonament del proveïdor ReStockOnValidateOrder=Augmenta els estocs reals en l'aprovació de la comanda de compra ReStockOnDispatchOrder=Augmenta els estocs reals en l'enviament manual al magatzem, després de rebre els productes de la comanda del proveïdor -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Augmenteu les existències reals a la validació de la recepció +StockOnReceptionOnClosing=Augmenteu les existències reals quan la recepció està tancada OrderStatusNotReadyToDispatch=La comanda encara no està o no té un estat que permeti un desglossament d'estoc. StockDiffPhysicTeoric=Motiu de la diferència entre l'estoc físic i virtual NoPredefinedProductToDispatch=No hi ha productes predefinits en aquest objecte. Per tant no es pot realitzar un desglossament d'estoc. diff --git a/htdocs/langs/ca_ES/suppliers.lang b/htdocs/langs/ca_ES/suppliers.lang index 22eef83e987..65f34605229 100644 --- a/htdocs/langs/ca_ES/suppliers.lang +++ b/htdocs/langs/ca_ES/suppliers.lang @@ -1,4 +1,4 @@ -# Dolibarr language file - Source file is en_US - suppliers +# Dolibarr language file - Source file is en_US - vendors Suppliers=Proveïdors SuppliersInvoice=Factura del proveïdor ShowSupplierInvoice=Mostra la factura del proveïdor @@ -15,7 +15,7 @@ SomeSubProductHaveNoPrices=Alguns subproductes no tenen preus definits AddSupplierPrice=Afegeix preu de compra ChangeSupplierPrice=Canvia el preu de compra SupplierPrices=Preus del proveïdor -ReferenceSupplierIsAlreadyAssociatedWithAProduct=Aquesta referència de proveïdor ja està associada a la referència: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=Aquesta referència del proveïdor ja està associada amb el producte: %s NoRecordedSuppliers=No s'ha registrat cap proveïdor SupplierPayment=Pagament al proveïdor SuppliersArea=Àrea de proveïdors @@ -35,13 +35,13 @@ ListOfSupplierProductForSupplier=Llista de productes i preus del proveïdor % SentToSuppliers=Enviat als proveïdors ListOfSupplierOrders=Llista de comandes de compra MenuOrdersSupplierToBill=Comandes de compra a facturar -NbDaysToDelivery=Temps d'entrega en dies -DescNbDaysToDelivery=El retard més gran d'entrega dels productes d'aquesta comanda +NbDaysToDelivery=Retard de lliurament (dies) +DescNbDaysToDelivery=El retard de lliurament més llarg dels productes d'aquesta comanda SupplierReputation=Reputació del proveïdor DoNotOrderThisProductToThisSupplier=No demanar -NotTheGoodQualitySupplier=Qualitat incorrecte +NotTheGoodQualitySupplier=Baixa qualitat ReputationForThisProduct=Reputació BuyerName=Nom del comprador AllProductServicePrices=Tots els preus de producte / servei -AllProductReferencesOfSupplier=Totes les referències dels productes/serveis del proveïdor +AllProductReferencesOfSupplier=Totes les referències de producte / servei del proveïdor BuyingPriceNumShort=Preus del proveïdor diff --git a/htdocs/langs/ca_ES/website.lang b/htdocs/langs/ca_ES/website.lang index ff4dd50fd8d..4c62bea2365 100644 --- a/htdocs/langs/ca_ES/website.lang +++ b/htdocs/langs/ca_ES/website.lang @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Encara no s'ha creat cap lloc web. Creeu-ne un primer. GoTo=Ves a DynamicPHPCodeContainsAForbiddenInstruction=Afegiu un codi PHP dinàmic que conté la instrucció PHP ' %s ' prohibida per defecte com a contingut dinàmic (vegeu les opcions ocultes WEBSITE_PHP_ALLOW_xxx per augmentar la llista d’ordres permeses). NotAllowedToAddDynamicContent=No teniu permís per afegir o editar contingut dinàmic de PHP als llocs web. Demana permís o simplement guarda el codi en etiquetes php sense modificar. -ReplaceWebsiteContent=Substituïu el contingut del lloc web +ReplaceWebsiteContent=Cerqueu o substitueixi el contingut del lloc web DeleteAlsoJs=Voleu suprimir també tots els fitxers javascript específics d'aquest lloc web? DeleteAlsoMedias=Voleu suprimir també tots els fitxers de mitjans específics d’aquest lloc web? # Export -MyWebsitePages=My website pages +MyWebsitePages=Les meves pàgines web diff --git a/htdocs/langs/ca_ES/withdrawals.lang b/htdocs/langs/ca_ES/withdrawals.lang index 8149a6968ba..ecf3b20eeff 100644 --- a/htdocs/langs/ca_ES/withdrawals.lang +++ b/htdocs/langs/ca_ES/withdrawals.lang @@ -13,7 +13,7 @@ RequestStandingOrderToTreat=Petició per a processar ordres de pagament mitjanç RequestStandingOrderTreated=Petició per a processar ordres de pagament mitjançant domiciliació bancària finalitzada NotPossibleForThisStatusOfWithdrawReceiptORLine=Encara no és possible. L'estat de la domiciliació ter que ser 'abonada' abans de poder realitzar devolucions a les seves línies NbOfInvoiceToWithdraw=Nombre de factures qualificades esperant l'ordre de domiciliació bancària -NbOfInvoiceToWithdrawWithInfo=Número de factures del client en espera de domiciliació per a clients que tenen el número de compte definida +NbOfInvoiceToWithdrawWithInfo=Número de factures a client en espera de domiciliació per a clients que tenen el número de compte definida InvoiceWaitingWithdraw=Factura esperant per domiciliació bancària AmountToWithdraw=Import a domiciliar WithdrawsRefused=Domiciliació bancària refusada @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Per als comptes bancaris que utilitzen el codi BAN/BIC/SWIFT BankToReceiveWithdraw=Recepció del compte bancari CreditDate=Abonada el WithdrawalFileNotCapable=No és possible generar el fitxer bancari de domiciliació pel país %s (El país no esta suportat) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Mostra la comanda de domiciliació directa +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Tanmateix, si la factura té com a mínim una ordre de pagament de domiciliació bancària que encara no ha estat processada, no es definirà com a pagament per permetre la gestió prèvia de la retirada. DoStandingOrdersBeforePayments=Aquesta llengüeta et permet fer una petició de pagament per domiciliació bancària. Un cop feta, aneu al menú Bancs -> Domiciliacions bancàries per a gestionar el pagament per domiciliació. Quan el pagament és tancat, el pagament sobre la factura serà automàticament gravat, i la factura tancada si el pendent a pagar re-calculat resulta cero. WithdrawalFile=Arxiu de la domiciliació SetToStatusSent=Classificar com "Arxiu enviat" diff --git a/htdocs/langs/cs_CZ/accountancy.lang b/htdocs/langs/cs_CZ/accountancy.lang index 0612da6048c..2291178ee74 100644 --- a/htdocs/langs/cs_CZ/accountancy.lang +++ b/htdocs/langs/cs_CZ/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Výsledek účetní účet (ztráta) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Časopis uzavření ACCOUNTING_ACCOUNT_TRANSFER_CASH=Účtovací účet přechodného bankovního převodu +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Čekající účet DONATION_ACCOUNTINGACCOUNT=Účtování účet registrovaných darů diff --git a/htdocs/langs/cs_CZ/admin.lang b/htdocs/langs/cs_CZ/admin.lang index 6bb62b09319..57c17f66bca 100644 --- a/htdocs/langs/cs_CZ/admin.lang +++ b/htdocs/langs/cs_CZ/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Zaškrtávací políčka z tabulky ExtrafieldLink=Odkaz na objekt ComputedFormula=Vypočtené pole ComputedFormulaDesc=Zde můžete zadat vzorec pomocí jiných vlastností objektu nebo libovolného kódování PHP pro získání dynamické vypočtené hodnoty. Můžete použít libovolné kompatibilní formule PHP včetně "?" operátor stavu a následující globální objekt: $ db, $ conf, $ langs, $ mysoc, $ user, $ objekt .
VAROVÁNÍ : K dispozici jsou pouze některé vlastnosti objektu $. Pokud potřebujete vlastnosti, které nejsou načteny, jednoduše přiveďte objekt do vzorce, jako ve druhém příkladu.
Použití vypočítaného pole znamená, že nemůžete zadat libovolnou hodnotu z rozhraní. Také pokud existuje syntaktická chyba, vzorec může vrátit nic.

Příklad vzorce:
$ object-> id < 10 ? round($object-> id / 2, 2): ($ objekt-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2 )

Příklad pro opětovné načtení objektu
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ Obj-> id: > rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Jiný příklad vzoru pro zatížení objektu a jeho nadřazeného objektu:
($ reloadedobj = new Task )) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = nový projekt ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Nadřazený projekt nebyl nalezen' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Pokud ponecháte toto pole prázdné, znamená to, že tato hodnota bude uložena bez šifrování (pole musí být skryto pouze s hvězdou na obrazovce).
Nastavte "auto" pro použití výchozího šifrovacího pravidla pro uložení hesla do databáze (pak hodnota bude číst pouze hash, žádný způsob získání původní hodnoty) ExtrafieldParamHelpselect=Seznam hodnot musí být řádky s formátovým klíčem, hodnota (kde klíč nemůže být '0')

například:
1, value1
2, value2
code3, value3
...

seznam v závislosti na dalším doplňkovém seznamu atributů:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Chcete-li mít seznam v závislosti na jiném seznamu:
1, hodnota1 | parent_list_code : parent_key
2, hodnota2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Seznam hodnot musí být řádky s formátovým klíčem, hodnota (kde klíč nemůže být '0')

například:
1, value1
2, value2
3, value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Seznam hodnot musí být řádky s formátovým klíče ExtrafieldParamHelpsellist=Seznam hodnot pochází z tabulky
Syntaxe: table_name: label_field: id_field :: filter
Příklad: c_typent: libelle: id :: filter

- idfilter je nutně primární int klíč
- filtr může být jednoduchý test = 1) pro zobrazení pouze aktivní hodnoty
Můžete také použít $ ID $ ve filtru, který je aktuálním id aktuálního objektu
Chcete-li provést SELECT ve filtru, použijte $ SEL $
, pokud chcete filtrovat na extrafields použít syntaxi extra.fieldcode = ... (kde kód pole je kód extrafield)

Aby byl seznam v závislosti na jiném seznamu doplňkových atributů:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Aby bylo možné mít seznam v závislosti na jiném seznamu:
c_typent: libelle: id: parent_list_code | parent_column: filtr ExtrafieldParamHelpchkbxlst=Seznam hodnot pochází z tabulky
Syntaxe: table_name: label_field: id_field :: filter
Příklad: c_typent: libelle: id :: filter

filtr může být jednoduchý test (např. Aktivní = 1) pro zobrazení pouze aktivní hodnoty
You může také použít $ ID $ ve filtru, který je aktuální id aktuálního objektu
Chcete-li provést SELECT ve filtru, použijte $ SEL $
, pokud chcete filtrovat na extrafields použijte syntaxi extra.fieldcode = ... (kde kód pole je code of extrafield)

Aby byl seznam v závislosti na jiném seznamu doplňkových atributů:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Aby byl seznam v závislosti na jiném seznamu:
c_typent: libelle: id: parent_list_code | nadřazený sloupec: filtr ExtrafieldParamHelplink=Parametry musí být ObjectName: Classpath
Syntaxe: Název_objektu: Classpath
Příklady:
Societe: societe / class / societe.class.php
Kontakt: contact / class / contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Knihovna používaná pro generování PDF LocalTaxDesc=Některé země mohou uplatnit dvě nebo tři daně na každé čáře faktur. Pokud tomu tak je, vyberte typ druhého a třetího daně a jeho sazbu. Možné typy jsou:
1: místní daň se vztahuje na produkty a služby bez DPH (platí se na základě daně bez daně)
2: místní daň se vztahuje na produkty a služby, včetně DPH (0%) 3x342fccfda19b 3: místní daň se vztahuje na produkty bez DPH (místní taxa se vypočítává z částky bez daně)
4: místní daň se vztahuje na produkty včetně DPH (místní taxa se vypočítává z částky + hlavní daň)
5: Místní daň platí pro služby bez DPH z částky bez daně)
6: Místní daň platí za služby včetně DPH (místní taxa se vypočítává z částky + daně) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Vytvořit / upravit služby Permission534=Odstranit služby Permission536=Viz / správa skryté služby Permission538=Export služeb -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Přečtěte si dary Permission702=Vytvořit / upravit dary Permission703=Odstranit dary @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL koncový bod pro IFTTT YouWillFindItOnYourIFTTTAccount=Najdete ho na svém účtu IFTTT EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/cs_CZ/bills.lang b/htdocs/langs/cs_CZ/bills.lang index 024125e7199..bea8b4b960a 100644 --- a/htdocs/langs/cs_CZ/bills.lang +++ b/htdocs/langs/cs_CZ/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktura InvoiceProFormaDesc=Proforma faktura je obraz skutečné faktury, ale nemá účetní hodnotu. InvoiceReplacement=Náhradní faktura InvoiceReplacementAsk=Náhradní faktura faktury -InvoiceReplacementDesc=  Nahrazená faktura se používá k zrušení a úplné výměně faktury bez již přijaté platby.

Poznámka: Je možné vyměnit pouze faktury bez platby. Pokud již vyměněná faktura není uzavřena, bude automaticky uzavřena na "opuštěnou". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Dobropis InvoiceAvoirAsk=Opravit fakturu na dobropis InvoiceAvoirDesc=Dobropis je negativní faktura řešící skutečnost, že na původní faktuře je částka, které se liší od částky skutečně vyplacené. (zákazník zaplatil více omylem, nebo nezaplatil vše, protože například vrátil některé produkty). diff --git a/htdocs/langs/cs_CZ/companies.lang b/htdocs/langs/cs_CZ/companies.lang index fae494503ab..01ac74f4df7 100644 --- a/htdocs/langs/cs_CZ/companies.lang +++ b/htdocs/langs/cs_CZ/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Slevy pro absolutní prodejce (zadané všemi u SupplierAbsoluteDiscountMy=Slevy pro absolutní prodejce (zadané sami) DiscountNone=Nikdo Vendor=Prodejce +Supplier=Prodejce AddContact=Vytvořit kontakt AddContactAddress=Vytvořit kontakt/adresu EditContact=Upravit kontakt diff --git a/htdocs/langs/cs_CZ/other.lang b/htdocs/langs/cs_CZ/other.lang index ce650924a15..a6dae8e028c 100644 --- a/htdocs/langs/cs_CZ/other.lang +++ b/htdocs/langs/cs_CZ/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Počet zákaznických faktur NumberOfSupplierProposals=Počet návrhů prodejců NumberOfSupplierOrders=Počet objednávek NumberOfSupplierInvoices=Počet faktur dodavatelů +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Počet jednotek na návrh NumberOfUnitsCustomerOrders=Počet jednotek na objednávkách prodeje NumberOfUnitsCustomerInvoices=Počet jednotek na fakturách zákazníků NumberOfUnitsSupplierProposals=Počet jednotek v návrzích prodejců NumberOfUnitsSupplierOrders=Počet jednotek na objednávkách NumberOfUnitsSupplierInvoices=Počet jednotek na faktorech dodavatelů +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Byla přiřazena%s nová intervence . EMailTextInterventionValidated=Zásah %s byl ověřen. EMailTextInvoiceValidated=Faktura %s byla ověřena. @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=Vaše heslo bylo úspěšně obnoveno ApplicantIpAddress=IP adresa žadatele SMSSentTo=SMS odeslaná na %s MissingIds=Chybějící ID -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Subjekt vytvořený sběratelem e-mailů z e-mailu MSGID %s +ContactCreatedByEmailCollector=Kontakt/adresa vytvořená sběratelem e-mailů z e-mailu MSGID %s +ProjectCreatedByEmailCollector=Projekt vytvořený sběratelem e-mailů z e-mailu MSGID %s +TicketCreatedByEmailCollector=Lístek vytvořený sběratelem e-mailů z e-mailu MSGID %s ##### Export ##### ExportsArea=Exportní plocha @@ -268,5 +270,5 @@ WEBSITE_IMAGEDesc=Relativní cesta obrazového média. Můžete si to nechat pr WEBSITE_KEYWORDS=Klíčová slova LinesToImport=Řádky, které chcete importovat -MemoryUsage=Memory usage -RequestDuration=Duration of request +MemoryUsage=Využití paměti +RequestDuration=Doba trvání žádosti diff --git a/htdocs/langs/cs_CZ/website.lang b/htdocs/langs/cs_CZ/website.lang index 8c1881021d4..603f66e497c 100644 --- a/htdocs/langs/cs_CZ/website.lang +++ b/htdocs/langs/cs_CZ/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Dosud nebyla vytvořena žádná webová stránka. Nejpr GoTo=Jít do DynamicPHPCodeContainsAForbiddenInstruction=Přidáte dynamický PHP kód, který obsahuje instrukci PHP '%s ' která je implicitně zakázána jako dynamický obsah (viz skryté možnosti WEBSITE_PHP_ALLOW_xxx pro zvýšení seznamu povolených příkazů). NotAllowedToAddDynamicContent=Nemáte oprávnění přidávat nebo upravovat dynamický obsah PHP na webových stránkách. Požádejte o svolení nebo ponechte kód v tagech php beze změny. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/da_DK/accountancy.lang b/htdocs/langs/da_DK/accountancy.lang index e11155f691b..3910fb365b7 100644 --- a/htdocs/langs/da_DK/accountancy.lang +++ b/htdocs/langs/da_DK/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Regnskabskonto for afventning DONATION_ACCOUNTINGACCOUNT=Regnskabskonto til registrering af donationer diff --git a/htdocs/langs/da_DK/admin.lang b/htdocs/langs/da_DK/admin.lang index 37f3564018b..198a40edff8 100644 --- a/htdocs/langs/da_DK/admin.lang +++ b/htdocs/langs/da_DK/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Afkrydsningsfelter fra bordet ExtrafieldLink=Link til et objekt ComputedFormula=Beregnet felt ComputedFormulaDesc=Du kan indtaste en formel her ved hjælp af andre egenskaber af objekt eller nogen PHP-kodning for at få en dynamisk beregningsværdi. Du kan bruge alle PHP-kompatible formler, herunder "?" betingelsesoperatør og følgende globale objekt: $ db, $ conf, $ langs, $ mysoc, $ bruger, $ objekt .
ADVARSEL : Kun nogle egenskaber af $ objekt kan være tilgængelige. Hvis du har brug for egenskaber, der ikke er indlæst, skal du bare hente objektet i din formel som i andet eksempel.
Brug af et beregnet felt betyder, at du ikke kan indtaste nogen værdier fra interface. Hvis der også er en syntaksfejl, kan formlen ikke returnere noget.

Eksempel på formel:
$ objekt-> id < 10 ? round($object-> id / 2, 2): ($ objekt-> id + 2 * $ bruger-> id) * (int) substr ($ mysoc-> zip, 1, 2 )

Eksempel på genindlæsning af objekt
(($ reloadedobj = ny Societe ($ db)) && ($ reloadedobj-> hent ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj- > rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> kapital / 5: '-1'

Øvrige eksempel på formel for at tvinge belastning af objekt og dets overordnede objekt:
(($ reloadedobj = ny opgave ($ db )) && ($ reloadedobj-> hent ($ objekt-> id)> 0) && ($ secondloadedobj = nyt projekt ($ db)) && ($ secondloadedobj-> hent ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Forældreprojekt ikke fundet' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Blankt felt her betyder, at denne værdi vil blive gemt uden kryptering (feltet skal kun være skjult med stjerne på skærmen).
Vælg 'auto' for at bruge standardkrypteringsreglen til at gemme adgangskoden til databasen (så vil værdien gemmes som en en-vejs hash uden mulighed at hente den oprindelige værdi) ExtrafieldParamHelpselect=Liste over værdier skal være linjer med formatnøgle, værdi (hvor nøglen ikke kan være '0')

for eksempel:
1, værdi1
2, værdi2
kode3, værdi3
...

For at få liste afhængig af en anden komplementær attributliste:
1, værdi1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

For at få listen afhængig af en anden liste:
1, værdi1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Liste over værdier skal være linjer med formatnøgle, værdi (hvor nøglen ikke kan være '0')

for eksempel:
1, værdi1
2, værdi2
3, værdi3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Liste over værdier skal være linjer med formatnøgle, ExtrafieldParamHelpsellist=Liste over værdier kommer fra en tabel
Syntaks: tabelnavn: label_field: id_field :: filter
Eksempel: c_typent: libelle: id :: filter

- idfilter er nødvendigvis en primær int nøgle
- filteret kan være en simpel test = 1) for at vise kun aktiv værdi
Du kan også bruge $ ID $ i filter heks er det nuværende id for nuværende objekt
For at gøre et SELECT i filter brug $ SEL $
hvis du vil filtrere på ekstrafelter brug syntax extra.fieldcode = ... (hvor feltkode er koden for ekstrafelt)

For at få listen afhængig af en anden komplementær attributliste:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

For at have listen afhænger af en anden liste:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=Liste over værdier kommer fra en tabel
Syntaks: tabelnavn: label_field: id_field :: filter
Eksempel: c_typent: libelle: id :: filter

filter kan være en simpel test (f.eks. Aktiv = 1) for at vise kun aktiv værdi
Du kan også bruge $ ID $ i filter heks er det nuværende id for nuværende objekt
For at gøre et SELECT i filter bruger $ SEL $
hvis du vil filtrere på ekstrafelter brug syntax extra.fieldcode = ... (hvor feltkode er kode for ekstrafelt)

For at få listen afhængig af en anden komplementær attributliste:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

For at få listen afhængig af en anden liste:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Parametre skal være ObjectName: Classpath
Syntaks: Objektnavn: Klassepath
Eksempler:
Societe: societe / class / societe.class.php
Kontakt: kontakt / class / contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliotek, der bruges for PDF generation LocalTaxDesc=Nogle lande kan anmode om to eller tre skatter på hver faktura linje. Hvis dette er tilfældet, skal du vælge typen for den anden og tredje skat og dens sats. Mulig type er:
1: Lokal afgift gælder for varer og ydelser uden moms (localtax beregnes efter beløb uden skat)
2: Lokal afgift gælder for varer og tjenesteydelser inklusive moms (localtax beregnes på beløb + hovedafgift)
3: lokal skat gælder for varer uden moms (localtax beregnes på beløb uden skat)
4: lokal skat gælder for varer inklusive moms (lokaltax beregnes på beløb + hovedstol)
5: lokal skat gælder for tjenester uden moms på beløb uden skat)
6: Lokal afgift gælder for tjenester inklusive moms (lokal taxa er beregnet på beløb + skat) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Opret/rediger ydelser Permission534=Slet ydelser Permission536=Se/administrer skjulte ydelser Permission538=Eksport af tjenesteydelser -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Læs donationer Permission702=Opret/rediger donationer Permission703=Slet donationer @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/da_DK/bills.lang b/htdocs/langs/da_DK/bills.lang index fecdf5e9714..999c8ee1115 100644 --- a/htdocs/langs/da_DK/bills.lang +++ b/htdocs/langs/da_DK/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proformafaktura InvoiceProFormaDesc=Proformafakturaen ligner en ægte faktura, men har ingen regnskabsmæssig værdi. InvoiceReplacement=Erstatningsfaktura. InvoiceReplacementAsk=Erstatningsfaktura for faktura -InvoiceReplacementDesc=Erstatningsfaktura bruges til at annullere og erstatte en faktura uden modtaget betaling .

Bemærk! Kun fakturaer uden betaling på det kan erstattes. Hvis fakturaen du udskifter endnu ikke er lukket, lukkes den automatisk for at "forladt". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreditnota InvoiceAvoirAsk=Kreditnota til korrektion af faktura InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/da_DK/companies.lang b/htdocs/langs/da_DK/companies.lang index 5e399cd0080..251336c2067 100644 --- a/htdocs/langs/da_DK/companies.lang +++ b/htdocs/langs/da_DK/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias ​​navn (kommerciel, varemærke, ...) AliasNameShort=Alias ​​Navn Companies=Selskaber CountryIsInEEC=Landet er inden for Det Europæiske Økonomiske Fællesskab -PriceFormatInCurrentLanguage=Nuværende sprogs prisformat +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Navn på tredjepart ThirdPartyEmail=Tredjeparts email ThirdParty=Tredje part @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolutte leverandørrabatter (indtastet af all SupplierAbsoluteDiscountMy=Absolutte leverandørrabatter (indtastet af dig selv) DiscountNone=Ingen Vendor=Sælger +Supplier=Sælger AddContact=Opret kontakt AddContactAddress=Opret kontakt/adresse EditContact=Rediger kontakt diff --git a/htdocs/langs/da_DK/other.lang b/htdocs/langs/da_DK/other.lang index e519bdc2fb6..caf89ef07f4 100644 --- a/htdocs/langs/da_DK/other.lang +++ b/htdocs/langs/da_DK/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Antal kundefakturaer NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Antal enheder på forslag NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Antal enheder på kundefakturaer NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=En ny intervention %s er blevet tildelt dig. EMailTextInterventionValidated=Intervention %s bekræftet EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/da_DK/website.lang b/htdocs/langs/da_DK/website.lang index 455f76a52d3..9371ca1fbcb 100644 --- a/htdocs/langs/da_DK/website.lang +++ b/htdocs/langs/da_DK/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/de_AT/admin.lang b/htdocs/langs/de_AT/admin.lang index abe6c755eaf..3b52ead1173 100644 --- a/htdocs/langs/de_AT/admin.lang +++ b/htdocs/langs/de_AT/admin.lang @@ -93,5 +93,6 @@ FreeLegalTextOnInterventions=Freier Rechtstext für Eingriffe WatermarkOnDraftInterventionCards=Wasserzeichen auf Intervention Karte Dokumente (alle, wenn leer) ClickToDialSetup=Click-to-Dial-Moduleinstellungen PathToGeoIPMaxmindCountryDataFile=Pfad zur Datei mit Maxmind IP to Country Übersetzung.
Beispiel: / usr / local / share / GeoIP / GeoIP.dat +ListOfFixedNotifications=List of Fixed Notifications MailToSendShipment=Sendungen MailToSendIntervention=Eingriffe diff --git a/htdocs/langs/de_AT/companies.lang b/htdocs/langs/de_AT/companies.lang index e88febb047d..d8443484e90 100644 --- a/htdocs/langs/de_AT/companies.lang +++ b/htdocs/langs/de_AT/companies.lang @@ -4,6 +4,7 @@ Companies=Partner UserTitle=Titel PhoneMobile=Handy Web=Webadresse +OverAllInvoices=Rechnungen OverAllSupplierProposals=Preisanfrage LocalTax1IsUsedES=RE wird LocalTax2IsUsedES=IRPF verwendet wird diff --git a/htdocs/langs/de_CH/accountancy.lang b/htdocs/langs/de_CH/accountancy.lang index 68921c9dd3c..7594842ccf6 100644 --- a/htdocs/langs/de_CH/accountancy.lang +++ b/htdocs/langs/de_CH/accountancy.lang @@ -17,8 +17,8 @@ AccountancySetupDoneFromAccountancyMenu=Die meisten Einstellungen der Buchhaltun ConfigAccountingExpert=Einstellungen des erweiterten Buchhaltungsmoduls Journalization=Journalisierung JournalFinancial=Finanzjournal -BackToChartofaccounts=Zeige Kontenplan -Chartofaccounts=Kontenplan +BackToChartofaccounts=Zeige Kontenrahmen +Chartofaccounts=Kontenrahmen CurrentDedicatedAccountingAccount=Aktuell zugewiesenes Konto AssignDedicatedAccountingAccount=Neues zugewiesenes Konto InvoiceLabel=Rechnungsbezeichung @@ -66,7 +66,7 @@ AccountancyAreaDescWriteRecords=Schritt %s: Lass alle Transaktionen ins Hauptbuc AccountancyAreaDescAnalyze=Schritt %s: Erzeuge oder ergänze Transaktionen für Berichte und Exporte. AccountancyAreaDescClosePeriod=Schritt %s: Schliesse eine Geschäftsperiode ab, damit Sie nicht mehr abgeändert werden kann. TheJournalCodeIsNotDefinedOnSomeBankAccount=Hoppla - nicht alle Bankkonten haben ein Buchhaltungskonto zugewiesen - bitte korrigiere das so: -Selectchartofaccounts=Wähle deinen Kontenplan. +Selectchartofaccounts=Wähle deinen Kontenrahmen. ChangeAndLoad=Lade und ersetze Addanaccount=Buchhaltungskonto hinzüfügen SubledgerAccountLabel=Bezeichnung Nebenbuchkonto @@ -89,6 +89,7 @@ ExpenseReportsVentilation=Verknüpfung für Spesenabrechnungen CreateMvts=Neue Transaktion UpdateMvts=Transaktion bearbeiten ValidTransaction=Transaktion freigeben +WriteBookKeeping=Transaktionen im Hauptbuch eintragen AccountBalance=Saldo ObjectsRef=Referenz des Quellobjektes CAHTF=Einkaufsaufwand von Steuern @@ -131,6 +132,7 @@ ACCOUNTING_RESULT_PROFIT=Ergebniskonto (Gewinn) ACCOUNTING_RESULT_LOSS=Ergebniskonto (Verlust) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Abschlussjournal ACCOUNTING_ACCOUNT_TRANSFER_CASH=Transferkonto Banktransaktionen +TransitionalAccount=Durchlaufkonto Bank ACCOUNTING_ACCOUNT_SUSPENSE=Sperrkonto DONATION_ACCOUNTINGACCOUNT=Buchhaltungskonto für Spenden ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Buchhaltungskonto für Abonnemente @@ -143,6 +145,7 @@ ACCOUNTING_SERVICE_SOLD_ACCOUNT=Standard - Buchhaltungskonto für verkaufte Leis LabelAccount=Kontobezeichnung LabelOperation=Vorgangsbezeichnung LetteringCode=Beschriftung +Lettering=Beschriftung JournalLabel=Journalbezeichnung TransactionNumShort=Transaktionsnummer AccountingCategory=Eigene Kontogruppen @@ -176,7 +179,8 @@ DescThirdPartyReport=Liste der Buchhaltungskonten von Geschäftspartnern und Lie ListAccounts=Liste der Buchhaltungskonten UnknownAccountForThirdparty=Den Partner kenne ich nicht - wir nehmen %s. UnknownAccountForThirdpartyBlocking=Den Partner kenne ich nicht. Zugriffsfehler. -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Der Partner ist nicht definiert oder unbekannt. Zugriffsfehler. +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Geschäftspartner nicht definiert oder unbekannt. Ich nehme deshalb %s. +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Der Partner ist nicht definiert oder unbekannt. Zugriffsfehler. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Mir fehlt der Partner und das Wartestellungskonto. Zugriffsfehler. PaymentsNotLinkedToProduct=Die Zahlung ist mit keinem Produkt oder Service verknüpft. Pcgtype=Kontengruppe @@ -185,7 +189,7 @@ PcgtypeDesc=Kontogruppen und -untergruppen brauche ich für vordefinierte Filter TotalVente=Gesamtumsatz vor Steuern TotalMarge=Gesamtmarge Verkauf DescVentilCustomer=Du siehst hier die Liste der Kundenrechnungen und ob diese mit einem Buchhaltungskonto verknüpft sind, oder nicht. -DescVentilMore=Wenn du in den Produkten und Leistungen die Buchhaltungskonten hinterlegt hast, kann ich jene den Rechnungspositionen automatisch zuordnen. Dafür ist die Schaltfläche "%s" da.\nDort, wo das nicht klappt, kannst du die Rechnungspositionen via "%s" von Hand zuweisen. +DescVentilMore=Wenn du in den Produkten und Leistungen die Buchhaltungskonten deines Kontenplanes hinterlegt hast, kann ich die Rechnungspositionen automatisch jenen Konten zuordnen. Dafür ist die Schaltfläche "%s" da.\nDort, wo das nicht klappt, kannst du die Rechnungspositionen via "%s" von Hand zuweisen. DescVentilDoneCustomer=Du siehst die Kundenrechnungspositionen und den aktuellen Verknüpfungsstatus zu Buchhaltungskonten. DescVentilTodoCustomer=Verknüpfe Rechnungspositionen mit Buchhaltungskonten. ChangeAccount=Ersetze für die gewählten Positionen das Buchhaltungskonto. @@ -232,13 +236,21 @@ Modelcsv_quadratus=Quadratus QuadraCompta - Format Modelcsv_ebp=EBP - Format Modelcsv_cogilog=EBP - Format Modelcsv_agiris=Agiris - Format +Modelcsv_openconcerto=Export zu OpenConcerto (Test) Modelcsv_configurable=Konfigurierbares CSV - Format +Modelcsv_Sage50_Swiss=Export zu SAGE 50 - Schweiz +ChartofaccountsId=Kontenrahmen ID InitAccountancy=Init Buchhaltung InitAccountancyDesc=Auf dieser Seite weisest du Buchhaltungskonten Produkten und Leistungen zu, die keine Konten für Ein- und Verkäufe hinterlegt haben. DefaultBindingDesc=Auf dieser Seite kannst du ein Standard - Buchhaltungskonto an alle Arten Zahlungstransaktionen zuweisen, falls noch nicht geschehen. DefaultClosureDesc=Lege hier die Parameter zum Anfügen der Bilanz fest. +OptionModeProductSell=Modus Verkauf +OptionModeProductSellIntra=Modus Export - Verkäufe in den EWR - Raum +OptionModeProductSellExport=Modus Export - Verkäufe in andere Länder OptionModeProductBuy=Modus Einkauf OptionModeProductSellDesc=Finde alle Produkte mit einem Buchhaltungskonto für Verkäufe. +OptionModeProductSellIntraDesc=Zeige alle Produkte mit einem Buchhaltungskonto für den Export in den EWR +OptionModeProductSellExportDesc=Zeige alle Produkte mit einem Buchhaltungskonto für den Export in andere Länder OptionModeProductBuyDesc=Finde alle Produkte mit einem Buchhaltungskonto für Einkäufe. CleanFixHistory=Lösche alle Kontierungscodes, die im Kontenplan nicht vorkommen, aus allen Positionen CleanHistory=Setzte alle Verknüpfungen für das gewählte Jahr zurück @@ -247,6 +259,9 @@ WithoutValidAccount=Vordefinierte Gruppen WithValidAccount=Mit geprüftem zugewiesenen Buchhaltungskonto ValueNotIntoChartOfAccount=Dieses Buchhaltungskonto exisitiert im aktuellen Kontenplan nicht... AccountRemovedFromGroup=Ich hab das Buchhaltungskonto aus der Gruppe entfernt. +SaleLocal=Inlandverkauf +SaleExport=Exportverkauf +SaleEEC=Verkauf im EWR Range=Dieses Buchhaltungskonto kommt im aktuellen Kontenplan nicht vor. Calculated=Berechnet SomeMandatoryStepsOfSetupWereNotDone=Oha - einige zwingende Einstellungen sind noch nicht gemacht worden. Bitte erledige das noch, danke. @@ -260,5 +275,6 @@ Binded=Verknüpfte Positionen ToBind=Zu verknüpfende Positionen UseMenuToSetBindindManualy=Nicht verbundenen Positionen, bitte Benutze den Menupunkt "
%s" zum manuell zuweisen. ImportAccountingEntries=Buchungen +DateExport=Datum Export WarningReportNotReliable=Obacht, dieser Bericht basiert nicht auf den Hauptbucheinträgen. Falls dort also noch Änderungen vorgenommen worden sind, wird das nicht übereinstimmen. Bei sauberer Buchführung nimmst du eher die Buchhaltungsberichte. ExpenseReportJournal=Spesenabrechnungsjournal diff --git a/htdocs/langs/de_CH/admin.lang b/htdocs/langs/de_CH/admin.lang index 681ea2e1ad7..d38cb433d55 100644 --- a/htdocs/langs/de_CH/admin.lang +++ b/htdocs/langs/de_CH/admin.lang @@ -41,6 +41,8 @@ UseSearchToSelectContactTooltip=Wenn Sie eine grosse Anzahl von Kontakten (> 100 DelaiedFullListToSelectCompany=Nicht so eingängig, aber schneller geht's in der Combo List - Ansicht, wenn ich auf Tastendruck warten soll, bevor ich die Partnerliste lade. DelaiedFullListToSelectContact=Nicht so eingängig, aber schneller geht's in der Combo List - Ansicht, wenn ich auf Tastendruck warten soll, bevor ich die Kontaktliste lade. NumberOfKeyToSearch=Anzahl der Zeichen, die die Suche auslösen sollen: 1 %s +NumberOfBytes=Anzahl Bytes +SearchString=Suchtext AllowToSelectProjectFromOtherCompany=Erlaube bei den Elementen eines Partners, die Projekte von anderen Partnern zu verlinken UsePreviewTabs=Vorschautabs verwenden MySQLTimeZone=Aktuelle Zeitzone von MySql (Datenbank) @@ -74,7 +76,7 @@ Language_en_US_es_MX_etc=Sprache setzen (de_CH, en_GB,...) SystemToolsAreaDesc=Dieser Bereich ist voll mit Administratorfunktionen - Wähle im Menu aus. Purge=Säubern PurgeAreaDesc=Hier können Sie alle vom System erzeugten und gespeicherten Dateien löschen (temporäre Dateien oder alle Dateien im Verzeichnis %s). Diese Funktion ist richtet sich vorwiegend an Benutzer ohne Zugriff auf das Dateisystem des Webservers (z.B. Hostingpakete) -PurgeDeleteTemporaryFiles=Alle temporären Dateien löschen (kein Datenverlustrisiko) +PurgeDeleteTemporaryFiles=Lösche alle Temporären Dateien. Dabei gehen keine Arbeitsdaten verloren.\nHinweis: Das funktioniert nur, wenn das Verzeichnis 'Temp' seit 24h da ist. PurgeDeleteTemporaryFilesShort=Temporärdateien löschen PurgeDeleteAllFilesInDocumentsDir=Alle Datein im Verzeichnis %s löschen. Dies beinhaltet temporäre Dateien ebenso wie Datenbanksicherungen, Dokumente (Geschäftspartner, Rechnungen, ...) und alle Inhalte des ECM-Moduls. PurgeNDirectoriesDeleted=%s Dateien oder Verzeichnisse gelöscht. @@ -165,7 +167,7 @@ ModuleFamilyProducts=Produktmanagement (PM) ModuleFamilyHr=Personalverwaltung (PM) ModuleFamilyProjects=Projektverwaltung/Zusammenarbeit ModuleFamilyECM=Inhaltsverwaltung (ECM) -ModuleFamilyPortal=Homepages und weitere Frontanwendungen +ModuleFamilyPortal=Webseiten und andere Frontend Anwendungen DoNotUseInProduction=Nicht in Produktion nutzen ThisIsAlternativeProcessToFollow=Dies ist ein alternativer Setup-Prozess: FindPackageFromWebSite=Finde das passende Dolibarrpaket (zum Beispiel auf der Dolibarr - Website %s) @@ -175,6 +177,7 @@ UnpackPackageInModulesRoot=Zum Einbinden eines externen Moduls entpackst du dere SetupIsReadyForUse=Modulinstallation abgeschlossen. Aktiviere und konfiguriere nun das Modul im Menu "%s". InfDirExample=
Dann deklariere in conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
\n"#" heisst, die Variablen sind auskommentiert und werden nicht berücksichtigt.\nEntferne einfach "#", um die Variablen scharf zu schalten. YouCanSubmitFile=Du kannst das Modul - Archiv auch hochladen: +CallUpdatePage=Zur Aktualisierung der Daten und der Datenbankstruktur gehst du zur Seite %s. UpdateServerOffline=Update-Server offline WithCounter=Zähler verwalten GenericMaskCodes=Sie können ein beliebiges Numerierungsschema wählen. Dieses Schema könnte z.B. so aussehen:
{000000} steht für eine 6-stellige Nummer, die sich bei jedem neuen %s automatisch erhöht. Wählen Sie die Anzahl der Nullen je nach gewünschter Nummernlänge. Der Zähler füllt sich automatisch bis zum linken Ende mit Nullen um das gewünschte Format abzubilden.
{000000+000} führt zu einem ähnlichen Ergebnis, allerdings mit einem Wertsprung in Höhe des Werts rechts des Pluszeichens, der beim ersten %s angewandt wird.
{000000@x} wie zuvor, jedoch stellt sich der Zähler bei Erreichen des Monats x (zwischen 1 und 12) automatisch auf 0 zurück. Ist diese Option gewählt und x hat den Wert 2 oder höher, ist die Folge {mm}{yy} or {mm}{yyyy} ebenfalls erfoderlich.
{dd} Tag (01 bis 31).
{mm} Monat (01 bis 12).
{yy}, {yyyy} or {y} Jahreszahl 1-, 2- oder 4-stellig.
@@ -191,13 +194,28 @@ UMask=Umask Parameter für neue Dateien auf Unix/Linux/BSD-Dateisystemen. UMaskExplanation=Über diesen Parameter können Sie die standardmässigen Dateiberechtigungen für vom System erzeugte/verwaltete Inhalte festlegen.
Erforderlich ist ein Oktalwert (0666 bedeutet z.B. Lesen und Schreiben für alle).
Auf Windows-Umgebungen haben diese Einstellungen keinen Effekt. SeeWikiForAllTeam=Schaue die Wiki-Seite mit der Liste der Mitwirkenden und ihrer Organisation an. AddCRIfTooLong=Es gibt keine automatische Textformatierung, zu langer Text wird in Dokumenten nicht angezeigt. Bitte fügen Sie bei Bedarf Zeilenumbrüche im Textfeld hinzu. +ConfirmPurge=Möchtest du diese Aktion wirklich durchführen?\nDabei gehen alle Datein (im ECM, Attachments etc) unwiederbringlich verloren. +ExamplesWithCurrentSetup=Beispiele mit der derzeitigen Systemkonfiguration ListOfDirectoriesForModelGenODT=Liste der Verzeichnisse mit Vorlagendateien mit OpenDocument-Format.

Fügen Sie hier den vollständigen Pfad der Verzeichnisse ein.
Trennen Sie jedes Verzeichnis mit einer Zeilenschaltung
Verzeichnisse des ECM-Moduls fügen Sie z.B. so ein DOL_DATA_ROOT/ecm/yourdirectoryname.

Dateien in diesen Verzeichnissen müssen mit .odt oder .ods enden. +NumberOfModelFilesFound=Anzahl der .odt / .ods Vorlagen in diesen Verzeichnissen. +DescWeather=Diese Piktogramme werden bei verspäteten Tasks gemäss folgenden Werten angezeigt. +ThisForceAlsoTheme=Dieser Menu Manager übersteuert die Benutzereinstellung. Er funktioniert nicht auf allen Smartphones. Wähle einen anderen, falls Probleme auftauchen. +ConnectionTimeout=Zeitüberschreitung in der Verbindung ResponseTimeout=Antwort Timeout +NoSmsEngine=Es ist kein SMS Sendedienst verfügbar.\nIn der Standardinstallation ist keiner installiert, denn das gibt es bei externen Anbietern.\nFinde deinen Anbieter via %s. PDFDesc=Globale Einstellungen für automatisch generierte PDFs +PDFAddressForging=Regeln für Adressfelder +HideAnyVATInformationOnPDF=Verstecke MWST - Informationen. PDFRulesForSalesTax=Regeln für die MWST +HideLocalTaxOnPDF=Verstecke den %s Satz +HideDescOnPDF=Verstecke Produktbeschreibungen +HideRefOnPDF=Verstecke Produktnummern +HideDetailsOnPDF=Verstecke Produktzeilen PlaceCustomerAddressToIsoLocation=ISO Position für die Kundenadresse verwenden +ButtonHideUnauthorized=Buttons für Nicht-Admins ausblenden anstatt ausgrauen? OldVATRates=Alter MwSt. Satz NewVATRates=Neuer MwSt. Satz +MassConvert=Massenkonvertierung starten HtmlText=HTML Float=Gleitkommazahl Boolean=Boolean (Ein Kontrollkästchen) @@ -206,18 +224,30 @@ ExtrafieldMail =E-Mail ExtrafieldSelect =Wähle Liste ExtrafieldSelectList =Wähle von Tabelle ExtrafieldPassword=Passwort +ExtrafieldRadio=Einfachauswahl (Radiobuttons) ExtrafieldCheckBox=Kontrollkästchen ExtrafieldCheckBoxFromList=Kontrollkästchen aus Tabelle +ComputedFormulaDesc=Du kannst hier Formeln mit weiteren Objekteigenschaften oder in PHP eingeben, um dynamisch berechnete Werte zu generieren. Alle PHP konformen Formeln sind erlaubt inkl dem Operator "?:" und folgende globale Objekte:$db, $conf, $langs, $mysoc, $user, $object.
Obacht: Vielleicht sind nur einige Eigenschaften von $object verfügbar. Wenn dir eine Objekteigenschaft fehlt, packe das gesamte Objekt einfach in deine Formel, wie im Beispiel zwei.
"Computed field" heisst, du kannst nicht selber Werte eingeben. Wenn Syntakfehler vorliegen, liefert die Formel ggf. gar nichts retour.

Ein Formelbeispiel:
$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Beispiel zum Neuladen eines Objektes
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Eine Weitere Variante zum erzwungenen Neuladen des Objekts und seiner Eltern:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Übergeordnetes Projekt nicht gefunden...' +ExtrafieldParamHelpPassword=Wenn leer, wird das Passwort unverschlüsselt geschrieben.
Gib 'auto' an für die Standardverschlüsselung - es wird nur der Hash ausgelesen und man kann das Passwort unmöglich herausfinden. +ExtrafieldParamHelpselect=Parameterlisten müssen das Format Schlüssel,Wert haben

zum Beispiel:
1,Wert1
2,Wert2
3,Wert3
...

Um die Liste in Abhängigkeit zu einer anderen zu haben:
1,Wert1|parent_list_code:parent_key
2,Wert2|parent_list_code:parent_key +ExtrafieldParamHelpcheckbox=Die Liste muss im Format: Schlüssel, Wert sein (wobei der Schlüssel nicht '0' sein kann)

zum Beispiel:
1, Wert1
2, Wert2
3, Wert3
... +ExtrafieldParamHelpradio=Die Liste muss im Format: Schlüssel, Wert sein (wobei der Schlüssel nicht '0' sein kann)

zum Beispiel:
1, Wert1
2, Wert2
3, Wert3
... LibraryToBuildPDF=Verwendete Bibliothek zur PDF-Erzeugung SetAsDefault=Als Standard definieren +BarcodeInitForthird-parties=Barcode Init. für alle Partner BarcodeInitForProductsOrServices=Alle Strichcodes für Produkte oder Services initialisieren oder zurücksetzen EraseAllCurrentBarCode=Alle aktuellen Barcode-Werte löschen ConfirmEraseAllCurrentBarCode=Wirklich alle aktuellen Barcode-Werte löschen? AllBarcodeReset=Alle Barcode-Werte wurden entfernt NoBarcodeNumberingTemplateDefined=Mir fehlt ein aktives Barcode - Nummernschema. Das wird im Modul "Barcodes" aktiviert. +ShowDetailsInPDFPageFoot=Mehr Detailinfos in der Fusszeile anzeigen, wie z.B. Firmenadresse, oder Vertreternamen (Zusätzlich zur Firmennummer, Firmenvermögen und MWST - Nummer). +NoDetails=Keine weiteren Details in der Fusszeile DisplayCompanyManagers=Anzeige der Namen der Geschäftsführung EnableAndSetupModuleCron=Wenn du diese Rechnung in regelmässigem Abstand automatisch erzeugen lassen willst, musst du das Modul '%s' aktivieren und konfigurieren. Natürlich kannst du weiterhin hier die Rechnung manuell auslösen. Du wirst gewarnt, falls du die Rechnung manuell auslösen willst, aber bereits eine automatisch erstellte da ist. +ModuleCompanyCodeCustomerAquarium=%s gefolgt von der Kundennummer für den Kontierungscode +ModuleCompanyCodeSupplierAquarium=%sgefolgt von der Lieferantennummer für den Kontierungscode ModuleCompanyCodePanicum=Leeren Kontierungscode zurückgeben. +ModuleCompanyCodeDigitaria=Kontierungscode Abhängig von der Kundennummer. Zusammengesetzt aus dem Buchstaben "C", gefolgt von den ersten fünf Buchstaben der Kundennummer. Use3StepsApproval=Standardmässig, Einkaufsaufträge müssen durch zwei unterschiedlichen Benutzer erstellt und freigegeben werden (ein Schritt/Benutzer zum Erstellen und ein Schritt/Benutzer für die Freigabe). Beachten Sie, wenn ein Benutzer beide Rechte hat - zum Erstellen und Freigeben, dann reicht ein Benutzer für diesen Vorgang. Optional können Sie einen zusätzlichen Schritt/User für die Freigabe einrichten, wenn der Betrag einen bestimmten dedizierten Wert übersteigt (wenn der Betrag höher wird, werden 3 Stufen notwendig: 1=Validierung, 2=erste Freigabe und 3=Gegenfreigabe.
Lassen Sie das Feld leer, wenn eine Freigabe (2 Schritte) ausreicht; tragen Sie einen sehr niedrigen Wert (0.1) ein, wenn eine zweite Freigabe notwendig ist. UseDoubleApproval=3-fach Verarbeitungsschritte verwenden, wenn der Betrag (ohne Steuer) höher ist als ... WarningPHPMail=Obacht: Wenn du eine externe Mailadresse verwendest (also nicht die deines aktuellen Hostings hier, gibst du hier den Mailserver, der zu deiner gewünschten E-Mail Adresse passt, ein (z.B. den SMTP von GMX, wenn du eine GMX - Adresse hinterlegst.)
Trage hier also Mailserver / Benutzer / Passwort deines externen Anbieters ein.
Sonst kann es vorkommen, dass Mails hier nicht herausgeschickt werden, weil der lokale Maildienst einen Absender mit falscher Domäne erhält, und das blockiert. @@ -225,51 +255,91 @@ WarningPHPMail2=Falls dein Anbieter Mailclients auf einen IP-Adressbereich einsc ClickToShowDescription=Klicken um die Beschreibung zu sehen DependsOn=Dieses Modul benötigt die folgenden Module RequiredBy=Diese Modul wird durch folgende Module verwendet +EnableDefaultValues=Eigene Standartwerte erlauben. +EnableOverwriteTranslation=Eigene Übersetzungen erlauben WarningSettingSortOrder=Warnung: Änderungen an der Standardsortierreihenfolge können zu Fehlern führen, falls das betreffende Feld nicht vorhanden ist. Falls dies passiert, entfernen sie das betreffende Feld oder stellen die den Defaultwert wieder her. ProductDocumentTemplates=Dokumentvorlagen zur Erstellung von Produktdokumenten WatermarkOnDraftExpenseReports=Wasserzeichen auf Entwurf von Ausgabenbelegen AttachMainDocByDefault=Setzen Sie diesen Wert auf 1, wenn Sie das Hauptdokument standardmässig per E-Mail anhängen möchten (falls zutreffend). +davDescription=WebDAV Server einrichten DAVSetup=Einstellungen de Moduls "DAV" +DAV_ALLOW_PRIVATE_DIR=WebDAV - Ordner "private" aktivieren (Login nötig). +DAV_ALLOW_PRIVATE_DIRTooltip=Das Standart - Privatverzeichnis in WebDAV kann jeder mit seinen Logindaten benutzen. +DAV_ALLOW_PUBLIC_DIR=WebDAV - Ordner "public" aktivieren (Kein Login nötig). +DAV_ALLOW_PUBLIC_DIRTooltip=Das Öffentliche Verzeichnis in WebDAV kann jeder ohne irgendein Login benutzen. +DAV_ALLOW_ECM_DIR=DMS/ECM - Privatverzeichnis aktivieren (Login erforderlich). Das ist das Stammverzeichnis des DMS/ECM Modules. +DAV_ALLOW_ECM_DIRTooltip=Hier kommen alle selbst hochgeladenen DMS/ECM Dateien hin. Dazu braucht es einen ein Benutzerlogin mit den erforderlichen Rechten. +Module1Desc=Geschäftspartner- und Kontakteverwaltung (Kunden, Leads, ...) +Module10Name=Buchhaltung einfach Module10Desc=Einfache Buchhaltungsberichte (Journale, Umsätze) auf Basis von Datenbankinhalten. Es wird keine Hauptbuch-Tabelle verwendet. Module20Desc=Angeboteverwaltung Module22Desc=E-Mail-Kampagnenverwaltung +Module25Name=Kundenaufträge +Module25Desc=Kunden - Auftragsverwaltung Module40Name=Lieferanten +Module40Desc=Lieferantenverwaltung und Einkauf (Bestellungen und Rechnungen) Module49Desc=Bearbeiterverwaltung +Module50Desc=Produkteverwaltung Module52Name=Produktbestände +Module52Desc=Lagerverwaltung (für Produkte) +Module53Desc=Dienstleistungen Module54Name=Verträge/Abonnements +Module57Name=Debit - Zahlungen Module70Name=Arbeitseinsätze Module80Name=Auslieferungen +Module80Desc=Versand und Lieferverfolgung +Module85Name=Bankkonten & Bargeld Module100Desc=Hinzufügen eines Links zu einer externen Website als Icon im Hauptmenü. Die Webseite wird in einem Dolibarr-Frame unter dem Haupt-Menü angezeigt. Module105Desc=Mailman oder SPIP Schnittstelle für die Mitgliedsmodul +Module200Desc=LDAP Synchronisierung Module240Desc=Werkzeug zum Datenexport (mit Assistent) Module250Desc=Tool zum Importieren von Daten in Dolibarr (mit Unterstützung) Module310Desc=Management von Mitglieder einer Stiftung/Vereins +Module320Desc=RSS Feed auf Dolibarr - Seiten zeigen +Module330Name=Lesezeichen und Verknüpfungen Module330Desc=Erstellen Sie Verknüpfungen zu den internen oder externen Seiten, auf die Sie häufig zugreifen (Favoriten). -Module400Name=Projekte oder Interessenten +Module400Name=Projekte oder Chancen Module400Desc=Management von Projekten, Interessenten/Chancen und/oder Aufgaben. Sie können auch jedes beliebige Element (Rechnung, Auftrag, Offerte, Intervention,...) einem Projekt zuordnen und erhalten eine Querschnittsansicht aus der Projektsicht. +Module500Name=Steuern und Sonderausgaben +Module500Desc=Andere Aufwände (MWST, Sozialabgaben, Dividenden,...) Module510Desc=Erfassen und Verfolgen von Vergütungen der Mitarbeiter Module520Name=Kredite Module600Desc=Ereignisbasierte E-Mail - Benachrichtigungen
  • Für Benutzer, gemäss Einstellungen im Benutzerprofil
  • Für Geschäftspartner, gemäss Einstellungen in Partnerkontakten
  • Für selbstgewählte E-Mail Adressen
Module600Long=Obacht: Hier geht es um automatisierte Benachrichtigungen für Geschäftsvorfälle. Kalendererinnerungen legst du im Modul "Kalender" fest. Module610Desc=Erstellung von Produktvarianten (Farbe, Größe etc.) Module770Desc=Verwaltung von Reisekostenabrechnungen (Verkehrsmittel, Verpflegung,....) +Module1120Name=Lieferantenofferten +Module1120Desc=Lieferanten - Offerten und Preise einholen. Module1200Desc=Mantis-Integation Module1520Desc=E-Mail Kampagnendokument erstellen Module1780Name=Kategorien/#tags Module2000Desc=Ermöglicht die Bearbeitung von Textfeldern mit dem CKEditor (html). +Module2200Desc=Mathematische Ausdrücke für Preise aktivieren +Module2300Desc=Geplante Aufgaben (CronJobs, ChronoTable) verwalten. Module2400Name=Ereignisse/Termine Module2400Desc=Ereignisse verfolgen. Lassen Sie Dolibarr automatische Ereignisse zur Verfolgung protokollieren oder nehmen Sie manuelle Ereignisse oder Besprechungen auf. Dies ist das Hauptmodul für ein gutes Management von Kunden- oder Lieferanten-Beziehungen. +Module2500Desc=Document - / Electronic Content Management System. Deine Dokumente werden automatisch organisiert. Du kannst deine Dateien teilen. Module2660Desc=Aktivieren Sie den Dolibarr Webservice-Client (Kann verwendet werden, um Daten/Anfragen an externe Server zu übertragen. Nur Lieferantenbestellungen werden derzeit unterstützt.) Module2700Desc=Benutze den Gravatar - Dienst, um Fotos von deinen Benutzern und Mitgliedern darzustellen. (www.gravatar.com) +Module3200Name=Unveränderbare Archive +Module20000Name=Ferienverwaltung Module20000Desc=Mitarbeiterurlaubsanträge erfassen und verfolgen +Module40000Name=Multiwährungsfähigkeit Module40000Desc=Verwendung alternativer Währungen in Preisen und Dokumenten +Module50100Name=Simple POS Module50100Desc=Kassenmodul (Simple POS) +Module50150Name=Take POS Module50150Desc=Kassenmodul (TouchPOS) +Module50200Desc=PayPal Zahlungsmaske aktivieren. So können deine Kunden Dolibarr - Rechnungen via PayPal oder Kreditkarte bezahlen. +Module50300Desc=Stripe Zahlungsmaske aktivieren. So können deine Kunden Dolibarr - Rechnungen via Wallets oder Kreditkarte (plus weitere Stripe Zahlungsmöglichkeiten) bezahlen. +Module50400Name=Doppelte Buchhaltung Module50400Desc=Buchhaltungsverwaltung (doppelte Buchhaltung, unterstützt Haupt- und Nebenbücher). Export des Hauptbuchs in verschiedene andere Buchhaltungssoftware-Formate. +Module54000Desc=Direktdruck (ohne die Dokumente zu öffnen) mittels CUPS IPP.\nDer Server muss dazu CUPS am Laufen haben und Zugriff auf einen Drucker haben. Module55000Name=Befragung, Umfrage oder Abstimmung Module55000Desc=Modul zur Erstellung von Online-Umfragen, Umfragen oder Abstimmungen (wie Doodle, Studs, Rdvz,....) Module62000Name=Lieferbedingungen Module62000Desc=Hinzufügen von Funktionen zur Verwaltung von Lieferbedingungen (Incoterms) +Module63000Desc=Hier kannst du deine Ressourcen (Drucker, Räume, Fahrzeuge) Kalenderereignissen zuweisen. Permission26=Angebote schliessen Permission61=Leistungen ansehen Permission62=Leistungen erstellen/bearbeiten @@ -282,18 +352,50 @@ Permission125=Mit Benutzer verbundene Geschäftspartner löschen Permission126=Geschäftspartner exportieren Permission144=Löschen Sie alle Projekte und Aufgaben (einschliesslich privater Projekte in denen ich kein Kontakt bin) Permission172=Reise- und Spesenabrechnung erstellen/ändern +Permission181=Lieferantenbestellungen einsehen +Permission184=Lieferantenbestellungen bestätigen +Permission185=Lieferantenbestellungen auslösen oder verwerfen +Permission187=Lieferantenbestellungen schliessen +Permission188=Lieferantenbestellungen zurückziehen Permission193=Leitungen abbrechen Permission203=Bestellungsverbindungen Bestellungen +Permission215=Lieferanten einrichten +Permission300=Barcodes auslesen +Permission301=Barcodes erzeugen und ändern. Permission311=Leistungen einsehen Permission331=Lesezeichen einsehen Permission332=Lesezeichen erstellen/bearbeiten Permission401=Rabatte einsehen +Permission430=PHP Debug Bar verwenden +Permission511=Lohnzahlungen einsehen +Permission512=Lohnzahlungen erstellen und bearbeiten +Permission514=Lohnzahlungen löschen Permission520=Darlehen einsehen Permission525=Darlehens-rechner Permission527=Exportiere Darlehen Permission531=Leistungen einsehen +Permission650=Rechnungen für Rohmaterialien einsehen. +Permission651=Rechnungen für Rohmaterialien erzeugen und bearbeiten +Permission652=Rechnungen für Rohmaterialien löschen Permission701=Spenden einsehen +Permission1121=Partnerofferten einsehen +Permission1122=Partnerofferten erzeugen und bearbeiten +Permission1123=Partnerofferten freigeben +Permission1124=Partnerofferten auslösen +Permission1125=Partnerofferten löschen +Permission1126=Lieferanten - Preisanfragen schliessen +Permission1182=Lieferantenbestellungen einsehen +Permission1185=Lieferantenbestellungen bestätigen +Permission1186=Lieferantenbestellungen auslösen +Permission1187=Empfangsbestätigung Lieferantenbestellung quittieren +Permission1188=Lieferantenbestellungen löschen +Permission1190=Lieferantenbestellungen bestätigen (zweite Bestätigung). +Permission1231=Lieferantenrechnungen einsehen +Permission1232=Lieferantenrechnungen erzeugen und bearbeiten Permission1235=Lieferantenrechnungen per E-Mail versenden +Permission1236=Kundenrechnungen, -attribute und -zahlungen exportieren +Permission1237=Lieferantenbestellungen mit Details exportieren +Permission1421=Kundenaufträge mit Attributen exportieren Permission2414=Aktionen und Aufgaben anderer exportieren Permission59002=Gewinspanne definieren DictionaryCompanyJuridicalType=Rechtsformen von Unternehmen @@ -303,6 +405,8 @@ DictionaryPaperFormat=Papierformate DictionaryEMailTemplates=E-Mail Textvorlagen SetupSaved=Setup gespeichert BackToDictionaryList=Zurück zu der Stammdatenliste +VATIsUsedDesc=Standardmässig folgt der Umsatzsteuersatz beim Erstellen von Interessenten, Rechnungen, Aufträgen usw. der aktiven Standardregel:
Wenn der Verkäufer nicht der Umsatzsteuer unterliegt, ist die Umsatzsteuer standardmäßig 0. Regelende.
Ist das (Land des Verkäufers = Land des Käufers), entspricht die Umsatzsteuer standardmässig der Umsatzsteuer des Produkts im Land des Verkäufers. Regelende.
Wenn der Verkäufer und der Käufer beide in der Europäischen Gemeinschaft ansässig sind und es sich bei den Waren um transportbezogene Produkte handelt (Spedition, Versand, Fluggesellschaft), beträgt die Standard-Mehrwertsteuer 0. Diese Regel ist abhängig vom Land des Verkäufers - wenden Sie sich an Ihren Buchhalter. Die Mehrwertsteuer ist vom Käufer an die Zollstelle in seinem Land und nicht an den Verkäufer zu entrichten. Regelende.
Wenn der Verkäufer und der Käufer beide in der Europäischen Gemeinschaft ansässig sind und der Käufer kein Unternehmen ist (mit einer registrierten innergemeinschaftlichen Umsatzsteuer-Identifikationsnummer), gilt standardmässig der Umsatzsteuersatz des Landes des Verkäufers. Regelende.
Wenn der Verkäufer und der Käufer beide in der Europäischen Gemeinschaft ansässig sind und der Käufer ein Unternehmen ist (mit einer registrierten innergemeinschaftlichen Umsatzsteuer-Identifikationsnummer), beträgt die Umsatzsteuer standardmässig 0. Regelende.
In allen anderen Fällen lautet der vorgeschlagene Standardwert Umsatzsteuer = 0. Regelende. +VATIsNotUsedDesc=Standardmässig beträgt die vorgeschlagene Umsatzsteuer 0, was für Fälle wie Vereine, Einzelpersonen oder kleine Unternehmen verwendet werden kann. LocalTax1IsNotUsedDescES=Standardmässig werden die vorgeschlagenen RE 0 ist. Ende der Regel. LocalTax2IsNotUsedDescES=Standardmässig werden die vorgeschlagenen IRPF 0 ist. Ende der Regel. DriverType=Treiber Typ @@ -318,6 +422,7 @@ InfoWebServer=Infos Webserver InfoDatabase=Infos Datenbank InfoPHP=Infos PHP BrowserName=Browser Name +AccountantDesc=Wenn Sie einen externen Buchhalter haben, können Sie hier seine Informationen bearbeiten. TriggerDisabledByName=Trigger in dieser Datei sind durch das -NORUN-Suffix in ihrem Namen deaktviert. DictionaryDesc=Definieren Sie hier alle Defaultwerte. Sie können die vordefinierten Werte mit ihren eigenen ergänzen. MiscellaneousDesc=Alle anderen sicherheitsrelevanten Parameter werden hier definiert. @@ -402,6 +507,7 @@ ExpenseReportsIkSetup=Modul Spesenabrechnungen (Milles Index) einrichten ExpenseReportsRulesSetup=Modul Spesenabrechnungen (Regeln) einrichten ExpenseReportNumberingModules=Modul Spesenabrechnung (Numerierung) YouMayFindNotificationsFeaturesIntoModuleNotification=Du kannst automatische Benachrichtigungen im Modul "Benachrichtigungen" festlegen und verwalten. +ListOfFixedNotifications=List of Fixed Notifications ConfFileMustContainCustom=Zur Installation eines externen Modules speichern Sie die Modul-Dateien in Verzeichnis %s. Damit Dolibarr dieses Verzeichniss verwendet, musst du in der Setupdatei conf.php die Optionen
$dolibarr_main_url_root_alt auf
$dolibarr_main_url_root_alt="/custom" oder
'%s/custom'; hinzufügen oder anpassen. LinkColor=Linkfarbe MinimumNoticePeriod=Kündigungsfrist (Ihre Kündigung muss vor dieser Zeit erfolgen) @@ -446,5 +552,8 @@ NoNewEmailToProcess=Ich habe keinen neuen E-Mails (die zu den Filtern passen) ab RecordEvent=E-Mail Ereignisse NbOfEmailsInInbox=Anzahl E-Mails im Quellverzeichnis ResourceSetup=Modul Ressourcen einrichten +UseSearchToSelectResource=Zeige eine Suchmaske für Ressourcen, statt eine Drop-down - Liste +DisabledResourceLinkUser=Verknüpfungsmöglichkeit zwischen Ressource und Benutzer unterbinden. +DisabledResourceLinkContact=Verknüpfungsmöglichkeit zwischen Ressource und Kontakt unterbinden. ConfirmUnactivation=Bestätige das Zurücksetzen des Moduls. ExportSetup=Modul Daten-Export einrichten diff --git a/htdocs/langs/de_CH/agenda.lang b/htdocs/langs/de_CH/agenda.lang index ceec4e4ec1a..c53b0758424 100644 --- a/htdocs/langs/de_CH/agenda.lang +++ b/htdocs/langs/de_CH/agenda.lang @@ -11,6 +11,7 @@ AgendaAutoActionDesc=Gib hier an, welche Ereignisse automatisch in den Kalender AgendaSetupOtherDesc=Hier gibst Du die Exportoptionen zu externen Kalendern, wie Google Calendar oder Thunderbird an. EventRemindersByEmailNotEnabled=Benachrichtigungen sind in den Moduleinstellungen deaktiviert (%s). NewCompanyToDolibarr=Partner %s erzeugt +COMPANY_DELETEInDolibarr=Partner %s gelöscht. MemberModifiedInDolibarr=Mitglied %s bearbeitet MemberResiliatedInDolibarr=Mitlglied %s geschlossen. MemberSubscriptionAddedInDolibarr=Abonnement %s für Mitlglied %s hinzugefügt @@ -37,6 +38,7 @@ EXPENSE_REPORT_REFUSEDInDolibarr=Spesenabrechnung %s zurückgewiesen PROJECT_MODIFYInDolibarr=Projekt %s bearbeitet TICKET_CREATEInDolibarr=Ticket %s erzeugt TICKET_MODIFYInDolibarr=Ticket %s bearbeitet +TICKET_CLOSEInDolibarr=Ticket %s geschlossen. TICKET_DELETEInDolibarr=Ticket %s gelöscht AgendaModelModule=Vorlagen zum Ereignis AgendaUrlOptionsNotAdmin=logina=!%s ,zum Aktionen, die nicht vom Benutzer %s sind, anzuzeigen. diff --git a/htdocs/langs/de_CH/boxes.lang b/htdocs/langs/de_CH/boxes.lang index 477ecc4581a..154ca19a7eb 100644 --- a/htdocs/langs/de_CH/boxes.lang +++ b/htdocs/langs/de_CH/boxes.lang @@ -9,6 +9,7 @@ BoxLastActions=Neueste Aktionen BoxLastMembers=Neueste Mitglieder BoxFicheInter=Neueste Arbeitseinsätze BoxTitleLastRssInfos=%s neueste News von %s +BoxTitleLastModifiedProspects=Interessenten: zuletzt %s geändert BoxTitleLastFicheInter=%s zuletzt bearbietet Eingriffe BoxLastExpiredServices=%s älteste Kontakte mit aktiven abgelaufenen Leistungen BoxTitleLastActionsToDo=%s neueste Aktionen zu erledigen @@ -18,6 +19,5 @@ BoxGoodCustomers=Guter Kunde LastRefreshDate=Datum der letzten Aktualisierung NoRecordedCustomers=Keine erfassten Kunden NoRecordedContacts=Keine erfassten Kontakte -NoRecordedProspects=Keine erfassten Leads NoRecordedInterventions=Keine verzeichneten Einsätze LastXMonthRolling=%s letzte Monate gleitend diff --git a/htdocs/langs/de_CH/categories.lang b/htdocs/langs/de_CH/categories.lang index 2146cad9197..691489c9b61 100644 --- a/htdocs/langs/de_CH/categories.lang +++ b/htdocs/langs/de_CH/categories.lang @@ -8,11 +8,13 @@ AddIn=Einfügen in Classify=Einstufen CategoriesArea=Schlagwörter / Kategorien ProductsCategoriesArea=Schlagwörter / Kategorien für Produkte und Dienstleistungen +SuppliersCategoriesArea=Bereich für Lieferanten-Tags / Kategorien CustomersCategoriesArea=Schlagwörter / Kategorien für Kunden MembersCategoriesArea=Schlagwörter / Kategorien für Mitglieder ContactsCategoriesArea=Schlagwörter / Kategorien für Kontakte AccountsCategoriesArea=Schlagwörter / Kategorien für Konten ProjectsCategoriesArea=Schlagwörter / Kategorien für Projekte +UsersCategoriesArea=Benutzerschlagworte und -kategorien SubCats=Unterkategorien CatList=Liste der Schlagwörter / Kategorien NewCategory=Neues Schlagwort / Neue Kategorie @@ -25,6 +27,7 @@ ImpossibleAddCat=Das Schlagwort / die Kategorie %s kann nicht hinzugefügt werde ObjectAlreadyLinkedToCategory=Das Element ist bereits mit dieser Kategorie verknüpft. ProductIsInCategories=Produkt/Leistung ist mit folgenden Schlagwörtern / Kategorien verknüpft CompanyIsInCustomersCategories=Dieser Partner ist mit folgenden Kunden- Schlagwörtern / Kategorien verknüpft. +CompanyIsInSuppliersCategories=Dieser Partner ist mit folgenden Lieferanten- Schlagwörtern / Kategorien verknüpft. MemberIsInCategories=Dieses Mitglied ist mit folgenden Mitglieder- Schlagwörtern / Kategorien verknüpft ContactIsInCategories=Dieser Kontakt ist mit folgenden Kontakte- Schlagwörtern / Kategorien verknüpft. ProductHasNoCategory=Dieses Produkt oder diese Leistung ist nicht verschlagwortet oder kategoriesiert. @@ -40,19 +43,25 @@ ContentsNotVisibleByAllShort=Private Inhalte DeleteCategory=Lösche Schlagwort / Kategorie ConfirmDeleteCategory=Bist du sicher, dass du das Schlagwort resp. die Kategorie löschen willst? NoCategoriesDefined=Kein Schlagwort oder keine Kategorie definiert +SuppliersCategoryShort=Lieferanten-Tag / Kategorie CustomersCategoryShort=Kundenschlagworte / -kategorien ProductsCategoryShort=Produktschlagworte / -kategorien MembersCategoryShort=Mitgliederschlagworte / -kategorien +SuppliersCategoriesShort=Lieferanten-Tags / Kategorien CustomersCategoriesShort=Kundenschlagworte / -kategorien ProspectsCategoriesShort=Leadschlagworte / -kategorien +CustomersProspectsCategoriesShort=Kund./Interess. Tags / Kategorien ProductsCategoriesShort=Produktschlagworte / -kategorien MembersCategoriesShort=Mitgliederschlagworte / -kategorien ContactCategoriesShort=Kontaktkschlagworte / -kategorien AccountsCategoriesShort=Kontenschlagworte / -kategorien ProjectsCategoriesShort=Projektschlagworte / -kateorien +UsersCategoriesShort=Benutzerschlagworte und -kategorien +ThisCategoryHasNoSupplier=Mit dieser Kategorie ist kein Lieferant verknüpft. ThisCategoryHasNoAccount=Dieser Kategorie sind keine Konten zugewiesen. ThisCategoryHasNoProject=Mit dieser Kategorie ist kein Projekt verknüpft. CategId=Schlagwort / Kategorie ID +CatSupList=Liste der Lieferantenschlagworte / -kategorien CatCusList=Liste der Kunden-/ Interessentenschlagworte / -kategorien CatProdList=Liste der Produktschlagworte / -kategorien CatMemberList=Liste der Mitgliederschlagworte / -kategorien @@ -64,6 +73,7 @@ CatProJectLinks=Verknüpfungen zwischen Projekten und Schlagwörtern / Kategorie ExtraFieldsCategories=Ergänzende Eigenschaften CategoriesSetup=Suchwörter/Kategorien Einrichten CategorieRecursiv=Automatisch mit übergeordnetem Schlagwort / Kategorie verbinden +CategorieRecursivHelp=Wenn aktiviert, wird das Produkt auch zur übergeordneten Kategorie zugewiesen, wenn es einer Unterkategorie zugewiesen wird. AddProductServiceIntoCategory=Folgendes Produkt / folgende Leistung hinzufügen ShowCategory=Zeige Schlagwort / Kategorie ChooseCategory=Wähle die Kategorie. diff --git a/htdocs/langs/de_CH/commercial.lang b/htdocs/langs/de_CH/commercial.lang index 3cc56c712d1..d0f7a56779e 100644 --- a/htdocs/langs/de_CH/commercial.lang +++ b/htdocs/langs/de_CH/commercial.lang @@ -1,14 +1,21 @@ # Dolibarr language file - Source file is en_US - commercial Commercial=Vertrieb CommercialArea=Vertriebs - Übersicht +DeleteAction=Löschen eines Ereignis NewAction=Neue/r Termin/Aufgabe ConfirmDeleteAction=Willst du dieses Ereignis wirklich löschen? CardAction=Ereignisse Übersicht ActionOnCompany=Verknüpfte Firma TaskRDVWith=Treffen mit %s +ShowTask=Zeige Aufgabe +ShowAction=Ereignisse anzeigen SaleRepresentativesOfThirdParty=Vertriebsmitarbeiter des Partners +ShowCustomer=Zeige Kunden +ShowProspect=Zeige Interessent LastDoneTasks=Die neuesten %s erledigten Aufgaben. StatusActionDone=Abgeschlossen +ActionAC_FAX=Fax versenden +ActionAC_PROP=Angebot senden ActionAC_EMAIL_IN=E-Mail Eingang ActionAC_RDV=Treffen ActionAC_INT=Eingriff vor Ort @@ -17,6 +24,9 @@ ActionAC_CLO=Schliessen ActionAC_COM=Kundenbestellung per Post verschicken ActionAC_SUP_ORD=Lieferantenbestellung per Post senden ActionAC_SUP_INV=Lieferantenrechnung per Post senden +Stats=Verkaufsstatistik +StatusProsp=Interessenten Status +NoLimit=Kein Limit ToOfferALinkForOnlineSignature=Link zur Digitalen Unterschrift WelcomeOnOnlineSignaturePage=Willkommen auf der Seite zum Offerten von %s zu aktzeptieren. ThisScreenAllowsYouToSignDocFrom=Hier kannst du die Offerte akzeptieren, unterzeichen oder zurückweisen. diff --git a/htdocs/langs/de_CH/companies.lang b/htdocs/langs/de_CH/companies.lang index 1565f2d23e9..bbfe4ef8af3 100644 --- a/htdocs/langs/de_CH/companies.lang +++ b/htdocs/langs/de_CH/companies.lang @@ -5,7 +5,6 @@ ConfirmDeleteCompany=Willst du diesen Geschäftspartner und alle damit verbunden ConfirmDeleteContact=Willst du diesen Kontakt und alle damit verbundenen Informationen wirklich löschen? MenuNewThirdParty=Erzeuge Geschäftspartner MenuNewCustomer=Erzeuge Kunde -MenuNewProspect=Erzeuge Lead MenuNewSupplier=Erzeuge Lieferant NewCompany=Erzeuge Unternehmen (Lead / Kunde / Lieferant) NewThirdParty=Erzeuge Geschäftspartner (Lead / Kunde / Lieferant) @@ -16,10 +15,12 @@ IdThirdParty=Geschäftspartner ID IdCompany=Unternehmens ID IdContact=Kontakt ID ThirdPartyContact=Geschäftspartner-Kontakt +Companies=Unternehmen CountryIsInEEC=EU - Staat PriceFormatInCurrentLanguage=Währungsanzeige dieser Sprache ThirdPartyName=Name des Geschäftspartners ThirdPartyEmail=E-Mail des Geschäftspartners +ThirdPartyProspectsStats=Interessenten Statistik ThirdPartyType=Typ des Geschäftspartners ToCreateContactWithSameName=Erzeuge einen Kontakt mit den selben Angaben, wie der Geschäftspartner. Meistens (auch wenn der Partner eine natürliche Person ist), braucht es das nicht. ReportByMonth=Monatsbericht @@ -27,6 +28,7 @@ ReportByCustomers=Kundenbericht PostOrFunction=Position NatureOfThirdParty=Typ des Geschäftspartners Region-State=Land / Region +CountryCode=Ländercode PhoneShort=Telefon No_Email=E-Mail kampagnen ablehnen DefaultLang=Standardsprache @@ -37,6 +39,7 @@ CopyAddressFromSoc=Übernehme die Adresse vom Geschäftspartner ThirdpartyNotCustomerNotSupplierSoNoRef=Hoppla, der Partner ist weder Kunde noch Lieferant, keine Objekte zum Verknüpfen verfügbar. ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Hoppla, der Partner ist weder Kunde noch Lieferant, keine Rabatte verfügbar. PaymentBankAccount=Bankkonto für Zahlung +OverAllInvoices=Rechnungen OverAllSupplierProposals=Generelle Preisanfragen LocalTax1IsUsed=Zweite Steuer verwenden LocalTax2IsUsed=Dritte Steuer nutzen @@ -73,29 +76,56 @@ ProfId3LU=Id. Prof. 3 ProfId4LU=Id. Prof. 4 ProfId5LU=Id. Prof. 5 ProfId6LU=Id. Prof. 6 +ProfId5MA=Id prof. 5 (C.I.C.E) ProfId4NL=- ProfId2PT=Prof Id 2 (Social Security Number) ProfId3PT=Prof Id 3 (Commercial Record-Nummer) ProfId4PT=Prof Id 4 (Konservatorium) ProfId2TN=Prof Id 2 (Geschäftsjahr matricule) ProfId3TN=Prof Id 3 (Douane-Code) +ProfId1US=Employer Identification Number (FEIN) ProfId2US=Id. Prof. 6 ProfId3US=Id. Prof. 6 ProfId4US=Id. Prof. 6 ProfId5US=Id. Prof. 6 ProfId6US=Id. Prof. 6 ProfId1RU=Prof ID 1 (OGRN) -ProspectCustomer=Lead / Kunde +ProfId3DZ=TIN – Steuer-Identifikationsnummer (EU) +VATIntra=MWST - Nummer +VATIntraShort=MWST - Nummer +VATReturn=MWST Rückerstattung CustomerCard=Kundenkarte CustomerRelativeDiscountShort=Rabatt rel. CustomerAbsoluteDiscountShort=Rabatt abs. CompanyHasNoRelativeDiscount=Dieser Kunde hat standardmässig keinen relativen Rabatt +HasRelativeDiscountFromSupplier=Dieser Lieferant gibt standardmässig %s%% Rabatt. +HasNoRelativeDiscountFromSupplier=Du hast keinen Standardrabatt bei diesem Lieferanten. +CompanyHasAbsoluteDiscount=Dieser Kunde hat noch Rabatt-Gutschriften über %s %s +CompanyHasDownPaymentOrCommercialDiscount=Dieser Kunde hat noch Rabatt-Gutschriften über %s %s +HasNoAbsoluteDiscountFromSupplier=Du hast keine Gutschriften von diesem Lieferanten übrig. +HasAbsoluteDiscountFromSupplier=Du hast bei diesem Lieferanten noch %s %s Gutschriften (Gutscheine oder Anzahlungen) zur Verfügung. +HasDownPaymentOrCommercialDiscountFromSupplier=Du hast bei diesem Lieferanten noch %s %s Gutschriften (kaufmännisch, Anzahlungen) zur Verfügung. +HasCreditNoteFromSupplier=Du hast Gutscheine über %s%s von diesem Lieferanten. +CustomerAbsoluteDiscountAllUsers=Absolute Kundenrabatte (von allen Vertretern gewährt) +CustomerAbsoluteDiscountMy=Absolute Kundenrabatte (von dir gewährt) +SupplierAbsoluteDiscountAllUsers=Absolute Lieferantenrabatte (von allen Vertretern angegeben) +SupplierAbsoluteDiscountMy=Absolute Lieferantenrabatte (von dir selbst eingegeben) +AddContact=Kontakt erstellen +AddContactAddress=Kontakt/Adresse erstellen ContactId=Kontakt ID +FromContactName=Name NoContactDefinedForThirdParty=Für diesen Geschäftspartner ist kein Kontakt eingetragen NoContactDefined=Kein Kontakt vorhanden AddThirdParty=Geschäftspartner erstellen +CustomerCodeDesc=Kundennummer, eindeutig für jeden Kunden +SupplierCodeDesc=Lieferantennummer, eindeutig für jeden Lieferanten RequiredIfCustomer=Erforderlich falls Geschäftspartner Kunde oder Interessent ist +RequiredIfSupplier=Erforderlich, wenn der Partner Lieferant ist +ValidityControledByModule=Durch Modul validiert +ListOfThirdParties=Geschäftspartner +ShowCompany=Geschäftspartner anzeigen ShowContact=Zeige Kontaktangaben +ContactsAllShort=Alle (Kein Filter) ContactForOrdersOrShipments=Bestellungs- oder Lieferkontakt ContactForProposals=Offertskontakt NoContactForAnyOrder=Kein Kontakt für Bestellungen @@ -103,16 +133,60 @@ NoContactForAnyOrderOrShipments=Dieser Kontakt ist kein Kontakt für eine Bestel NoContactForAnyProposal=Kein Kontakt für Offerte NoContactForAnyContract=Kein Kontakt für Verträge NoContactForAnyInvoice=Dieser Kontakt ist kein Kontakt für jegliche Rechnung +NewContactAddress=Neuer Kontakt / Adresse +MyContacts=Meine Kontakte +ThisUserIsNot=Dieser Benutzer ist weder ein Lead, Kunde, noch Lieferant +VATIntraCheckDesc=Der Link %s frägt die MWST - Nummer im Europäischen Verzeichnis (VIES) ab. Deshalb muss die MWST Nummer das Länderprefix haben. +VATIntraCheckableOnEUSite=Innergemeinschaftliche MWST Nummer überprüfen (EU Website) +VATIntraManualCheck=MWST - Nummer manuell überprüfen lassen: %s. +NorProspectNorCustomer=Weder Interessent noch Kunde +ContactPrivate=Privat +ContactPublic=Öffentlich OthersNotLinkedToThirdParty=Andere, nicht mit einem Geschäftspartner verknüpfte Projekte TE_GROUP=Grossunternehmen +TE_WHOLE=Distributor +StatusProspect-1=Nicht kontaktieren +StatusProspect0=Noch kein Kontaktversuch +StatusProspect3=Erfolgreich kontaktiert +ProspectsByStatus=Leads nach Status +NoParentCompany=Keine Mutterfirma ContactNotLinkedToCompany=Kontakt keinem Geschäftspartner zugeordnet DolibarrLogin=Dolibarr Benutzername +ExportDataset_company_1=Geschäftspartner und ihre Eigenschaften +ExportDataset_company_2=Kontakte und deren Eigenschaften +ImportDataset_company_1=Geschäftspartner und deren Eigenschaften +ImportDataset_company_2=Zusätzliche Partnerkontakte und -attribute +ImportDataset_company_3=Partner - Bankverbindungen +ImportDataset_company_4=Partnervertreter (Weise Vertreter Partnern zu) +PriceLevel=Preisniveau +PriceLevelLabels=Preisniveau - Labels ConfirmDeleteFile=Sind Sie sicher dass Sie diese Datei löschen möchten? AllocateCommercial=Vertriebsmitarbeiter zuweisen FiscalMonthStart=Ab Monat des Geschäftsjahres +YouMustAssignUserMailFirst=Für E-Mail - Benachrichtigung hinterlegst du bitte zuerst eine E-Mail Adresse im Benutzerprofil. YouMustCreateContactFirst=Sie müssen erst E-Mail-Kontakte beim Geschäftspartner anlegen, um E-Mail-Benachrichtigungen hinzufügen zu können. +ListSuppliersShort=Liste Lieferanten +ListProspectsShort=Liste Interessenten +ListCustomersShort=Kundenliste +LastModifiedThirdParties=Die letzten %s bearbeiteten Partner +UniqueThirdParties=Anzahl Geschäftspartner InActivity=Offen +ActivityCeased=Inaktiv +ThirdPartyIsClosed=Der Partner ist inaktiv. OutstandingBillReached=Kreditlimit erreicht +OrderMinAmount=Mindestbestellmenge +MonkeyNumRefModelDesc=Generiere die Kundennummer im Format %syymm-nnnn und die Lieferantennummer als %syymm-nnnn. (y=Jahr; m=Monat; n=fortlaufende Zahl). MergeOriginThirdparty=Geschäftspartner duplizieren (Geschäftspartner, den Sie löschen möchten) MergeThirdparties=Zusammenführen von Geschäftspartnern +ConfirmMergeThirdparties=Willst du diesen Partner wirklich mit dem aktuellen Verbinden?\nAlle verknüpften Objekte werden dabei übernommen und dann der gewählte Partner gelöscht. +ThirdpartiesMergeSuccess=Ich habe die Partner erfolgreich zusammengeführt. SaleRepresentativeLogin=Login des Verkaufsmitarbeiters +SaleRepresentativeFirstname=Vorname des Vertreters +SaleRepresentativeLastname=Nachname des Vertreters +ErrorThirdpartiesMerge=Hoppla, da ist etwas beim Löschen des Partners schief gelaufen...\nAber ich habe die Verknüpfung Rückgängig gemacht.\nBitte prüfe die Logs. +NewCustomerSupplierCodeProposed=Diese Nummer ist schon im Gebrauch. Wähle eine andere. +PaymentTypeCustomer=Kundenzahlung +PaymentTermsCustomer=Zahlungsbedingungen für Kunden +PaymentTypeSupplier=Lieferantenzahlung +PaymentTermsSupplier=Zahlungsbedingungen für Lieferanten +MulticurrencyUsed=Benutze Multiwährungsfähigkeit diff --git a/htdocs/langs/de_CH/deliveries.lang b/htdocs/langs/de_CH/deliveries.lang index 857d52bd6b2..102ee9f3a78 100644 --- a/htdocs/langs/de_CH/deliveries.lang +++ b/htdocs/langs/de_CH/deliveries.lang @@ -1,5 +1,16 @@ # Dolibarr language file - Source file is en_US - deliveries -DeliveryRef=Ref. Lieferung +DeliveryRef=Lieferungsnummer +DeliveryCard=Lieferschein +DeliveryOrder=Lieferauftrag +CreateDeliveryOrder=Erzeuge Lieferschein DeliveryStateSaved=Lieferstatus gespeichert +ValidateDeliveryReceiptConfirm=Bist du sicher, dass du diesen Lieferschein frei geben willst? +DeleteDeliveryReceiptConfirm=Bist du sicher, dass du den Lieferschein %s löschen willst? +TrackingNumber=Sendungsverfolgungsnummer +DeliveryNotValidated=Die Lieferung ist nicht freigegeben StatusDeliveryValidated=Erhalten +NameAndSignature=Name / Unterschrift +Deliverer=Lieferant +ErrorStockIsNotEnough=Der Lagerbestand ist zu klein ShowReceiving=Lieferschein anzeigen +NonExistentOrder=Nicht vorhandene Bestellung diff --git a/htdocs/langs/de_CH/dict.lang b/htdocs/langs/de_CH/dict.lang index 7bf16b52f02..027873e4cf9 100644 --- a/htdocs/langs/de_CH/dict.lang +++ b/htdocs/langs/de_CH/dict.lang @@ -1,6 +1,13 @@ # Dolibarr language file - Source file is en_US - dict +CountryGB=England CountryBY=Weissrussland CountryHM=Heard und McDonald Inseln +CountryKG=Kirgisien +CountryMM=Myanmar +CountryTC=Turks- und Caicosinseln +CountryAE=Vereinigte Arabische Emirate +CurrencyCentEUR=Cents +DemandReasonTypeSRC_SRC_CUSTOMER=Einkaufskontakt ExpCycloCat=Motorfahrrad ExpMotoCat=Töff ExpAuto3CV=3 PS diff --git a/htdocs/langs/de_CH/errors.lang b/htdocs/langs/de_CH/errors.lang index b3df9508811..a4be143308a 100644 --- a/htdocs/langs/de_CH/errors.lang +++ b/htdocs/langs/de_CH/errors.lang @@ -1,12 +1,29 @@ # Dolibarr language file - Source file is en_US - errors +ErrorBadEMail=E-Mail%s ist nicht korrekt. ErrorBadValueForParamNotAString=Ungültiger Wert für ihre Parameter. Das passiert normalerweise, wenn die Übersetzung fehlt. +ErrorFailToCopyDir=Konnte das Verzeichnis '%s' nicht nach '%s' kopieren. ErrorFailToRenameFile=Konnte die Datei '%s' nicht in '%s' umzubenennen. +ErrorFailToMakeReplacementInto=Ich konnte die Ersetzungen nicht in die Datei '%s' schreiben... +ErrorFailToGenerateFile=Ich konnte die Datei '%s' nicht erzeugen... +ErrorBadThirdPartyName=Ungültige Geschäftspartner - Bezeichnung +ErrorBadBarCodeSyntax=Falsche Syntax für den Strichcode. Vielleicht hast du eine falsche Strichcode - Art eingestellt oder eine falsche Strichcodemaske definiert? +ErrorBarCodeRequired=Strichcode erforderlich +ErrorBarCodeAlreadyUsed=Diesen Strichcode verwende ich bereits. +ErrorBadSupplierCodeSyntax=Die eingegebene Lieferanten Nr. ist unzulässig. +ErrorSupplierCodeRequired=Lieferanten-Nr. erforderlich +ErrorSupplierCodeAlreadyUsed=Diese Lieferanten Nr. ist bereits vergeben. ErrorBadValueForParameter=Ungültiger Wert '%s' für Parameter '%s' +ErrorUserCannotBeDelete=Ich kann diesen Benutzer nicht löschen... Vieleicht ist er noch mit anderen Dolibarr - Objekten verknüpft? ErrorFieldsRequired=Ein oder mehrere erforderliche Felder wurden nicht ausgefüllt- +ErrorSubjectIsRequired=Bitte gib einen E-Mail - Betreff an. ErrorFileSizeTooLarge=Die Grösse der gewählten Datei übersteigt den zulässigen Maximalwert. ErrorSizeTooLongForIntType=Die Grösse überschreitet das Maximum für den Typ 'int' (%s Ziffern maximal) ErrorSizeTooLongForVarcharType=Die Grösse überschreitet das Maximum für den Typ 'string' (%s Zeichen maximal) ErrorNoValueForCheckBoxType=Bitte Wert für Checkbox-Liste eingeben +ErrorFieldCanNotContainSpecialNorUpperCharacters=Das Feld %s darf keine Sonderzeichen, Grossbuchstaben enthalten. Ebenfalls darf es nicht allein aus Ziffern bestehen. +ErrorFieldMustHaveXChar=Das Feld %s muss mindestens %s Zeichen haben. +ErrorCantSaveADoneUserWithZeroPercentage=Ereignisse können nicht mit Status "Nicht begonnen" gespeichert werden, wenn das Feld "Erledigt durch" schon ausgefüllt ist. +ErrorPleaseTypeBankTransactionReportName=Gib hier den Bankkontoauszug im Format YYYYMM oder YYYYMMDD an, in den du diesen Eintrag eintragen willst. ErrorModuleSetupNotComplete=Das Setup des Moduls scheint unvollständig zu sein. Führen Sie nochmal das Setup aus um das Modul zu vervollständigen. ErrorProdIdAlreadyExist=%s wurde bereits einem Geschäftspartner zugewiesen ErrorForbidden3=Es scheint keine ordnungsgemässe Authentifizierung für das System vorzuliegen. Bitte werfen Sie einen Blick auf die Systemdokumentation um die entsprechenden Authentifizierungsoptionen zu verwalten (htaccess, mod_auth oder andere...) diff --git a/htdocs/langs/de_CH/interventions.lang b/htdocs/langs/de_CH/interventions.lang index 04bf236f996..4daf054e896 100644 --- a/htdocs/langs/de_CH/interventions.lang +++ b/htdocs/langs/de_CH/interventions.lang @@ -4,6 +4,7 @@ Interventions=Arbeitseinsätze InterventionCard=Einsatzkarte NewIntervention=Neuer Einsatz AddIntervention=Einsatz erstellen +ChangeIntoRepeatableIntervention=Umstellen auf wiederkehrender Arbeitseinsatz ListOfInterventions=Liste der Arbeitseinsätze ActionsOnFicheInter=Aktionen zum Einsatz LastInterventions=Letzte %s Einsätze @@ -19,6 +20,8 @@ ConfirmValidateIntervention=Bist du sicher, dass du den Arbeitseinsatz %s ConfirmModifyIntervention=Bist du sicher, dass du diesen Arbeitseinsatz ändern willst? ConfirmDeleteInterventionLine=Bist du sicher, dass du diese Einsatzposition löschen willst? ConfirmCloneIntervention=Bist du sicher, dass du diesen Einsatz duplizieren willst? +NameAndSignatureOfInternalContact=Name / Unterschrift Ausführender +NameAndSignatureOfExternalContact=Name / Unterschrift Kunde DocumentModelStandard=Standard-Dokumentvorlage für Arbeitseinsätze InterventionCardsAndInterventionLines=Einsatz und Einsatzpositionen InterventionClassifyBilled=Auf "verrechnet" setzten @@ -26,6 +29,7 @@ InterventionClassifyUnBilled=Auf "nicht verrechnet" setzen InterventionClassifyDone=Auf "erledigt" setzen StatusInterInvoiced=Verrechnet SendInterventionRef=Einsatz %s einreichen +SendInterventionByMail=Einsatz per E-Mail versenden InterventionCreatedInDolibarr=Einsatz %s erstellt InterventionValidatedInDolibarr=Einsatz %s freigegeben InterventionModifiedInDolibarr=Einsatz %s geändert @@ -43,6 +47,8 @@ UseServicesDurationOnFichinter=Benutze Servicezeiten für Arbeitseinsätze aus B UseDurationOnFichinter=Versteckt das Feld "Dauer" auf der Einsatzkarte UseDateWithoutHourOnFichinter=Versteckt Stunden und Minuten im Datumsfeld von Einsatzkarten InterventionStatistics=Einsatzstatistik +NbOfinterventions=Anzahl Einsatzkarten +NumberOfInterventionsByMonth=Einsatzkarten pro Monat (Nach Freigabedatum) AmountOfInteventionNotIncludedByDefault=Der Aufwand für Einsätze ist im Normalfall nicht im Profit eingerechnet. Meistens wird das über die Zeiterfassung geregelt.\nDamit die Einsatz - Aufwände im Profit sichtbar werden, fügst du Unter Einstellungen -> Weitere Einstellungen die Option 'PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT' hinzu und setzest diese auf den Wert 1 InterId=Einsatz ID InterRef=Einsatz Ref. diff --git a/htdocs/langs/de_CH/main.lang b/htdocs/langs/de_CH/main.lang index 4064e5e9ec4..cbe2c53512c 100644 --- a/htdocs/langs/de_CH/main.lang +++ b/htdocs/langs/de_CH/main.lang @@ -131,6 +131,7 @@ AmountLT2=MwSt.-Betrag 3 PriceQtyMinHTCurrency=Mindestmengenpreis exkl. MWST Percentage=Prozentangabe TotalHTShort=Total exkl. MWST +TotalHT100Short=Total 100%% (exkl.) TotalHTShortCurrency=Total exkl. MWST in Originalwährung TotalTTCShort=Totalbetrag (inkl. MwSt.) TotalHT=Total exkl. Steuern @@ -164,7 +165,6 @@ ActionRunningNotStarted=Nicht begonnen ActionRunningShort=In Bearbeitung LatestLinkedEvents=Die neuesten %s verknüpften Vorgänge CompanyFoundation=Firma / Organisation -Accountant=Berater ContactsForCompany=Ansprechpartner/Adressen dieses Geschäftspartners ContactsAddressesForCompany=Ansprechpartner / Adressen zu diesem Geschäftspartner AddressesForCompany=Adressen für den Geschäftspartner @@ -268,9 +268,15 @@ ConfirmMassDeletionQuestion=Bist du sicher, dass du diese %s Einträge löschen ClassifyBilled=Verrechnet ClassifyUnbilled=Auf "Nicht verrechnet" setzen Progress=Fortschritt +ProgressShort=Fortschr. BackOffice=Dolibarr ExportFilteredList=Exportiere gefilterte Positionen ExportList=Exportiere Positionen +IncludeDocsAlreadyExported=Beziehe bereits exportierte Dokumente mit ein +ExportOfPiecesAlreadyExportedIsEnable=Bereits exportierte Dateien erneut exportieren ist "Ein". +ExportOfPiecesAlreadyExportedIsDisable=Bereits exportierte Dateien erneut exportieren ist "Aus". +AllExportedMovementsWereRecordedAsExported=Alles erfolgreich exportiert:-) +NotAllExportedMovementsCouldBeRecordedAsExported=Nicht alles konnte korrekt exportiert werden:-( Calendar=Kalender GroupBy=Sortieren nach ViewFlatList=Einfache Liste anzeigen @@ -279,6 +285,7 @@ SomeTranslationAreUncomplete=Du siehst ungenaue Übersetzungen oder unvollständ DirectDownloadLink=Direkter externer Downloadlink DirectDownloadInternalLink=Direkter Downloadlink, wenn eingeloggt und die Rechte vorhanden sind. ActualizeCurrency=Aktualisiere Währung +ModuleBuilder=Modul und Applikationsentwicklungsumgebung SetMultiCurrencyCode=Setze Währung BulkActions=Stapelverarbeitungen ClickToShowHelp=Clicke hier für Kontexthilfe. @@ -328,3 +335,10 @@ YouAreCurrentlyInSandboxMode=Wir sind aktuell im %s "sandbox" Modus Inventory=Inventar AnalyticCode=Analysecode TMenuMRP=UVP +ShowMoreInfos=Mehr Informationen +NoFilesUploadedYet=Bitte lade zuerst ein Dokument hoch. +SeePrivateNote=Privatnotiz Einblenden +PaymentInformation=Zahlungsinformationen +ValidFrom=Gültig von +ValidUntil=Gültig bis +NoRecordedUsers=Keine Benutzer diff --git a/htdocs/langs/de_CH/members.lang b/htdocs/langs/de_CH/members.lang index f1606b59016..27d4cf7781a 100644 --- a/htdocs/langs/de_CH/members.lang +++ b/htdocs/langs/de_CH/members.lang @@ -19,6 +19,7 @@ MemberType=Mitgliederart MembersTypes=Mitgliederarten MemberStatusDraft=Entwürfe (benötigen Bestätigung) MemberStatusDraftShort=Entwurf +NewSubscriptionDesc=Mit diesem Formular können Sie Ihr Abonnement als neues Mitglied der Stiftung registrieren. Wenn Sie Ihr Abonnement verlängern möchten (falls Sie bereits Mitglied sind), wenden Sie sich stattdessen per E-Mail an den Stiftungsrat. %s. Subscriptions=Abonnemente ListOfSubscriptions=Liste der Abonnemente NewMemberType=Neue Mitgliederart @@ -26,6 +27,15 @@ SubscriptionRequired=Abonnement notwendig VoteAllowed=Abstimmen erlaubt ShowSubscription=Abonnement anzeigen CardContent=Inhalt Ihrer Mitgliederkarte +DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Betreff der Benachrichtigungs-E-Mail bei automatischer Anmeldung eines Gastes +DescADHERENT_AUTOREGISTER_NOTIF_MAIL=Inhalt der Benachrichtigungs-E-Mail, bei automatischer Anmeldung eines Gastes +DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=E-Mail-Vorlage zum Senden von E-Mails an ein Mitglied bei Mitglieder-Autoabonnements +DescADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION=E-Mail-Vorlage zum Senden von E-Mails an ein Mitglied bei der Mitgliederüberprüfung +DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=E-Mail-Vorlage zum Senden einer E-Mail an ein Mitglied bei der Aufnahme eines neuen Abonnements +DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=E-Mail-Vorlage zum Senden einer E-Mail-Erinnerung, wenn das Abonnement abläuft +DescADHERENT_EMAIL_TEMPLATE_CANCELATION=E-Mail-Vorlage zum Senden von E-Mails an ein Mitglied bei Kündigung der Mitgliedschaft +DescADHERENT_MAIL_FROM=Absender E-Mail für automatische E-Mails +ShowTypeCard=Typ anzeigen '%s' HTPasswordExport=htpassword Datei generieren MembersAndSubscriptions=Mitglieder und Abonnemente SubscriptionPayment=Zahlung des Mitgliedsbeitrags diff --git a/htdocs/langs/de_CH/orders.lang b/htdocs/langs/de_CH/orders.lang index 586ad1cdaef..259d17f8c74 100644 --- a/htdocs/langs/de_CH/orders.lang +++ b/htdocs/langs/de_CH/orders.lang @@ -1,9 +1,12 @@ # Dolibarr language file - Source file is en_US - orders OrdersArea=Kundenauftrags-Übersicht OrderCard=Bestell-Karte +CustomersOrders=Kundenaufträge CancelOrder=Bestellung verwerfen +ShowOrder=Zeige Bestellung NoOrder=Keine Bestellung CloseOrder=Bestellung schliessen +OrderMode=Bestellweise OtherOrders=Bestellungen Anderer Error_OrderNotChecked=Keine zu verrechnenden Bestellungen ausgewählt OrderByEMail=E-Mail diff --git a/htdocs/langs/de_CH/other.lang b/htdocs/langs/de_CH/other.lang index ec3c0d29495..036a386eede 100644 --- a/htdocs/langs/de_CH/other.lang +++ b/htdocs/langs/de_CH/other.lang @@ -1,11 +1,16 @@ # Dolibarr language file - Source file is en_US - other NumberingShort=Nr +ToolsDesc=Alle Werkzeuge, die nicht in anderen Menüeinträgen enthalten sind, werden hier gruppiert.
Alle Werkzeuge können über das linke Menü aufgerufen werden. Notify_COMPANY_SENTBYMAIL=Von Geschäftspartner-Karte gesendete Mails Notify_FICHEINTER_VALIDATE=Eingriff freigegeben Notify_FICHINTER_ADD_CONTACT=Kontakt zu Einsatz hinzugefügt Notify_FICHINTER_SENTBYMAIL=Service per E-Mail versendet TotalSizeOfAttachedFiles=Gesamtgrösse der angehängten Dateien/Dokumente MaxSize=Maximalgrösse +PredefinedMailContentContract=__(Hallo)__\n\n\n__(Mit freundlichen Grüssen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentThirdparty=__ (Hallo) __ __ (Mit freundlichen Grüssen) __ __USER_SIGNATURE__ +PredefinedMailContentContact=__ (Hallo) __ __ (Mit freundlichen Grüssen) __ __USER_SIGNATURE__ +PredefinedMailContentUser=__ (Hallo) __ __ (Mit freundlichen Grüssen) __ __USER_SIGNATURE__ ChooseYourDemoProfil=Bitte wählen Sie das Demo-Profil das Ihrem Einsatzgebiet am ehesten entspricht ModifiedById=Letzte Änderung durch User ModifiedByLogin=Letzte Änderung durch Userlogin diff --git a/htdocs/langs/de_CH/paybox.lang b/htdocs/langs/de_CH/paybox.lang index 5106ba52404..d6f6464804c 100644 --- a/htdocs/langs/de_CH/paybox.lang +++ b/htdocs/langs/de_CH/paybox.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - paybox ThisIsInformationOnPayment=Informationen zu der vorzunehmenden Zahlunge -YourPaymentHasBeenRecorded=Hiermit Bestätigen wir die Zahlung ausgeführt wurde. Vielen Dank. +YourPaymentHasBeenRecorded=Diese Seite bestätigt, dass Ihre Zahlung erfasst wurde. Vielen Dank. PAYBOX_CGI_URL_V2=Url für das Paybox Zahlungsmodul "CGI Modul" VendorName=Name des Anbieters diff --git a/htdocs/langs/de_CH/printing.lang b/htdocs/langs/de_CH/printing.lang index d8736396f5c..6ef248bee04 100644 --- a/htdocs/langs/de_CH/printing.lang +++ b/htdocs/langs/de_CH/printing.lang @@ -1,6 +1,7 @@ # Dolibarr language file - Source file is en_US - printing Module64000Desc=Direktdrucksystem aktivieren PrintingSetup=Direktdrucksystem einrichten +PrintingDesc=Dieses Modul kann Dokumente direkt an einen Drucker schicken. Der Druckbutton erscheint in entsprechenden Modulen. MenuDirectPrinting=Direktdruck - Jobs PrintingDriverDesc=Konfigurationsvariablen für den Druckertreiber. FileWasSentToPrinter=Die Datei %s wurde an den Drucker gesendet @@ -9,8 +10,10 @@ NoActivePrintingModuleFound=Ich habe keinen Druckertreiber gefunden. Bitte kontr PleaseSelectaDriverfromList=Wähle einen Treiber aus der Liste. PleaseConfigureDriverfromList=Richte den gewählten Druckertreiber ein. PRINTGCP_INFO=Google OAuth Schnittstelle einrichten +PrintGCPDesc=Dieser Treiber schickt Dokumente via Google Cloud Print an einen Drucker. GCP_OwnerName=Besitzer GCP_connectionStatus=On- oder Offline? +PrintIPPDesc=Dieser Treiber schickt Dokumente direkt an einen CUPS - Drucker in einer Linuxumgebung. PRINTIPP_USER=Benutzer NoDefaultPrinterDefined=Du hast keinen Standarddrucker defininert. DefaultPrinter=Standarddrucker @@ -20,6 +23,7 @@ IPP_State_reason1=Statusgrund1 IPP_BW=schwarz / weiss IPP_Media=Druckmedium DirectPrintingJobsDesc=Hier siehst du die laufenden Druckjobs aller verfügbaren Drucker. +GoogleAuthNotConfigured=Google OAuth ist nicht konfiguriert. Aktiviere das Modul OAuth und trage dort Google ID / Secret ein. GoogleAuthConfigured=Die Google OAuth - Zugangsdaten sind im Modul OAuth eingetragen. PrintingDriverDescprintgcp=Konfigurationsvariablen für Google Cloud Print. PrintingDriverDescprintipp=Cups Driver - Konfigurationsvariablen diff --git a/htdocs/langs/de_CH/propal.lang b/htdocs/langs/de_CH/propal.lang index 7d3aff55e84..a663ec20a9e 100644 --- a/htdocs/langs/de_CH/propal.lang +++ b/htdocs/langs/de_CH/propal.lang @@ -1,10 +1,14 @@ # Dolibarr language file - Source file is en_US - propal +ProposalsOpened=Offene Angebote ProposalCard=Angebotskarte +NewPropal=Neues Angebot Prospect=Lead LastPropals=%s neueste Angebote ProposalsStatistics=Angebote Statistiken PropalsOpened=Offen +PropalStatusSigned=Unterzeichnet (ist zu verrechnen) PropalsToClose=Zu schliessende Angebote +ListOfProposals=Liste der Angebote DefaultProposalDurationValidity=Standardmässige Gültigkeitsdatuer (Tage) AvailabilityPeriod=Verfügbarkeitszeitraum SetAvailability=Verfügbarkeitszeitraum definieren diff --git a/htdocs/langs/de_CH/users.lang b/htdocs/langs/de_CH/users.lang index 174caca5cdd..ab3eb40ac4c 100644 --- a/htdocs/langs/de_CH/users.lang +++ b/htdocs/langs/de_CH/users.lang @@ -37,3 +37,4 @@ DisabledInMonoUserMode=Im Wartungsmodus deaktiviert UserAccountancyCode=Buchhaltungskonto zum Benutzer DateEmployment=Datum der Anstellung DateEmploymentEnd=Datum des Austrittes +CantDisableYourself=Du kannst dein eigenes Benutzerkonto nicht löschen. diff --git a/htdocs/langs/de_CH/website.lang b/htdocs/langs/de_CH/website.lang index 82ca7baa8f4..c01a50b4b9f 100644 --- a/htdocs/langs/de_CH/website.lang +++ b/htdocs/langs/de_CH/website.lang @@ -4,3 +4,4 @@ WEBSITE_CSS_URL=URL zu externer CSS Datei ViewSiteInNewTab=Webauftritt in neuem Tab anzeigen SetAsHomePage=Als Startseite definieren WebsiteAccounts=Webseitenkonten +BackToListOfThirdParty=Zurück zur Liste für Partner diff --git a/htdocs/langs/de_DE/accountancy.lang b/htdocs/langs/de_DE/accountancy.lang index f9e9e1e9380..36aaddcf541 100644 --- a/htdocs/langs/de_DE/accountancy.lang +++ b/htdocs/langs/de_DE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Buchhaltungskonten in Wartestellung DONATION_ACCOUNTINGACCOUNT=Buchhaltungskonto für die Buchung von Spenden @@ -302,9 +303,9 @@ InitAccountancyDesc=Auf dieser Seite kann ein Sachkonto für Artikel und Dienstl DefaultBindingDesc=Diese Seite kann verwendet werden, um ein Standardkonto festzulegen, das für die Verknüpfung von Transaktionsdatensätzen zu Lohnzahlungen, Spenden, Steuern und Mwst. verwendet werden soll, wenn kein bestimmtes Konto angegeben wurde. DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. Options=Optionen -OptionModeProductSell=Modus Verkauf -OptionModeProductSellIntra=Mode sales exported in EEC -OptionModeProductSellExport=Mode sales exported in other countries +OptionModeProductSell=Modus Verkäufe Inland +OptionModeProductSellIntra=Modus Verkäufe in EU/EWG +OptionModeProductSellExport=Modus Verkäufe Export (ausserhalb EU/EWG) OptionModeProductBuy=Modus Einkäufe OptionModeProductSellDesc=Alle Artikel mit Sachkonten für Vertrieb anzeigen OptionModeProductSellIntraDesc=Show all products with accounting account for sales in EEC. @@ -317,9 +318,9 @@ WithoutValidAccount=Mit keinem gültigen dedizierten Konto WithValidAccount=Mit gültigen dedizierten Konto ValueNotIntoChartOfAccount=Dieser Wert für das Buchhaltungs-Konto existiert nicht im Kontenplan AccountRemovedFromGroup=Account removed from group -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Verkauf Inland +SaleExport=Verkauf Export (ausserhalb EWG) +SaleEEC=Verkauf in EU/EWG ## Dictionary Range=Bereich von Sachkonten diff --git a/htdocs/langs/de_DE/admin.lang b/htdocs/langs/de_DE/admin.lang index 7006ed146e8..c3449107abb 100644 --- a/htdocs/langs/de_DE/admin.lang +++ b/htdocs/langs/de_DE/admin.lang @@ -149,7 +149,7 @@ SystemToolsAreaDesc=In diesem Bereich finden Sie die Verwaltungsfunktionen. Verw Purge=Bereinigen PurgeAreaDesc=Auf dieser Seite können Sie alle von Dolibarr erzeugten oder gespeicherten Dateien (temporäre Dateien oder alle Dateien im Verzeichnis %s ) löschen. Die Verwendung dieser Funktion ist in der Regel nicht erforderlich. Es wird als Workaround für Benutzer bereitgestellt, deren Dolibarr von einem Anbieter gehostet wird, der keine Berechtigungen zum löschen von Dateien anbietet, die vom Webserver erzeugt wurden. PurgeDeleteLogFile=Löschen der Protokolldateien, einschließlich %s, die für das Syslog-Modul definiert wurden (kein Risiko Daten zu verlieren) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Löschen Sie alle temporären Dateien (kein Datenverlustrisiko). Hinweis: Das Löschen erfolgt nur, wenn das temporäre Verzeichnis vor über 24 Stunden erstellt wurde. PurgeDeleteTemporaryFilesShort=temporäre Dateien löschen PurgeDeleteAllFilesInDocumentsDir=Alle Dateien im Verzeichnis: %s löschen:
Dadurch werden alle erzeugten Dokumente löschen, die sich auf verknüpfte (Dritte, Rechnungen usw....), Dateien, die in das ECM Modul hochgeladen wurden, Datenbank, Backup, Dumps und temporäre Dateien beziehen. PurgeRunNow=Jetzt bereinigen @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Kontrollkästchen / Dropdownliste aus DB-Tabelle (meh ExtrafieldLink=Verknüpftes Objekt ComputedFormula=Berechnetes Feld ComputedFormulaDesc=Sie können hier eine Formel eingeben, indem Sie andere Eigenschaften des Objekts oder eine beliebige PHP-Codierung verwenden, um einen dynamisch berechneten Wert zu erhalten. Sie können alle PHP-kompatiblen Formeln verwenden, einschließlich des "?" Bedingungsoperator und folgendes globales Objekt: $ db, $ conf, $ langs, $ mysoc, $ user, $ object .
WARNUNG : Möglicherweise sind nur einige Eigenschaften von $ object verfügbar. Wenn Sie Eigenschaften benötigen, die nicht geladen sind, holen Sie sich das Objekt wie im zweiten Beispiel in Ihre Formel.
Wenn Sie ein berechnetes Feld verwenden, können Sie keinen Wert von der Schnittstelle eingeben. Wenn ein Syntaxfehler vorliegt, gibt die Formel möglicherweise auch nichts zurück.

Beispiel der Formel:
$ object-> id <10? round ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2)

Beispiel zum erneuten Laden eines Objekts
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ obj-> id: ($ obj-> rowid? $ obj-> rowid: $ object-> id ))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Ein weiteres Beispiel für eine Formel zum Erzwingen des Ladens eines Objekts und seines übergeordneten Objekts:
(($ reloadedobj = neue Aufgabe ($ db)) && ($ reloadedobj-> Abrufen ($ object-> id)> 0) && ($ secondloadedobj = neues Projekt ($ db)) && ($ secondloadedobj-> Abrufen ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Übergeordnetes Projekt nicht gefunden' +Computedpersistent=Speichere berechnetes Feld +ComputedpersistentDesc=Berechnete Extrafelder werden in der Datenbank gespeichert, dennoch wird ihr Wert nur dann neu berechnet wenn sich das Objekt zu diesem Feld ändert. Falls das berechnete Feld von anderen Objekten oder globalen Daten abhängt, kann sein Wert falsch sein! ExtrafieldParamHelpPassword=Wenn Sie dieses Feld leer lassen, wird dieser Wert unverschlüsselt gespeichert (das Feld darf nur mit einem Stern auf dem Bildschirm ausgeblendet werden).
Stellen Sie 'auto'; ein, um die Standardverschlüsselungsregel zum Speichern des Kennworts in der Datenbank zu verwenden (dann ist der gelesene Wert nur der Hash, keine Möglichkeit, den ursprünglichen Wert abzurufen). ExtrafieldParamHelpselect=Die Liste der Werte muss aus Zeilen mit dem Format Schlüssel, Wert bestehen (wobei Schlüssel nicht '0' sein darf)

zum Beispiel:
1, value1
2, value2
Code3, Wert3
...

Damit die Liste von einer anderen ergänzenden Attributliste abhängt:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Um die Liste von einer anderen Liste abhängig zu machen:
1, value1 | parent_list_code : parent_key
2, value2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Die Liste der Werte muss aus Zeilen mit dem Format Schlüssel, Wert bestehen (wobei Schlüssel nicht '0' sein darf)

zum Beispiel:
1, value1
2, value2
3, value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Die Liste der Werte muss aus Zeilen mit dem Format Schl ExtrafieldParamHelpsellist=Die Liste der Werte stammt aus einer Tabelle
Syntax: table_name: label_field: id_field :: filter
Beispiel: c_typent: libelle: id :: filter

- idfilter ist notwendigerweise ein primärer int-Schlüssel
- Filter kann ein einfacher Test sein (z. B. aktiv = 1), um nur den aktiven Wert anzuzeigen
Sie können $ ID $ auch in Filtern verwenden, bei denen es sich um die aktuelle ID des aktuellen Objekts handelt
Verwenden Sie $ SEL $, um ein SELECT im Filter durchzuführen
Wenn Sie nach Extrafeldern filtern möchten, verwenden Sie die Syntax extra.fieldcode = ... (wobei field code der Code des Extrafelds ist)

Damit die Liste von einer anderen ergänzenden Attributliste abhängt:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Um die Liste von einer anderen Liste abhängig zu machen:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliothek zum Erstellen von PDF-Dateien LocalTaxDesc=Einige Länder erheben möglicherweise zwei oder drei Steuern auf jede Rechnungsposition. Wenn dies der Fall ist, wählen Sie den Typ für die zweite und dritte Steuer und ihren Steuersatz. Mögliche Typen sind:
1: auf Produkte und Dienstleistungen ohne Mehrwertsteuer wird eine örtliche Steuer erhoben (die örtliche Steuer wird auf den Betrag ohne Mehrwertsteuer berechnet)
2: Für Produkte und Dienstleistungen einschließlich Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag + die Hauptsteuer berechnet).
3: auf Produkte ohne Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag ohne Mehrwertsteuer berechnet)
4: Für Produkte einschließlich Mehrwertsteuer wird eine lokale Steuer erhoben (die Mehrwertsteuer wird auf den Betrag + die Haupt-Mehrwertsteuer berechnet).
5: auf Dienstleistungen ohne Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag ohne Mehrwertsteuer berechnet)
6: Für Dienstleistungen einschließlich Mehrwertsteuer wird eine lokale Steuer erhoben (die lokale Steuer wird auf den Betrag und die Steuer berechnet). SMS=SMS @@ -624,13 +627,13 @@ Module20000Desc=Verwalten (erstellen, ablehnen, genehmigen) Sie die Urlaubsantr Module39000Name=Chargen- und Seriennummernverwaltung Module39000Desc=Verwaltung von Chargen- und Seriennummern sowie von Haltbarkeits- und Verkaufslimitdatum Module40000Name=Mehrere Währungen -Module40000Desc=Use alternative currencies in prices and documents +Module40000Desc=Nutze alternative Währungen bei Preisen und in Dokumenten Module50000Name=PayBox Module50000Desc=Bieten Sie Ihren Kunden Onlinezahlungen via PayBox an (Kredit- / Debitkarten). Dies kann verwendet werden, um Ihren Kunden Ad-hoc-Zahlungen oder Zahlungen in Bezug auf ein bestimmtes Dolibarr-Objekt (Rechnung, Bestellung usw.) zu ermöglichen. Module50100Name=einfaches POS-Kassensystem Module50100Desc=einfaches POS Kassenmodul (Simple POS) Module50150Name=Kassensystem TakePOS -Module50150Desc=Point of Sale module TakePOS (touchscreen POS). +Module50150Desc=Kassenterminal "TakePOS" (Kassenteminal mit Touchscreen) Module50200Name=PayPal Module50200Desc=Bieten Sie Kunden eine PayPal-Online-Zahlungsseite (PayPal-Konto oder Kredit- / Debitkarten). Dies kann verwendet werden, um Ihren Kunden Ad-hoc-Zahlungen oder Zahlungen in Bezug auf ein bestimmtes Dolibarr-Objekt (Rechnung, Bestellung usw.) zu ermöglichen. Module50300Name=Stripe @@ -668,7 +671,7 @@ Permission32=Produkte/Leistungen erstellen/bearbeiten Permission34=Produkte/Leistungen löschen Permission36=Projekte/Leistungen exportieren Permission38=Produkte exportieren -Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet) +Permission41=Lesen Sie Projekte und Aufgaben (gemeinsames Projekt und Projekte, für die ich Kontakt habe). Kann auch die für mich oder meine Hierarchie verbrauchte Zeit für zugewiesene Aufgaben eingeben (Arbeitszeittabelle) Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks Permission44=Projekte löschen (gemeinsame Projekte und Projekte, in denen ich Ansprechpartner bin) Permission45=Projekte exportieren @@ -719,7 +722,7 @@ Permission147=Statistiken einsehen Permission151=Bestellung mit Zahlart Lastschrift Permission152=Lastschriftaufträge erstellen/bearbeiten Permission153=Bestellungen mit Zahlart Lastschrift übertragen -Permission154=Record Credits/Rejections of direct debit payment orders +Permission154=Gutschriften / Ablehnungen von Lastschrift-Zahlungsaufträgen erfassen Permission161=Verträge/Abonnements einsehen Permission162=Verträge/Abonnements erstellen/bearbeiten Permission163=Service/Abonnement in einem Vertrag aktivieren @@ -819,9 +822,9 @@ Permission532=Leistungen erstellen/bearbeiten Permission534=Leistungen löschen Permission536=Versteckte Leistungen einsehen/verwalten Permission538=Leistungen exportieren -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Spenden anzeigen Permission702=Spenden erstellen/bearbeiten Permission703=Spenden löschen @@ -852,7 +855,7 @@ Permission1182=Lieferantenbestellungen anzeigen Permission1183=Lieferantenbestellungen erstellen/bearbeiten Permission1184=Lieferantenbestellungen freigeben Permission1185=Lieferantenbestellungen bestätigen/genehmigen -Permission1186=Order purchase orders +Permission1186=Lieferantenbestellungen übermitteln Permission1187=Acknowledge receipt of purchase orders Permission1188=Delete purchase orders Permission1190=Approve (second approval) purchase orders @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1134,7 +1137,7 @@ MAIN_MAX_DECIMALS_TOT=Maximale Anzahl an Dezimalstellen für Gesamtsummen MAIN_MAX_DECIMALS_SHOWN=Maximal auf dem Bildschirm angezeigte Anzahl an Dezimalstellen für Preise (Fügen Sie ... nach dieser Nummer ein, wenn Sie ... sehen wollen, falls ein Bildschirmpreis abgeschnitten wurde. MAIN_ROUNDING_RULE_TOT=Step of rounding range (for countries where rounding is done on something other than base 10. For example, put 0.05 if rounding is done by 0.05 steps) UnitPriceOfProduct=Nettostückpreis -TotalPriceAfterRounding=Total price (excl/vat/incl tax) after rounding +TotalPriceAfterRounding=Gesamtpreis (Netto/USt./Brutto) gerundet ParameterActiveForNextInputOnly=Die Einstellungen werden erst bei der nächsten Eingabe wirksam NoEventOrNoAuditSetup=No security event has been logged. This is normal if Audit has not been enabled in the "Setup - Security - Events" page. NoEventFoundWithCriteria=No security event has been found for this search criteria. @@ -1831,7 +1834,7 @@ TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta i BaseCurrency=Unternehmen-Basiswährung (Kann in den Einsttelungen unter Unternehmen verändert werden) WarningNoteModuleInvoiceForFrenchLaw=Dieses Modul %s erfüllt die Französische Gesetzgebung (Loi Finance 2016). WarningNoteModulePOSForFrenchLaw=Modul %s entspricht der französischen Gesetzgebung (Loi Finance 2016), weil das Modul "Unveränderbare Logs" automatisch aktiviert wird. -WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. +WarningInstallationMayBecomeNotCompliantWithLaw=Sie versuchen, das externe Modul %s zu installieren. Mit der Aktivierung eines externen Moduls vertrauen Sie dem Herausgeber des Moduls und Sie sind sich sicher, dass Ihr System weiterhin die Gesetze Ihres Landes (%s) erfüllt. Falls das Modul Funktionalität bietet, die in Ihrem Land nicht erlaubt sind dann setzen Sie damit illegale Software ein und sind dafür voll verantwortlich. MAIN_PDF_MARGIN_LEFT=Linker Rand im PDF MAIN_PDF_MARGIN_RIGHT=Rechter Rand im PDF MAIN_PDF_MARGIN_TOP=Oberer Rand im PDF @@ -1851,31 +1854,31 @@ ChartLoaded=Chart of account loaded SocialNetworkSetup=Einstellungen vom Modul für Soziale Medien EnableFeatureFor=Aktiviere Features für %s VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. -SwapSenderAndRecipientOnPDF=Swap sender and recipient address position on PDF documents -FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only. Also an URL parameter action=create or action=edit must be set OR page name must end with 'new.php' to trigger this feature. -EmailCollector=Email collector +SwapSenderAndRecipientOnPDF=Tausche Position der Absender- und Empfängeradresse in PDF-Dokumenten +FeatureSupportedOnTextFieldsOnly=Warnung: Diese Funktion unterstützt nur Textfelder. Außerdem muss der URL-Parameter action=create oder action=edit gesetzt werden ODER der Seitenname muss mit 'new.php' enden, damit diese Funktion ausgelöst wird. +EmailCollector=eMail-Collector EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some records automatically (like leads). -NewEmailCollector=New Email Collector -EMailHost=Host of email IMAP server -MailboxSourceDirectory=Mailbox source directory -MailboxTargetDirectory=Mailbox target directory -EmailcollectorOperations=Operations to do by collector -MaxEmailCollectPerCollect=Max number of emails collected per collect +NewEmailCollector=Neuer eMail-Colletor +EMailHost=Hostname des IMAP-Servers +MailboxSourceDirectory=Quellverzechnis des eMail-Kontos +MailboxTargetDirectory=Zielverzechnis des eMail-Kontos +EmailcollectorOperations=Aktivitäten, die der eMail-Collector ausführen soll +MaxEmailCollectPerCollect=Maximale Anzahl an einzusammelnden eMails je Collect-Vorgang CollectNow=Jetzt abrufen -ConfirmCloneEmailCollector=Are you sure you want to clone the Email collector %s ? -DateLastCollectResult=Date latest collect tried -DateLastcollectResultOk=Date latest collect successfull -LastResult=Latest result -EmailCollectorConfirmCollectTitle=Email collect confirmation -EmailCollectorConfirmCollect=Do you want to run the collection for this collector now ? +ConfirmCloneEmailCollector=Sind Sie sicher, dass Sie den eMail-Collektor %s duplizieren möchten? +DateLastCollectResult=Datum des letzten eMail-Collect-Versuchs +DateLastcollectResultOk=Datum des letzten, erfolgreichen eMail-Collect +LastResult=Letztes Ergebnis +EmailCollectorConfirmCollectTitle=eMail-Collect-Bestätigung +EmailCollectorConfirmCollect=Möchten Sie den Einsammelvorgang für diesen eMail-Collector starten? NoNewEmailToProcess=Keine neue e-Mail (passende Filter) zum Verarbeiten NothingProcessed=Nicht ausgeführt -XEmailsDoneYActionsDone=%s emails qualified, %s emails successfully processed (for %s record/actions done) -RecordEvent=Record email event -CreateLeadAndThirdParty=Create lead (and third party if necessary) -CreateTicketAndThirdParty=Create ticket (and third party if necessary) +XEmailsDoneYActionsDone=%seMails qualifiziert, %seMails erfolgreich verarbeitet (für %sAufzeichnungen/Aktionen durchgeführt) +RecordEvent=eMail-Ereignis aufzeichnen/registrieren +CreateLeadAndThirdParty=als potentiellen Verkaufskontakt anlegen +CreateTicketAndThirdParty=als (Support-)Ticket anlegen CodeLastResult=Letzter Resultatcode -NbOfEmailsInInbox=Number of emails in source directory +NbOfEmailsInInbox=Anzahl eMails im Quellverzeichnis LoadThirdPartyFromName=Load third party searching on %s (load only) LoadThirdPartyFromNameOrCreate=Load third party searching on %s (create if not found) WithDolTrackingID=Dolibarr Tracking ID gefunden @@ -1922,6 +1925,6 @@ IFTTT_DOLIBARR_ENDPOINT_SECUREKEY=Sicherheitsschlüssel zum Schutz der Endpunkt- IFTTTDesc=Dieses Modul wurde entwickelt, um Ereignisse auf IFTTT auszulösen und/oder eine Aktion auf externe IFTTT-Trigger auszuführen. UrlForIFTTT=URL-Endpunkt für IFTTT YouWillFindItOnYourIFTTTAccount=Sie finden es auf Ihrem IFTTTT-Konto. -EndPointFor=End point for %s : %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +EndPointFor=Endpunkt für %s:%s +DeleteEmailCollector=Lösche eMail-Collector +ConfirmDeleteEmailCollector=Sind Sie sicher, dass Sie diesen eMail-Collector löschen wollen? diff --git a/htdocs/langs/de_DE/bills.lang b/htdocs/langs/de_DE/bills.lang index 3a2f1f00e1f..a5809f83189 100644 --- a/htdocs/langs/de_DE/bills.lang +++ b/htdocs/langs/de_DE/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma-Rechnung InvoiceProFormaDesc=Die Proforma-Rechnung ist das Abbild einer echten Rechnung, hat aber keinen buchhalterischen Wert. InvoiceReplacement=Ersatzrechnung InvoiceReplacementAsk=Ersatzrechnung für Rechnung -InvoiceReplacementDesc=Ersatzrechnungen dienen dem Storno und vollständigen Ersatz einer Rechnung ohne bereits erfolgtem Zahlungseingang.

Hinweis: Rechnungen mit Zahlungseingang können nicht ersetzt werden. Falls noch nicht geschlossen, werden ersetzte Rechnungen automatisch als 'Aufgegeben geschlossen' markiert. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Gutschrift InvoiceAvoirAsk=Gutschrift zur Rechnungskorrektur InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/de_DE/companies.lang b/htdocs/langs/de_DE/companies.lang index eb7a7196675..9492897f2b6 100644 --- a/htdocs/langs/de_DE/companies.lang +++ b/htdocs/langs/de_DE/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute Lieferantenrabatte (von allen Benutzer SupplierAbsoluteDiscountMy=Absolute Lieferantenrabatte (durch sie erfasst) DiscountNone=Keine Vendor=Lieferant +Supplier=Lieferant AddContact=Kontakt anlegen AddContactAddress=Kontakt/Adresse anlegen EditContact=Kontakt bearbeiten diff --git a/htdocs/langs/de_DE/other.lang b/htdocs/langs/de_DE/other.lang index b79e8d73ab4..96d28a4bd00 100644 --- a/htdocs/langs/de_DE/other.lang +++ b/htdocs/langs/de_DE/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Anzahl Kundenrechnungen NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Anzahl von Einheiten in Angeboten NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Anzahl von Einheiten in Kundenrechnungen NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Serviceauftrag %s wurde freigegeben EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/de_DE/website.lang b/htdocs/langs/de_DE/website.lang index a06c0d64103..ec04253430d 100644 --- a/htdocs/langs/de_DE/website.lang +++ b/htdocs/langs/de_DE/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Bisher wurde noch keine Website erstellt. Erstellen sie GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/de_DE/workflow.lang b/htdocs/langs/de_DE/workflow.lang index 84ac37001a7..2303c72355e 100644 --- a/htdocs/langs/de_DE/workflow.lang +++ b/htdocs/langs/de_DE/workflow.lang @@ -1,20 +1,20 @@ # Dolibarr language file - Source file is en_US - workflow WorkflowSetup=Workflow Moduleinstellungen -WorkflowDesc=This module provides some automatic actions. By default, the workflow is open (you can do things in the order you want) but here you can activate some automatic actions. +WorkflowDesc=Dieses Modul liefert verschiedene, automatisierte Aktionen. Standardmäßig ist der Workflow flexibel (d.h. Sie sind frei in der Reihenfolge der Abarbeitung) aber über diesen Modul können Sie einige Aktionen automatisiert ablaufen lassen. ThereIsNoWorkflowToModify=Es sind keine Workflow-Änderungen möglich mit den aktivierten Modulen. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a sales order after a commercial proposal is signed (the new order will have same amount as the proposal) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Erstellt automatisch eine Bestellung, nachdem ein Angebot als "unterzeichnet" markiert wurde. Die neue Bestellung hat dann den selben Wert wie das Angebot. +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Erstellt automatisch eine Kundenrechnung, nachdem ein Angebot als "unterzeichnet" markiert wurde. Diese neue Kundenrechnung lautet über den selben Betrag wie das Angebot. descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Erstelle automatisch eine Kundenrechnung, nachdem der Vertrag bestätigt wurde. -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a sales order is closed (the new invoice will have same amount as the order) +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Erstellt automatisch eine Kundenrechnung, nachdem eine Bestellung geschlossen wurde. Die neue Kundenrechnung lautet über den selben Betrag wie die Bestellung. # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Setzt das entsprechende Angebot auf "abgerechnet", sofern die Kundenbestellung auf "abgerechnet" gesetzt wurde und sofern der Betrag in der Bestellung gleich dem dem Betrag im Angebot ist. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Setzt das verknüpfte Angebot auf "abgerechnet", sofern die Kundenrechnung erstellt wurde und sofern der Rechnungsbetrag identisch zur Angebotsumme ist. +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Kennzeichne die verknüpfte Kundenbestellung(en) als fakturiert ( = in Rechnung gestellt) sofern die Kundenrechnung als geprüft markiert wurde und die Beträge übereinstimmen. +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Kennzeichne die verknüpfte Kundenbestellung(en) als fakturiert ( = in Rechnung gestellt) sofern die Kundenrechnung als bezahlt markiert wurde und die Beträge übereinstimmen. +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Kennzeichne die verknüpften Aufträge als geliefert wenn die Lieferung erfolgt ist (und die Liefermenge der Bestellmenge entspricht). # Autoclassify purchase order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Setzt das verknüpfte Lieferantenangebot auf "abgerechnet", sofern die Lieferanrenrechnung erstellt wurde und sofern der Rechnungsbetrag identisch zur Angebotsumme ist. +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Kennzeichne die verknüpfte Einkaufsbestellung als abgerechnet wenn die Lieferantenrechnung erstellt wurde und wenn die Beträge überein stimmen. AutomaticCreation=automatische Erstellung AutomaticClassification=Automatische Klassifikation diff --git a/htdocs/langs/el_GR/accountancy.lang b/htdocs/langs/el_GR/accountancy.lang index cda38d3b569..c14fa13dcc9 100644 --- a/htdocs/langs/el_GR/accountancy.lang +++ b/htdocs/langs/el_GR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/el_GR/admin.lang b/htdocs/langs/el_GR/admin.lang index dd5792b897c..8a86a6f41c5 100644 --- a/htdocs/langs/el_GR/admin.lang +++ b/htdocs/langs/el_GR/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Βιβλιοθήκη δημιουργίας PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Δημιουργία / τροποποίηση δωρεές Permission703=Διαγραφή δωρεές @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/el_GR/bills.lang b/htdocs/langs/el_GR/bills.lang index 3ff30a5d4fc..23c3e7a1d6b 100644 --- a/htdocs/langs/el_GR/bills.lang +++ b/htdocs/langs/el_GR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Προτιμολόγιο InvoiceProFormaDesc=Το Προτιμολόγιο είναι η εικόνα ενός πραγματικού τιμολογίου, χωρίς όμως να έχει χρηματική αξία InvoiceReplacement=Τιμολόγιο Αντικατάστασης InvoiceReplacementAsk=Αντικατάσταση τιμολογίου με -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Πιστωτικό τιμολόγιο InvoiceAvoirAsk=Πιστωτικό τιμολόγιο για την διόρθωση τιμολογίου InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/el_GR/companies.lang b/htdocs/langs/el_GR/companies.lang index a6a81513340..67fadea2908 100644 --- a/htdocs/langs/el_GR/companies.lang +++ b/htdocs/langs/el_GR/companies.lang @@ -28,7 +28,7 @@ AliasNames=Ψευδώνυμο (εμπορικό, εμπορικό σήμα, ...) AliasNameShort=Alias Name Companies=Εταιρίες CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Καμία Vendor=Vendor +Supplier=Vendor AddContact=Δημιουργία επαφής AddContactAddress=Δημιουργία επαφής/διεύθυνση EditContact=Επεξεργασία επαφής diff --git a/htdocs/langs/el_GR/other.lang b/htdocs/langs/el_GR/other.lang index 53b5bc5a0cc..7d46bb0c404 100644 --- a/htdocs/langs/el_GR/other.lang +++ b/htdocs/langs/el_GR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Η %s παρέμβαση έχει επικυρωθεί. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/el_GR/website.lang b/htdocs/langs/el_GR/website.lang index cf8c218f6a8..1307d469d99 100644 --- a/htdocs/langs/el_GR/website.lang +++ b/htdocs/langs/el_GR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/en_AU/admin.lang b/htdocs/langs/en_AU/admin.lang index f792eabe51a..7b0034e0ce8 100644 --- a/htdocs/langs/en_AU/admin.lang +++ b/htdocs/langs/en_AU/admin.lang @@ -3,5 +3,7 @@ OldVATRates=Old GST rate NewVATRates=New GST rate DictionaryVAT=GST Rates or Sales Tax Rates OptionVatMode=GST due +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications LinkColor=Colour of links OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_CA/admin.lang b/htdocs/langs/en_CA/admin.lang index e5e33b73dd6..93fc98ac3e2 100644 --- a/htdocs/langs/en_CA/admin.lang +++ b/htdocs/langs/en_CA/admin.lang @@ -2,5 +2,7 @@ LocalTax1Management=PST Management CompanyZip=Postal code LDAPFieldZip=Postal code +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications FormatZip=Postal code OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_GB/accountancy.lang b/htdocs/langs/en_GB/accountancy.lang index ed606456013..ebc1a049f9c 100644 --- a/htdocs/langs/en_GB/accountancy.lang +++ b/htdocs/langs/en_GB/accountancy.lang @@ -83,7 +83,6 @@ ListeMvts=List of transactions ErrorDebitCredit=Debit and Credit fields cannot have values at the same time AddCompteFromBK=Add finance accounts to the group ListAccounts=List of the financial accounts -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. Pcgtype=Group account Pcgsubtype=Subgroup account DescVentilCustomer=View the list of customer invoice lines linked (or not) to a product financial account @@ -115,10 +114,10 @@ ErrorAccountingJournalIsAlreadyUse=This journal is already in use AccountingAccountForSalesTaxAreDefinedInto=Note: Financial account for Sales Tax is defined in menu %s - %s Modelcsv=Example of export Selectmodelcsv=Select an example of export -Modelcsv_FEC=Export FEC (Art. L47 A) ChartofaccountsId=Chart of accounts ID InitAccountancyDesc=This page can be used to create a financial account for products and services that do not have a financial account defined for sales and purchases. DefaultBindingDesc=This page can be used to set a default account for linking transaction records about payments, salaries, donations, taxes and vat when no specific finance account had already been set. +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. OptionModeProductSell=Type of sale OptionModeProductBuy=Type of purchase OptionModeProductSellDesc=Show all products with finance accounts for sales. diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index 29af3e502f6..c5e3e488406 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -46,5 +46,7 @@ DictionaryAccountancyJournal=Finance journals CompanyZip=Postcode LDAPFieldZip=Postcode GenbarcodeLocation=Barcode generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".
For example: /usr/local/bin/genbarcode +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications FormatZip=Postcode OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_IN/admin.lang b/htdocs/langs/en_IN/admin.lang index e3cc80d5cea..02a8712d64f 100644 --- a/htdocs/langs/en_IN/admin.lang +++ b/htdocs/langs/en_IN/admin.lang @@ -13,5 +13,7 @@ ProposalsNumberingModules=Quotation numbering models ProposalsPDFModules=Quotation documents models FreeLegalTextOnProposal=Free text on quotations WatermarkOnDraftProposal=Watermark on draft quotations (none if empty) +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications MailToSendProposal=Customer quotations OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/es_CL/accountancy.lang b/htdocs/langs/es_CL/accountancy.lang index 24bccccfe21..e2157b1e314 100644 --- a/htdocs/langs/es_CL/accountancy.lang +++ b/htdocs/langs/es_CL/accountancy.lang @@ -24,15 +24,20 @@ AssignDedicatedAccountingAccount=Nueva cuenta para asignar InvoiceLabel=Etiqueta de factura OverviewOfAmountOfLinesNotBound=Descripción general de la cantidad de líneas no vinculadas a una cuenta de contabilidad OverviewOfAmountOfLinesBound=Descripción general de la cantidad de líneas ya vinculadas a una cuenta de contabilidad +ConfirmDeleteCptCategory=¿Está seguro de que desea eliminar esta cuenta contable del grupo de cuentas contables? JournalizationInLedgerStatus=Estado de la periodización AlreadyInGeneralLedger=Ya se ha contabilizado en libros mayores NotYetInGeneralLedger=Aún no se ha contabilizado en libros mayores GroupIsEmptyCheckSetup=El grupo está vacío, verifique la configuración del grupo de contabilidad personalizado DetailByAccount=Mostrar detalles por cuenta +AccountWithNonZeroValues=Cuentas con valores distintos de cero. +CountriesInEECExceptMe=Países en EEC excepto %s +AccountantFiles=Documentos contables de exportación MainAccountForCustomersNotDefined=Cuenta de contabilidad principal para los clientes no definidos en la configuración MainAccountForSuppliersNotDefined=Cuenta de contabilidad principal para proveedores no definidos en la configuración MainAccountForUsersNotDefined=Cuenta de contabilidad principal para los usuarios no definidos en la configuración MainAccountForVatPaymentNotDefined=Cuenta de contabilidad principal para el pago de IVA no definido en la configuración +MainAccountForSubscriptionPaymentNotDefined=Cuenta contable principal para el pago de suscripción no definido en la configuración AccountancyArea=Área de contabilidad AccountancyAreaDescActionOnce=Las siguientes acciones generalmente se ejecutan una sola vez o una vez al año ... AccountancyAreaDescActionOnceBis=Deben seguirse los pasos para ahorrarle tiempo en el futuro al sugerirle la cuenta de contabilidad predeterminada correcta al hacer la publicación (registro de escritura en Revistas y Libro mayor) @@ -44,7 +49,9 @@ AccountancyAreaDescVat=PASO %s: Defina cuentas contables para cada tasa de IVA. AccountancyAreaDescDefault=PASO %s: Defina cuentas de contabilidad predeterminadas. Para esto, use la entrada del menú %s. AccountancyAreaDescExpenseReport=PASO %s: Defina las cuentas de contabilidad predeterminadas para cada tipo de informe de gastos. Para esto, use la entrada del menú %s. AccountancyAreaDescSal=PASO %s: Defina cuentas de contabilidad predeterminadas para el pago de salarios. Para esto, use la entrada del menú %s. +AccountancyAreaDescContrib=PASO %s: Defina cuentas de contabilidad predeterminadas para gastos especiales (impuestos diversos). Para esto, use la entrada de menú %s. AccountancyAreaDescDonation=PASO %s: Defina las cuentas de contabilidad predeterminadas para la donación. Para esto, use la entrada del menú %s. +AccountancyAreaDescSubscription=PASO %s: Defina cuentas de contabilidad predeterminadas para la suscripción de miembros. Para esto, use la entrada de menú %s. AccountancyAreaDescMisc=PASO %s: Defina la cuenta predeterminada obligatoria y cuentas de contabilidad predeterminadas para transacciones misceláneas. Para esto, use la entrada del menú %s. AccountancyAreaDescLoan=PASO %s: defina cuentas de contabilidad predeterminadas para préstamos. Para esto, use la entrada del menú %s. AccountancyAreaDescBank=PASO %s: Defina las cuentas de contabilidad y el código del diario para cada banco y cuenta financiera. Para esto, use la entrada del menú %s. @@ -56,20 +63,26 @@ AccountancyAreaDescClosePeriod=PASO %s: Cierre el período para que no podamos r TheJournalCodeIsNotDefinedOnSomeBankAccount=Un paso obligatorio en la configuración no fue completo (diario de códigos de contabilidad no definido para todas las cuentas bancarias) Selectchartofaccounts=Seleccione gráfico de cuentas activo Addanaccount=Agregar cuenta contable +SubledgerAccount=Cuenta auxiliar +SubledgerAccountLabel=Etiqueta de cuenta de libro auxiliar ShowAccountingAccount=Mostrar cuenta contable MenuDefaultAccounts=Cuentas predeterminadas MenuBankAccounts=cuentas bancarias MenuTaxAccounts=Cuentas fiscales MenuExpenseReportAccounts=Cuentas de informe de gastos MenuProductsAccounts=Cuentas de productos +MenuClosureAccounts=Cuentas de cierre +Binding=Vinculante a las cuentas CustomersVentilation=Encuadernación de factura del cliente SuppliersVentilation=Encuadernación de factura del proveedor ExpenseReportsVentilation=Encuadernación del informe de gastos CreateMvts=Crear nueva transacción UpdateMvts=Modificación de una transacción ValidTransaction=Validar transacción +WriteBookKeeping=Registrar transacciones en Ledger Bookkeeping=Libro mayor ObjectsRef=Referencia de objeto de origen +CAHTF=Total vendedor comprado antes de impuestos TotalExpenseReport=Informe de gastos totales InvoiceLines=Líneas de facturas para enlazar InvoiceLinesDone=Líneas de facturas encuadernadas @@ -85,31 +98,44 @@ VentilatedinAccount=Vinculado exitosamente a la cuenta de contabilidad NotVentilatedinAccount=No vinculado a la cuenta de contabilidad XLineSuccessfullyBinded=%s productos / servicios vinculados con éxito a una cuenta de contabilidad XLineFailedToBeBinded=%s productos / servicios no estaban vinculados a ninguna cuenta de contabilidad +ACCOUNTING_LIMIT_LIST_VENTILATION=Número de elementos a enlazar mostrados por página (máximo recomendado: 50) ACCOUNTING_LIST_SORT_VENTILATION_TODO=Comience la clasificación de la página "Encuadernación para hacer" por los elementos más recientes ACCOUNTING_LIST_SORT_VENTILATION_DONE=Comience la clasificación de la página "Encuadernación realizada" por los elementos más recientes ACCOUNTING_LENGTH_DESCRIPTION=Truncar descripción de productos y servicios en listados después de x caracteres (Mejor = 50) ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Truncar formulario de descripción de cuenta de productos y servicios en listados después de x caracteres (Mejor = 50) ACCOUNTING_LENGTH_GACCOUNT=Longitud de las cuentas de contabilidad generales (si establece el valor en 6 aquí, la cuenta '706' aparecerá como '706000' en la pantalla) +ACCOUNTING_LENGTH_AACCOUNT=Longitud de las cuentas contables de terceros (si establece el valor en 6 aquí, la cuenta '401' aparecerá como '401000' en la pantalla) +ACCOUNTING_MANAGE_ZERO=Permite administrar un número diferente de ceros al final de una cuenta contable. Necesitado por algunos países (como Suiza). Si está desactivado (predeterminado), puede configurar los dos parámetros siguientes para solicitar a la aplicación que agregue ceros virtuales. BANK_DISABLE_DIRECT_INPUT=Deshabilitar la grabación directa de transacciones en cuenta bancaria ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Habilitar exportación de borrador en diario +ACCOUNTANCY_COMBO_FOR_AUX=Habilitar la lista combinada para la cuenta subsidiaria (puede ser lenta si tiene muchos terceros) ACCOUNTING_SELL_JOURNAL=Libro de ventas ACCOUNTING_MISCELLANEOUS_JOURNAL=Diario misceláneo ACCOUNTING_EXPENSEREPORT_JOURNAL=Diario del informe de gastos +ACCOUNTING_RESULT_PROFIT=Cuenta contable de resultados (beneficio) +ACCOUNTING_RESULT_LOSS=Cuenta contable de resultados (pérdida) +ACCOUNTING_ACCOUNT_TRANSFER_CASH=Cuenta contable de transferencia bancaria transitoria. ACCOUNTING_ACCOUNT_SUSPENSE=Cuenta de contabilidad de espera DONATION_ACCOUNTINGACCOUNT=Cuenta de contabilidad para registrar donaciones +ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Cuenta contable para registrar suscripciones. ACCOUNTING_PRODUCT_BUY_ACCOUNT=Cuenta de contabilidad por defecto para productos comprados (se usa si no está definido en la hoja del producto) ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Cuenta de contabilidad por defecto para los productos vendidos (utilizada si no está definida en la hoja del producto) +ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Cuenta contable por defecto para los productos vendidos en EEC (usado si no está definido en la hoja del producto) +ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Cuenta contable por defecto para la exportación de productos vendidos fuera de la CEE (se usa si no se define en la hoja del producto) ACCOUNTING_SERVICE_BUY_ACCOUNT=Cuenta de contabilidad por defecto para los servicios comprados (se usa si no se define en la hoja de servicio) ACCOUNTING_SERVICE_SOLD_ACCOUNT=Cuenta de contabilidad por defecto para los servicios vendidos (utilizada si no está definida en la hoja de servicio) LabelAccount=Cuenta LabelOperation=Operación de etiqueta Sens=Significado +LetteringCode=Codigo de letras +JournalLabel=Etiqueta de revista NumPiece=Pieza número TransactionNumShort=Num. transacción AccountingAccountGroupsDesc=Puede definir aquí algunos grupos de cuentas contables. Se usarán para informes de contabilidad personalizados. DeleteMvt=Eliminar líneas de libro mayor DelYear=Año para borrar DelJournal=Diario para eliminar +ConfirmDeleteMvt=Esto eliminará todas las líneas del Libro mayor por año y / o de una revista específica. Se requiere al menos un criterio. FinanceJournal=Diario de finanzas ExpenseReportsJournal=Diario de informes de gastos DescFinanceJournal=Diario financiero que incluye todos los tipos de pagos por cuenta bancaria @@ -120,28 +146,40 @@ ProductAccountNotDefined=Cuenta para producto no definido FeeAccountNotDefined=Cuenta por tarifa no definida BankAccountNotDefined=Cuenta bancaria no definida CustomerInvoicePayment=Pago de factura de cliente +ThirdPartyAccount=Cuenta de terceros NewAccountingMvt=Nueva transacción NumMvts=Numero de transacciones ListeMvts=Lista de movimientos ErrorDebitCredit=Débito y crédito no pueden tener el mismo valor AddCompteFromBK=Agregar cuentas de contabilidad al grupo +ReportThirdParty=Lista de cuenta de terceros +DescThirdPartyReport=Consulte aquí la lista de proveedores y clientes externos y sus cuentas contables. ListAccounts=Lista de cuentas contables -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. +UnknownAccountForThirdparty=Cuenta de terceros desconocida. Usaremos %s +UnknownAccountForThirdpartyBlocking=Cuenta de terceros desconocida. Error de bloqueo +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Cuenta de terceros no definida o tercero desconocido. Usaremos %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Cuenta de terceros no definida o tercero desconocido. Error de bloqueo. +UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Cuenta de terceros desconocida y cuenta de espera no definida. Error de bloqueo PaymentsNotLinkedToProduct=Pago no vinculado a ningún producto / servicio +PcgtypeDesc=El grupo y el subgrupo de cuenta se utilizan como criterios predefinidos de "filtro" y "agrupación" para algunos informes contables. Por ejemplo, 'INGRESOS' o 'GASTOS' se utilizan como grupos para cuentas contables de productos para generar el informe de gastos / ingresos. TotalVente=Volumen de negocios total antes de impuestos TotalMarge=Margen total de ventas DescVentilCustomer=Consulte aquí la lista de líneas de facturación de clientes vinculadas (o no) a una cuenta de contabilidad de producto +DescVentilMore=En la mayoría de los casos, si utiliza productos o servicios predefinidos y configura el número de cuenta en la tarjeta de producto / servicio, la aplicación podrá hacer todo el enlace entre sus líneas de factura y la cuenta contable de su plan de cuentas, solo en un clic con el botón "%s" . Si la cuenta no se configuró en las tarjetas de producto / servicio o si todavía tiene algunas líneas que no están vinculadas a una cuenta, deberá realizar un enlace manual desde el menú " %s ". DescVentilDoneCustomer=Consulte aquí la lista de las líneas de clientes de facturas y su cuenta de contabilidad de productos DescVentilTodoCustomer=Vincular líneas de factura que ya no están vinculadas con una cuenta de contabilidad de producto ChangeAccount=Cambie la cuenta de contabilidad de producto / servicio para líneas seleccionadas con la siguiente cuenta de contabilidad: DescVentilSupplier=Consulte aquí la lista de líneas de facturación de proveedores vinculadas o aún no vinculadas a una cuenta de contabilidad de productos +DescVentilDoneSupplier=Consulte aquí la lista de las líneas de facturas de proveedores y sus cuentas contables. DescVentilTodoExpenseReport=Vincular las líneas de informe de gastos que ya no están vinculadas con una cuenta de contabilidad de tarifas DescVentilExpenseReport=Consulte aquí la lista de líneas de informe de gastos vinculadas (o no) a una cuenta de contabilidad de tasas +DescVentilExpenseReportMore=Si configura una cuenta contable en el tipo de líneas de informe de gastos, la aplicación podrá hacer todo el enlace entre sus líneas de informe de gastos y la cuenta contable de su plan de cuentas, solo con un clic con el botón "%s" . Si la cuenta no se estableció en el diccionario de tarifas o si todavía tiene algunas líneas no vinculadas a ninguna cuenta, deberá realizar un enlace manual desde el menú " %s ". DescVentilDoneExpenseReport=Consulte aquí la lista de las líneas de informes de gastos y su cuenta de contabilidad de tarifas ValidateHistory=Enlazar automáticamente AutomaticBindingDone=Encuadernación automática hecha ErrorAccountancyCodeIsAlreadyUse=No puede eliminar esta cuenta porque está siendo usada MvtNotCorrectlyBalanced=El movimiento no está correctamente equilibrado. Débito = %s | Crédito = %s +Balancing=Equilibrio FicheVentilation=Tarjeta de enlace GeneralLedgerIsWritten=Las transacciones se escriben en el Libro mayor GeneralLedgerSomeRecordWasNotRecorded=Algunas de las transacciones no pueden ser contabilizadas. Si no hay otro mensaje de error, esto es probablemente porque ya estaban en el diario. @@ -151,6 +189,7 @@ ChangeBinding=Cambiar la encuadernación Accounted=Contabilizado en el libro mayor NotYetAccounted=Aún no contabilizado en el libro mayor ApplyMassCategories=Aplicar categorías de masa +AddAccountFromBookKeepingWithNoCategories=Cuenta disponible aún no en el grupo personalizado. CategoryDeleted=La categoría de la cuenta de contabilidad ha sido eliminada AccountingJournals=Libros contables AccountingJournal=Diario de contabilidad @@ -162,25 +201,42 @@ AccountingAccountForSalesTaxAreDefinedInto=Nota: La cuenta de contabilidad para ExportDraftJournal=Exportar borrador del diario Selectmodelcsv=Seleccione un modelo Modelcsv_normal=Exportación clasica -Modelcsv_FEC=Export FEC (Art. L47 A) +Modelcsv_CEGID=Exportación para Comptabilité Experto CEGID +Modelcsv_COALA=Exportación para Salvia Coala +Modelcsv_bob50=Exportación para Sage BOB 50 +Modelcsv_ciel=Exportación para Sage Ciel Compta o Compta Evolution +Modelcsv_quadratus=Exportar para Quadratus QuadraCompta +Modelcsv_ebp=Exportación para EBP +Modelcsv_cogilog=Exportación para Cogilog +Modelcsv_agiris=Exportación para Agiris +Modelcsv_openconcerto=Exportar para OpenConcerto (Prueba) +Modelcsv_configurable=Exportar CSV Configurable +Modelcsv_Sage50_Swiss=Exportación para Sage 50 Suiza ChartofaccountsId=Plan de cuentas Id InitAccountancy=Contabilidad inicial InitAccountancyDesc=Esta página se puede usar para inicializar una cuenta de contabilidad en productos y servicios que no tienen una cuenta de contabilidad definida para ventas y compras. DefaultBindingDesc=Esta página se puede usar para establecer una cuenta predeterminada que se usará para vincular el registro de transacciones sobre los salarios de pago, donaciones, impuestos y IVA cuando no se haya establecido una cuenta contable específica. OptionModeProductSell=Ventas de modo +OptionModeProductSellIntra=Venta de modo exportado en EEC. +OptionModeProductSellExport=Venta de modo exportado en otros países. OptionModeProductBuy=Compras de modo OptionModeProductSellDesc=Mostrar todos los productos con cuenta de contabilidad para ventas. +OptionModeProductSellIntraDesc=Mostrar todos los productos con cuenta contable para ventas en EEC. OptionModeProductBuyDesc=Mostrar todos los productos con cuenta de contabilidad para compras. CleanFixHistory=Eliminar el código de contabilidad de las líneas que no existen en los cuadros de cuentas CleanHistory=Restablecer todas las vinculaciones para el año seleccionado PredefinedGroups=Grupos predefinidos ValueNotIntoChartOfAccount=Este valor de la cuenta de contabilidad no existe en el cuadro de cuentas +SaleEEC=Venta en EEC SomeMandatoryStepsOfSetupWereNotDone=Algunos pasos obligatorios de configuración no se hicieron, por favor complételos ErrorNoAccountingCategoryForThisCountry=No hay un grupo de cuenta contable disponible para el país %s (Consulte Inicio - Configuración - Diccionarios) ErrorInvoiceContainsLinesNotYetBounded=Intenta hacer un diario de algunas líneas de la factura %s , pero algunas otras líneas aún no están limitadas a la cuenta de contabilidad. Se rechaza la periodización de todas las líneas de factura para esta factura. ErrorInvoiceContainsLinesNotYetBoundedShort=Algunas líneas en la factura no están vinculadas a la cuenta contable. ExportNotSupported=El formato de exportación establecido no es compatible con esta página +BookeppingLineAlreayExists=Líneas ya existentes en la contabilidad. Binded=Líneas atadas ToBind=Líneas para enlazar +UseMenuToSetBindindManualy=Líneas aún no enlazadas, use el menú %s para hacer el enlace manualmente +WarningReportNotReliable=Advertencia, este informe no se basa en el Libro mayor, por lo que no contiene la transacción modificada manualmente en el Libro mayor. Si su publicación está actualizada, la vista de contabilidad es más precisa. ExpenseReportJournal=Diario del informe de gastos InventoryJournal=Revista de inventario diff --git a/htdocs/langs/es_CL/admin.lang b/htdocs/langs/es_CL/admin.lang index 6a15d209266..7e164b901b1 100644 --- a/htdocs/langs/es_CL/admin.lang +++ b/htdocs/langs/es_CL/admin.lang @@ -4,7 +4,10 @@ VersionLastInstall=Versión de instalación inicial VersionLastUpgrade=Versión de actualización más reciente. VersionUnknown=Desconocido VersionRecommanded=Recomendado +FileCheck=Comprobaciones de integridad del conjunto de archivos +FileCheckDesc=Esta herramienta le permite verificar la integridad de los archivos y la configuración de su aplicación, comparando cada archivo con el oficial. También se puede verificar el valor de algunas constantes de configuración. Puede usar esta herramienta para determinar si algún archivo ha sido modificado (por ejemplo, por un hacker). FileIntegrityIsStrictlyConformedWithReference=La integridad de los archivos está estrictamente conformada con la referencia. +FileIntegrityIsOkButFilesWereAdded=La verificación de integridad de los archivos ha pasado, sin embargo, se han agregado algunos archivos nuevos. FileIntegritySomeFilesWereRemovedOrModified=La verificación de la integridad de los archivos ha fallado. Algunos archivos fueron modificados, eliminados o agregados. MakeIntegrityAnalysisFrom=Haga un análisis de integridad de los archivos de la aplicación desde LocalSignature=Firma local incorporada (menos confiable) @@ -12,13 +15,19 @@ RemoteSignature=Firma distante remota (más confiable) FilesMissing=Archivos perdidos FilesAdded=Archivos agregados FileCheckDolibarr=Verificar la integridad de los archivos de la aplicación +AvailableOnlyOnPackagedVersions=El archivo local para la verificación de integridad solo está disponible cuando la aplicación se instala desde un paquete oficial XmlNotFound=Xml Integrity Archivo de la aplicación no encontrado SessionId=ID de sesión SessionSaveHandler=Handler para guardar sesiones +SessionSavePath=Ubicación de guardado de sesión ConfirmPurgeSessions=¿De verdad quieres purgar todas las sesiones? Esto desconectará a todos los usuarios (excepto usted). +NoSessionListWithThisHandler=Guardar el controlador de sesión configurado en su PHP no permite enumerar todas las sesiones en ejecución. +ConfirmLockNewSessions=¿Estás seguro de que deseas restringir cualquier nueva conexión de Dolibarr a ti mismo? Solo el usuario %s podrá conectarse después de eso. UnlockNewSessions=Eliminar bloqueo de conexión YourSession=Tu sesión +Sessions=Sesiones de Usuarios WebUserGroup=Usuario / grupo del servidor web +NoSessionFound=Su configuración de PHP parece no permitir el listado de sesiones activas. El directorio utilizado para guardar sesiones ( %s ) puede estar protegido (por ejemplo, por permisos del sistema operativo o por la directiva PHP open_basedir). DBStoringCharset=Juego de caracteres de base de datos para almacenar datos DBSortingCharset=Juego de caracteres de base de datos para ordenar los datos WarningModuleNotActive=El módulo %s debe estar habilitado. @@ -29,6 +38,8 @@ SetupArea=Configurar UploadNewTemplate=Cargar nueva plantilla (s) FormToTestFileUploadForm=Formulario para probar la carga del archivo (según la configuración) IfModuleEnabled=Nota: sí es efectivo solo si el módulo %s está habilitado +RemoveLock=Elimine / rename el archivo %s si existe, para permitir el uso de la herramienta Actualizar / Instalar. +RestoreLock=Restaure el archivo %s , solo con permiso de lectura, para deshabilitar cualquier uso posterior de la herramienta Actualizar / Instalar. SecuritySetup=Configuración de seguridad SecurityFilesDesc=Define aquí las opciones relacionadas con la seguridad sobre la carga de archivos. ErrorModuleRequirePHPVersion=Error, este módulo requiere PHP versión %s o superior @@ -36,8 +47,15 @@ ErrorModuleRequireDolibarrVersion=Error, este módulo requiere Dolibarr versión ErrorDecimalLargerThanAreForbidden=Error, una precisión superior a %s no es compatible. DictionarySetup=Configuración del diccionario ErrorReservedTypeSystemSystemAuto=El valor 'sistema' y 'systemauto' para el tipo está reservado. Puede usar 'user' como valor para agregar su propio registro +DisableJavascript=Deshabilitar las funciones de JavaScript y Ajax +DisableJavascriptNote=Nota: Para propósitos de prueba o depuración. Para la optimización para personas ciegas o navegadores de texto, es posible que prefiera utilizar la configuración en el perfil del usuario. UseSearchToSelectCompanyTooltip=Además, si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad estableciendo constante COMPANY_DONOTSEARCH_ANYWHERE en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena. UseSearchToSelectContactTooltip=Además, si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad estableciendo CONTACT_DONOTSEARCH_ANYWHERE constante en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena. +DelaiedFullListToSelectCompany=Espere hasta que se presione una tecla antes de cargar el contenido de la lista de combo de Terceros.
Esto puede aumentar el rendimiento si tiene un gran número de terceros, pero es menos conveniente. +DelaiedFullListToSelectContact=Espere hasta que se presione una tecla antes de cargar el contenido de la lista de combo de contactos.
Esto puede aumentar el rendimiento si tiene una gran cantidad de contactos, pero es menos conveniente. +NumberOfKeyToSearch=Número de caracteres para activar la búsqueda: %s +NumberOfBytes=Número de bytes +SearchString=Cadena de búsqueda NotAvailableWhenAjaxDisabled=No disponible cuando Ajax está deshabilitado AllowToSelectProjectFromOtherCompany=En el documento de un tercero, puede elegir un proyecto vinculado a otro tercero JavascriptDisabled=JavaScript deshabilitado @@ -45,12 +63,14 @@ UsePreviewTabs=Usa pestañas de vista previa ShowPreview=Mostrar vista previa CurrentTimeZone=TimeZone PHP (servidor) MySQLTimeZone=TimeZone MySql (base de datos) +TZHasNoEffect=Las fechas son almacenadas y devueltas por el servidor de bases de datos como si se mantuvieran como una cadena enviada. La zona horaria tiene efecto solo cuando se usa la función UNIX_TIMESTAMP (que no debe ser utilizada por Dolibarr, por lo que la base de datos TZ no debería tener ningún efecto, incluso si se cambia después de ingresar los datos). Space=Espacio NextValue=Siguiente valor NextValueForInvoices=Siguiente valor (facturas) NextValueForCreditNotes=Siguiente valor (notas de crédito) NextValueForDeposit=Siguiente valor (pago inicial) NextValueForReplacements=Siguiente valor (reemplazos) +MustBeLowerThanPHPLimit=Nota: su configuración de PHP actualmente limita el tamaño de archivo máximo para cargar %s %s, independientemente del valor de este parámetro NoMaxSizeByPHPLimit=Nota: no hay límite establecido en su configuración de PHP MaxSizeForUploadedFiles=Tamaño máximo para los archivos cargados (0 para no permitir ninguna carga) UseCaptchaCode=Use el código gráfico (CAPTCHA) en la página de inicio de sesión @@ -65,6 +85,7 @@ DetailPosition=Ordenar número para definir la posición del menú AllMenus=Todo NotConfigured=Módulo / Aplicación no configurada SetupShort=Configurar +OtherSetup=Otra configuración CurrentValueSeparatorThousand=Mil separadores Destination=Destino IdModule=ID del módulo @@ -77,14 +98,20 @@ PHPTZ=Servidor PHP Zona horaria DaylingSavingTime=Horario de verano CurrentHour=Tiempo de PHP (servidor) CurrentSessionTimeOut=Tiempo de espera actual de la sesión +YouCanEditPHPTZ=Para configurar una zona horaria de PHP diferente (no es necesario), puede intentar agregar un archivo .htaccess con una línea como esta "SetEnv TZ Europe / Paris" +HoursOnThisPageAreOnServerTZ=La advertencia, a diferencia de otras pantallas, las horas en esta página no se encuentran en su zona horaria local, sino de la zona horaria del servidor. +MaxNbOfLinesForBoxes=Max. número de líneas para widgets PositionByDefault=Orden predeterminada MenusDesc=Los administradores de menú establecen el contenido de las dos barras de menú (horizontal y vertical). MenusEditorDesc=El editor de menú le permite definir entradas de menú personalizadas. Úselo con cuidado para evitar la inestabilidad y las entradas de menú permanentemente inalcanzables.
Algunos módulos agregan entradas de menú (en el menú Todo principalmente). Si elimina algunas de estas entradas por error, puede restablecerlas deshabilitando y volviendo a habilitar el módulo. MenuForUsers=Menú para usuarios +Language_en_US_es_MX_etc=Idioma (en_US, es_MX, ...) SystemInfo=Información del sistema SystemToolsArea=Área de herramientas del sistema +SystemToolsAreaDesc=Esta área proporciona funciones de administración. Utilice el menú para elegir la función requerida. +PurgeAreaDesc=Esta página le permite eliminar todos los archivos generados o almacenados por Dolibarr (archivos temporales o todos los archivos en el directorio %s ). Usando esta característica normalmente no es necesario. Se proporciona como una solución para los usuarios cuyo Dolibarr está alojado por un proveedor que no ofrece permisos para eliminar archivos generados por el servidor web. PurgeDeleteLogFile=Eliminar archivos de registro, incluido %s definido para el módulo Syslog (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos) +PurgeDeleteAllFilesInDocumentsDir=Eliminar todos los archivos en el directorio: %s .
Esto eliminará todos los documentos generados relacionados con elementos (terceros, facturas, etc.), archivos cargados en el módulo ECM, volcados de copia de seguridad de bases de datos y archivos temporales. PurgeRunNow=Purgar ahora PurgeNothingToDelete=Sin directorio o archivos para eliminar. PurgeNDirectoriesDeleted=%s archivos o directorios eliminados. @@ -95,9 +122,12 @@ Backup=Respaldo Restore=Restaurar RunCommandSummary=La copia de seguridad se ha lanzado con el siguiente comando BackupFileSuccessfullyCreated=Archivo de respaldo generado con éxito +YouCanDownloadBackupFile=El archivo generado ahora se puede descargar NoBackupFileAvailable=No hay archivos de respaldo disponibles. ToBuildBackupFileClickHere=Para crear un archivo de copia de seguridad, haga clic aquí . +ImportMySqlDesc=Para importar un archivo de copia de seguridad de MySQL, puede usar phpMyAdmin a través de su alojamiento o usar el comando mysql desde la línea de comandos.
Por ejemplo: ImportPostgreSqlDesc=Para importar un archivo de copia de seguridad, debe usar el comando pg_restore desde la línea de comando: +FileNameToGenerate=Nombre de archivo para copia de seguridad: CommandsToDisableForeignKeysForImport=Comando para desactivar claves externas en la importación CommandsToDisableForeignKeysForImportWarning=Obligatorio si desea poder restaurar su volcado sql más tarde MySqlExportParameters=Parámetros de exportación de MySQL @@ -115,14 +145,22 @@ IgnoreDuplicateRecords=Ignorar errores de registro duplicado (INSERTAR IGNORAR) AutoDetectLang=Autodetectar (idioma del navegador) FeatureDisabledInDemo=Característica deshabilitada en demostración FeatureAvailableOnlyOnStable=Característica solo disponible en versiones estables oficiales +BoxesDesc=Los widgets son componentes que muestran información que puede agregar para personalizar algunas páginas. Puede elegir entre mostrar el widget o no seleccionando la página de destino y haciendo clic en 'Activar', o haciendo clic en la papelera para deshabilitarla. OnlyActiveElementsAreShown=Solo se muestran los elementos de los módulos habilitados . +ModulesDesc=Los módulos / aplicaciones determinan qué funciones están disponibles en el software. Algunos módulos requieren que se otorguen permisos a los usuarios después de activar el módulo. Haga clic en el botón de encendido / apagado (al final de la línea del módulo) para habilitar / deshabilitar un módulo / aplicación. +ModulesDeployDesc=Si los permisos en su sistema de archivos lo permiten, puede utilizar esta herramienta para implementar un módulo externo. El módulo será visible en la pestaña %s . ModulesMarketPlaces=Buscar aplicaciones / módulos externos ModulesDevelopYourModule=Desarrolla tu propia aplicación / módulos +ModulesDevelopDesc=También puede desarrollar su propio módulo o encontrar un socio para desarrollar uno para usted. +DOLISTOREdescriptionLong=En lugar de activar el sitio web www.dolistore.com para encontrar un módulo externo, puede utilizar esta herramienta integrada que realizará la búsqueda en el mercado externo para usted (puede ser lento, necesita un acceso a Internet) ... NotCompatible=Este módulo no parece compatible con su Dolibarr %s (Min. %s - Max. %s). CompatibleAfterUpdate=Este módulo requiere una actualización de su Dolibarr %s (Min. %s - Max. %s). SeeInMarkerPlace=Ver en Market place AchatTelechargement=Compra / Descarga +GoModuleSetupArea=Para implementar / instalar un nuevo módulo, vaya al área de configuración del módulo: %s . DoliStoreDesc=DoliStore, el mercado oficial para los módulos externos Dolibarr ERP / CRM +DoliPartnersDesc=Lista de empresas que ofrecen módulos o características desarrollados a medida.
Nota: dado que Dolibarr es una aplicación de código abierto, cualquier persona con experiencia en programación PHP puede desarrollar un módulo. +WebSiteDesc=Sitios web externos para más módulos complementarios (no principales) ... URL=Enlazar BoxesAvailable=Widgets disponibles BoxesActivated=Widgets activados @@ -131,8 +169,11 @@ SourceFile=Archivo fuente AvailableOnlyIfJavascriptAndAjaxNotDisabled=Disponible solo si JavaScript no está deshabilitado Required=Necesario UsedOnlyWithTypeOption=Usado solo por alguna opción de agenda +DoNotStoreClearPassword=Cifre las contraseñas almacenadas en la base de datos (NO como texto sin formato). Se recomienda encarecidamente activar esta opción. +MainDbPasswordFileConfEncrypted=Cifra la contraseña de la base de datos almacenada en conf.php. Se recomienda encarecidamente activar esta opción. InstrucToEncodePass=Para codificar la contraseña en el archivo conf.php, reemplace la línea
$dolibarr_main_db_pass="...";
por
$dolibarr_main_db_pass="crypted:%s"; InstrucToClearPass=Para decodificar la contraseña (elimina) en el archivo conf.php, reemplace la línea
$dolibarr_main_db_pass="crypted: ...";
por
$dolibarr_main_db_pass="%s"; +ProtectAndEncryptPdfFiles=Proteger los archivos PDF generados. Esto NO se recomienda ya que rompe la generación de PDF a granel. ProtectAndEncryptPdfFilesDesc=La protección de un documento PDF lo mantiene disponible para leer e imprimir con cualquier navegador PDF. Sin embargo, la edición y copia ya no es posible. Tenga en cuenta que el uso de esta característica hace que la creación de un archivo PDF global fusionado no funcione. Feature=Característica Developpers=Desarrolladores / contribuyentes @@ -142,29 +183,64 @@ OfficialWebHostingService=Servicios de alojamiento web a los que se hace referen ReferencedPreferredPartners=Socios Preferidos ForDocumentationSeeWiki=Para documentación del usuario o desarrollador (Doc, Preguntas frecuentes ...),
echa un vistazo a la Wiki de Dolibarr:
%s ForAnswersSeeForum=Para cualquier otra pregunta/ayuda, puede utilizar el foro de Dolibarr:
%s +HelpCenterDesc1=Aquí hay algunos recursos para obtener ayuda y apoyo con Dolibarr. +HelpCenterDesc2=Algunos de estos recursos solo están disponibles en inglés . CurrentMenuHandler=Manejador de menú actual SpaceX=Espacio X SpaceY=Espacio Y Emails=Correos electrónicos EMailsSetup=Configuración de correos electrónicos +EMailsDesc=Esta página le permite anular sus parámetros de PHP predeterminados para el envío de correo electrónico. En la mayoría de los casos en Unix / Linux OS, la configuración de PHP es correcta y estos parámetros no son necesarios. EmailSenderProfiles=Perfiles de remitentes de correos electrónicos +MAIN_MAIL_SMTP_PORT=Puerto SMTP / SMTPS (valor predeterminado en php.ini: %s ) +MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (valor predeterminado en php.ini: %s ) +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Puerto SMTP / SMTPS (no definido en PHP en sistemas similares a Unix) +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (no definido en PHP en sistemas similares a Unix) +MAIN_MAIL_EMAIL_FROM=Correo electrónico del remitente para correos electrónicos automáticos (valor predeterminado en php.ini: %s ) +MAIN_MAIL_ERRORS_TO=El correo electrónico utilizado para el error devuelve correos electrónicos (campos 'Errores a' en los correos electrónicos enviados) +MAIN_MAIL_AUTOCOPY_TO=Copiar (Bcc) todos los correos electrónicos enviados a +MAIN_DISABLE_ALL_MAILS=Deshabilitar todo el envío de correo electrónico (para propósitos de prueba o demostraciones) MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba) +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Agregar usuarios empleados con correo electrónico a la lista de destinatarios permitidos +MAIN_MAIL_SENDMODE=Método de envío de correo electrónico +MAIN_MAIL_SMTPS_ID=ID de SMTP (si el servidor de envío requiere autenticación) +MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor de envío requiere autenticación) +MAIN_MAIL_EMAIL_TLS=Utilizar cifrado TLS (SSL) +MAIN_MAIL_EMAIL_STARTTLS=Usar cifrado TLS (STARTTLS) +MAIN_MAIL_EMAIL_DKIM_ENABLED=Usa DKIM para generar firma de correo electrónico +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Dominio de correo electrónico para usar con dkim +MAIN_DISABLE_ALL_SMS=Deshabilitar todo el envío de SMS (para propósitos de prueba o demostraciones) MAIN_SMS_SENDMODE=Método a usar para enviar SMS +MAIN_MAIL_SMS_FROM=Número de teléfono del remitente predeterminado para el envío de SMS +MAIN_MAIL_DEFAULT_FROMTYPE=Correo electrónico predeterminado del remitente para envío manual (correo electrónico del usuario o correo electrónico de la empresa) UserEmail=Correo electrónico del usuario +CompanyEmail=Email de la empresa FeatureNotAvailableOnLinux=Característica no disponible en sistemas como Unix. Pruebe su programa sendmail localmente. +SubmitTranslation=Si la traducción de este idioma no está completa o si encuentra errores, puede corregirlos editando los archivos en el directorio langs / %s y envíe su cambio a www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Si la traducción de este idioma no está completa o si encuentra errores, puede corregir esto editando archivos en el directorio langs /%s y enviando archivos modificados en dolibarr.org/forum o para desarrolladores en github.com/Dolibarr/dolibarr. ModulesSetup=Módulos / configuración de la aplicación +ModuleFamilyCrm=Gestión de la relación con el cliente (CRM) +ModuleFamilySrm=Gestión de relaciones con proveedores (VRM) +ModuleFamilyProducts=Gestión de producto (PM) ModuleFamilyProjects=Proyectos / trabajo colaborativo ModuleFamilyTechnic=Herramientas de varios módulos ModuleFamilyFinancial=Módulos financieros (Contabilidad / Tesorería) ModuleFamilyECM=Gestión de contenido electrónico (ECM) +ModuleFamilyPortal=Sitios web y otras aplicaciones frontales. ModuleFamilyInterface=Interfaces con sistemas externos MenuHandlers=Controladores de menú MenuAdmin=Editor de menú ThisIsAlternativeProcessToFollow=Esta es una configuración alternativa para procesar manualmente: +FindPackageFromWebSite=Encuentre un paquete que proporcione las funciones que necesita (por ejemplo, en el sitio web oficial %s). +DownloadPackageFromWebSite=Descargue el paquete (por ejemplo, desde el sitio web oficial %s). +UnpackPackageInDolibarrRoot=Desempaquete / descomprima los archivos empaquetados en el directorio de su servidor Dolibarr: %s +UnpackPackageInModulesRoot=Para implementar / instalar un módulo externo, descomprima / descomprima los archivos empaquetados en el directorio del servidor dedicado a los módulos externos:
%s +SetupIsReadyForUse=El despliegue del módulo ha finalizado. Sin embargo, debe habilitar y configurar el módulo en su aplicación yendo a los módulos de configuración de la página: %s . NotExistsDirect=El directorio raíz alternativo no está definido en un directorio existente.
InfDirAlt=Desde la versión 3, es posible definir un directorio raíz alternativo. Esto le permite almacenar, en un directorio dedicado, complementos y plantillas personalizadas.
Simplemente cree un directorio en la raíz de Dolibarr (p. Ej .: personalizado).
InfDirExample=
Entonces, declare en el archivo conf.php
$dolibarr_main_url_root_alt = '/ custom'
$ dolibarr_main_document_root_alt = '/path/of /dolibarr/htdocs /custom'
Si estas líneas se comentan con "#", para habilitarlas, simplemente elimine el comentario del carácter "#". +YouCanSubmitFile=Alternativamente, puedes subir el paquete de archivos .zip del módulo: +CallUpdatePage=Vaya a la página que actualiza la estructura de la base de datos y los datos: %s. LastActivationIP=Última activación IP UpdateServerOffline=Servidor de actualización fuera de línea WithCounter=Administrar un contador @@ -185,32 +261,49 @@ ErrorCantUseRazIfNoYearInMask=Error, no se puede usar la opción @ para restable ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Error, no puede usar la opción @ si la secuencia {aa} {mm} o {aaaa} {mm} no está en la máscara. UMask=Parámetro UMask para nuevos archivos en el sistema de archivos Unix / Linux / BSD / Mac. UMaskExplanation=Este parámetro le permite definir permisos establecidos por defecto en los archivos creados por Dolibarr en el servidor (durante la carga, por ejemplo).
Debe ser el valor octal (por ejemplo, 0666 significa leer y escribir para todos).
parámetro es inútil en un servidor de Windows. +SeeWikiForAllTeam=Eche un vistazo a la página de Wiki para obtener una lista de colaboradores y su organización. UseACacheDelay=Retardo para la respuesta de exportación en caché en segundos (0 o vacío para no caché) DisableLinkToHelpCenter=Ocultar enlace "Necesita ayuda o soporte" en la página de inicio de sesión DisableLinkToHelp=Ocultar link para ayuda online "%s" +AddCRIfTooLong=No hay ajuste de texto automático, el texto que es demasiado largo no se mostrará en los documentos. Por favor agregue retornos de carro en el área de texto si es necesario. +ConfirmPurge=¿Estás seguro de que quieres ejecutar esta purga?
Esto eliminará de forma permanente todos sus archivos de datos sin posibilidad de restaurarlos (archivos ECM, archivos adjuntos ...). MinLength=Longitud mínima LanguageFilesCachedIntoShmopSharedMemory=Archivos .lang cargados en la memoria compartida +ExamplesWithCurrentSetup=Ejemplos con la configuración actual. ListOfDirectories=Lista de directorios de plantillas de OpenDocument ListOfDirectoriesForModelGenODT=Lista de directorios que contienen archivos de plantillas con formato OpenDocument.

Ponga aquí la ruta completa de directorios.
Agregue un retorno de carro entre cada directorio.
Para agregar un directorio del módulo GED, agregue aquí DOL_DATA_ROOT/ecm/yourdirectoryname.

Los archivos en esos directorios deben terminar con .odt o .ods. +NumberOfModelFilesFound=Número de archivos de plantilla ODT / ODS encontrados en estos directorios FollowingSubstitutionKeysCanBeUsed=
Para saber cómo crear sus plantillas de documento Odt, antes de almacenarlas en esos directorios, lea la documentación wiki: FirstnameNamePosition=Posición del nombre / apellido +DescWeather=Las siguientes imágenes se mostrarán en el tablero cuando el número de acciones tardías alcance los siguientes valores: KeyForWebServicesAccess=Clave para usar los servicios web (parámetro "dolibarrkey" en los servicios web) TestSubmitForm=Formulario de prueba de entrada +ThisForceAlsoTheme=El uso de este administrador de menús también usará su propio tema, independientemente de la elección del usuario. Además, este administrador de menú especializado para teléfonos inteligentes no funciona en todos los teléfonos inteligentes. Utilice otro administrador de menú si tiene problemas con el suyo. ThemeDir=Directorio de pieles +ConnectionTimeout=El tiempo de conexión expiro ResponseTimeout=Tiempo de espera de respuesta SmsTestMessage=Mensaje de prueba de __PHONEFROM__ a __PHONETO__ ModuleMustBeEnabledFirst=El módulo %s debe estar habilitado primero si necesitas esta característica. SecurityToken=Clave para asegurar URLs +NoSmsEngine=No hay administrador de remitente de SMS disponible. Un administrador de remitentes de SMS no se instala con la distribución predeterminada porque dependen de un proveedor externo, pero puede encontrar algunos en %s +PDFAddressForging=Reglas para cajas de direcciones +HideAnyVATInformationOnPDF=Ocultar toda la información relacionada con el Impuesto de Ventas / IVA PDFRulesForSalesTax=Reglas para el impuesto a las ventas / IVA +HideLocalTaxOnPDF=Ocultar la tasa %s en la columna Venta de impuestos +HideDescOnPDF=Ocultar descripción de productos +HideRefOnPDF=Ocultar productos ref. +HideDetailsOnPDF=Ocultar detalles de líneas de productos PlaceCustomerAddressToIsoLocation=Utilice la posición estándar francesa (La Poste) para la posición de la dirección del cliente Library=Biblioteca UrlGenerationParameters=Parámetros para asegurar URLs SecurityTokenIsUnique=Use un parámetro de clave segura único para cada URL EnterRefToBuildUrl=Ingrese la referencia para el objeto %s GetSecuredUrl=Obtener URL calculado +ButtonHideUnauthorized=Ocultar botones para usuarios no administradores para acciones no autorizadas en lugar de mostrar botones deshabilitados en gris OldVATRates=Tasa de IVA anterior NewVATRates=Nueva tasa de IVA PriceBaseTypeToChange=Modificar en precios con el valor de referencia base definido en +MassConvert=Lanzar la conversión a granel String=Cuerda Int=Entero Float=Flotador @@ -218,11 +311,21 @@ Boolean=Boolean (una casilla de verificación) ExtrafieldSelect =Seleccionar lista ExtrafieldSelectList =Seleccionar de la mesa ExtrafieldSeparator=Separador (no un campo) +ExtrafieldRadio=Botones de radio (solo una opción) ExtrafieldCheckBox=Casillas de verificación ExtrafieldCheckBoxFromList=Casillas de verificación de la mesa ExtrafieldLink=Enlace a un objeto ComputedFormula=Campo computado +ComputedFormulaDesc=Puede ingresar aquí una fórmula usando otras propiedades de objeto o cualquier código PHP para obtener un valor computado dinámico. Puedes usar cualquier fórmula compatible con PHP incluyendo "?" operador de condición y siguiente objeto global: $ db, $ conf, $ langs, $ mysoc, $ usuario, $ objeto .
ADVERTENCIA : Solo algunas propiedades de $ object pueden estar disponibles. Si necesita una propiedad no cargada, solo busque el objeto en su fórmula como en el segundo ejemplo.
El uso de un campo computado significa que no puede ingresar ningún valor desde la interfaz. Además, si hay un error de sintaxis, la fórmula puede no devolver nada.

Ejemplo de fórmula:
$ objeto-> id <10? round ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2)

Ejemplo para recargar objeto
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ obj-> id: ($ obj-> rowid? $ obj-> rowid: $ object-> id ))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Otro ejemplo de fórmula para forzar la carga del objeto y su objeto padre:
(($ reloadedobj = nueva tarea ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = new Project ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Proyecto principal no encontrado' +ExtrafieldParamHelpPassword=Si deja este campo en blanco, significa que este valor se almacenará sin cifrado (el campo solo debe estar oculto con una estrella en la pantalla).
Establezca 'auto' para usar la regla de cifrado predeterminada para guardar la contraseña en la base de datos (entonces el valor leído será solo el hash, no hay manera de recuperar el valor original) +ExtrafieldParamHelpselect=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')

por ejemplo:
1, valor1
2, valor2
código3, valor3
...

Para tener la lista dependiendo de otra lista de atributos complementarios:
1, value1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

Para tener la lista dependiendo de otra lista:
1, valor1 | parent_list_code : parent_key
2, valor2 | parent_list_code : parent_key +ExtrafieldParamHelpcheckbox=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')

por ejemplo:
1, valor1
2, valor2
3, valor3
... +ExtrafieldParamHelpradio=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')

por ejemplo:
1, valor1
2, valor2
3, valor3
... +ExtrafieldParamHelpsellist=La lista de valores proviene de una tabla.
Sintaxis: table_name: label_field: id_field :: filter
Ejemplo: c_typent: libelle: id :: filter

- idfilter es necesariamente una clave int primaria
- el filtro puede ser una prueba simple (por ejemplo, activo = 1) para mostrar solo el valor activo
También puede usar $ ID $ en el filtro, que es la identificación actual del objeto actual
Para hacer un SELECCIONAR en filtro usa $ SEL $
Si desea filtrar en campos adicionales use la sintaxis extra.fieldcode = ... (donde código de campo es el código de campo adicional)

Para tener la lista dependiendo de otra lista de atributos complementarios:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Para tener la lista dependiendo de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter +ExtrafieldParamHelpchkbxlst=La lista de valores proviene de una tabla.
Sintaxis: table_name: label_field: id_field :: filter
Ejemplo: c_typent: libelle: id :: filter

El filtro puede ser una prueba simple (por ejemplo, activo = 1) para mostrar solo el valor activo
También puede usar $ ID $ en el filtro, que es la identificación actual del objeto actual
Para hacer un SELECCIONAR en filtro usa $ SEL $
Si desea filtrar en campos adicionales use la sintaxis extra.fieldcode = ... (donde código de campo es el código de campo adicional)

Para tener la lista dependiendo de otra lista de atributos complementarios:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Para tener la lista dependiendo de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter +ExtrafieldParamHelplink=Los parámetros deben ser ObjectName: Classpath
Sintaxis: ObjectName: Classpath
Ejemplos:
Societe: societe / class / societe.class.php
Contacto: contact / class / contact.class.php LibraryToBuildPDF=Biblioteca utilizada para la generación de PDF +LocalTaxDesc=Algunos países pueden aplicar dos o tres impuestos en cada línea de factura. Si este es el caso, elija el tipo para el segundo y tercer impuesto y su tasa. Los tipos posibles son:
1: el impuesto local se aplica a los productos y servicios sin IVA (el impuesto local se calcula sobre el monto sin impuestos)
2: el impuesto local se aplica a los productos y servicios, incluido el IVA
3: el impuesto local se aplica a los productos sin IVA (el impuesto local se calcula sobre el monto sin impuestos)
4: el impuesto local se aplica a los productos, incluido el IVA
5: el impuesto local se aplica a los servicios sin IVA (el impuesto local se calcula sobre el monto sin impuestos)
6: el impuesto local se aplica a los servicios, incluido el IVA (el impuesto local se calcula sobre el monto + impuesto) LinkToTestClickToDial=Ingrese un número de teléfono para llamar y mostrar un enlace para probar la URL de ClickToDial para el usuario %s RefreshPhoneLink=Actualizar enlace LinkToTest=Enlace de clic generado para el usuario %s(haga clic en el número de teléfono para probar) @@ -230,74 +333,152 @@ KeepEmptyToUseDefault=Manténgalo vacío para usar el valor predeterminado DefaultLink=Enlace predeterminado ValueOverwrittenByUserSetup=Advertencia, este valor puede ser sobrescrito por la configuración específica del usuario (cada usuario puede establecer su propia URL de clicktodial) ExternalModule=Módulo externo: instalado en el directorio %s +BarcodeInitForthird-parties=Inicio masivo de código de barras para terceros. BarcodeInitForProductsOrServices=Inicialización o reinicio masivo del código de barras para productos o servicios CurrentlyNWithoutBarCode=Actualmente, tiene %s registros en %s %s sin código de barras definido. InitEmptyBarCode=Valor inicial para los próximos %s registros vacíos EraseAllCurrentBarCode=Borrar todos los valores actuales del código de barras ConfirmEraseAllCurrentBarCode=¿Seguro que quieres borrar todos los valores actuales del código de barras? AllBarcodeReset=Todos los valores del código de barras han sido eliminados +NoBarcodeNumberingTemplateDefined=Ninguna plantilla de código de barras de numeración habilitada en la configuración del módulo de código de barras. +ShowDetailsInPDFPageFoot=Agregue más detalles al pie de página, como la dirección de la empresa o los nombres de los gerentes (además de las identificaciones profesionales, el capital de la empresa y el número de IVA). +NoDetails=No hay detalles adicionales en el pie de página. DisplayCompanyManagers=Mostrar nombres de administrador DisplayCompanyInfoAndManagers=Mostrar los nombres de administrador y dirección de la compañía +EnableAndSetupModuleCron=Si desea que esta factura recurrente se genere automáticamente, el módulo * %s * debe estar habilitado y configurado correctamente. De lo contrario, la generación de facturas debe hacerse manualmente desde esta plantilla usando el botón * Crear *. Tenga en cuenta que incluso si habilita la generación automática, puede iniciar la generación manual de forma segura. No es posible generar duplicados para el mismo período. +ModuleCompanyCodeCustomerAquarium=%s seguido de un código de cliente para un código de contabilidad de cliente +ModuleCompanyCodeSupplierAquarium=%s seguido de un código de proveedor para un código de contabilidad de proveedor ModuleCompanyCodePanicum=Devuelve un código de contabilidad vacío. +ModuleCompanyCodeDigitaria=El código contable depende del código de terceros. El código se compone del carácter "C" en la primera posición, seguido de los primeros 5 caracteres del código de terceros. Use3StepsApproval=De forma predeterminada, los pedidos de compra deben ser creados y aprobados por 2 usuarios diferentes (un paso / usuario para crear y un paso / usuario para aprobar. Tenga en cuenta que si el usuario tiene ambos permisos para crear y aprobar, un paso / usuario será suficiente) . Puede solicitar con esta opción que presente un tercer paso / aprobación del usuario, si el monto es mayor que un valor dedicado (por lo que se necesitarán 3 pasos: 1 = validación, 2 = primera aprobación y 3 = segunda aprobación si el monto es suficiente).
Configure esto como vacío si una aprobación (2 pasos) es suficiente, configúrelo a un valor muy bajo (0.1) si siempre se requiere una segunda aprobación (3 pasos). UseDoubleApproval=Utilice una aprobación de 3 pasos cuando la cantidad (sin impuestos) sea más alta que ... +WarningPHPMail=ADVERTENCIA: a menudo es mejor configurar los correos electrónicos salientes para usar el servidor de correo electrónico de su proveedor en lugar de la configuración predeterminada. Algunos proveedores de correo electrónico (como Yahoo) no le permiten enviar un correo electrónico desde otro servidor que no sea su propio servidor. Su configuración actual utiliza el servidor de la aplicación para enviar correo electrónico y no el servidor de su proveedor de correo electrónico, por lo que algunos destinatarios (el compatible con el protocolo DMARC restrictivo) le preguntarán a su proveedor de correo electrónico si pueden aceptar su correo electrónico y algunos proveedores de correo electrónico. (como Yahoo) puede responder "no" porque el servidor no es de ellos, por lo que pocos de sus correos electrónicos enviados no serán aceptados (tenga cuidado también con la cuota de envío de su proveedor de correo electrónico).
Si su proveedor de correo electrónico (como Yahoo) tiene esta restricción, debe cambiar la configuración de correo electrónico para elegir el otro método "Servidor SMTP" e ingresar el servidor SMTP y las credenciales proporcionadas por su proveedor de correo electrónico. WarningPHPMail2=Si su proveedor SMTP de correo electrónico necesita restringir el cliente de correo electrónico a algunas direcciones IP (muy raras), esta es la dirección IP del agente de usuario de correo (MUA) para su aplicación ERP CRM: %s . ClickToShowDescription=Haga clic para mostrar la descripción +DependsOn=Este módulo necesita el módulo (s) RequiredBy=Este módulo es requerido por el módulo (s) +TheKeyIsTheNameOfHtmlField=Este es el nombre del campo HTML. Se requiere conocimiento técnico para leer el contenido de la página HTML para obtener el nombre clave de un campo. +PageUrlForDefaultValues=Debe ingresar la ruta relativa de la URL de la página. Si incluye parámetros en la URL, los valores predeterminados serán efectivos si todos los parámetros se configuran en el mismo valor. +PageUrlForDefaultValuesCreate=
Ejemplo:
Para el formulario para crear un nuevo tercero, es %s .
Para la URL de los módulos externos instalados en el directorio personalizado, no incluya "custom /", así que use la ruta como mymodule / mypage.php y no custom / mymodule / mypage.php.
Si desea un valor predeterminado solo si la URL tiene algún parámetro, puede usar %s +PageUrlForDefaultValuesList=
Ejemplo:
Para la página que enumera a terceros, es %s .
Para la URL de los módulos externos instalados en el directorio personalizado, no incluya "custom /", así que use una ruta como mymodule / mypagelist.php y no custom / mymodule / mypagelist.php.
Si desea un valor predeterminado solo si la URL tiene algún parámetro, puede usar %s +EnableDefaultValues=Habilitar la personalización de los valores por defecto. +GoIntoTranslationMenuToChangeThis=Se ha encontrado una traducción para la clave con este código. Para cambiar este valor, debe editarlo desde Home-Setup-translation. WarningSettingSortOrder=Advertencia: establecer un orden de clasificación predeterminado puede dar como resultado un error técnico al ir a la página de la lista si el campo es un campo desconocido. Si experimenta dicho error, vuelva a esta página para eliminar el orden de clasificación predeterminado y restablecer el comportamiento predeterminado. ProductDocumentTemplates=Plantillas de documentos para generar documentos de productos FreeLegalTextOnExpenseReports=Texto legal gratuito en informes de gastos WatermarkOnDraftExpenseReports=Marca de agua en los borradores de informes de gastos AttachMainDocByDefault=Establezca esto en 1 si desea adjuntar el documento principal al correo electrónico de forma predeterminada (si corresponde) +DAV_ALLOW_PRIVATE_DIR=Habilitar el directorio privado genérico (directorio dedicado de WebDAV llamado "privado" - es necesario iniciar sesión) +DAV_ALLOW_PRIVATE_DIRTooltip=El directorio privado genérico es un directorio WebDAV al que cualquiera puede acceder con su inicio de sesión / aprobación de la aplicación. +DAV_ALLOW_PUBLIC_DIR=Habilitar el directorio público genérico (directorio dedicado de WebDAV llamado "público" - no se requiere inicio de sesión) +DAV_ALLOW_PUBLIC_DIRTooltip=El directorio público genérico es un directorio WebDAV al que todos pueden acceder (en modo de lectura y escritura), sin necesidad de autorización (cuenta de inicio de sesión / contraseña). +DAV_ALLOW_ECM_DIR=Habilitar el directorio privado DMS / ECM (directorio raíz del módulo DMS / ECM - es necesario iniciar sesión) +DAV_ALLOW_ECM_DIRTooltip=El directorio raíz donde se cargan manualmente todos los archivos cuando se utiliza el módulo DMS / ECM. De manera similar al acceso desde la interfaz web, necesitará un nombre de usuario / contraseña válido con permisos adecuados para acceder a ella. +Module0Name=Usuarios y Grupos Module0Desc=Gestión de usuarios / empleados y grupos +Module1Desc=Gestión de empresas y contactos (clientes, prospectos ...). Module2Desc=Administración comercial +Module10Name=Contabilidad (simplificada) +Module10Desc=Informes contables simples (revistas, facturación) basados en el contenido de la base de datos. No utiliza ninguna tabla de contabilidad. Module20Name=Cotizaciones Module20Desc=Gestión de cotizaciones/propuestas comerciales +Module22Name=Correos masivos Module23Desc=Monitoreo del consumo de energías +Module25Name=Ordenes de venta +Module25Desc=Gestión de órdenes de venta Module30Name=Facturas +Module30Desc=Gestión de facturas y notas de crédito para clientes. Gestión de facturas y notas de crédito para proveedores. Module40Name=Vendedores +Module40Desc=Proveedores y gestión de compras (órdenes de compra y facturación). Module42Desc=Instalaciones de registro (archivo, syslog, ...). Dichos registros son para fines técnicos / de depuración. Module49Desc=Gestión del editor Module51Name=Envíos masivos Module51Desc=Gerencia de correo de papel en masa +Module54Desc=Gestión de contratos (servicios o suscripciones recurrentes). Module55Desc=Gestión del código de barras Module56Desc=Integración de telefonía +Module57Name=Pagos de débito directo bancario +Module57Desc=Gestión de órdenes de pago de débito directo. Incluye generación de archivo SEPA para países europeos. Module58Desc=Integración de un sistema ClickToDial (Asterisk, ...) Module59Desc=Agregar función para generar una cuenta de Bookmark4u desde una cuenta de Dolibarr Module70Desc=Gestión de intervención Module75Name=Notas de gastos y viaje Module75Desc=Gestión de gastos y viajes Module80Name=Envíos +Module85Name=Bancos y efectivo Module85Desc=Gestión de cuentas bancarias o de efectivo +Module100Name=Sitio externo +Module100Desc=Agregue un enlace a un sitio web externo como icono del menú principal. El sitio web se muestra en un marco debajo del menú superior. Module105Desc=Mailman o interfaz SPIP para el módulo miembro +Module200Desc=Sincronización de directorios LDAP Module210Desc=Integración PostNuke Module240Name=Exportación de datos +Module240Desc=Herramienta para exportar datos de Dolibarr (con asistentes). Module250Name=Importaciones de datos +Module250Desc=Herramienta para importar datos a Dolibarr (con asistentes) Module310Desc=Gestión de miembros de la Fundación +Module320Desc=Añadir un feed RSS a las páginas de Dolibarr. +Module330Name=Marcadores y accesos directos +Module330Desc=Cree accesos directos, siempre accesibles, a las páginas internas o externas a las que accede con frecuencia. +Module400Name=Proyectos o Leads +Module400Desc=Gestión de proyectos, leads / oportunidades y / o tareas. También puede asignar cualquier elemento (factura, pedido, propuesta, intervención, ...) a un proyecto y obtener una vista transversal desde la vista del proyecto. Module410Desc=Integración de Webcalendar Module500Desc=Gestión de otros gastos (impuestos a la venta, impuestos sociales o fiscales, dividendos, ...) +Module510Name=Sueldos +Module510Desc=Registrar y rastrear los pagos de los empleados +Module520Name=Prestamos Module520Desc=Gestión de préstamos +Module600Desc=Enviar notificaciones por correo electrónico desencadenadas por un evento empresarial: por usuario (configuración definida en cada usuario), por contactos de terceros (configuración definida en cada tercero) o por correos electrónicos específicos +Module600Long=Tenga en cuenta que este módulo envía correos electrónicos en tiempo real cuando se produce un evento empresarial específico. Si está buscando una función para enviar recordatorios por correo electrónico para eventos de agenda, ingrese a la configuración del módulo Agenda. +Module610Desc=Creación de variantes de producto (color, tamaño, etc.). +Module770Name=Reporte de gastos +Module770Desc=Gestionar informes de gastos reclamaciones (transporte, comida, ...) +Module1120Name=Propuestas Comerciales de Proveedores Module1120Desc=Solicitar propuesta comercial del vendedor y precios Module1200Desc=Integración Mantis Module1520Name=Generación de documentos +Module1520Desc=Generación masiva de documentos por email. Module1780Name=Etiquetas / Categorías +Module1780Desc=Crear etiquetas / categoría (productos, clientes, proveedores, contactos o miembros) +Module2000Desc=Permitir que los campos de texto sean editados / formateados usando CKEditor (html) +Module2200Desc=Usa expresiones matemáticas para autogeneración de precios. Module2300Name=Trabajos programados Module2300Desc=Gestión programada de trabajos (alias cron o crono tabla) Module2400Name=Eventos / Agenda +Module2400Desc=Eventos de pista. Registre eventos automáticos con fines de seguimiento o registre eventos o reuniones manuales. Este es el módulo principal para una buena gestión de relaciones con clientes o proveedores. Module2500Desc=Sistema de gestión de documentos / gestión electrónica de contenidos. Organización automática de sus documentos generados o almacenados. Compártelos cuando lo necesites. Module2600Name=API / servicios web (servidor SOAP) Module2600Desc=Habilite el servidor Dolibarr SOAP que proporciona servicios de API Module2610Name=API / servicios web (servidor REST) Module2610Desc=Habilite el servidor REST Dolibarr proporcionando servicios API Module2660Name=Llamar a WebServices (cliente SOAP) +Module2660Desc=Habilitar el cliente de servicios web de Dolibarr (puede usarse para enviar datos / solicitudes a servidores externos. Actualmente solo se admiten pedidos de compra). +Module2700Desc=Utilice el servicio Gravatar en línea (www.gravatar.com) para mostrar la foto de los usuarios / miembros (que se encuentra en sus correos electrónicos). Necesita acceso a internet Module2900Desc=Capacidades de conversiones GeoIP Maxmind +Module3200Desc=Habilitar un registro inalterable de eventos empresariales. Los eventos se archivan en tiempo real. El registro es una tabla de solo lectura de eventos encadenados que se pueden exportar. Este módulo puede ser obligatorio para algunos países. Module4000Desc=Gestión de recursos humanos (gestión del departamento, contratos de empleados y sentimientos) Module5000Name=Multi-compañía Module5000Desc=Le permite administrar múltiples compañías Module6000Desc=Gestión de flujo de trabajo (creación automática de objeto y / o cambio de estado automático) +Module10000Desc=Crea sitios web (públicos) con un editor WYSIWYG. Simplemente configure su servidor web (Apache, Nginx, ...) para que apunte al directorio dedicado de Dolibarr para tenerlo en línea en Internet con su propio nombre de dominio. +Module20000Name=Gestión de solicitudes de licencia +Module20000Desc=Definir y rastrear las solicitudes de permiso de los empleados. +Module39000Desc=Lotes, números de serie, gestión de la fecha de caducidad de los productos. +Module40000Name=Multi moneda +Module40000Desc=Utilizar monedas alternativas en precios y documentos. +Module50000Desc=Ofrecer a los clientes una página de pago en línea PayBox (tarjetas de crédito / débito). Esto se puede usar para permitir que sus clientes realicen pagos ad-hoc o pagos relacionados con un objeto Dolibarr específico (factura, pedido, etc.) +Module50200Desc=Ofrezca a los clientes una página de pago en línea de PayPal (cuenta de PayPal o tarjetas de crédito / débito). Esto se puede usar para permitir que sus clientes realicen pagos ad-hoc o pagos relacionados con un objeto Dolibarr específico (factura, pedido, etc.) +Module50300Name=Raya +Module50300Desc=Ofrezca a los clientes una página de pago en línea de Stripe (tarjetas de crédito / débito). Esto se puede usar para permitir que sus clientes realicen pagos ad-hoc o pagos relacionados con un objeto Dolibarr específico (factura, pedido, etc.) +Module50400Name=Contabilidad (doble entrada) +Module50400Desc=Gestión contable (entradas dobles, soporte de contabilidad general y auxiliar). Exportar el libro mayor en varios otros formatos de software de contabilidad. +Module54000Desc=Impresión directa (sin abrir los documentos) mediante la interfaz IPP de Cups (la impresora debe estar visible desde el servidor y CUPS debe estar instalada en el servidor). Module55000Name=Encuesta, encuesta o voto +Module55000Desc=Cree encuestas en línea, encuestas o votos (como Doodle, Studs, RDVz, etc.) Module59000Desc=Módulo para administrar márgenes Module60000Desc=Módulo para gestionar comisiones +Module62000Desc=Añadir características para gestionar Incoterms. +Module63000Desc=Gestionar recursos (impresoras, coches, salas, ...) para asignar a eventos. Permission11=Lea las facturas de los clientes Permission12=Crear/modificar facturas de clientes Permission13=Desvalorizar facturas de clientes @@ -314,6 +495,9 @@ Permission27=Eliminar cotizaciones Permission28=Exportar las cotizaciones Permission31=Leer productos Permission36=Ver / administrar productos ocultos +Permission41=Leer proyectos y tareas (proyectos compartidos y proyectos para los que estoy en contacto). También puede ingresar el tiempo consumido, para mí o para mi jerarquía, en las tareas asignadas (hoja de horas) +Permission42=Crear / modificar proyectos (proyecto compartido y proyectos para los que estoy en contacto). También puede crear tareas y asignar usuarios a proyectos y tareas. +Permission44=Eliminar proyectos (proyectos compartidos y proyectos para los que estoy en contacto) Permission45=Proyectos de exportación Permission61=Leer intervenciones Permission67=Intervenciones de exportación @@ -336,18 +520,23 @@ Permission109=Eliminar envíos Permission111=Leer cuentas financieras Permission112=Crear/modificar / eliminar y comparar transacciones Permission113=Configurar cuentas financieras (crear, administrar categorías) +Permission114=Conciliar transacciones Permission115=Exportar transacciones y estados de cuenta Permission116=Transferencias entre cuentas +Permission117=Gestionar cheques despachando Permission121=Leer terceros vinculados al usuario Permission122=Crear/modificar terceros vinculados al usuario Permission125=Eliminar terceros vinculados al usuario Permission126=Exportar terceros +Permission141=Lee todos los proyectos y tareas (también proyectos privados para los que no soy contacto) +Permission142=Crear / modificar todos los proyectos y tareas (también proyectos privados para los cuales no soy un contacto) Permission144=Eliminar todos los proyectos y tareas (también proyectos privados para los que no estoy en contacto) Permission146=Leer proveedores Permission147=Leer estadísticas Permission151=Lea las órdenes de pago de débito directo Permission152=Crear/modificar una orden de pago de débito directo Permission153=Enviar / Transmitir órdenes de pago de débito directo +Permission154=Registro de Créditos / Rechazos de órdenes de pago por domiciliación bancaria. Permission161=Leer contratos/suscripciones Permission163=Activar un servicio / suscripción de un contrato Permission164=Deshabilitar un servicio / suscripción de un contrato @@ -358,6 +547,15 @@ Permission173=Eliminar viajes y gastos Permission174=Lee todos los viajes y gastos Permission178=Viajes y gastos de exportación Permission180=Leer proveedores +Permission181=Leer órdenes de compra +Permission182=Crear / modificar órdenes de compra. +Permission183=Validar pedidos de compra +Permission184=Aprobar ordenes de compra +Permission185=Ordenar o cancelar pedidos de compra +Permission186=Recibe órdenes de compra +Permission187=Cerrar órdenes de compra +Permission188=Cancelar órdenes de compra +Permission194=Lee las líneas de ancho de banda Permission203=Ordenar pedidos de conexiones Permission204=Solicitar conexiones Permission205=Gestionar las conexiones @@ -378,15 +576,20 @@ Permission244=Ver los contenidos de las categorías ocultas Permission251=Leer otros usuarios y grupos PermissionAdvanced251=Leer otros usuarios Permission252=Permisos de lectura de otros usuarios +Permission253=Crea / modifica otros usuarios, grupos y permisos. PermissionAdvanced253=Crear/modificar usuarios y permisos internos / externos Permission254=Crear/modificar solo usuarios externos Permission256=Eliminar o deshabilitar a otros usuarios +Permission262=Extienda el acceso a todos los terceros (no solo a terceros para los cuales ese usuario es un representante de ventas).
No es efectivo para usuarios externos (siempre se limita a ellos mismos para propuestas, pedidos, facturas, contratos, etc.).
No es efectivo para proyectos (solo reglas sobre permisos de proyectos, visibilidad y asignaciones). Permission271=Lee CA Permission272=Leer facturas Permission273=Emitir facturas Permission281=Leer contactos Permission291=Tarifas de lectura Permission292=Establecer permisos sobre las tarifas +Permission293=Modificar las tarifas del cliente. +Permission300=Leer codigos de barras +Permission301=Crear / modificar códigos de barras Permission311=Leer Servicios Permission312=Asignar servicio / suscripción al contrato Permission331=Leer marcadores @@ -400,6 +603,10 @@ Permission401=Leer descuentos Permission402=Crear/modificar descuentos Permission403=Validar descuentos Permission404=Eliminar descuentos +Permission430=Utilice la barra de depuración +Permission511=Leer pagos de salarios. +Permission512=Crear / modificar pagos de salarios. +Permission514=Eliminar pagos de salarios. Permission517=Salarios de exportación Permission520=Leer préstamos Permission522=Crear/modificar préstamos @@ -409,6 +616,9 @@ Permission527=Préstamos a la exportación Permission531=Leer Servicios Permission536=Ver / administrar servicios ocultos Permission538=Servicios de exportación +Permission650=Leer las listas de materiales +Permission651=Crear / actualizar facturas de materiales +Permission652=Eliminar listas de materiales Permission701=Leer donaciones Permission771=Lea los informes de gastos (el suyo y sus subordinados) Permission772=Crear/modificar informes de gastos @@ -422,12 +632,34 @@ Permission1101=Leer órdenes de entrega Permission1102=Crear/modificar órdenes de entrega Permission1104=Validar órdenes de entrega Permission1109=Eliminar pedidos de entrega +Permission1121=Leer propuestas de proveedores +Permission1122=Crear / modificar propuestas de proveedores. +Permission1123=Validar propuestas de proveedores. +Permission1124=Enviar propuestas de proveedores +Permission1125=Eliminar propuestas de proveedores +Permission1126=Cerrar las solicitudes de precios de proveedores Permission1181=Leer proveedores +Permission1182=Leer órdenes de compra +Permission1183=Crear / modificar órdenes de compra. +Permission1184=Validar pedidos de compra +Permission1185=Aprobar ordenes de compra +Permission1186=Ordenar órdenes de compra +Permission1187=Acuse de recibo de las órdenes de compra +Permission1188=Eliminar órdenes de compra +Permission1190=Aprobar (segunda aprobación) órdenes de compra Permission1201=Obtener el resultado de una exportación Permission1202=Crear / Modificar una exportación +Permission1231=Leer facturas de proveedores +Permission1232=Crear / modificar facturas de proveedores +Permission1233=Validar facturas de proveedores +Permission1234=Eliminar facturas de proveedores +Permission1235=Enviar facturas de proveedores por correo electrónico +Permission1236=Exportar facturas de proveedores, atributos y pagos. +Permission1237=Órdenes de compra de exportación y sus detalles. Permission1251=Ejecutar las importaciones masivas de datos externos en la base de datos (carga de datos) Permission1321=Exportar facturas, atributos y pagos de clientes Permission1322=Reabrir una factura paga +Permission1421=Exportación de pedidos y atributos de venta. Permission2414=Exportar acciones / tareas de otros Permission2501=Leer / Descargar documentos Permission2502=Descargar documentos @@ -435,6 +667,12 @@ Permission2503=Presentar o eliminar documentos Permission2515=Configurar directorios de documentos Permission2801=Use el cliente FTP en modo de lectura (navegue y descargue solamente) Permission2802=Utilice el cliente FTP en modo de escritura (eliminar o cargar archivos) +Permission4004=Empleados de exportación +Permission10001=Leer el contenido del sitio web +Permission10002=Crear / modificar el contenido del sitio web (contenido html y javascript) +Permission10003=Crear / modificar el contenido del sitio web (código php dinámico). Peligroso, debe reservarse a desarrolladores restringidos. +Permission20001=Lea las solicitudes de licencia (su licencia y las de sus subordinados) +Permission20002=Cree / modifique sus solicitudes de licencia (su licencia y las de sus subordinados) Permission20003=Eliminar solicitudes de permiso Permission20004=Lea todas las solicitudes de licencia (incluso del usuario no subordinado) Permission20005=Crear / modificar solicitudes de abandono para todos (incluso para usuarios no subordinados) @@ -443,38 +681,77 @@ Permission23001=Leer trabajo programado Permission23002=Crear / actualizar trabajo programado Permission23003=Eliminar trabajo programado Permission23004=Ejecutar trabajo programado +Permission50101=Use el punto de venta Permission50201=Leer transacciones Permission50202=Transacciones de importación +Permission50401=Enlazar productos y facturas con cuentas contables. +Permission50411=Leer operaciones en el libro mayor +Permission50412=Escribir / editar operaciones en el libro mayor. +Permission50420=Reportes y reportes de exportación (facturación, balance, revistas, libro mayor) +Permission50440=Gestionar plan de cuentas, configuración de contabilidad. +Permission51002=Crear / actualizar activos +Permission51005=Configuración de tipos de activos Permission54001=Impresión Permission59003=Lea cada margen de usuario Permission63004=Enlace de recursos a eventos de la agenda +DictionaryCompanyType=Tipos de terceros +DictionaryCompanyJuridicalType=Entidades legales de terceros +DictionaryProspectLevel=Potencial de prospecto +DictionaryCanton=Estados / Provincias +DictionaryCivility=Título de civilidad +DictionarySocialContributions=Tipos de impuestos sociales o fiscales. DictionaryVAT=Tipos de IVA o tasas de impuestos a las ventas DictionaryRevenueStamp=Cantidad de estampillas fiscales +DictionaryPaymentConditions=Términos de pago +DictionaryTypeContact=Contacto / tipos de direcciones +DictionaryTypeOfContainer=Sitio web - Tipo de páginas web / contenedores DictionaryEcotaxe=Ecotax (RAEE) +DictionaryFormatCards=Formatos de tarjeta DictionaryFees=Informe de gastos: tipos de líneas de informe de gastos DictionarySendingMethods=Métodos de envío +DictionaryStaff=Número de empleados DictionaryAvailability=Retraso en la entrega DictionarySource=Origen de las propuestas / órdenes DictionaryAccountancyCategory=Grupos personalizados para informes DictionaryAccountancysystem=Modelos para el cuadro de cuentas DictionaryAccountancyJournal=Libros contables +DictionaryEMailTemplates=Plantillas de correo electrónico +DictionaryMeasuringUnits=Unidades de medida DictionaryProspectStatus=Estado de la perspectiva +DictionaryHolidayTypes=Tipos de licencia +DictionaryOpportunityStatus=Estado de plomo para proyecto / lider +BackToModuleList=Volver a la lista de módulos +BackToDictionaryList=Volver a la lista de diccionarios TypeOfRevenueStamp=Tipo de sello fiscal +VATManagement=Gestión de impuestos de ventas +VATIsUsedDesc=De forma predeterminada, al crear prospectos, facturas, pedidos, etc., la tasa del impuesto a las ventas sigue la regla estándar activa:
Si el vendedor no está sujeto al impuesto sobre las ventas, entonces el impuesto sobre las ventas se establece de manera predeterminada en 0. Fin de la regla.
Si (el país del vendedor = el país del comprador), entonces el impuesto sobre las ventas por defecto es igual al impuesto sobre las ventas del producto en el país del vendedor. Fin de la regla.
Si el vendedor y el comprador están en la Comunidad Europea y los productos son productos relacionados con el transporte (transporte, envío, línea aérea), el IVA predeterminado es 0. Esta regla depende del país del vendedor; consulte con su contador. El IVA debe ser pagado por el comprador a la oficina de aduanas de su país y no al vendedor. Fin de la regla.
Si el vendedor y el comprador pertenecen a la Comunidad Europea y el comprador no es una empresa (con un número de IVA intracomunitario registrado), entonces el IVA está predeterminado para la tasa de IVA del país del vendedor. Fin de la regla.
Si el vendedor y el comprador están en la Comunidad Europea y el comprador es una empresa (con un número de IVA intracomunitario registrado), el IVA es 0 por defecto. Fin de la regla.
En cualquier otro caso, el valor predeterminado propuesto es Impuesto de ventas = 0. Fin de la regla. +VATIsNotUsedDesc=Por defecto, el impuesto a las ventas propuesto es 0, que se puede utilizar para casos como asociaciones, individuos o pequeñas empresas. +VATIsUsedExampleFR=En Francia, significa empresas u organizaciones que tienen un sistema fiscal real (real real o normal simplificado). Un sistema en el que se declara el IVA. +VATIsNotUsedExampleFR=En Francia, significa asociaciones que no están declaradas sin impuestos de ventas o compañías, organizaciones o profesiones liberales que han elegido el sistema fiscal de microempresas (impuestos a las ventas en franquicia) y pagaron una franquicia Impuestos a las ventas sin declaración de impuestos a las ventas. Esta opción mostrará la referencia "Impuesto de ventas no aplicable - art-293B de CGI" en las facturas. LocalTax1IsNotUsed=No use el segundo impuesto +LocalTax1IsUsedDesc=Use un segundo tipo de impuesto (que no sea el primero) +LocalTax1IsNotUsedDesc=No use otro tipo de impuesto (que no sea el primero) LocalTax1Management=Segundo tipo de impuesto LocalTax2IsNotUsed=No use el tercer impuesto +LocalTax2IsUsedDesc=Use un tercer tipo de impuesto (que no sea el primero) +LocalTax2IsNotUsedDesc=No use otro tipo de impuesto (que no sea el primero) LocalTax2Management=Tercer tipo de impuesto +LocalTax1IsUsedDescES=La tasa de RE por defecto al crear prospectos, facturas, pedidos, etc. sigue la regla estándar activa:
Si el comprador no está sujeto a RE, RE por defecto = 0. Fin de la regla.
Si el comprador está sujeto a RE, entonces RE es el predeterminado. Fin de la regla.
LocalTax1IsNotUsedDescES=Por defecto, la RE propuesta es 0. Fin de la regla. LocalTax1IsUsedExampleES=En España son profesionales sujetos a algunas secciones específicas del IAE español. LocalTax1IsNotUsedExampleES=En España son profesionales y sociedades y están sujetas a ciertas secciones del IAE español. +LocalTax2IsUsedDescES=La tasa de IRPF por defecto al crear prospectos, facturas, pedidos, etc. sigue la regla estándar activa:
Si el vendedor no está sujeto a IRPF, entonces IRPF por defecto = 0. Fin de la regla.
Si el vendedor está sujeto a IRPF, entonces el IRPF por defecto. Fin de la regla.
LocalTax2IsNotUsedDescES=Por defecto, el IRPF propuesto es 0. Fin de la regla. LocalTax2IsUsedExampleES=En España, autónomos y profesionales independientes que prestan servicios y empresas que han elegido el sistema impositivo de los módulos. +LocalTax2IsNotUsedExampleES=En España son empresas no sujetas al régimen fiscal de los módulos. CalcLocaltax=Informes sobre impuestos locales CalcLocaltax1Desc=Los informes de impuestos locales se calculan con la diferencia entre las ventas locales y las compras locales. CalcLocaltax2Desc=Los informes de impuestos locales son el total de compras de impuestos locales CalcLocaltax3Desc=Los informes de impuestos locales son el total de las ventas de impuestos locales LabelUsedByDefault=Etiqueta usada por defecto si no se puede encontrar traducción para el código LabelOnDocuments=Etiqueta en documentos +LabelOrTranslationKey=Etiqueta o clave de traducción +NbOfDays=Numero de dias AtEndOfMonth=Al final del mes CurrentNext=Actual / Siguiente Offset=Compensar @@ -489,6 +766,7 @@ DatabasePort=Puerto de base DatabaseUser=Usuario de la base DatabasePassword=Contraseña de la base Tables=Mesas +NbOfRecord=No. de registros DriverType=Tipo de controlador SummarySystem=Resumen de información del sistema SummaryConst=Lista de todos los parámetros de configuración de Dolibarr @@ -499,17 +777,36 @@ Skin=Tema de la piel DefaultSkin=Tema predeterminado de la piel MaxSizeList=Longitud máxima para la lista DefaultMaxSizeList=Longitud máxima predeterminada para las listas +DefaultMaxSizeShortList=Longitud máxima predeterminada para listas cortas (es decir, en la tarjeta del cliente) MessageLogin=Mensaje de la página de inicio LoginPage=Página de inicio de sesión PermanentLeftSearchForm=Formulario de búsqueda permanente en el menú de la izquierda +EnableMultilangInterface=Habilitar soporte multilenguaje EnableShowLogo=Mostrar logo en el menú de la izquierda CompanyInfo=Empresa / Organización +CompanyIds=Identidades de la empresa / organización CompanyCurrency=Moneda principal DoNotSuggestPaymentMode=No sugiera NoActiveBankAccountDefined=No se definió una cuenta bancaria activa OwnerOfBankAccount=Propietario de la cuenta bancaria %s BankModuleNotActive=Módulo de cuentas bancarias no habilitado ShowBugTrackLink=Mostrar el link "%s" +DelaysOfToleranceDesc=Establezca el retraso antes de que aparezca un icono de alerta %s en la pantalla para el elemento tardío. +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Orden no procesada +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Orden de compra no procesada +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Propuesta no cerrada +Delays_MAIN_DELAY_PROPALS_TO_BILL=Propuesta no facturada +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Servicio para activar +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Factura del proveedor sin pagar +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Factura del cliente sin pagar +Delays_MAIN_DELAY_MEMBERS=Cuota de membresía retrasada +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Depósito de cheques no hecho +Delays_MAIN_DELAY_EXPENSEREPORTS=Informe de gastos para aprobar +SetupDescription1=Antes de comenzar a utilizar Dolibarr, se deben definir algunos parámetros iniciales y habilitar / configurar los módulos. +SetupDescription2=Las siguientes dos secciones son obligatorias (las dos primeras entradas en el menú de configuración): +SetupDescription3=%s -> %s
Parámetros básicos utilizados para personalizar el comportamiento predeterminado de su aplicación (por ejemplo, para funciones relacionadas con el país). +SetupDescription4=%s -> %s
Este software es un conjunto de muchos módulos / aplicaciones, todos más o menos independientes. Los módulos relevantes a sus necesidades deben estar habilitados y configurados. Los nuevos elementos / opciones se agregan a los menús con la activación de un módulo. +SetupDescription5=Otras entradas del menú de configuración manejan parámetros opcionales. LogEvents=Eventos de auditoría de seguridad InfoDolibarr=Sobre Dolibarr InfoBrowser=Acerca del navegador @@ -519,35 +816,67 @@ InfoDatabase=Acerca de la base InfoPerf=Sobre representaciones BrowserOS=Sistema operativo del navegador ListOfSecurityEvents=Lista de eventos de seguridad de Dolibarr +LogEventDesc=Habilitar el registro para eventos de seguridad específicos. Administradores el registro a través del menú %s - %s . Advertencia, esta característica puede generar una gran cantidad de datos en la base de datos. AreaForAdminOnly=Los parámetros de configuración solo pueden modificarse por usuarios administradores. SystemInfoDesc=La información del sistema es información técnica miscelánea que obtienes en modo solo lectura y visible solo para los administradores. +CompanyFundationDesc=Editar la información de la empresa / entidad. Haga clic en el botón "%s" o "%s" en la parte inferior de la página. +AccountantDesc=Si tiene un contador / contador externo, puede editar aquí su información. AvailableModules=Aplicación / módulos disponibles ToActivateModule=Para activar los módulos, vaya al Área de configuración (Inicio-> Configuración-> Módulos). SessionTimeOut=Tiempo de espera para la sesión +SessionExplanation=Este número garantiza que la sesión nunca caducará antes de este retraso, si el limpiador de sesión se realiza mediante el limpiador de sesión interno de PHP (y nada más). El limpiador interno de sesiones de PHP no garantiza que la sesión caduque después de este retraso. Expirará, después de este retraso, y cuando se ejecute el limpiador de sesiones, por lo que todos los accesos %s / %s , pero solo durante el acceso realizado por otras sesiones (si el valor es 0, significa que la eliminación de la sesión se realiza solo mediante un proceso externo) .
Nota: en algunos servidores con un mecanismo de limpieza de sesión externo (cron en debian, ubuntu ...), las sesiones pueden destruirse después de un período definido por una configuración externa, sin importar el valor ingresado aquí. TriggersAvailable=Disparadores disponibles +TriggersDesc=Los disparadores son archivos que modificarán el comportamiento del flujo de trabajo de Dolibarr una vez que se copien en el directorio htdocs / core / triggers . Realizan nuevas acciones, activadas en eventos Dolibarr (creación de nueva empresa, validación de facturas, ...). TriggerDisabledByName=Los desencadenantes en este archivo están deshabilitados por el sufijo -NORUN en su nombre. TriggerDisabledAsModuleDisabled=Los disparadores en este archivo están deshabilitados ya que el módulo %s está deshabilitado. TriggerAlwaysActive=Los activadores en este archivo están siempre activos, cualesquiera que sean los módulos Dolibarr activados. TriggerActiveAsModuleActive=Los disparadores en este archivo están activos ya que el módulo %s está habilitado. DictionaryDesc=Inserta todos los datos de referencia. Puede agregar sus valores a los valores predeterminados. +ConstDesc=Esta página le permite editar (anular) los parámetros que no están disponibles en otras páginas. Estos son en su mayoría parámetros reservados para desarrolladores / solución avanzada de problemas. Para obtener una lista completa de los parámetros disponibles, consulte aquí . MiscellaneousDesc=Todos los demás parámetros relacionados con la seguridad se definen aquí. LimitsSetup=Límites / configuración de precisión +LimitsDesc=Puede definir límites, precisiones y optimizaciones utilizadas por Dolibarr aquí +MAIN_MAX_DECIMALS_UNIT=Max. decimales por precios unitarios +MAIN_MAX_DECIMALS_TOT=Max. decimales para precios totales +MAIN_MAX_DECIMALS_SHOWN=Max. Decimales por precios mostrados en pantalla . Agregue un punto suspensivo ... después de este parámetro (por ejemplo, "2 ...") si desea ver " ... " con el sufijo del precio truncado. +MAIN_ROUNDING_RULE_TOT=Paso del rango de redondeo (para países donde el redondeo se realiza en otra cosa que no sea la base 10. Por ejemplo, coloque 0.05 si el redondeo se realiza con 0.05 pasos) UnitPriceOfProduct=Precio unitario neto de un producto +TotalPriceAfterRounding=Precio total (sin IVA / IVA incluido) después del redondeo ParameterActiveForNextInputOnly=Parámetro efectivo solo para la siguiente entrada +NoEventOrNoAuditSetup=No se ha registrado ningún evento de seguridad. Esto es normal si la auditoría no se ha habilitado en la página "Configuración - Seguridad - Eventos". +NoEventFoundWithCriteria=No se ha encontrado ningún evento de seguridad para este criterio de búsqueda. SeeLocalSendMailSetup=Consulte su configuración de sendmail local +BackupDesc2=Realice una copia de seguridad del contenido del directorio "documentos" ( %s ) que contiene todos los archivos cargados y generados. Esto también incluirá todos los archivos de volcado generados en el Paso 1. +BackupDesc3=Realice una copia de seguridad de la estructura y el contenido de su base de datos ( %s ) en un archivo de volcado. Para ello, puede utilizar el siguiente asistente. +BackupDescX=El directorio archivado debe almacenarse en un lugar seguro. BackupDescY=El archivo de volcado generado debe almacenarse en un lugar seguro. +BackupPHPWarning=La copia de seguridad no se puede garantizar con este método. Anterior recomendado. +RestoreDesc=Para restaurar una copia de seguridad de Dolibarr, se requieren dos pasos. +RestoreDesc2=Restaure el archivo de copia de seguridad (archivo zip, por ejemplo) del directorio "documentos" a una nueva instalación de Dolibarr o en este directorio actual de documentos ( %s ). +RestoreDesc3=Restaure la estructura de la base de datos y los datos de un archivo de volcado de respaldo en la base de datos de la nueva instalación de Dolibarr o en la base de datos de esta instalación actual ( %s ). Advertencia: una vez que se complete la restauración, debe usar un nombre de usuario / contraseña, que existía desde el momento de la copia de seguridad / instalación para volver a conectarse.
Para restaurar una base de datos de respaldo en esta instalación actual, puede seguir este asistente. RestoreMySQL=Importación de MySQL ForcedToByAModule=Esta regla es forzada a %s por un módulo activado +RunningUpdateProcessMayBeRequired=Parece que se requiere ejecutar el proceso de actualización (la versión del programa %s difiere de la versión de la base de datos %s) YouMustRunCommandFromCommandLineAfterLoginToUser=Debe ejecutar este comando desde la línea de comando después de iniciar sesión en un shell con el usuario %s o debe agregar la opción -W al final de la línea de comandos para proporcionar una contraseña de %s. DownloadMoreSkins=Más pieles para descargar +SimpleNumRefModelDesc=Devuelve el número de referencia con el formato %syymm-nnnn donde yy es año, mm es mes y nnnn es secuencial sin restablecimiento +ShowProfIdInAddress=Mostrar identificación profesional con direcciones +ShowVATIntaInAddress=Ocultar número de IVA intracomunitario con direcciones MeteoStdMod=Modo estandar MeteoUseMod=Haz clic para usar %s TestLoginToAPI=Prueba de inicio de sesión a la API +ExternalAccess=Acceso externo / internet +MAIN_PROXY_USE=Utilice un servidor proxy (de lo contrario el acceso es directo a internet) +MAIN_PROXY_HOST=Servidor proxy: Nombre / Dirección +MAIN_PROXY_USER=Servidor proxy: Login / Usuario +DefineHereComplementaryAttributes=Defina aquí cualquier atributo adicional / personalizado que desee incluir para: %s ExtraFields=Atributos complementarios ExtraFieldsLines=Atributos complementarios (líneas) ExtraFieldsLinesRec=Atributos complementarios (líneas plantillas de facturas) ExtraFieldsSupplierOrdersLines=Atributos complementarios (líneas de pedido) ExtraFieldsSupplierInvoicesLines=Atributos complementarios (líneas de factura) +ExtraFieldsThirdParties=Atributos complementarios (tercero) +ExtraFieldsContacts=Atributos complementarios (contactos / dirección) ExtraFieldsMember=Atributos complementarios (miembro) ExtraFieldsMemberType=Atributos complementarios (tipo de miembro) ExtraFieldsCustomerInvoices=Atributos complementarios (facturas) @@ -560,52 +889,92 @@ ExtraFieldHasWrongValue=El atributo %s tiene un valor incorrecto. AlphaNumOnlyLowerCharsAndNoSpace=solo caracteres alfanuméricos y minúsculas sin espacio SendmailOptionNotComplete=Advertencia, en algunos sistemas Linux, para enviar correos electrónicos desde su correo electrónico, la configuración de ejecución de sendmail debe contener la opción -ba (parámetro mail.force_extra_parameters en su archivo php.ini). Si algunos destinatarios nunca reciben correos electrónicos, intente editar este parámetro de PHP con mail.force_extra_parameters = -ba). PathToDocuments=Camino a los documentos +SendmailOptionMayHurtBuggedMTA=La función para enviar correos electrónicos mediante el método "PHP mail direct" generará un mensaje de correo que algunos servidores de correo de recepción podrían no analizar correctamente. El resultado es que algunas personas alojadas en esas plataformas con errores no pueden leer algunos correos. Este es el caso de algunos proveedores de Internet (Ej .: Orange en Francia). Este no es un problema con Dolibarr o PHP, sino con el servidor de correo receptor. Sin embargo, puede agregar una opción MAIN_FIX_FOR_BUGGED_MTA a 1 en Configuración - Otros para modificar Dolibarr para evitar esto. Sin embargo, puede experimentar problemas con otros servidores que utilizan estrictamente el estándar SMTP. La otra solución (recomendada) es utilizar el método "biblioteca de sockets SMTP", que no tiene inconvenientes. TranslationSetup=Configuración de la traducción TranslationKeySearch=Buscar una clave o cadena de traducción TranslationOverwriteKey=Sobrescribir una cadena de traducción +TranslationDesc=Cómo configurar el idioma de visualización:
* Predeterminado / En todo el sistema: menú Inicio -> Configuración -> Mostrar
* Por usuario: haga clic en el nombre de usuario en la parte superior de la pantalla y modifique la pestaña Configuración de pantalla de usuario en la tarjeta de usuario. TranslationOverwriteDesc=También puede anular cadenas que llenan la siguiente tabla. Elija su idioma del menú desplegable "%s", inserte la cadena de clave de traducción en "%s" y su nueva traducción en "%s" +TranslationOverwriteDesc2=Puede usar la otra pestaña para ayudarlo a saber qué clave de traducción usar TranslationString=Cadena de traducción CurrentTranslationString=Cadena de traducción actual WarningAtLeastKeyOrTranslationRequired=Se requiere un criterio de búsqueda al menos para la cadena clave o de traducción NewTranslationStringToShow=Nueva cadena de traducción para mostrar OriginalValueWas=La traducción original se sobrescribe. El valor original fue:

%s +TransKeyWithoutOriginalValue=Obligó una nueva traducción para la clave de traducción ' %s ' que no existe en ningún archivo de idioma TotalNumberOfActivatedModules=Aplicaciones/módulos activos: %s/%s YouMustEnableOneModule=Debe al menos habilitar 1 módulo +ClassNotFoundIntoPathWarning=La clase %s no se encuentra en la ruta de PHP +OnlyFollowingModulesAreOpenedToExternalUsers=Tenga en cuenta que solo los siguientes módulos están disponibles para usuarios externos (independientemente de los permisos de dichos usuarios) y solo si se otorgan permisos:
SuhosinSessionEncrypt=Almacenamiento de sesión cifrado por Suhosin ConditionIsCurrently=La condición es actualmente %s +YouUseBestDriver=Utiliza el controlador %s, que es el mejor controlador disponible en la actualidad. +YouDoNotUseBestDriver=Utiliza el controlador %s, pero se recomienda el controlador %s. +NbOfProductIsLowerThanNoPb=Sólo tiene productos / servicios %s en la base de datos. Esto no requiere ninguna optimización particular. SearchOptim=Optimización de búsqueda +YouHaveXProductUseSearchOptim=Tiene productos %s en la base de datos. Debe agregar la constante PRODUCT_DONOTSEARCH_ANYWHERE a 1 en Home-Setup-Other. Limite la búsqueda al comienzo de las cadenas, lo que hace posible que la base de datos utilice índices y debería obtener una respuesta inmediata. +BrowserIsOK=Está utilizando el navegador web %s. Este navegador está bien para la seguridad y el rendimiento. +BrowserIsKO=Está utilizando el navegador web %s. Se sabe que este navegador es una mala elección para la seguridad, el rendimiento y la confiabilidad. Recomendamos usar Firefox, Chrome, Opera o Safari. XCacheInstalled=XCache está cargado. +AddRefInList=Mostrar cliente / vendedor ref. Lista de información (lista de selección o cuadro combinado) y la mayoría de los hipervínculos.
Aparecerán terceros con un formato de nombre de "CC12345 - SC45678 - The Big Company corp". en lugar de "The Big Company corp". +AddAdressInList=Mostrar la lista de información de la dirección del cliente / proveedor (seleccionar lista o cuadro combinado)
Aparecerán terceros con el formato de nombre "The Big Company corp. - 21 jump street 123456 Big town - USA" en lugar de "The Big Company corp". +AskForPreferredShippingMethod=Pregunte por el método de envío preferido para terceros. FillThisOnlyIfRequired=Ejemplo: +2 (llenar solo si se experimentan problemas de compensación de zona horaria) PasswordGenerationStandard=Devuelve una contraseña generada de acuerdo con el algoritmo interno de Dolibarr: 8 caracteres que contienen números compartidos y caracteres en minúscula. +PasswordGenerationNone=No sugiera una contraseña generada. La contraseña debe escribirse manualmente. PasswordGenerationPerso=Devuelve una contraseña de acuerdo a tu configuración definida personalmente. SetupPerso=De acuerdo con tu configuración PasswordPatternDesc=Descripción del patrón de contraseña +DisableForgetPasswordLinkOnLogonPage=No mostrar el enlace "Contraseña olvidada" en la página de inicio de sesión UsersSetup=Configuración del módulo de usuarios +UserMailRequired=Email requerido para crear un nuevo usuario HRMSetup=Configuración del módulo RRHH CompanySetup=Configuración del módulo de empresas +CompanyCodeChecker=Opciones para la generación automática de códigos de clientes / proveedores. +AccountCodeManager=Opciones para la generación automática de códigos contables de clientes / proveedores. +NotificationsDesc=Las notificaciones por correo electrónico se pueden enviar automáticamente para algunos eventos de Dolibarr.
Los destinatarios de las notificaciones se pueden definir: +NotificationsDescUser=* por usuario, un usuario a la vez. +NotificationsDescGlobal=* o configurando direcciones de correo electrónico globales en esta página de configuración. +DocumentModelOdt=Genere documentos desde plantillas de OpenDocument (archivos .ODT / .ODS de LibreOffice, OpenOffice, KOffice, TextEdit, ...) WatermarkOnDraft=Marca de agua en el borrador del documento JSOnPaimentBill=Activar la función para completar automáticamente las líneas de pago en forma de pago +CompanyIdProfChecker=Reglas para las identificaciones profesionales +MustBeMandatory=¿Obligatorio crear terceros (si se define el número de IVA o el tipo de empresa)? MustBeInvoiceMandatory=Obligatorio para validar facturas? TechnicalServicesProvided=Servicios técnicos proporcionados +WebDAVSetupDesc=Este es el enlace para acceder al directorio WebDAV. Contiene un directorio "público" abierto a cualquier usuario que conozca la URL (si se permite el acceso al directorio público) y un directorio "privado" que necesita una cuenta / contraseña de inicio de sesión para acceder. +WebDavServer=URL raíz del servidor %s: %s WebCalUrlForVCalExport=Un enlace de exportación al formato %s está disponible en el siguiente enlace: %s BillsSetup=Configuración del módulo de facturas BillsNumberingModule=Modelo de numeración de facturas y notas de crédito BillsPDFModules=Modelos de documentos de factura +BillsPDFModulesAccordindToInvoiceType=Documentos de facturas de modelos según tipo de factura. PaymentsPDFModules=Modelos de documentos de pago ForceInvoiceDate=Forzar fecha de factura a fecha de validación SuggestedPaymentModesIfNotDefinedInInvoice=Modo de pago sugerido en la factura por defecto si no está definido para la factura +SuggestPaymentByRIBOnAccount=Sugerir pago por retiro en cuenta +SuggestPaymentByChequeToAddress=Sugerir pago por cheque a FreeLegalTextOnInvoices=Texto libre en las facturas WatermarkOnDraftInvoices=Marca de agua en borradores de facturas (ninguna si está vacía) PaymentsNumberingModule=Modelo de numeración de pagos +SuppliersPayment=Pagos de proveedores +SupplierPaymentSetup=Configuración de pagos de proveedores PropalSetup=Configuración del módulo Cotizaciones ProposalsNumberingModules=Módulos de numeración de cotizaciones ProposalsPDFModules=Modelos de documentos de cotizaciones +SuggestedPaymentModesIfNotDefinedInProposal=Modo de pago sugerido en la propuesta por defecto si no está definido para la propuesta FreeLegalTextOnProposal=Texto libre en cotizaciones WatermarkOnDraftProposal=Marca de agua en cotizaciones borrador (en caso de estar vacío) BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Preguntar por el destino de la cuenta bancaria +SupplierProposalSetup=Solicitud de precios de configuración del módulo de proveedores. +SupplierProposalNumberingModules=Solicitudes de precio proveedores de numeración de modelos. +SupplierProposalPDFModules=Solicitudes de precio proveedores documentos modelos. +FreeLegalTextOnSupplierProposal=Texto libre en las solicitudes de precios proveedores +WatermarkOnDraftSupplierProposal=Marca de agua en los proveedores de solicitudes de precios de borrador (ninguno si está vacío) BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Preguntar por el destino de la cuenta bancaria de la solicitud de precio WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Pida la fuente de Warehouse para ordenar BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Preguntar por el destino de la cuenta bancaria de la orden de compra +OrdersSetup=Configuración de gestión de órdenes de venta OrdersNumberingModules=Modelos de numeración de pedidos OrdersModelModule=Modelos de documentos de pedido WatermarkOnDraftOrders=Marca de agua a borradores de pedidos (ninguna si está vacía) @@ -622,7 +991,9 @@ TemplatePDFContracts=Modelos de documentos de contratos WatermarkOnDraftContractCards=Marca de agua en los proyectos de contratos (ninguno si está vacío) MembersSetup=Configuración del módulo de miembros AdherentLoginRequired=Administre un inicio de sesión para cada miembro +AdherentMailRequired=Correo electrónico requerido para crear un nuevo miembro MemberSendInformationByMailByDefault=La casilla de verificación para enviar la confirmación de correo a los miembros (validación o nueva suscripción) está activada por defecto +MEMBER_REMINDER_EMAIL=Habilitar recordatorio automático por correo electrónico de suscripciones caducadas. Nota: El módulo %s debe estar habilitado y configurado correctamente para enviar recordatorios. LDAPSetup=Configuración de LDAP LDAPSynchronizeUsers=Organización de usuarios en LDAP LDAPSynchronizeGroups=Organización de grupos en LDAP @@ -630,6 +1001,7 @@ LDAPSynchronizeContacts=Organización de contactos en LDAP LDAPSynchronizeMembers=Organización de los miembros de la fundación en LDAP LDAPSynchronizeMembersTypes=La organización de los miembros de la fundación escribe en LDAP LDAPServerPort=Puerto de servicio +LDAPServerPortExample=Puerto predeterminado: 389 LDAPServerUseTLS=Usa TLS LDAPServerUseTLSExample=Su servidor LDAP usa TLS LDAPAdminDn=Administrador DN @@ -666,21 +1038,44 @@ LDAPTestSynchroMemberType=Pruebe la sincronización del tipo de miembro LDAPTestSearch=Pruebe una búsqueda LDAP LDAPSynchroOK=Prueba de sincronización exitosa LDAPSynchroKO=Prueba de sincronización fallida +LDAPSynchroKOMayBePermissions=Prueba de sincronización fallida. Compruebe que la conexión al servidor esté configurada correctamente y permita las actualizaciones de LDAP LDAPTCPConnectOK=Conexión TCP al servidor LDAP exitosa (Servidor = %s, Puerto = %s) LDAPTCPConnectKO=No se pudo conectar TCP al servidor LDAP (Servidor = %s, Puerto = %s) +LDAPBindOK=Conexión / autenticación con el servidor LDAP correcta (Servidor = %s, Puerto = %s, Admin = %s, Contraseña = %s) +LDAPBindKO=Falló la conexión / autenticación al servidor LDAP (Servidor = %s, Puerto = %s, Admin = %s, Contraseña = %s) LDAPSetupForVersion3=Servidor LDAP configurado para la versión 3 LDAPSetupForVersion2=Servidor LDAP configurado para la versión 2 LDAPDolibarrMapping=Mapas de Dolibarr LDAPLdapMapping=Asignación de LDAP LDAPFieldLoginUnix=Iniciar sesión (Unix) +LDAPFieldLoginExample=Ejemplo: uid +LDAPFilterConnectionExample=Ejemplo: & (objectClass = inetOrgPerson) +LDAPFieldLoginSambaExample=Ejemplo: samaccountname +LDAPFieldFullnameExample=Ejemplo: cn +LDAPFieldPasswordNotCrypted=Contraseña no cifrada +LDAPFieldPasswordExample=Ejemplo: userPassword +LDAPFieldCommonNameExample=Ejemplo: cn +LDAPFieldNameExample=Ejemplo: sn LDAPFieldFirstName=Primer nombre +LDAPFieldFirstNameExample=Ejemplo: givenName LDAPFieldMail=Dirección de correo electrónico +LDAPFieldMailExample=Ejemplo: correo LDAPFieldPhone=Número de teléfono profesional +LDAPFieldPhoneExample=Ejemplo: número telefónico LDAPFieldHomePhone=Número de teléfono personal +LDAPFieldHomePhoneExample=Ejemplo: homephone LDAPFieldMobile=Teléfono celular +LDAPFieldMobileExample=Ejemplo: móvil LDAPFieldFax=Número de fax +LDAPFieldFaxExample=Ejemplo: facsimiletelephonenumber LDAPFieldAddress=Calle +LDAPFieldAddressExample=Ejemplo: calle +LDAPFieldZipExample=Ejemplo: código postal +LDAPFieldTownExample=Ejemplo: l +LDAPFieldDescriptionExample=Ejemplo: descripción LDAPFieldNotePublic=Nota pública +LDAPFieldCompanyExample=Ejemplo: o +LDAPFieldSidExample=Ejemplo: objectid LDAPFieldEndLastSubscription=Fecha de finalización de la suscripción LDAPFieldTitleExample=Ejemplo: título LDAPSetupNotComplete=La configuración de LDAP no está completa (vaya a las pestañas de otros) @@ -692,26 +1087,38 @@ LDAPDescMembers=Esta página le permite definir el nombre de los atributos LDAP LDAPDescValues=Los valores de ejemplo están diseñados para OpenLDAP con los siguientes esquemas cargados: core.schema, cosine.schema, inetorgperson.schema ). Si usa estos valores y OpenLDAP, modifique su archivo de configuración de LDAP slapd.conf para que se carguen todos estos esquemas. ForANonAnonymousAccess=Para un acceso autenticado (para un acceso de escritura, por ejemplo) PerfDolibarr=Configuración de rendimiento / informe de optimización +YouMayFindPerfAdviceHere=Esta página proporciona algunas verificaciones o consejos relacionados con el rendimiento. +NotInstalled=No está instalado, por lo que su servidor no se ralentiza por esto. ApplicativeCache=Caché aplicable MemcachedNotAvailable=No se encontró caché aplicativo. Puede mejorar el rendimiento instalando un servidor de caché Memcached y un módulo capaz de usar este servidor de caché. Más información aquí http: //wiki.dolibarr.org/index.php/Module_MemCached_EN .
Tenga en cuenta que muchos proveedores de alojamiento web no proporcionan dicho servidor de caché. MemcachedModuleAvailableButNotSetup=El módulo memcached para la memoria caché aplicativa se encuentra pero la configuración del módulo no está completa. MemcachedAvailableAndSetup=El módulo memcached dedicado a usar el servidor memcached está habilitado. OPCodeCache=Caché OPCode +NoOPCodeCacheFound=No se ha encontrado ningún caché OPCode. Quizás esté utilizando un caché OPCode que no sea XCache o eAccelerator (bueno), o tal vez no tenga un caché OPCode (muy malo). HTTPCacheStaticResources=Caché HTTP para recursos estáticos (css, img, javascript) FilesOfTypeCached=Los archivos del tipo %s están en caché en el servidor HTTP FilesOfTypeNotCached=El servidor HTTP no almacena en caché los archivos del tipo %s FilesOfTypeCompressed=Los archivos del tipo %s están comprimidos por el servidor HTTP FilesOfTypeNotCompressed=Los archivos del tipo %s no son comprimidos por el servidor HTTP CacheByServer=Caché por servidor +CacheByServerDesc=Por ejemplo, usando la directiva de Apache "ExpiresByType image / gif A2592000" CacheByClient=Caché por navegador CompressionOfResources=Compresión de respuestas HTTP +CompressionOfResourcesDesc=Por ejemplo, usando la directiva de Apache "AddOutputFilterByType DEFLATE" TestNotPossibleWithCurrentBrowsers=Tal detección automática no es posible con los navegadores actuales +DefaultValuesDesc=Aquí puede definir el valor predeterminado que desea utilizar al crear un nuevo registro, y / o filtros predeterminados o el orden de clasificación cuando enumera los registros. DefaultSearchFilters=Filtros de búsqueda predeterminados DefaultSortOrder=Ordenar por defecto +DefaultMandatory=Campos de formulario obligatorios ProductSetup=Configuración del módulo de productos ServiceSetup=Configuración del módulo de servicios ProductServiceSetup=Configuración de módulos de productos y servicios +NumberOfProductShowInSelect=Número máximo de productos para mostrar en las listas de selección de combo (0 = sin límite) +ViewProductDescInFormAbility=Mostrar descripciones de productos en formularios (de lo contrario, se muestra en una ventana emergente de información sobre herramientas) MergePropalProductCard=Activar en el producto / servicio pestaña Archivos adjuntos una opción para combinar el documento PDF del producto con la propuesta PDF azur si el producto / servicio figura en la propuesta +ViewProductDescInThirdpartyLanguageAbility=Mostrar descripciones de los productos en el idioma del tercero. +UseSearchToSelectProductTooltip=Además, si tiene una gran cantidad de productos (> 100 000), puede aumentar la velocidad configurando la constante PRODUCT_DONOTSEARCH_ANYWHERE en 1 en Configuración-> Otros. La búsqueda se limitará entonces al inicio de la cadena. +UseSearchToSelectProduct=Espere hasta que presione una tecla antes de cargar el contenido de la lista de combo de productos (esto puede aumentar el rendimiento si tiene una gran cantidad de productos, pero es menos conveniente) SetDefaultBarcodeTypeProducts=Tipo de código de barras predeterminado para usar en productos SetDefaultBarcodeTypeThirdParties=Tipo de código de barras predeterminado para usar con terceros UseUnits=Defina una unidad de medida para Cantidad durante la orden, propuesta o edición de líneas de factura @@ -745,14 +1152,21 @@ BarcodeDescDATAMATRIX=Código de barras del tipo Datamatrix BarcodeDescQRCODE=Código de barras del tipo de código QR GenbarcodeLocation=Herramienta de línea de comandos de generación de código de barras (utilizada por el motor interno para algunos tipos de códigos de barras). Debe ser compatible con "genbarcode".
Por ejemplo: / usr / local / bin / genbarcode BarCodeNumberManager=Administrador para definir automáticamente los números de código de barras +WithdrawalsSetup=Configuración del módulo de pagos de débito directo. ExternalRSSSetup=Configuración de importaciones de RSS externo NewRSS=Nueva fuente RSS RSSUrlExample=Una fuente RSS interesante MailingSetup=Configuración del módulo de correo electrónico +MailingEMailFrom=Correo electrónico del remitente (De) para los correos electrónicos enviados por el módulo de correo electrónico +MailingEMailError=Devolver correo electrónico (Errors-to) para correos electrónicos con errores MailingDelay=Segundos para esperar después de enviar el siguiente mensaje +NotificationSetup=Configuración del módulo de notificación por correo electrónico +NotificationEMailFrom=Correo electrónico del remitente (De) para correos electrónicos enviados por el módulo de notificaciones FixedEmailTarget=Recipiente +SendingsSetup=Configuración del módulo de envío SendingsReceiptModel=Modelo de recibo de envío SendingsNumberingModules=Módulos de numeración de los mensajes +NoNeedForDeliveryReceipts=En la mayoría de los casos, las hojas de envío se utilizan como hojas para las entregas a los clientes (lista de productos para enviar) y hojas que son recibidas y firmadas por el cliente. Por lo tanto, el recibo de entregas del producto es una función duplicada y rara vez se activa. DeliveryOrderNumberingModules=Módulo de numeración de recibos de entregas de productos DeliveryOrderModel=Modelo de recepción de entregas de productos DeliveriesOrderAbility=Productos de soporte recibos de entregas @@ -760,10 +1174,12 @@ FreeLegalTextOnDeliveryReceipts=Texto libre en recibos de entrega ActivateFCKeditor=Activa el editor avanzado para: FCKeditorForCompany=Creación / edición WYSIWIG de descripción y nota de elementos (excepto productos / servicios) FCKeditorForProduct=WYSIWIG creación / edición de productos / servicios descripción y nota +FCKeditorForProductDetails=Creación / edición WYSIWIG de líneas de detalles de productos para todas las entidades (propuestas, pedidos, facturas, etc.). Advertencia: el uso de esta opción para este caso no se recomienda seriamente, ya que puede crear problemas con los caracteres especiales y el formato de página al crear archivos PDF. FCKeditorForMailing=Creación / edición WYSIWIG para eMailings masivos (Herramientas-> eMailing) FCKeditorForUserSignature=Creación / edición WYSIWIG de la firma del usuario FCKeditorForMail=Creación / edición WYSIWIG para todo el correo (excepto Herramientas-> correo electrónico) StockSetup=Configuración del módulo de stock +IfYouUsePointOfSaleCheckModule=Si utiliza el módulo de Punto de Venta (POS) provisto por defecto o un módulo externo, su configuración puede ser ignorada por su módulo de POS. La mayoría de los módulos de POS están diseñados de forma predeterminada para crear una factura de inmediato y disminuir el stock, independientemente de las opciones aquí. Por lo tanto, si necesita o no una disminución de existencias al registrar una venta desde su POS, verifique también la configuración de su módulo POS. MenuDeleted=Menú borrado NotTopTreeMenuPersonalized=Menús personalizados no vinculados a una entrada del menú superior Menu=Selección de menú @@ -781,6 +1197,7 @@ DetailRight=Condición para mostrar menús grises no autorizados DetailLangs=Nombre de archivo Lang para la traducción del código de etiqueta DetailUser=Pasante / Externo / Todos Target=Objetivo +DetailTarget=Destino para enlaces (_blank top abre una nueva ventana) DetailLevel=Nivel (-1: menú superior, 0: menú del encabezado,> 0 menú y submenú) ModifMenu=Cambio de menú ConfirmDeleteMenu=¿Seguro que quieres eliminar la entrada del menú %s? @@ -788,7 +1205,10 @@ FailedToInitializeMenu=Error al inicializar el menú TaxSetup=Impuestos, impuestos sociales o fiscales y configuración del módulo de dividendos OptionVatMode=IVA debido OptionVATDebitOption=Devengo +OptionVatDefaultDesc=El IVA se debe:
- En la entrega de bienes (basado en la fecha de factura)
- En pagos por servicios. +OptionVatDebitOptionDesc=El IVA se debe:
- En la entrega de bienes (basado en la fecha de factura)
- En factura (débito) por servicios. OptionPaymentForProductAndServicesDesc=El IVA es pagadero:
- en el pago de bienes
- en los pagos por servicios +SummaryOfVatExigibilityUsedByDefault=Tiempo de elegibilidad de IVA por defecto de acuerdo a la opción elegida: OnPayment=En pago SupposedToBePaymentDate=Fecha de pago utilizada SupposedToBeInvoiceDate=Fecha de la factura utilizada @@ -801,16 +1221,32 @@ AccountancyCodeBuy=Cuenta de compra código AgendaSetup=Configuración del módulo de eventos y agenda PasswordTogetVCalExport=Clave para autorizar el enlace de exportación PastDelayVCalExport=No exportar evento más antiguo que +AGENDA_USE_EVENT_TYPE=Usar tipos de eventos (administrados en el menú Configuración -> Diccionarios -> Tipo de eventos de agenda) +AGENDA_USE_EVENT_TYPE_DEFAULT=Establecer automáticamente este valor predeterminado para el tipo de evento en el formulario de creación de evento +AGENDA_DEFAULT_FILTER_TYPE=Configure automáticamente este tipo de evento en el filtro de búsqueda de la vista de agenda +AGENDA_DEFAULT_FILTER_STATUS=Establecer automáticamente este estado para eventos en el filtro de búsqueda de la vista de agenda AGENDA_DEFAULT_VIEW=¿Qué pestaña desea abrir de forma predeterminada al seleccionar el menú Agenda? AGENDA_REMINDER_EMAIL=Habilite el recordatorio de eventos por correo electrónico (la opción recordar/demorar se puede definir en cada evento). Nota: El módulo %s debe estar habilitado y configurado correctamente para que el recordatorio se envíe con la frecuencia correcta. +AGENDA_REMINDER_BROWSER=Active el recordatorio de eventos en el navegador del usuario (cuando se alcanza la fecha del evento, cada usuario puede rechazar esto de la pregunta de confirmación del navegador) AGENDA_REMINDER_BROWSER_SOUND=Habilitar notificación de sonido AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda ClickToDialUrlDesc=Se llama a Url cuando se hace clic en el picto de un teléfono. En la URL, puede usar etiquetas
__ PHONETO __ que se reemplazarán por el número de teléfono de la persona a quien llamar
__ PHONEFROM __ que se reemplazará por el número de teléfono de la llamada persona (suya)
__ LOGIN __ que se reemplazará con clicktodial de inicio de sesión (definido en la tarjeta de usuario)
__ PASS __ que se reemplazará con clicktodial contraseña (definida en usuario tarjeta). +ClickToDialDesc=Este módulo hace que los números de teléfono hagan clic enlaces Un clic en el icono hará que su teléfono llame al número. Esto se puede usar para llamar a un sistema de centro de llamadas de Dolibarr que puede llamar al número de teléfono en un sistema SIP, por ejemplo. ClickToDialUseTelLink=Use solo un enlace "tel:" en los números de teléfono +ClickToDialUseTelLinkDesc=Use este método si sus usuarios tienen un softphone o una interfaz de software instalada en la misma computadora que el navegador y se le llama cuando hace clic en un enlace de su navegador que comienza con "tel:". Si necesita una solución de servidor completa (sin necesidad de instalación de software local), debe configurar esto en "No" y completar el siguiente campo. +CashDesk=Punto de venta +CashDeskSetup=Configuración del módulo de punto de venta +CashDeskThirdPartyForSell=Tercero genérico predeterminado para usar en ventas CashDeskBankAccountForSell=Cuenta predeterminada para usar para recibir pagos en efectivo +CashDeskBankAccountForCheque=Cuenta predeterminada a utilizar para recibir pagos con cheque. CashDeskBankAccountForCB=Cuenta predeterminada para usar para recibir pagos con tarjeta de crédito +CashDeskDoNotDecreaseStock=Deshabilite la disminución de existencias cuando se realiza una venta desde el punto de venta (si es "no", se realiza una disminución de existencias para cada venta realizada desde POS, independientemente de la opción establecida en el stock de módulos). CashDeskIdWareHouse=Fuerce y restrinja el almacén para utilizarlo en la disminución de existencias +StockDecreaseForPointOfSaleDisabled=Disminución de stock desde punto de venta deshabilitado +StockDecreaseForPointOfSaleDisabledbyBatch=La disminución de stock en POS no es compatible con el módulo Serial / Lot management (actualmente activo), por lo que la disminución de stock está deshabilitada. +CashDeskYouDidNotDisableStockDecease=No desactivó la disminución de existencias al realizar una venta desde el punto de venta. Por lo tanto se requiere un almacén. BookmarkSetup=Configuración del módulo marcador +BookmarkDesc=Este módulo le permite administrar los marcadores. También puede agregar accesos directos a cualquier página de Dolibarr o sitios web externos en su menú de la izquierda. NbOfBoomarkToShow=Número máximo de marcadores para mostrar en el menú de la izquierda WebServicesSetup=Configuración del módulo de servicios web WebServicesDesc=Al habilitar este módulo, Dolibarr se convierte en un servidor de servicios web para proporcionar servicios web diversos. @@ -822,10 +1258,15 @@ ApiExporerIs=Puede explorar y probar las API en la URL OnlyActiveElementsAreExposed=Solo los elementos de los módulos habilitados están expuestos WarningAPIExplorerDisabled=El explorador API se ha deshabilitado. El explorador de API no está obligado a proporcionar servicios de API. Es una herramienta para que el desarrollador encuentre / pruebe API REST. Si necesita esta herramienta, vaya a la configuración del módulo API REST para activarla. BankSetupModule=Configuración del módulo de banco +FreeLegalTextOnChequeReceipts=Texto libre en los recibos de cheques BankOrderShow=Mostrar el orden de las cuentas bancarias para los países que usan "número de banco detallado" BankOrderESDesc=Orden de exhibición en español +ChequeReceiptsNumberingModule=Verifique el módulo de numeración de recibos MultiCompanySetup=Configuración de módulo multi-compañía +SuppliersSetup=Configuración del módulo de proveedor +SuppliersCommandModel=Plantilla completa de pedido de compra (logo ...) SuppliersInvoiceModel=Plantilla completa de la factura del proveedor (logotipo ...) +SuppliersInvoiceNumberingModel=Facturas de proveedores de numeración de modelos. IfSetToYesDontForgetPermission=Si se establece en sí, no se olvide de proporcionar permisos a los grupos o usuarios permitidos para la segunda aprobación PathToGeoIPMaxmindCountryDataFile=Ruta al archivo que contiene la traducción de Maxmind a la traducción del país.
Ejemplos:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat NoteOnPathLocation=Tenga en cuenta que su archivo de datos de IP a país debe estar dentro de un directorio que su PHP puede leer (consulte la configuración de PHP open_basedir y los permisos del sistema de archivos). @@ -837,6 +1278,7 @@ ProjectsSetup=Configuración del módulo de proyecto ProjectsModelModule=Modelo de documento de informes de proyecto TasksNumberingModules=Módulo de numeración de tareas TaskModelModule=Tareas informa el modelo del documento +UseSearchToSelectProject=Espere hasta que se presione una tecla antes de cargar el contenido de la lista de combo Proyecto.
Esto puede mejorar el rendimiento si tiene una gran cantidad de proyectos, pero es menos conveniente. AccountingPeriodCard=Período contable NewFiscalYear=Nuevo período contable OpenFiscalYear=Período contable abierto @@ -851,18 +1293,27 @@ NoAmbiCaracAutoGeneration=No utilice caracteres ambiguos ("1", "l", "i", "|", "0 SalariesSetup=Configuración de los salarios del módulo SortOrder=Orden de clasificación Format=Formato +TypePaymentDesc=0: Tipo de pago del cliente, 1: Tipo de pago del proveedor, 2: Tipo de pago de los clientes y proveedores IncludePath=Incluir ruta (definida en la variable %s) ExpenseReportsSetup=Configuración del módulo Informes de gastos TemplatePDFExpenseReports=Plantillas de documentos para generar el documento de informe de gastos ExpenseReportsIkSetup=Configuración del módulo Informes de gastos: índice Milles NoModueToManageStockIncrease=No se ha activado ningún módulo capaz de gestionar el aumento automático de existencias. El aumento de existencias se realizará solo con la entrada manual. +YouMayFindNotificationsFeaturesIntoModuleNotification=Puede encontrar opciones para notificaciones por correo electrónico habilitando y configurando el módulo "Notificación". ListOfNotificationsPerUser=Lista de notificaciones por usuario * +ListOfNotificationsPerUserOrContact=Lista de notificaciones (eventos) disponibles por usuario * o por contacto ** +ListOfFixedNotifications=Lista de notificaciones fijas +GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para agregar o eliminar notificaciones para usuarios GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un tercero para agregar o eliminar notificaciones de contactos/direcciones Threshold=Límite +BackupDumpWizard=Asistente para construir el archivo de copia de seguridad SomethingMakeInstallFromWebNotPossible=La instalación del módulo externo no es posible desde la interfaz web por el siguiente motivo: +SomethingMakeInstallFromWebNotPossible2=Por esta razón, el proceso de actualización descrito aquí es un proceso manual que solo puede realizar un usuario privilegiado. InstallModuleFromWebHasBeenDisabledByFile=La instalación del módulo externo de la aplicación ha sido desactivada por su administrador. Debes pedirle que elimine el archivo %s para permitir esta función. ConfFileMustContainCustom=La instalación o creación de un módulo externo desde la aplicación necesita guardar los archivos del módulo en el directorio %s. Para que Dolibarr procese este directorio, debe configurar su conf/conf.php para agregar las 2 líneas de directiva:
$dolibarr_main_url_root_alt ='/custom';
$dolibarr_main_document_root_alt='%s/custom'; HighlightLinesOnMouseHover=Resalta las líneas de la mesa cuando el movimiento del mouse pasa por encima +HighlightLinesColor=Resalte el color de la línea cuando pase el mouse (use 'ffffff' para no resaltar) +HighlightLinesChecked=Resalte el color de la línea cuando esté marcada (use 'ffffff' para no resaltar) TextTitleColor=Color del texto del título de la página LinkColor=Color de enlaces PressF5AfterChangingThis=Presione CTRL + F5 en el teclado o borre la caché de su navegador después de cambiar este valor para que sea efectivo @@ -876,17 +1327,22 @@ BackgroundTableLineEvenColor=Color de fondo para líneas de mesas uniformes MinimumNoticePeriod=Periodo de preaviso mínimo (Su solicitud de ausencia debe hacerse antes de este retraso) NbAddedAutomatically=Cantidad de días añadidos a los contadores de usuarios (automáticamente) cada mes EnterAnyCode=Este campo contiene una referencia para identificar la línea. Ingrese cualquier valor de su elección, pero sin caracteres especiales. +UnicodeCurrency=Ingrese aquí entre llaves, lista de bytes que representan el símbolo de moneda. Por ejemplo: para $, ingrese [36] - para brasil R $ [82,36] - para €, ingrese [8364] ColorFormat=El color RGB está en formato HEX, por ejemplo: FF0000 PositionIntoComboList=Posición de la línea en listas combinadas SellTaxRate=Tasa de impuesto a la venta RecuperableOnly=Sí para el IVA "No percibido pero recuperable" dedicado para un estado en Francia. Mantenga el valor en "No" en todos los demás casos. +UrlTrackingDesc=Si el proveedor o el servicio de transporte ofrece una página o sitio web para verificar el estado de sus envíos, puede ingresar aquí. Puede usar la clave {TRACKID} en los parámetros de la URL para que el sistema la reemplace con el número de seguimiento que el usuario ingresó en la tarjeta de envío. +OpportunityPercent=Cuando cree un cliente potencial, definirá una cantidad estimada de proyecto / cliente potencial. De acuerdo con el estado del cliente potencial, esta cantidad se puede multiplicar por esta tasa para evaluar el monto total que todos sus clientes potenciales pueden generar. El valor es un porcentaje (entre 0 y 100). TemplateForElement=Este registro de plantilla está dedicado a qué elemento +TemplateIsVisibleByOwnerOnly=La plantilla es visible solo para el propietario VisibleNowhere=Visible en ninguna parte FillFixTZOnlyIfRequired=Ejemplo: +2 (llenar solo si se experimentó un problema) ExpectedChecksum=Suma de comprobación esperada CurrentChecksum=Cheque actual ForcedConstants=Valores constantes requeridos MailToSendProposal=Propuestas de clientes +MailToSendOrder=Ordenes de venta MailToSendInvoice=Facturas de cliente MailToSendSupplierRequestForQuotation=Solicitud de presupuesto MailToSendSupplierOrder=Ordenes de compra @@ -897,7 +1353,10 @@ YouUseLastStableVersion=Usas la última versión estable TitleExampleForMajorRelease=Ejemplo de mensaje que puede usar para anunciar esta versión principal (no dude en utilizarla en sus sitios web) TitleExampleForMaintenanceRelease=Ejemplo de mensaje que puede usar para anunciar esta versión de mantenimiento (no dude en utilizarla en sus sitios web) ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión importante con muchas características nuevas para usuarios y desarrolladores. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (versiones estables del subdirectorio). Puede leer ChangeLog para obtener la lista completa de cambios. +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión de mantenimiento, por lo que solo contiene correcciones de errores. Recomendamos a todos los usuarios actualizar a esta versión. Una versión de mantenimiento no introduce nuevas funciones o cambios en la base de datos. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (subdirectorio Estable versiones). Puede leer el registro de cambios para obtener una lista completa de los cambios. +MultiPriceRuleDesc=Cuando la opción "Varios niveles de precios por producto / servicio" está habilitada, puede definir diferentes precios (uno por nivel de precio) para cada producto. Para ahorrar tiempo, aquí puede ingresar una regla para autocalcular un precio para cada nivel basado en el precio del primer nivel, por lo que tendrá que ingresar solo un precio para el primer nivel para cada producto. Esta página está diseñada para ahorrarle tiempo, pero solo es útil si los precios de cada nivel son relativos al primer nivel. Puedes ignorar esta página en la mayoría de los casos. ModelModulesProduct=Plantillas para documentos de productos +ToGenerateCodeDefineAutomaticRuleFirst=Para poder generar códigos automáticamente, primero debe definir un administrador para definir automáticamente el número de código de barras. SeeSubstitutionVars=Ver * nota para la lista de posibles variables de sustitución AllPublishers=Todos los editores AddRemoveTabs=Agregar o eliminar pestañas @@ -916,14 +1375,75 @@ AddOtherPagesOrServices=Agregar otras páginas o servicios AddModels=Agregar documento o plantillas de numeración AddSubstitutions=Añadir sustituciones de teclas DetectionNotPossible=La detección no es posible +UrlToGetKeyToUseAPIs=Url para obtener el token para utilizar la API (una vez que se ha recibido, se guarda en la tabla de usuarios de la base de datos y debe proporcionarse en cada llamada a la API) ListOfAvailableAPIs=Lista de API disponibles +activateModuleDependNotSatisfied=El módulo "%s" depende del módulo "%s", que falta, por lo que el módulo "%1$s" puede no funcionar correctamente. Instale el módulo "%2$s" o desactive el módulo "%1$s" si quiere estar a salvo de alguna sorpresa +CommandIsNotInsideAllowedCommands=El comando que está intentando ejecutar no está en la lista de comandos permitidos definidos en el parámetro $ dolibarr_main_restrict_os_commands en el archivo conf.php . LandingPage=Página de destino +SamePriceAlsoForSharedCompanies=Si utiliza un módulo de varias empresas, con la opción "Precio único", el precio también será el mismo para todas las empresas si los productos se comparten entre entornos. ModuleEnabledAdminMustCheckRights=Módulo ha sido activado. Los permisos para los módulos activados se otorgaron solo a los usuarios administradores. Es posible que deba otorgar permisos a otros usuarios o grupos manualmente si es necesario. +UserHasNoPermissions=Este usuario no tiene permisos definidos. +TypeCdr=Utilice "Ninguno" si la fecha de pago es la fecha de la factura más un delta en días (delta es el campo "%s")
Use "Al final del mes", si, después de delta, la fecha debe aumentarse para llegar al final del mes (+ un "%s" opcional en días)
Utilice "Actual / Siguiente" para que la fecha del plazo de pago sea el primer N del mes después de delta (delta es el campo "%s", N se almacena en el campo "%s") BaseCurrency=Moneda de referencia de la empresa (entre en la configuración de la empresa para cambiar esto) +WarningNoteModulePOSForFrenchLaw=Este módulo %s cumple con las leyes francesas (Loi Finance 2016) porque el módulo de Registros no reversibles se activa automáticamente. +WarningInstallationMayBecomeNotCompliantWithLaw=Está intentando instalar el módulo %s que es un módulo externo. Activar un módulo externo significa que confía en el editor de ese módulo y que está seguro de que este módulo no afecta negativamente el comportamiento de su aplicación y cumple con las leyes de su país (%s). Si el módulo introduce una característica ilegal, usted se hace responsable del uso de software ilegal. +NothingToSetup=No se requiere ninguna configuración específica para este módulo. SetToYesIfGroupIsComputationOfOtherGroups=Establezca esto en sí si este grupo es un cálculo de otros grupos +EnterCalculationRuleIfPreviousFieldIsYes=Ingrese la regla de cálculo si el campo anterior se estableció en Sí (por ejemplo, 'CODEGRP1 + CODEGRP2') SeveralLangugeVariatFound=Varias variantes de lenguaje encontradas -OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. +GDPRContact=Oficial de protección de datos (DPO, privacidad de datos o contacto GDPR) +GDPRContactDesc=Si almacena datos sobre empresas / ciudadanos europeos, puede nombrar al contacto que es responsable del Reglamento general de protección de datos aquí +HelpOnTooltip=Texto de ayuda para mostrar en información sobre herramientas +HelpOnTooltipDesc=Coloque texto o una clave de traducción aquí para que el texto se muestre en una información sobre herramientas cuando este campo aparezca en un formulario +YouCanDeleteFileOnServerWith=Puede eliminar este archivo en el servidor con la línea de comandos:
%s +ChartLoaded=Plan de cuenta cargado +EnableFeatureFor=Habilitar características para %s +VATIsUsedIsOff=Nota: La opción de usar el impuesto sobre las ventas o el IVA se ha establecido en Desactivado en el menú %s - %s, por lo que el impuesto sobre las ventas o IVA utilizado siempre será 0 para las ventas. +SwapSenderAndRecipientOnPDF=Intercambiar la posición de la dirección del remitente y el destinatario en documentos PDF +FeatureSupportedOnTextFieldsOnly=Advertencia, función compatible solo en los campos de texto. También se debe establecer un parámetro de URL action = create o action = edit O el nombre de la página debe terminar con 'new.php' para activar esta función. +EmailCollector=Recolector de correo electronico +EmailCollectorDescription=Agregue un trabajo programado y una página de configuración para escanear los buzones de correo electrónico con regularidad (utilizando el protocolo IMAP) y registre los correos electrónicos recibidos en su aplicación, en el lugar correcto y / o cree algunos registros automáticamente (como clientes potenciales). +NewEmailCollector=Nuevo coleccionista de email +EMailHost=Host del servidor de correo electrónico IMAP +EmailcollectorOperations=Operaciones a realizar por coleccionista. +MaxEmailCollectPerCollect=Número máximo de correos electrónicos recogidos por cobro +ConfirmCloneEmailCollector=¿Está seguro de que desea clonar el recopilador de correo electrónico %s? +DateLastCollectResult=Fecha de última recopilación probada +DateLastcollectResultOk=Fecha última recogida exitosa +EmailCollectorConfirmCollectTitle=Correo electrónico recoger confirmación +EmailCollectorConfirmCollect=¿Quieres ejecutar la colección para este coleccionista ahora? +NoNewEmailToProcess=No hay correo electrónico nuevo (filtros coincidentes) para procesar +XEmailsDoneYActionsDone=correos electrónicos %s calificados, correos electrónicos %s procesados con éxito (para %s registro / acciones realizadas) +RecordEvent=Grabar evento de correo electrónico +CreateLeadAndThirdParty=Crear plomo (y tercero si es necesario) +CodeLastResult=Código de resultado más reciente +NbOfEmailsInInbox=Número de correos electrónicos en el directorio de origen +LoadThirdPartyFromName=Cargar búsqueda de terceros en %s (solo carga) +LoadThirdPartyFromNameOrCreate=Cargar búsqueda de terceros en %s (crear si no se encuentra) +ECMAutoTree=Mostrar arbol ECM automatico +OperationParamDesc=Defina valores para usar para la acción, o cómo extraer valores. Por ejemplo:
objproperty1 = SET: abc
objproperty1 = SET: un valor con reemplazo de __objproperty1__
objproperty3 = SETIFEMPTY: abc
objproperty4 = EXTRACT: HEADER: X-Myheaderkey. * [^ \\ s] + (. *)
options_myextrafield = EXTRACT: SUBJECT: ([^ \\ s] *)
object.objproperty5 = EXTRACT: BODY: el nombre de mi empresa es \\ s ([^ \\ s] *)

Utilizar una ; Char como separador para extraer o configurar varias propiedades. +OpeningHoursDesc=Introduzca aquí el horario habitual de apertura de su empresa. +ResourceSetup=Configuración del módulo de recursos UseSearchToSelectResource=Use un formulario de búsqueda para elegir un recurso (en lugar de una lista desplegable). DisabledResourceLinkUser=Deshabilitar característica para vincular un recurso a los usuarios DisabledResourceLinkContact=Deshabilitar característica para vincular un recurso a contactos ConfirmUnactivation=Confirmar restablecimiento del módulo +OnMobileOnly=Sólo en pantalla pequeña (teléfono inteligente) +DisableProspectCustomerType=Deshabilite el tipo de tercero "Prospecto + Cliente" (por lo tanto, el tercero debe ser Prospecto o Cliente, pero no pueden ser ambos) +MAIN_OPTIMIZEFORTEXTBROWSER=Simplificar la interfaz para ciegos. +MAIN_OPTIMIZEFORTEXTBROWSERDesc=Habilite esta opción si es una persona ciega o si utiliza la aplicación desde un navegador de texto como Lynx o Links. +ThisValueCanOverwrittenOnUserLevel=Este valor puede ser sobrescrito por cada usuario desde su página de usuario - pestaña '%s' +DefaultCustomerType=Tipo de tercero por defecto para el formulario de creación de "Nuevo cliente" +ABankAccountMustBeDefinedOnPaymentModeSetup=Nota: La cuenta bancaria debe definirse en el módulo de cada modo de pago (Paypal, Stripe, ...) para que esta función funcione. +RootCategoryForProductsToSellDesc=Si se define, solo los productos dentro de esta categoría o niños de esta categoría estarán disponibles en el Punto de venta +DebugBar=Barra de debug +WarningValueHigherSlowsDramaticalyOutput=Advertencia, los valores más altos ralentizan dramáticamente la salida. +EXPORTS_SHARE_MODELS=Los modelos de exportación se comparten con todos. +IfTrackingIDFoundEventWillBeLinked=Tenga en cuenta que si se encuentra un ID de seguimiento en el correo electrónico entrante, el evento se vinculará automáticamente a los objetos relacionados. +IFTTT_SERVICE_KEY=IFTTT clave de servicio +IFTTTDesc=Este módulo está diseñado para desencadenar eventos en IFTTT y / o para ejecutar alguna acción en desencadenadores IFTTT externos. +UrlForIFTTT=Punto final de URL para IFTTT +YouWillFindItOnYourIFTTTAccount=Lo encontrarás en tu cuenta de IFTTT. +EndPointFor=Punto final para %s: %s +DeleteEmailCollector=Eliminar el colector de correo electrónico +ConfirmDeleteEmailCollector=¿Estás seguro de que deseas eliminar este recopilador de correo electrónico? diff --git a/htdocs/langs/es_CL/agenda.lang b/htdocs/langs/es_CL/agenda.lang index 1c7223c54c1..d9cea825edb 100644 --- a/htdocs/langs/es_CL/agenda.lang +++ b/htdocs/langs/es_CL/agenda.lang @@ -17,8 +17,12 @@ ViewWeek=Vista de la semana ViewPerUser=Por usuario ViewPerType=Por tipo de vista AutoActions=Llenado automático +AgendaAutoActionDesc=Aquí puede definir los eventos que desea que Dolibarr cree automáticamente en Agenda. Si no se marca nada, solo las acciones manuales se incluirán en los registros y se mostrarán en la Agenda. El seguimiento automático de las acciones comerciales realizadas en objetos (validación, cambio de estado) no se guardará. +AgendaSetupOtherDesc=Esta página ofrece opciones para permitir la exportación de sus eventos Dolibarr a un calendario externo (Thunderbird, Google Calendar, etc.) AgendaExtSitesDesc=Esta página permite declarar fuentes externas de calendarios para ver sus eventos en la agenda de Dolibarr. ActionsEvents=Eventos por los cuales Dolibarr creará una acción en agenda automáticamente +EventRemindersByEmailNotEnabled=Los recordatorios de eventos por correo electrónico no se habilitaron en la configuración del módulo %s. +COMPANY_DELETEInDolibarr=%s de terceros eliminado PropalClosedSignedInDolibarr=Propuesta %s firmada PropalClosedRefusedInDolibarr=Propuesta %s rechazada PropalValidatedInDolibarr=Propuesta %s validada @@ -32,6 +36,7 @@ MemberSubscriptionDeletedInDolibarr=Suscripción %s para el miembro %s eliminado ShipmentValidatedInDolibarr=Envío %s validado ShipmentClassifyClosedInDolibarr=Envío %s clasificado facturado ShipmentUnClassifyCloseddInDolibarr=Envío %s clasificado reabierto +ShipmentBackToDraftInDolibarr=Envío %s volver al estado de borrador ShipmentDeletedInDolibarr=Envío %s eliminado OrderCreatedInDolibarr=Orden %s creado OrderValidatedInDolibarr=Orden %s validada @@ -41,22 +46,34 @@ OrderBilledInDolibarr=Orden %s clasificado facturado OrderApprovedInDolibarr=Orden %s aprobada OrderRefusedInDolibarr=Orden %s rechazada OrderBackToDraftInDolibarr=Ordene %s vuelva al estado del borrador +ProposalSentByEMail=Propuesta comercial %s enviada por correo electrónico +ContractSentByEMail=Contrato %s enviado por correo electrónico +OrderSentByEMail=Pedido de venta %s enviado por correo electrónico +InvoiceSentByEMail=Factura del cliente %s enviada por correo electrónico +SupplierOrderSentByEMail=Orden de compra %s enviada por correo electrónico +SupplierInvoiceSentByEMail=Factura del proveedor %s enviada por correo electrónico +ShippingSentByEMail=Envío %s enviado por correo electrónico ShippingValidated=Envío %s validado ProposalDeleted=Propuesta eliminada OrderDeleted=Orden eliminada InvoiceDeleted=Factura borrada +TICKET_MODIFYInDolibarr=Boleto %s modificado +TICKET_ASSIGNEDInDolibarr=Boleto %s asignado +TICKET_CLOSEInDolibarr=Boleto %s cerrado DateActionEnd=Fecha final AgendaUrlOptions1=También puede agregar los siguientes parámetros para filtrar la salida: AgendaUrlOptions3=logina =%s para restringir la salida a acciones propiedad de un usuario%s. AgendaUrlOptionsNotAdmin=logina=!%s para restringir la salida a acciones que no son propiedad del usuario %s. AgendaUrlOptions4=logint =%s para restringir la salida a acciones asignadas al usuario %s (propietario y otros). AgendaUrlOptionsProject= project = __ PROJECT_ID __ para restringir el resultado a acciones vinculadas al proyecto __ PROJECT_ID __ . +AgendaUrlOptionsNotAutoEvent=notactiontype = systemauto para excluir eventos automáticos. AgendaShowBirthdayEvents=Mostrar cumpleaños de contactos AgendaHideBirthdayEvents=Ocultar cumpleaños de contactos ExportDataset_event1=Lista de eventos de la agenda DefaultWorkingDays=Rango predeterminado de días laborables en la semana (Ejemplo: 1-5, 1-6) DefaultWorkingHours=Horas de trabajo predeterminadas en el día (Ejemplo: 9-18) ExtSites=Importar calendarios externos +ExtSitesEnableThisTool=Mostrar calendarios externos (definidos en la configuración global) en Agenda. No afecta a los calendarios externos definidos por los usuarios. AgendaExtNb=Calendario no. %s ExtSiteUrlAgenda=URL para acceder al archivo .ical DateActionBegin=Fecha del evento de inicio diff --git a/htdocs/langs/es_CL/assets.lang b/htdocs/langs/es_CL/assets.lang index aa1b21e31d6..76872a25ac6 100644 --- a/htdocs/langs/es_CL/assets.lang +++ b/htdocs/langs/es_CL/assets.lang @@ -3,11 +3,15 @@ Assets =Bienes AccountancyCodeAsset =Código de contabilidad (activo) AccountancyCodeDepreciationAsset =Código de contabilidad (cuenta de activos de depreciación) AccountancyCodeDepreciationExpense =Código de contabilidad (cuenta de gastos de depreciación) +AssetsTypeSetup=Configuración de tipo de activo DeleteType=Borrar +ConfirmDeleteAssetType=¿Estás seguro de que quieres eliminar este tipo de activo? +ShowTypeCard=Mostrar tipo '%s' ModuleAssetsName =Bienes ModuleAssetsDesc =Descripción de los activos AssetsSetup =Configuración de activos AssetsSetupPage =Página de configuración de activos +ExtraFieldsAssetsType =Atributos complementarios (Tipo de activo) AssetsTypeId=Identificación del tipo de activo AssetsTypeLabel=Etiqueta de tipo de activo MenuAssets =Bienes diff --git a/htdocs/langs/es_CL/banks.lang b/htdocs/langs/es_CL/banks.lang index 986887cb0c5..b6aa61864a8 100644 --- a/htdocs/langs/es_CL/banks.lang +++ b/htdocs/langs/es_CL/banks.lang @@ -1,8 +1,10 @@ # Dolibarr language file - Source file is en_US - banks +MenuBankCash=Bancos | Efectivo MenuVariousPayment=Pagos diversos MenuNewVariousPayment=Nuevo pago misceláneo BankAccount=cuenta bancaria BankAccounts=Cuentas bancarias +BankAccountsAndGateways=Cuentas bancarias | Puertas de acceso AccountRef=Ref de cuenta financiera AccountLabel=Etiqueta de cuenta financiera CashAccount=Cuenta de efectivo @@ -27,6 +29,8 @@ AccountStatementShort=Declaración AccountStatements=Estados de cuenta LastAccountStatements=Últimos estados de cuenta IOMonthlyReporting=Informes mensuales +BankAccountDomiciliation=Dirección del banco +RIBControlError=Fallo en la comprobación de integridad de valores. Esto significa que la información para este número de cuenta no está completa o es incorrecta (ver país, números e IBAN). CreateAccount=Crear una cuenta MenuNewFinancialAccount=Nueva cuenta financiera EditFinancialAccount=Editar cuenta @@ -51,6 +55,7 @@ ListTransactionsByCategory=Entradas de la lista / categoría TransactionsToConciliate=Entradas para conciliar Conciliable=Puede ser reconciliado Conciliation=Reconciliación +SaveStatementOnly=Guardar solo declaración ReconciliationLate=Reconciliación tarde OnlyOpenedAccount=Solo cuentas abiertas AccountToCredit=Cuenta al crédito @@ -64,10 +69,12 @@ AddBankRecord=Añadir entrada AddBankRecordLong=Agregar entrada manualmente DateConciliating=Fecha de conciliación BankLineConciliated=Entrada reconciliada -WithdrawalPayment=Pago de retiros +SupplierInvoicePayment=Pago del vendedor +WithdrawalPayment=Orden de pago de débito SocialContributionPayment=Pago de impuestos sociales/fiscales BankTransfer=transferencia bancaria BankTransfers=transferencias bancarias +TransferDesc=Tras transferir de una cuenta a otra, Dolibarr escribirá dos registros (una cuenta de débito en origen y un crédito en una cuenta de destino). La misma cantidad (excepto el signo), la etiqueta y la fecha se utilizarán para esta transacción) TransferTo=A TransferFromToDone=Una transferencia de %s a %s de %s %s ha sido grabada. CheckTransmitter=Transmisor @@ -78,6 +85,7 @@ ConfirmDeleteCheckReceipt=¿Seguro que quieres eliminar este recibo de cheque? BankChecks=Cheques bancarios BankChecksToReceipt=Cheques en espera de depósito ShowCheckReceipt=Mostrar recibo de depósito de cheques +NumberOfCheques=No. de cheque DeleteTransaction=Eliminar la entrada ConfirmDeleteTransaction=¿Seguro que quieres eliminar esta entrada? ThisWillAlsoDeleteBankRecord=Esto también eliminará la entrada bancaria generada @@ -92,6 +100,8 @@ PaymentDateUpdateFailed=La fecha de pago no se pudo actualizar Transactions=Actas BankTransactionLine=Entrada bancaria AllAccounts=Todas las cuentas bancarias y de efectivo +FutureTransaction=Transacción futura. No se puede reconciliar. +SelectChequeTransactionAndGenerate=Seleccione / filtrar cheques para incluir en el recibo de depósito de cheques y haga clic en "Crear". InputReceiptNumber=Elija el extracto bancario relacionado con la conciliación. Use un valor numérico ordenable: AAAAMM o AAAAMMDD EventualyAddCategory=Eventualmente, especifique una categoría en la cual clasificar los registros ToConciliate=¿Para reconciliar? @@ -103,7 +113,16 @@ ConfirmDeleteRib=¿Seguro que quieres eliminar este registro de BAN? ConfirmRejectCheck=¿Seguro que quieres marcar este cheque como rechazado? RejectCheckDate=Fecha en que se devolvió el cheque BankAccountModelModule=Plantillas de documentos para cuentas bancarias +DocumentModelSepaMandate=Plantilla de mandato de la SEPA. Útil para los países europeos en la CEE solamente. DocumentModelBan=Plantilla para imprimir una página con información de BAN. +NewVariousPayment=Nuevo pago misceláneo +VariousPayment=Pago misceláneo VariousPayments=Pagos diversos +ShowVariousPayment=Mostrar pago misceláneo +AddVariousPayment=Añadir pago misceláneo SEPAMandate=Mandato de la SEPA YourSEPAMandate=Su mandato de SEPA +FindYourSEPAMandate=Este es su mandato de SEPA para autorizar a nuestra empresa a realizar un pedido de débito directo a su banco. Devuélvalo firmado (escaneo del documento firmado) o envíelo por correo a +AutoReportLastAccountStatement=Rellene automáticamente el campo 'número de extracto bancario' con el último número de extracto al realizar la conciliación +CashControl=Cerca de efectivo POS +NewCashFence=Nueva valla de efectivo diff --git a/htdocs/langs/es_CL/bills.lang b/htdocs/langs/es_CL/bills.lang index 84353e435a0..21dcccac244 100644 --- a/htdocs/langs/es_CL/bills.lang +++ b/htdocs/langs/es_CL/bills.lang @@ -4,6 +4,8 @@ BillsCustomer=Factura del cliente BillsSuppliers=Facturas del vendedor BillsCustomersUnpaid=Facturas pendientes de pago de los clientes BillsCustomersUnpaidForCompany=Facturas impagadas de los clientes para %s +BillsSuppliersUnpaid=Facturas de proveedores sin pagar +BillsSuppliersUnpaidForCompany=Facturas de proveedores sin pagar por %s BillsLate=Pagos atrasados BillsStatistics=Estadísticas de facturas de clientes DisabledBecauseDispatchedInBookkeeping=Desactivado porque la factura se envió a la contabilidad @@ -16,8 +18,10 @@ InvoiceProFormaAsk=Factura de proforma InvoiceProFormaDesc= Factura proforma es una imagen de una factura verdadera pero no tiene valor contable. InvoiceReplacement=Factura de reemplazo InvoiceReplacementAsk=Reemplazo de factura por factura +InvoiceReplacementDesc=La factura de reemplazo se utiliza para reemplazar completamente una factura sin que se haya recibido ningún pago.

Nota: Solo las facturas sin pago pueden ser reemplazadas. Si la factura que reemplaza aún no está cerrada, se cerrará automáticamente a "abandonada". InvoiceAvoir=Nota de crédito InvoiceAvoirAsk=Nota de crédito para corregir la factura +InvoiceAvoirDesc=La nota de crédito es una factura negativa utilizada para corregir el hecho de que una factura muestra una cantidad que difiere de la cantidad realmente pagada (por ejemplo, el cliente pagó demasiado por error o no pagará la cantidad completa ya que algunos productos fueron devueltos). invoiceAvoirWithLines=Crear nota de crédito con líneas de la factura de origen invoiceAvoirWithPaymentRestAmount=Crear nota de crédito con la factura pendiente de pago de origen invoiceAvoirLineWithPaymentRestAmount=Nota de crédito por el monto restante no pagado @@ -28,6 +32,7 @@ ReplacementByInvoice=Reemplazado por factura CorrectInvoice=Corregir factura %s CorrectionInvoice=Factura de corrección UsedByInvoice=Utilizado para pagar la factura %s +NoReplacableInvoice=No hay facturas reemplazables. NoInvoiceToCorrect=Sin factura para corregir InvoiceHasAvoir=Fue fuente de una o varias notas de crédito CardBill=Tarjeta de factura @@ -35,6 +40,8 @@ PredefinedInvoices=Facturas Predefinidas InvoiceCustomer=Factura del cliente CustomerInvoice=Factura del cliente CustomersInvoices=Facturas de clientes +SupplierInvoice=Factura del proveedor +SupplierBill=Factura del proveedor SupplierBills=facturas de proveedores PaymentBack=Pago de vuelta CustomerInvoicePaymentBack=Pago de vuelta @@ -42,21 +49,31 @@ PaymentsBack=Pagos de vuelta paymentInInvoiceCurrency=en la moneda de las facturas DeletePayment=Eliminar pago ConfirmDeletePayment=¿Seguro que quieres eliminar este pago? +ConfirmConvertToReduc2=El monto se guardará entre todos los descuentos y podría utilizarse como un descuento para una factura actual o futura para este cliente. +ConfirmConvertToReducSupplier2=El monto se guardará entre todos los descuentos y podría utilizarse como un descuento para una factura actual o futura de este proveedor. +SupplierPayments=Pagos de proveedores ReceivedCustomersPayments=Pagos recibidos de los clientes +PayedSuppliersPayments=Pagos pagados a los vendedores ReceivedCustomersPaymentsToValid=Recibió pagos de clientes para validar PaymentsReportsForYear=Informes de pagos para %s PaymentsAlreadyDone=Pagos ya hechos PaymentsBackAlreadyDone=Pagos ya hechos PaymentRule=Regla de pago PaymentTypeDC=Tarjeta de crédito débito +PaymentTerm=Plazo de pago +PaymentConditions=Términos de pago +PaymentConditionsShort=Términos de pago PaymentAmount=Monto del pago PaymentHigherThanReminderToPay=Pago más alto que un recordatorio para pagar +HelpPaymentHigherThanReminderToPay=Atención, el monto de pago de una o más facturas es mayor que el monto pendiente de pago.
Edite su entrada, de lo contrario confirme y considere crear una nota de crédito por el exceso recibido por cada factura pagada en exceso. +HelpPaymentHigherThanReminderToPaySupplier=Atención, el monto de pago de una o más facturas es mayor que el monto pendiente de pago.
Edite su entrada, de lo contrario confirme y considere crear una nota de crédito por el exceso pagado por cada factura pagada en exceso. ClassifyUnBilled=Clasificar 'Unbilled' CreateCreditNote=Crear nota de crédito AddBill=Crear factura o nota de crédito AddToDraftInvoices=Agregar a la factura borrador SearchACustomerInvoice=Buscar una factura de cliente CancelBill=Cancelar una factura +SendRemindByMail=Enviar recordatorio por correo electrónico DoPayment=Ingrese el pago DoPaymentBack=Ingrese el reembolso ConvertToReduc=Marcar como crédito disponible @@ -78,6 +95,8 @@ BillStatusNotRefunded=No reembolsado BillStatusClosedUnpaid=Cerrado (sin pagar) BillStatusClosedPaidPartially=Pagado (parcialmente) BillShortStatusPaid=Pagado +BillShortStatusPaidBackOrConverted=Reembolsado o convertido +Refunded=Reintegrado BillShortStatusConverted=Pagado BillShortStatusCanceled=Abandonado BillShortStatusValidated=Validado @@ -87,11 +106,16 @@ BillShortStatusNotRefunded=No reembolsado BillShortStatusClosedUnpaid=Cerrado BillShortStatusClosedPaidPartially=Pagado (parcialmente) PaymentStatusToValidShort=Validar +ErrorVATIntraNotConfigured=Número de IVA intracomunitario aún no definido +ErrorNoPaiementModeConfigured=No se ha definido ningún tipo de pago por defecto. Ir a la configuración del módulo de factura para solucionar este problema. +ErrorCreateBankAccount=Cree una cuenta bancaria, luego vaya al panel de configuración del módulo Factura para definir los tipos de pago ErrorBillNotFound=La factura %s no existe +ErrorInvoiceAlreadyReplaced=Error, intentó validar una factura para reemplazar la factura %s. Pero este ya ha sido reemplazado por la factura %s. ErrorDiscountAlreadyUsed=Error, descuento ya usado ErrorInvoiceAvoirMustBeNegative=Error, la factura correcta debe tener una cantidad negativa ErrorInvoiceOfThisTypeMustBePositive=Error, este tipo de factura debe tener una cantidad positiva ErrorCantCancelIfReplacementInvoiceNotValidated=Error, no puede cancelar una factura que ha sido reemplazada por otra factura que todavía está en estado de borrador +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Esta parte u otra ya está en uso, por lo que no se pueden eliminar las series de descuento BillFrom=De BillTo=A ActionsOnBill=Acciones en la factura @@ -101,10 +125,13 @@ FoundXQualifiedRecurringInvoiceTemplate=Se encontró %s factura (s) de plantilla NotARecurringInvoiceTemplate=No es una factura de plantilla recurrente LatestTemplateInvoices=%s últimas plantillas de facturas LatestCustomerTemplateInvoices=%s últimas plantillas de facturas de cliente +LatestSupplierTemplateInvoices=Las últimas facturas de la plantilla de proveedor %s LastCustomersBills=Últimas facturas de clientes %s +LastSuppliersBills=Las últimas facturas de proveedor %s AllCustomerTemplateInvoices=Todas las plantillas de facturas DraftBills=Borrador de facturas CustomersDraftInvoices=Factura del cliente +SuppliersDraftInvoices=Proyecto de facturas del vendedor. Unpaid=No pagado ConfirmDeleteBill=¿Seguro que quieres eliminar esta factura? ConfirmValidateBill=¿Está seguro de que desea validar esta factura con referencia %s? @@ -113,20 +140,28 @@ ConfirmClassifyPaidBill=¿Está seguro de que desea cambiar la factura del %s ConfirmCancelBill=¿Seguro que quieres cancelar la factura del %s? ConfirmCancelBillQuestion=¿Por qué quiere clasificar esta factura como "abandonada"? ConfirmClassifyPaidPartially=¿Está seguro de que desea cambiar la factura del %s al estado pagado? +ConfirmClassifyPaidPartiallyQuestion=Esta factura no ha sido pagada en su totalidad. ¿Cuál es la razón para cerrar esta factura? +ConfirmClassifyPaidPartiallyReasonAvoir=Queda sin pagar (%s %s) es un descuento otorgado porque el pago se realizó antes del plazo. Regularizo el IVA con una nota de crédito. ConfirmClassifyPaidPartiallyReasonDiscount=El no pagado restante (%s %s) es un descuento otorgado porque el pago se realizó antes del plazo. ConfirmClassifyPaidPartiallyReasonDiscountNoVat=El impago restante (%s%s) es un descuento otorgado porque el pago se realizó antes del plazo. Acepto perder el IVA sobre este descuento. ConfirmClassifyPaidPartiallyReasonDiscountVat=El impago restante (%s%s) es un descuento otorgado porque el pago se realizó antes del plazo. Recupero el IVA de este descuento sin una nota de crédito. ConfirmClassifyPaidPartiallyReasonBadCustomer=Mal cliente ConfirmClassifyPaidPartiallyReasonProductReturned=Productos devueltos parcialmente ConfirmClassifyPaidPartiallyReasonOther=Cantidad abandonada por otra razón +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Esta opción es posible si su factura ha recibido comentarios adecuados. (Ejemplo: solo el impuesto correspondiente al precio que realmente se pagó otorga derechos de deducción ») +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=En algunos países, esta opción podría ser posible solo si su factura contiene las notas correctas. ConfirmClassifyPaidPartiallyReasonAvoirDesc=Utilice esta opción si el resto no es adecuado +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Un mal cliente es un cliente que se niega a pagar su deuda. ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Esta opción se usa cuando el pago no está completo porque algunos de los productos fueron devueltos +ConfirmClassifyPaidPartiallyReasonOtherDesc=Utilice esta opción si todas las demás no son adecuadas, por ejemplo, en la siguiente situación:
- Pago no completado porque algunos productos fueron enviados de vuelta.
- cantidad reclamada demasiado importante porque se olvidó un descuento
En todos los casos, la cantidad reclamada en exceso debe corregirse en el sistema contable mediante la creación de una nota de crédito. ConfirmClassifyAbandonReasonOtherDesc=Esta elección se usará en todos los demás casos. Por ejemplo, porque planea crear una factura de reemplazo. ConfirmCustomerPayment=¿Confirma esta entrada de pago para %s %s? ConfirmSupplierPayment=¿Confirma esta entrada de pago para %s %s? ConfirmValidatePayment=¿Seguro que quieres validar este pago? No se puede hacer ningún cambio una vez que se valida el pago. UnvalidateBill=Desvalidar factura +NumberOfBillsByMonth=Nº de facturas al mes. AmountOfBills=Cantidad de facturas +AmountOfBillsHT=Importe de las facturas (neto de impuestos) AmountOfBillsByMonthHT=Importe de facturas por mes (neto de impuestos) ShowSocialContribution=Mostrar impuesto social / fiscal ShowBill=Mostrar factura @@ -166,8 +201,11 @@ DateInvoice=Fecha de la factura DatePointOfTax=Punto de impuesto NoInvoice=Sin factura ClassifyBill=Clasificar factura +SupplierBillsToPay=Facturas de proveedores sin pagar CustomerBillsUnpaid=Facturas pendientes de pago de los clientes NonPercuRecuperable=No recuperable +SetConditions=Establecer condiciones de pago +SetMode=Establecer tipo de pago SetRevenuStamp=Establecer sello de ingresos Billed=Pagado RepeatableInvoice=Factura de la plantilla @@ -176,7 +214,9 @@ Repeatable=Modelo ChangeIntoRepeatableInvoice=Convertir en factura de plantilla CreateRepeatableInvoice=Crear factura de plantilla CreateFromRepeatableInvoice=Crear a partir de la factura de la plantilla +CustomersInvoicesAndInvoiceLines=Facturas de los clientes y detalles de la factura. CustomersInvoicesAndPayments=Facturas y pagos de clientes +ExportDataset_invoice_1=Facturas de los clientes y detalles de la factura. ExportDataset_invoice_2=Facturas y pagos de clientes Reductions=Reducciones AddDiscount=Crear descuento @@ -206,6 +246,8 @@ DiscountStillRemaining=Descuentos o créditos disponibles DiscountAlreadyCounted=Descuentos o créditos ya consumidos CustomerDiscounts=Descuentos para clientes BillAddress=Dirección de la cuenta +HelpAbandonBadCustomer=Esta cantidad se ha abandonado (el cliente dice que es un mal cliente) y se considera una pérdida excepcional. +HelpAbandonOther=Esta cantidad ha sido abandonada debido a que fue un error (el cliente o la factura equivocados se reemplazaron por otro, por ejemplo) IdSocialContribution=Identificación de pago de impuesto social / fiscal PaymentId=Identificación de pago PaymentRef=Pago ref. @@ -214,18 +256,28 @@ InvoiceRef=Factura ref. InvoiceDateCreation=Fecha de creación de la factura InvoiceStatus=Estado de la factura InvoiceNote=Nota de factura +OrderBilled=Orden facturada +DonationPaid=Donacion pagada WatermarkOnDraftBill=Marca de agua en borradores de facturas (nada si está vacío) InvoiceNotChecked=Sin factura seleccionada ConfirmCloneInvoice=¿Seguro que quieres clonar esta factura %s? DisabledBecauseReplacedInvoice=Acción deshabilitada porque la factura ha sido reemplazada +DescTaxAndDividendsArea=Esta área presenta un resumen de todos los pagos realizados para gastos especiales. Sólo se incluyen aquí los registros con pagos durante el año fijo. +NbOfPayments=No. de pagos SplitDiscount=Split de descuento en dos +ConfirmSplitDiscount=¿Está seguro de que desea dividir este descuento de %s %s en dos descuentos más pequeños? +TypeAmountOfEachNewDiscount=Cantidad de entrada para cada una de dos partes: +TotalOfTwoDiscountMustEqualsOriginal=El total de los dos nuevos descuentos debe ser igual al monto del descuento original. ConfirmRemoveDiscount=¿Seguro que quieres eliminar este descuento? RelatedBill=Factura relacionada RelatedBills=Facturas relacionadas RelatedCustomerInvoices=Facturas de clientes relacionadas +RelatedSupplierInvoices=Facturas de proveedores relacionados LatestRelatedBill=La última factura relacionada +WarningBillExist=Advertencia, ya existen una o más facturas. MergingPDFTool=Fusionando la herramienta PDF AmountPaymentDistributedOnInvoice=Monto del pago distribuido en la factura +PaymentOnDifferentThirdBills=Permitir pagos en diferentes facturas de terceros, pero la misma empresa matriz PaymentNote=Nota de pago ListOfPreviousSituationInvoices=Lista de facturas de situación previas ListOfNextSituationInvoices=Lista de próximas facturas de situación @@ -235,12 +287,14 @@ FrequencyUnit=Unidad de frecuencia toolTipFrequency=Ejemplos:
Establecer 7, Día : dar una nueva factura cada 7 días
Establecer 3, Mes : dar una nueva factura cada 3 meses NextDateToExecution=Fecha para la próxima generación de facturas DateLastGeneration=Fecha de última generación +MaxPeriodNumber=Max. número de generación de factura NbOfGenerationDone=Número de generación de factura ya realizada NbOfGenerationDoneShort=Número de generación realizada MaxGenerationReached=Número máximo de generaciones alcanzadas GeneratedFromRecurringInvoice=Generado a partir de la factura recurrente de la plantilla %s DateIsNotEnough=Fecha no alcanzada todavía InvoiceGeneratedFromTemplate=Factura %s generada a partir de la factura recurrente de la plantilla %s +GeneratedFromTemplate=Generado desde la factura de plantilla %s WarningInvoiceDateInFuture=Advertencia, la fecha de la factura es más alta que la fecha actual WarningInvoiceDateTooFarInFuture=Advertencia, la fecha de la factura está muy lejos de la fecha actual ViewAvailableGlobalDiscounts=Ver descuentos disponibles @@ -261,6 +315,7 @@ PaymentConditionShort14D=14 dias PaymentCondition14D=14 dias PaymentConditionShort14DENDMONTH=14 días de fin de mes PaymentCondition14DENDMONTH=Dentro de los 14 días siguientes al final del mes +FixAmount=Cantidad fija VarAmount=Cantidad variable (%% tot) PaymentTypeVIR=transferencia bancaria PaymentTypeShortVIR=transferencia bancaria @@ -272,8 +327,11 @@ PaymentTypeTIP=TIP (Documentos contra pago) PaymentTypeTRA=giro bancario BankDetails=Detalles del banco BankCode=codigo bancario +DeskCode=Código de sucursal BankAccountNumber=Número de cuenta +BankAccountNumberKey=Suma de comprobación BIC=BIC / SWIFT +BICNumber=Código BIC / SWIFT ExtraInfos=Infos adicionales RegulatedOn=Regulado en ChequeNumber=Verificar N ° @@ -283,16 +341,27 @@ ChequeMaker=Portador Cheque/Transferencia ChequeBank=Banco de cheque CheckBank=Cheque PrettyLittleSentence=Acepte la cantidad de pagos adeudados por cheques emitidos a mi nombre como miembro de una asociación contable aprobada por la Administración Fiscal. +IntracommunityVATNumber=ID IVA intracomunitario +PaymentByChequeOrderedTo=Los pagos con cheques (impuestos incluidos) se pagan a %s, se envían a +PaymentByChequeOrderedToShort=Los pagos con cheque (impuestos incluidos) son pagaderos a +PaymentByTransferOnThisBankAccount=Pago por transferencia a la siguiente cuenta bancaria VATIsNotUsedForInvoice=* IVA no aplicable art-293B de CGI LawApplicationPart2=los bienes siguen siendo propiedad de +LawApplicationPart3=El vendedor hasta el pago total de LawApplicationPart4=su precio. LimitedLiabilityCompanyCapital=SARL con Capital de UseDiscount=Use descuento UseCreditNoteInInvoicePayment=Reduzca la cantidad a pagar con este crédito +MenuChequeDeposits=Depósitos de cheques MenuCheques=Cheques +MenuChequesReceipts=Revisar recibos +ChequesReceipts=Revisar recibos +ChequesArea=Check depósitos area +ChequeDeposits=Depósitos de cheques DepositId=Depósito de ID NbCheque=Cantidad de cheques CreditNoteConvertedIntoDiscount=Este %s se ha convertido en %s +UsBillingContactAsIncoiveRecipientIfExist=Utilice el contacto / dirección con el tipo 'contacto de facturación' en lugar de la dirección de un tercero como destinatario de las facturas ShowUnpaidAll=Mostrar todas las facturas impagas ShowUnpaidLateOnly=Mostrar solo las facturas pendientes de pago PaymentInvoiceRef=Factura de pago %s @@ -301,15 +370,22 @@ Reported=Retrasado DisabledBecausePayments=No es posible ya que hay algunos pagos CantRemovePaymentWithOneInvoicePaid=No se puede eliminar el pago ya que hay al menos una factura clasificada pagada ExpectedToPay=Pago esperado +CantRemoveConciliatedPayment=No se puede eliminar el pago reconciliado PayedByThisPayment=Pagado por este pago +ClosePaidInvoicesAutomatically=Clasifique "Pagadas" todas las facturas estándar, de anticipo o de reemplazo pagadas en su totalidad. ClosePaidCreditNotesAutomatically=Clasifique "Pagado" todas las notas de crédito completamente devueltas. +ClosePaidContributionsAutomatically=Clasifique "Pagado" todas las contribuciones sociales o fiscales pagadas por completo. +AllCompletelyPayedInvoiceWillBeClosed=Todas las facturas que no queden por pagar se cerrarán automáticamente con el estado "Pagado". ToMakePayment=Paga ToMakePaymentBack=Pagar ListOfYourUnpaidInvoices=Lista de facturas impagas NoteListOfYourUnpaidInvoices=Nota: Esta lista contiene solo facturas para terceros a los que está vinculado como representante de ventas. RevenueStamp=Sello de ingresos +YouMustCreateInvoiceFromThird=Esta opción solo está disponible cuando se crea una factura desde la pestaña "Cliente" de un tercero +YouMustCreateInvoiceFromSupplierThird=Esta opción solo está disponible cuando se crea una factura desde la pestaña "Proveedor" de un tercero YouMustCreateStandardInvoiceFirstDesc=Primero debe crear una factura estándar y convertirla en "plantilla" para crear una nueva factura de plantilla PDFCrabeDescription=Factura plantilla en PDF Crabe. Una plantilla de factura completa (Plantilla recomendada) +PDFSpongeDescription=Factura PDF plantilla de esponja. Una plantilla de factura completa. PDFCrevetteDescription=Plantilla de factura en PDF Crevette. Una plantilla de factura completa para facturas de situación TerreNumRefModelDesc1=Número de devolución con formato %saaam-nnnn para facturas estándar y %saaam-nnnn para notas de crédito donde yy es año, mm es mes y nnnn es una secuencia sin interrupción y sin retorno a 0 MarsNumRefModelDesc1=Número de devolución con el formato %syymm-nnnn para facturas estándar, %syymm-nnnn para facturas de reposición, %syymm-nnnn para facturas de anticipo y %syymm-nnnn para las notas de crédito donde yy es año, mm es mes y nnnn es una secuencia sin interrupción y sin volver a 0 @@ -319,6 +395,10 @@ TypeContact_facture_internal_SALESREPFOLL=Factura de cliente representativa de s TypeContact_facture_external_BILLING=Contacto cliente de facturación cotización TypeContact_facture_external_SHIPPING=Contacto de envío del cliente TypeContact_facture_external_SERVICE=Contacto de servicio al cliente +TypeContact_invoice_supplier_internal_SALESREPFOLL=Representante de seguimiento de la factura del vendedor +TypeContact_invoice_supplier_external_BILLING=Contacto factura vendedor +TypeContact_invoice_supplier_external_SHIPPING=Contacto de envío del vendedor +TypeContact_invoice_supplier_external_SERVICE=Contacto de servicio al vendedor InvoiceFirstSituationAsk=Primera factura de situación InvoiceFirstSituationDesc=Las facturas de situación están relacionadas con situaciones relacionadas con una progresión, por ejemplo, la progresión de una construcción. Cada situación está vinculada a una factura. InvoiceSituationAsk=Factura siguiendo la situación @@ -336,10 +416,13 @@ situationInvoiceShortcode_S=D CantBeLessThanMinPercent=El progreso no puede ser menor que su valor en la situación anterior. PDFCrevetteSituationNumber=Situación N ° %s PDFCrevetteSituationInvoiceLineDecompte=Factura de situación - COUNT +PDFCrevetteSituationInvoiceLine=Situación N ° %s: Inv. N ° %s en %s TotalSituationInvoice=Situación total invoiceLineProgressError=El progreso de la línea de la factura no puede ser mayor o igual a la siguiente línea de la factura +updatePriceNextInvoiceErrorUpdateline=Error: actualizar el precio en la línea de factura: %s ToCreateARecurringInvoice=Para crear una factura recurrente para este contrato, primero cree esta factura en borrador, luego conviértala en una plantilla de factura y defina la frecuencia para la generación de facturas futuras. ToCreateARecurringInvoiceGene=Para generar facturas futuras de forma regular y manual, solo vaya al menú %s - %s - %s. +ToCreateARecurringInvoiceGeneAuto=Si necesita que dichas facturas se generen automáticamente, solicite a su administrador que habilite y configure el módulo %s . Tenga en cuenta que ambos métodos (manual y automático) se pueden usar juntos sin riesgo de duplicación. DeleteRepeatableInvoice=Eliminar factura de plantilla ConfirmDeleteRepeatableInvoice=¿Estás seguro de que deseas eliminar la factura de la plantilla? CreateOneBillByThird=Cree una factura por un tercero (de lo contrario, una factura por pedido) diff --git a/htdocs/langs/es_CL/bookmarks.lang b/htdocs/langs/es_CL/bookmarks.lang index 8b386412649..8c3c7bda847 100644 --- a/htdocs/langs/es_CL/bookmarks.lang +++ b/htdocs/langs/es_CL/bookmarks.lang @@ -3,9 +3,8 @@ AddThisPageToBookmarks=Agregar página actual a marcadores ListOfBookmarks=Lista de marcadores EditBookmarks=Listar/editar Marcadores ShowBookmark=Mostrar marcador -OpenANewWindow=Abrir en nueva ventana -ReplaceWindow=Reemplazar ventana actual +OpenANewWindow=Abre una nueva pestaña BehaviourOnClick=Comportamiento cuando se selecciona una URL de marcador -SetHereATitleForLink=Establecer un título para el marcador -UseAnExternalHttpLinkOrRelativeDolibarrLink=Utilizar una URL http externa o una URL relativa de Dolibarr -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Escoger si la página enlazada debe abrirse en una nueva ventana o no +SetHereATitleForLink=Establecer un nombre para el marcador +UseAnExternalHttpLinkOrRelativeDolibarrLink=Utilice un enlace externo / absoluto (https: // URL) o un enlace interno / relativo (/ DOLIBARR_ROOT / htdocs / ...) +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Elija si la página vinculada debería abrirse en la pestaña actual o en una nueva pestaña diff --git a/htdocs/langs/es_CL/boxes.lang b/htdocs/langs/es_CL/boxes.lang index bd777a32504..7066b77ba75 100644 --- a/htdocs/langs/es_CL/boxes.lang +++ b/htdocs/langs/es_CL/boxes.lang @@ -1,11 +1,28 @@ # Dolibarr language file - Source file is en_US - boxes +BoxLoginInformation=Información Entrar +BoxLastRssInfos=Información RSS +BoxLastProducts=Últimos productos / Servicios %s +BoxLastCustomerBills=Últimas facturas de clientes BoxOldestUnpaidCustomerBills=Las facturas impagas más antiguas de los clientes +BoxOldestUnpaidSupplierBills=Las facturas de proveedores impagas más antiguas BoxLastProposals=Últimas propuestas comerciales BoxLastProspects=Últimas prospectos modificados +BoxLastCustomerOrders=Últimos pedidos de venta BoxCurrentAccounts=Abre el saldo de cuentas BoxTitleLastRssInfos=Las últimas %s noticias de %s +BoxTitleLastProducts=Productos / Servicios: Última modificación %s. +BoxTitleLastModifiedSuppliers=Proveedores: última modificación de %s +BoxTitleLastModifiedCustomers=Clientes: última %s modificada BoxTitleLastCustomersOrProspects=Últimos %s clientes o prospectos +BoxTitleLastCustomerBills=Las últimas facturas de los clientes %s +BoxTitleLastSupplierBills=Las últimas facturas de proveedores %s +BoxTitleLastModifiedProspects=Perspectivas: última modificación de %s +BoxTitleLastModifiedMembers=Últimos miembros de %s BoxTitleLastFicheInter=Últimas intervenciones modificadas con %s +BoxTitleOldestUnpaidCustomerBills=Facturas de clientes: más antiguas %s sin pagar +BoxTitleOldestUnpaidSupplierBills=Facturas de proveedores: las más antiguas %s sin pagar +BoxTitleLastModifiedContacts=Contactos / Direcciones: Última modificación %s +BoxMyLastBookmarks=Marcadores: el último %s BoxOldestExpiredServices=Servicios expirados activos más antiguos BoxLastExpiredServices=Últimos %s contactos más antiguos con servicios activos caducados BoxTitleLastActionsToDo=Últimas %s acciones para hacer @@ -13,21 +30,36 @@ BoxTitleLastModifiedDonations=Las últimas %s donaciones modificadas BoxTitleLastModifiedExpenses=Últimos informes de gastos modificados %s BoxGlobalActivity=Actividad global (facturas, propuestas, pedidos) BoxTitleGoodCustomers=%s Buenos clientes +FailedToRefreshDataInfoNotUpToDate=Error al actualizar el flujo de RSS. Última fecha de actualización correcta: %s LastRefreshDate=Última fecha de actualización NoRecordedBookmarks=No hay marcadores definidos ClickToAdd=Haga clic aquí para agregar. NoRecordedCustomers=Sin clientes registrados NoRecordedContacts=Sin contactos grabados NoActionsToDo=No hay acciones para hacer +NoRecordedOrders=No hay órdenes de venta registradas NoRecordedProposals=Sin cotizaciones registradas NoRecordedInvoices=No hay facturas registradas de clientes NoUnpaidCustomerBills=No hay facturas impagas de los clientes +NoUnpaidSupplierBills=No hay facturas de proveedores sin pagar +NoModifiedSupplierBills=No hay facturas de proveedores registrados NoRecordedProducts=Sin productos / servicios grabados NoRecordedProspects=Sin perspectivas registradas NoContractedProducts=No hay productos/servicios contratados NoRecordedContracts=Sin contratos grabados NoRecordedInterventions=Sin intervenciones registradas +BoxLatestSupplierOrders=Últimas órdenes de compra +NoSupplierOrder=No hay orden de compra registrada +BoxCustomersInvoicesPerMonth=Facturas de clientes por mes +BoxCustomersOrdersPerMonth=Pedidos de ventas por mes +BoxSuppliersOrdersPerMonth=Pedidos de proveedores por mes BoxProposalsPerMonth=Cotizaciones por mes +NoTooLowStockProducts=Ningún producto está bajo el límite de stock bajo +BoxProductDistribution=Productos / Servicios de Distribución. +BoxTitleLastModifiedSupplierBills=Facturas de proveedores: última %s modificada +BoxTitleLatestModifiedSupplierOrders=Pedidos de proveedores: última modificación de %s +BoxTitleLastModifiedCustomerBills=Facturas de clientes: última %s modificada +BoxTitleLastModifiedCustomerOrders=Órdenes de venta: última %s modificada BoxTitleLastModifiedPropals=Últimas %s propuestas modificadas ForCustomersInvoices=Facturas de clientes ForProposals=Cotizaciones diff --git a/htdocs/langs/es_CL/commercial.lang b/htdocs/langs/es_CL/commercial.lang index fd74feaecb6..0f6f95c7d14 100644 --- a/htdocs/langs/es_CL/commercial.lang +++ b/htdocs/langs/es_CL/commercial.lang @@ -4,6 +4,7 @@ ConfirmDeleteAction=¿Seguro que quieres eliminar este evento? CardAction=Tarjeta de evento ActionOnCompany=Compañía vinculada TaskRDVWith=Encuentro con %s +ShowTask=Mostrar tarea ShowAction=Mostrar evento ThirdPartiesOfSaleRepresentative=Terceros con representante de ventas SaleRepresentativesOfThirdParty=Representantes de ventas de terceros @@ -36,13 +37,14 @@ ActionDoneBy=Evento hecho por ActionAC_FAX=Enviar fax ActionAC_PROP=Envío cotización por correo ActionAC_EMAIL=Enviar correo electrónico +ActionAC_EMAIL_IN=Recepción de correo electrónico ActionAC_RDV=Reuniones ActionAC_INT=Intervención en el sitio ActionAC_FAC=Enviar la factura del cliente por correo ActionAC_REL=Enviar la factura del cliente por correo (recordatorio) ActionAC_CLO=Cerrar ActionAC_EMAILING=Enviar correo masivo -ActionAC_COM=Enviar la orden del cliente por correo +ActionAC_COM=Enviar pedido por correo ActionAC_SHIP=Enviar el envío por correo ActionAC_SUP_ORD=Enviar pedido de compra por correo ActionAC_SUP_INV=Enviar la factura del proveedor por correo @@ -55,3 +57,4 @@ StatusProsp=Estado de la perspectiva DraftPropals=Cotizaciones borrador WelcomeOnOnlineSignaturePage=Bienvenido a la página para aceptar propuestas comerciales de %s ThisScreenAllowsYouToSignDocFrom=Esta pantalla le permite aceptar y firmar, o rechazar, un presupuesto/propuesta comercial +SignatureProposalRef=Firma de cotización / propuesta comercial %s diff --git a/htdocs/langs/es_CL/companies.lang b/htdocs/langs/es_CL/companies.lang index eb33bc05d52..f5ce06adfc8 100644 --- a/htdocs/langs/es_CL/companies.lang +++ b/htdocs/langs/es_CL/companies.lang @@ -5,8 +5,12 @@ SelectThirdParty=Seleccione un tercero ConfirmDeleteCompany=¿Está seguro de que desea eliminar esta empresa y toda la información heredada? DeleteContact=Eliminar un contacto/dirección ConfirmDeleteContact=¿Está seguro de que desea eliminar este contacto y toda la información heredada? +MenuNewThirdParty=Nueva tercera parte +MenuNewProspect=Nueva perspectiva +MenuNewSupplier=Nuevo vendedor MenuNewPrivateIndividual=Nueva privada individual NewCompany=Nueva compañía (prospecto, cliente, vendedor) +NewThirdParty=Nuevo tercero (prospecto, cliente, vendedor) CreateDolibarrThirdPartySupplier=Crear un tercero (vendedor) CreateThirdPartyOnly=Crear un tercero CreateThirdPartyAndContact=Crear un tercero + un contacto infantil @@ -15,14 +19,21 @@ IdThirdParty=Id tercero IdCompany=ID de la compañía IdContact=ID de contacto Contacts=Contactos/Direcciones +ThirdPartyContacts=Contactos de terceros +ThirdPartyContact=Contacto / dirección de terceros CompanyName=Nombre de empresa AliasNames=Nombre de alias (comercial, marca registrada, ...) Companies=Compañías +CountryIsInEEC=El país está dentro de la Comunidad Económica Europea. +ThirdPartyName=Nombre de terceros +ThirdPartyEmail=Correo electrónico de terceros ThirdPartyProspects=Perspectivas ThirdPartyProspectsStats=Perspectivas ThirdPartyCustomersWithIdProf12=Clientes con %s o %s ThirdPartySuppliers=Vendedores +ThirdPartyType=Tipo de terceros Individual=Individuo privado +ToCreateContactWithSameName=Creará automáticamente un contacto / dirección con la misma información que el tercero bajo el tercero. En la mayoría de los casos, incluso si su tercero es una persona física, basta con crear un tercero solo. ParentCompany=Empresa matriz Subsidiaries=Subsidiarias CivilityCode=Código de civilidad @@ -35,9 +46,15 @@ CountryCode=Código de país CountryId=Identificación del país Call=Llamada PhonePerso=Pers. teléfono +No_Email=Rechazar correos electrónicos a granel Town=Ciudad Poste=Posición +VATIsUsed=Impuesto a las ventas utilizado +VATIsUsedWhenSelling=Esto define si este tercero incluye un impuesto a la venta o no cuando realiza una factura a sus propios clientes. VATIsNotUsed=Impuesto a las ventas no se utiliza +CopyAddressFromSoc=Copie la dirección de los detalles de terceros +ThirdpartyNotCustomerNotSupplierSoNoRef=Terceros ni cliente ni proveedor, no hay objetos de referencia disponibles. +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Terceros ni cliente ni proveedor, no hay descuentos disponibles. OverAllProposals=Cotizaciones OverAllSupplierProposals=Peticiones de precio LocalTax1IsUsed=Use el segundo impuesto @@ -72,6 +89,8 @@ ProfId4PT=Prof Id 4 (Conservatorio) ProfId2TN=Prof Id 2 (matrícula fiscal) ProfId3TN=Prof Id 3 (código de Douane) ProfId1US=Id del profesor (FEIN) +VATIntra=ID de IVA +VATIntraShort=ID de IVA VATIntraSyntaxIsValid=La sintaxis es valida VATReturn=Devolución del IVA ProspectCustomer=Prospecto/Cliente @@ -80,12 +99,22 @@ CustomerRelativeDiscount=Descuento relativo del cliente SupplierRelativeDiscount=Descuento relativo del vendedor CustomerAbsoluteDiscountShort=Descuento absoluto CompanyHasNoRelativeDiscount=Este cliente no tiene descuento relativo por defecto +HasRelativeDiscountFromSupplier=Tiene un descuento predeterminado de %s%% de este proveedor +HasNoRelativeDiscountFromSupplier=No tiene un descuento relativo predeterminado de este proveedor +CompanyHasAbsoluteDiscount=Este cliente tiene descuentos disponibles (notas de créditos o anticipos) para %s %s +CompanyHasDownPaymentOrCommercialDiscount=Este cliente tiene descuentos disponibles (comerciales, pagos iniciales ) para %s %s CompanyHasCreditNote=Este cliente todavía tiene notas de crédito por %s%s +HasNoAbsoluteDiscountFromSupplier=No tiene ningún crédito de descuento disponible de este proveedor. +HasAbsoluteDiscountFromSupplier=Tiene descuentos disponibles (notas de créditos o anticipos) para %s %s de este proveedor +HasDownPaymentOrCommercialDiscountFromSupplier=Tiene descuentos disponibles (comerciales, anticipos) para %s %s de este proveedor +HasCreditNoteFromSupplier=Tiene notas de crédito para %s %s de este proveedor CompanyHasNoAbsoluteDiscount=Este cliente no tiene crédito de descuento disponible CustomerAbsoluteDiscountAllUsers=Descuentos absolutos de clientes (concedidos por todos los usuarios) CustomerAbsoluteDiscountMy=Descuentos absolutos de clientes (otorgados por usted) SupplierAbsoluteDiscountAllUsers=Descuentos absolutos de proveedores (ingresados ​​por todos los usuarios) SupplierAbsoluteDiscountMy=Descuentos absolutos de proveedores (ingresados ​​por usted mismo) +Vendor=Vendedor +Supplier=Vendedor AddContactAddress=Crear contacto / dirección EditContactAddress=Editar contacto / dirección ContactId=ID de contacto @@ -93,12 +122,20 @@ NoContactDefinedForThirdParty=Sin contacto definido para este tercero NoContactDefined=Sin contacto definido DefaultContact=Contacto / dirección predeterminados AddThirdParty=Crear un tercero +CustomerCode=Código de cliente +SupplierCode=Código de proveedor +CustomerCodeShort=Código de cliente +SupplierCodeShort=Código de proveedor +CustomerCodeDesc=Código de cliente, único para todos los clientes. +SupplierCodeDesc=Código de proveedor, único para todos los proveedores RequiredIfCustomer=Obligatorio si un tercero es un cliente o prospecto RequiredIfSupplier=Requerido si un tercero es un vendedor +ValidityControledByModule=Validez controlada por módulo ProspectToContact=Perspectiva de contactar CompanyDeleted=La compañía "%s" eliminada de la base de datos. ListOfContacts=Lista de contactos/direcciones ListOfContactsAddresses=Lista de contactos/direcciones +ListOfThirdParties=Lista de terceros ContactsAllShort=Todo (Sin filtro) ContactType=Tipo de Contacto ContactForOrders=Contacto de la orden @@ -111,9 +148,16 @@ NoContactForAnyOrderOrShipments=Este contacto no es un contacto para ningún ped NoContactForAnyProposal=Este contacto no es contacto de ninguna cotización NoContactForAnyContract=Este contacto no es un contacto para ningún contrato NoContactForAnyInvoice=Este contacto no es un contacto para ninguna factura +NewContactAddress=Nuevo Contacto / Dirección EditCompany=Editar empresa +ThisUserIsNot=Este usuario no es prospecto, cliente ni vendedor. VATIntraCheck=Cheque +VATIntraCheckDesc=La identificación del IVA debe incluir el prefijo del país. El enlace %s utiliza el servicio europeo de verificación de IVA (VIES), que requiere acceso a Internet desde el servidor Dolibarr. +VATIntraCheckableOnEUSite=Compruebe la identificación del IVA intracomunitaria en el sitio web de la Comisión Europea +VATIntraManualCheck=También puede consultar manualmente en el sitio web de la Comisión Europea %s ErrorVATCheckMS_UNAVAILABLE=No es posible comprobar. El servicio de verificación no proporcionado por el estado miembro (%s). +NorProspectNorCustomer=No prospecto, ni cliente +JuridicalStatus=Tipo de entidad jurídica ProspectLevel=Potencial prospectivo OthersNotLinkedToThirdParty=Otros, no vinculados a un tercero ProspectStatus=Estado de la perspectiva @@ -138,14 +182,24 @@ ExportCardToFormat=Exportar la tarjeta al formato ContactNotLinkedToCompany=Contacto no vinculado a ningún tercero DolibarrLogin=Ingreso Dolibbarr NoDolibarrAccess=Sin acceso a Dolibarr +ExportDataset_company_1=Terceros (empresas / fundaciones / personas físicas) y sus propiedades. +ImportDataset_company_2=Contactos / direcciones y atributos adicionales de terceros +ImportDataset_company_4=Representantes de ventas de terceros (asignar representantes de ventas / usuarios a empresas) DeliveryAddress=Dirección de entrega SupplierCategory=Categoría del vendedor DeleteFile=Borrar archivo ConfirmDeleteFile=¿Seguro que quieres eliminar este archivo? AllocateCommercial=Asignado al representante de ventas Organization=Organización +FiscalYearInformation=Año fiscal FiscalMonthStart=Mes de inicio del año fiscal +YouMustAssignUserMailFirst=Debe crear un correo electrónico para este usuario antes de poder agregar una notificación por correo electrónico. YouMustCreateContactFirst=Para poder agregar notificaciones por correo electrónico, primero debe definir contactos con correos electrónicos válidos para el tercero +ListSuppliersShort=Lista de vendedores +ListProspectsShort=Lista de prospectos +ListCustomersShort=Lista de clientes +ThirdPartiesArea=Terceros / Contactos +UniqueThirdParties=Total de Terceros InActivity=Abierto ThirdPartyIsClosed=Tercero está cerrado ProductsIntoElements=Lista de productos / servicios en %s @@ -153,11 +207,16 @@ CurrentOutstandingBill=Factura pendiente actual OutstandingBill=Max. por factura pendiente OutstandingBillReached=Max. por la factura pendiente alcanzado OrderMinAmount=Monto mínimo para la orden +MonkeyNumRefModelDesc=Devuelva un número con el formato %syymm-nnnn para el código del cliente y %syymm-nnnn para el código del proveedor donde yy es año, mm es mes y nnnn es una secuencia sin interrupción ni devolución a 0. LeopardNumRefModelDesc=El código es libre. Este código se puede modificar en cualquier momento. ManagingDirectors=Nombre del gerente (CEO, director, presidente ...) MergeOriginThirdparty=Tercero duplicado (tercero que desea eliminar) +ConfirmMergeThirdparties=¿Está seguro de que desea fusionar este tercero con el actual? Todos los objetos vinculados (facturas, pedidos, ...) se moverán al tercero actual, luego se eliminará el tercero. ThirdpartiesMergeSuccess=Los terceros se han fusionado SaleRepresentativeLogin=Inicio de sesión del representante de ventas SaleRepresentativeFirstname=Nombre del representante de ventas SaleRepresentativeLastname=Apellido del representante de ventas ErrorThirdpartiesMerge=Hubo un error al eliminar los terceros. Por favor revise el registro. Los cambios han sido revertidos. +PaymentTermsSupplier=Plazo de pago - Proveedor +MulticurrencyUsed=Utilizar la moneda múltiple +MulticurrencyCurrency=Moneda diff --git a/htdocs/langs/es_CL/compta.lang b/htdocs/langs/es_CL/compta.lang index 6c137808035..2aa54a47917 100644 --- a/htdocs/langs/es_CL/compta.lang +++ b/htdocs/langs/es_CL/compta.lang @@ -11,6 +11,7 @@ FeatureIsSupportedInInOutModeOnly=Característica solo disponible en el modo de VATReportBuildWithOptionDefinedInModule=Las cantidades que se muestran aquí se calculan utilizando las reglas definidas por la configuración del módulo de impuestos. LTReportBuildWithOptionDefinedInModule=Las cantidades que se muestran aquí se calculan utilizando las reglas definidas por la configuración de la empresa. Param=Configurar +RemainingAmountPayment=Cantidad de pago restante: Accountparent=Cuenta para padres Accountsparent=Cuentas de padres MenuReportInOut=Ingresos / gastos @@ -65,6 +66,7 @@ AddSocialContribution=Agregar impuesto social / fiscal ContributionsToPay=Impuestos sociales/fiscales a pagar AccountancyTreasuryArea=Área de facturación y pago PaymentCustomerInvoice=Pago de factura de cliente +PaymentSupplierInvoice=pago factura proveedor PaymentSocialContribution=Pago de impuestos sociales/fiscales PaymentVat=Pago del IVA ListPayment=Lista de pagos @@ -91,6 +93,7 @@ SocialContributionsPayments=Pagos de impuestos sociales/fiscales ShowVatPayment=Mostrar el pago del IVA BalanceVisibilityDependsOnSortAndFilters=El saldo es visible en esta lista solo si la tabla se ordena de forma ascendente en %s y se filtra para 1 cuenta bancaria CustomerAccountancyCode=Código de contabilidad del cliente +SupplierAccountancyCode=código de contabilidad del vendedor CustomerAccountancyCodeShort=Cust. cuenta. código SupplierAccountancyCodeShort=Cenar. cuenta. código Turnover=Facturación facturada @@ -106,6 +109,7 @@ NewCheckDeposit=Nuevo depósito de cheque NewCheckDepositOn=Crear recibo para el depósito en la cuenta: %s NoWaitingChecks=No hay cheques pendientes de depósito. DateChequeReceived=Verificar fecha de recepción +NbOfCheques=No. de cheques PaySocialContribution=Pagar un impuesto social / fiscal ConfirmPaySocialContribution=¿Estás seguro de que quieres clasificar este impuesto social o fiscal como pagado? DeleteSocialContribution=Eliminar un pago de impuestos sociales o fiscales @@ -115,6 +119,7 @@ CalcModeVATDebt=Modo %sIVA sobre compromisos contables%s. CalcModeVATEngagement=Modo %s IVA en ingresos-gastos%s. CalcModeDebt=Análisis de facturas registradas conocidas incluso si aún no se contabilizan en el libro mayor. CalcModeEngagement=Análisis de los pagos registrados conocidos, incluso si aún no se contabilizan en el Libro mayor. +CalcModeBookkeeping=Análisis de los datos registrados en la tabla de Contabilidad. CalcModeLT1=Modo %sRE en facturas de clientes - facturas de proveedores %s CalcModeLT1Debt=Modo %sRE en las facturas del cliente %s CalcModeLT1Rec=Modo %sRE en facturas de proveedores %s @@ -131,11 +136,14 @@ SeeReportInBookkeepingMode=Consulte %sInforme de facturación%s para real RulesAmountWithTaxIncluded=- Las cantidades que se muestran son con todos los impuestos incluidos RulesResultDue=- Incluye facturas pendientes, gastos, IVA, donaciones ya sean pagadas o no. También incluye salarios pagados.
- Se basa en la fecha de validación de facturas e IVA y en la fecha de vencimiento de los gastos. Para los salarios definidos con el módulo Salario, se usa la fecha de valor del pago. RulesResultInOut=- Incluye los pagos reales realizados en facturas, gastos, IVA y salarios.
- Se basa en las fechas de pago de las facturas, gastos, IVA y salarios. La fecha de donación para la donación. +RulesCADue=- Incluye las facturas debidas del cliente, ya sean pagadas o no.
- Se basa en la fecha de validación de estas facturas.
+RulesCAIn=- Incluye todos los pagos efectivos de las facturas recibidas de los clientes.
- Se basa en la fecha de pago de estas facturas.
RulesCATotalSaleJournal=Incluye todas las líneas de crédito del diario Sale. RulesAmountOnInOutBookkeepingRecord=Incluye registro en su Libro mayor con cuentas de contabilidad que tiene el grupo "GASTOS" o "INGRESOS" RulesResultBookkeepingPredefined=Incluye registro en su Libro mayor con cuentas de contabilidad que tiene el grupo "GASTOS" o "INGRESOS" RulesResultBookkeepingPersonalized=Muestra un registro en su Libro mayor con cuentas de contabilidad agrupadas por grupos personalizados SeePageForSetup=Ver el menú %s para la configuración +DepositsAreNotIncluded=- Las facturas de anticipo no están incluidas. LT1ReportByCustomers=Informe el impuesto 2 por un tercero LT2ReportByCustomers=Informe el impuesto 3 por un tercero LT1ReportByCustomersES=Informe de un tercero RE @@ -180,6 +188,7 @@ RefExt=Ref externo ToCreateAPredefinedInvoice=Para crear una plantilla de factura, cree una factura estándar, luego, sin validarla, haga clic en el botón "%s". LinkedOrder=Enlace a la orden CalculationRuleDesc=Para calcular el IVA total, hay dos métodos:
El método 1 es redondear el IVA en cada línea y luego sumarlas.
El método 2 es sumar todos los IVA en cada línea, luego redondear el resultado.
El resultado final puede diferir de algunos centavos. El modo predeterminado es el modo %s. +CalculationRuleDescSupplier=Según el proveedor, elija el método apropiado para aplicar la misma regla de cálculo y obtenga el mismo resultado esperado por su proveedor. TurnoverPerProductInCommitmentAccountingNotRelevant=El informe de la facturación obtenida por producto no está disponible. Este informe solo está disponible para facturación facturada. TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=El informe de Cifra de negocios recaudada por tasa de impuesto a la venta no está disponible. Este informe solo está disponible para facturación facturada. AccountancyJournal=Revista de códigos contables @@ -187,7 +196,10 @@ ACCOUNTING_VAT_SOLD_ACCOUNT=Cuenta de contabilidad de forma predeterminada para ACCOUNTING_VAT_BUY_ACCOUNT=Cuenta de contabilidad de forma predeterminada para el IVA en compras (se usa si no está definido en la configuración del diccionario de IVA) ACCOUNTING_VAT_PAY_ACCOUNT=Cuenta de contabilidad por defecto para pagar el IVA ACCOUNTING_ACCOUNT_CUSTOMER=Cuenta de contabilidad utilizada para terceros clientes +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=La cuenta contable dedicada definida en la tarjeta de terceros se utilizará solo para la contabilidad de Libro mayor auxiliar. Este se usará para el Libro mayor general y como valor predeterminado de la contabilidad del Libro mayor auxiliar si no se define una cuenta de cuenta del cliente dedicada a un tercero. ACCOUNTING_ACCOUNT_SUPPLIER=Cuenta de contabilidad utilizada para terceros proveedores +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=La cuenta contable dedicada definida en la tarjeta de terceros se utilizará solo para la contabilidad de Libro mayor auxiliar. Este se usará para el Libro mayor y como valor predeterminado de la contabilidad del Libro mayor auxiliar si no se define una cuenta de proveedor dedicada en un tercero. +ConfirmCloneTax=Confirmar el clon de un impuesto social / fiscal. CloneTaxForNextMonth=Clonarlo para el próximo mes SimpleReport=Informe simple AddExtraReport=Informes adicionales (agregar informe de clientes extranjeros y nacionales) @@ -199,6 +211,7 @@ ImportDataset_tax_vat=Pagos de IVA ErrorBankAccountNotFound=Error: cuenta bancaria no encontrada FiscalPeriod=Período contable ListSocialContributionAssociatedProject=Lista de contribuciones sociales asociadas con el proyecto +AccountingAffectation=Asignación de contabilidad LastDayTaxIsRelatedTo=Último día del período el impuesto está relacionado con VATDue=Impuesto de venta reclamado ByVatRate=Por tasa de impuesto a la venta diff --git a/htdocs/langs/es_CL/ecm.lang b/htdocs/langs/es_CL/ecm.lang index 6bff606eb69..eb90a48c10f 100644 --- a/htdocs/langs/es_CL/ecm.lang +++ b/htdocs/langs/es_CL/ecm.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=N° de documentos en el directorio +ECMNbOfDocs=Nº de documentos en el directorio. ECMAddSection=Agregar directorio ECMCreationDate=Fecha de creación ECMNbOfSubDir=Cantidad de subdirectorios @@ -20,6 +20,8 @@ ECMDocsByProjects=Documentos vinculados a proyectos ECMDocsByUsers=Documentos vinculados a usuarios ECMDocsByInterventions=Documentos vinculados a intervenciones ECMDocsByExpenseReports=Documentos vinculados a informes de gastos +ECMDocsByHolidays=Documentos vinculados a vacaciones +ECMDocsBySupplierProposals=Documentos vinculados a propuestas de proveedores. ECMNoDirectoryYet=Sin directorio creado DeleteSection=Eliminar directorio ConfirmDeleteSection=¿Puedes confirmar que quieres borrar el directorio %s? diff --git a/htdocs/langs/es_CL/install.lang b/htdocs/langs/es_CL/install.lang index 718af0a4691..3e9a45b1ffb 100644 --- a/htdocs/langs/es_CL/install.lang +++ b/htdocs/langs/es_CL/install.lang @@ -1,19 +1,37 @@ # Dolibarr language file - Source file is en_US - install InstallEasy=Simplemente siga las instrucciones paso a paso. MiscellaneousChecks=Verificación de requisitos previos +ConfFileDoesNotExistsAndCouldNotBeCreated=El archivo de configuración %s no existe y no se pudo crear. ConfFileCouldBeCreated=Se puede crear el archivo de configuración %s. +ConfFileIsNotWritable=El archivo de configuración %s no se puede escribir. Compruebe los permisos. Para la primera instalación, su servidor web debe poder escribir en este archivo durante el proceso de configuración ("chmod 666", por ejemplo, en un sistema operativo tipo Unix). ConfFileIsWritable=El archivo de configuración %s es escribible. ConfFileMustBeAFileNotADir=El archivo de configuración %s debe ser un archivo, no un directorio. +ConfFileReload=Recarga de parámetros desde archivo de configuración. PHPSupportSessions=Este PHP admite sesiones. PHPSupportPOSTGETOk=Este PHP soporta variables POST y GET. +PHPSupportPOSTGETKo=Es posible que su configuración de PHP no admita las variables POST y / o GET. Verifique el parámetro variables_order en php.ini. +PHPSupportGD=Este PHP soporta funciones gráficas GD. +PHPSupportCurl=Este PHP soporta Curl. +PHPSupportUTF8=Este PHP soporta funciones UTF8. +PHPSupportIntl=Este PHP soporta funciones de Intl. PHPMemoryOK=Su memoria de sesión máxima de PHP está configurada en %s. Esto debería ser suficiente. +PHPMemoryTooLow=La memoria de sesión máxima de PHP se establece en %s bytes. Esto es demasiado bajo. Cambie su php.ini para establecer el parámetro memory_limit en al menos %s bytes. +Recheck=Haga clic aquí para una prueba más detallada +ErrorPHPDoesNotSupportSessions=Su instalación de PHP no admite sesiones. Esta función es necesaria para permitir que Dolibarr funcione. Compruebe su configuración de PHP y los permisos del directorio de sesiones. +ErrorPHPDoesNotSupportGD=Su instalación de PHP no soporta funciones gráficas de GD. No habrá gráficos disponibles. ErrorPHPDoesNotSupportCurl=Su instalación de PHP no es compatible con Curl. +ErrorPHPDoesNotSupportUTF8=Su instalación de PHP no es compatible con las funciones UTF8. Dolibarr no puede funcionar correctamente. Resuelve esto antes de instalar Dolibarr. +ErrorPHPDoesNotSupportIntl=Su instalación de PHP no admite funciones de Intl. ErrorDirDoesNotExists=El directorio %s no existe. +ErrorGoBackAndCorrectParameters=Regresa y revisa / corrige los parámetros. ErrorWrongValueForParameter=Puede haber escrito un valor incorrecto para el parámetro '%s'. ErrorFailedToConnectToDatabase=Error al conectarse a la base de datos '%s'. ErrorDatabaseVersionTooLow=La versión de la base de datos (%s) es demasiado antigua. Se requiere la versión %s o superior. ErrorPHPVersionTooLow=La versión de PHP es muy antigua. La versión %s es obligatoria. +ErrorConnectedButDatabaseNotFound=La conexión al servidor se realizó correctamente, pero no se encontró la base de datos '%s'. +IfDatabaseNotExistsGoBackAndUncheckCreate=Si la base de datos no existe, regrese y marque la opción "Crear base de datos". IfDatabaseExistsGoBackAndCheckCreate=Si la base de datos ya existe, retroceda y desmarque la opción "Crear base de datos". +WarningBrowserTooOld=La versión del navegador es demasiado antigua. Se recomienda encarecidamente actualizar su navegador a una versión reciente de Firefox, Chrome u Opera. PHPVersion=Versión de PHP License=Usando licencia WebPagesDirectory=Directorio donde se almacenan las páginas web @@ -21,10 +39,19 @@ DocumentsDirectory=Directorio para almacenar documentos cargados y generados CheckToForceHttps=Marque esta opción para forzar conexiones seguras (https).
Esto requiere que el servidor web esté configurado con un certificado SSL. DolibarrDatabase=Base de Datos Dolibarr DatabaseType=Tipo de base +ServerAddressDescription=Nombre o dirección IP para el servidor de la base de datos. Normalmente, 'localhost' cuando el servidor de la base de datos está alojado en el mismo servidor que el servidor web. ServerPortDescription=Puerto del servidor de base de datos Mantente vacío si desconocido. +DatabasePrefix=Prefijo de tabla de base de datos +AdminLogin=Cuenta de usuario para el propietario de la base de datos Dolibarr. +PasswordAgain=Vuelva a escribir la confirmación de la contraseña AdminPassword=Contraseña para el propietario de la base de datos Dolibarr. CreateDatabase=Crear base de datos +CreateUser=Cree una cuenta de usuario o otorgue permiso de cuenta de usuario en la base de datos de Dolibarr DatabaseSuperUserAccess=Servidor de base de datos: acceso de superusuario +CheckToCreateDatabase=Marque la casilla si la base de datos aún no existe y, por lo tanto, debe crearse.
En este caso, también debe completar el nombre de usuario y la contraseña de la cuenta de superusuario al final de esta página. +CheckToCreateUser=Marque la casilla si:
la cuenta de usuario de la base de datos aún no existe y por lo tanto debe crearse, o
si la cuenta de usuario existe pero la base de datos no existe y se deben otorgar permisos.
En este caso, se debe introducir la cuenta de usuario y la contraseña y el nombre de cuenta y contraseña de superusuario en la parte inferior de esta página. Si esta casilla no está marcada, el propietario de la base de datos y la contraseña ya deben existir. +DatabaseRootLoginDescription=Nombre de cuenta de superusuario (para crear nuevas bases de datos o nuevos usuarios), obligatorio si la base de datos o su propietario aún no existen. +KeepEmptyIfNoPassword=Deje en blanco si el superusuario no tiene contraseña (NO se recomienda) DatabaseCreation=Creación de base CreateDatabaseObjects=Creación de objetos de base ReferenceDataLoading=Carga de datos de referencia @@ -33,6 +60,9 @@ CreateTableAndPrimaryKey=Crear tabla %s CreateOtherKeysForTable=Crear claves e índices foráneos para la tabla %s OtherKeysCreation=Creación de claves e índices extranjeros AdminAccountCreation=Creación de inicio +PleaseTypePassword=Por favor escriba una contraseña, las contraseñas vacías no están permitidas! +PleaseTypeALogin=Por favor escriba un nombre de usuario! +PasswordsMismatch=Las contraseñas difieren, por favor intente de nuevo! SystemIsInstalled=Esta instalación está completa. SystemIsUpgraded=Dolibarr se ha actualizado con éxito. YouNeedToPersonalizeSetup=Debe configurar Dolibarr para que se ajuste a sus necesidades (apariencia, características, ...). Para hacer esto, por favor, siga el siguiente enlace: @@ -41,13 +71,16 @@ GoToDolibarr=Ir a Dolibarr GoToSetupArea=Ir a Dolibarr (área de configuración) GoToUpgradePage=Ir a la página de actualización de nuevo WithNoSlashAtTheEnd=Sin la barra "/" al final +AdminLoginAlreadyExists=La cuenta de administrador de Dolibarr ' %s ' ya existe. Vuelve si quieres crear otro. FailedToCreateAdminLogin=Error al crear la cuenta de administrador de Dolibarr. +WarningRemoveInstallDir=Advertencia, por razones de seguridad, una vez que se complete la instalación o la actualización, debe agregar un archivo llamado install.lock en el directorio de documentos de Dolibarr para evitar nuevamente el uso accidental / malicioso de las herramientas de instalación. ChoosedMigrateScript=Elija script de migración DataMigration=Migración de base de datos (datos) DatabaseMigration=Migración de la base de datos (estructura + algunos datos) ProcessMigrateScript=Procesamiento de script ChooseYourSetupMode=Elija su modo de configuración y haga clic en "Comenzar" ... FreshInstall=Instalación nueva +FreshInstallDesc=Utilice este modo si esta es su primera instalación. Si no, este modo puede reparar una instalación previa incompleta. Si desea actualizar su versión, elija el modo "Actualizar". UpgradeDesc=Utilice este modo si ha reemplazado archivos antiguos de Dolibarr con archivos de una versión más nueva. Esto actualizará su base de datos y datos. Start=comienzo InstallNotAllowed=La configuración no está permitida por los permisos de conf.php @@ -57,17 +90,36 @@ DatabaseVersion=Versión de base ServerVersion=Versión de servidor de base YouMustCreateItAndAllowServerToWrite=Debe crear este directorio y permitir que el servidor web escriba en él. DBSortingCollation=Orden de clasificación de caracteres +YouAskDatabaseCreationSoDolibarrNeedToConnect=Seleccionó crear la base de datos %s , pero para esto, Dolibarr necesita conectarse al servidor %s con el superusuario %s permisos. +YouAskLoginCreationSoDolibarrNeedToConnect=Seleccionó crear el usuario de la base de datos %s , pero para esto, Dolibarr necesita conectarse al servidor %s con los permisos de superusuario %s . +BecauseConnectionFailedParametersMayBeWrong=La conexión de la base de datos falló: los parámetros del host o superusuario deben ser incorrectos. OrphelinsPaymentsDetectedByMethod=Pago de huérfanos detectado por el método %s RemoveItManuallyAndPressF5ToContinue=Quítelo manualmente y presione F5 para continuar. +IfLoginDoesNotExistsCheckCreateUser=Si el usuario aún no existe, debe marcar la opción "Crear usuario" +ErrorConnection=El servidor " %s ", el nombre de la base de datos " %s ", el inicio de sesión " %s ", o la contraseña de la base de datos puede ser incorrecta o la versión del cliente PHP puede ser demasiado antigua en comparación con la versión de la base de datos. InstallChoiceRecommanded=Opción recomendada para instalar la versión %s de su versión actual %s InstallChoiceSuggested= Opción de instalación sugerida por el instalador . +MigrateIsDoneStepByStep=La versión de destino (%s) tiene un espacio de varias versiones. El asistente de instalación volverá a sugerir una migración adicional una vez que este se complete. +CheckThatDatabasenameIsCorrect=Compruebe que el nombre de la base de datos " %s " sea correcto. IfAlreadyExistsCheckOption=Si este nombre es correcto y esa base de datos aún no existe, debe marcar la opción "Crear base de datos". OpenBaseDir=Parámetro PHP openbasedir +YouAskToCreateDatabaseSoRootRequired=Has marcado la casilla "Crear base de datos". Para esto, debe proporcionar el nombre de usuario / contraseña del superusuario (parte inferior del formulario). +YouAskToCreateDatabaseUserSoRootRequired=Has marcado la casilla "Crear propietario de base de datos". Para esto, debe proporcionar el nombre de usuario / contraseña del superusuario (parte inferior del formulario). +NextStepMightLastALongTime=El paso actual puede tardar varios minutos. Por favor, espere hasta que la siguiente pantalla se muestre completamente antes de continuar. +MigrationCustomerOrderShipping=Migración de envío para almacenamiento de pedidos de ventas. MigrationShippingDelivery=Actualice el almacenamiento de envío MigrationShippingDelivery2=Actualice el almacenamiento del envío 2 MigrationFinished=Migración finalizada +LastStepDesc=Último paso : defina aquí el nombre de usuario y la contraseña que desea utilizar para conectarse a Dolibarr. No pierda esto, ya que es la cuenta maestra para administrar todas las otras cuentas de usuario / adicionales. ActivateModule=Activar el módulo %s ShowEditTechnicalParameters=Haga clic aquí para mostrar / editar los parámetros avanzados (modo experto) +WarningUpgrade=Advertencia: ¿Ejecutó primero una copia de seguridad de la base de datos? Esto es muy recomendable. La pérdida de datos (debido a, por ejemplo, errores en mysql versión 5.5.40 / 41/42/43) puede ser posible durante este proceso, por lo que es esencial realizar un volcado completo de su base de datos antes de iniciar cualquier migración. Haga clic en Aceptar para iniciar el proceso de migración ... +ErrorDatabaseVersionForbiddenForMigration=La versión de su base de datos es %s. Tiene un error crítico que hace posible la pérdida de datos si realiza cambios estructurales en su base de datos, como lo requiere el proceso de migración. Por esta razón, no se permitirá la migración hasta que actualice su base de datos a una versión de capa (parcheada) (lista de versiones de buggy conocidas: %s) +KeepDefaultValuesWamp=Utilizó el asistente de configuración de Dolibarr de DoliWamp, por lo que los valores propuestos aquí ya están optimizados. Cámbialas solo si sabes lo que estás haciendo. +KeepDefaultValuesDeb=Usó el asistente de configuración de Dolibarr de un paquete de Linux (Ubuntu, Debian, Fedora ...), por lo que los valores propuestos aquí ya están optimizados. Solo se debe ingresar la contraseña del propietario de la base de datos para crear. Cambie otros parámetros solo si sabe lo que está haciendo. +KeepDefaultValuesMamp=Utilizó el asistente de configuración de Dolibarr de DoliMamp, por lo que los valores propuestos aquí ya están optimizados. Cámbialas solo si sabes lo que estás haciendo. +KeepDefaultValuesProxmox=Utilizó el asistente de configuración de Dolibarr desde un dispositivo virtual Proxmox, por lo que los valores propuestos aquí ya están optimizados. Cámbialas solo si sabes lo que estás haciendo. +UpgradeExternalModule=Ejecutar proceso de actualización dedicado de módulo externo SetAtLeastOneOptionAsUrlParameter=Establezca al menos una opción como parámetro en URL. Por ejemplo: '... repair.php? Standard = confirmed' NothingToDelete=Nada para limpiar / eliminar MigrationFixData=Solución para datos desnormalizados @@ -76,6 +128,7 @@ MigrationSupplierOrder=Migración de datos para pedidos del proveedor MigrationProposal=Migración de datos de cotizaciones MigrationInvoice=Migración de datos para las facturas del cliente MigrationContract=Migración de datos para contratos +MigrationSuccessfullUpdate=Actualización exitosa MigrationUpdateFailed=Proceso de actualización fallido MigrationRelationshipTables=Migración de datos para tablas de relaciones (%s) MigrationPaymentsUpdate=Corrección de datos de pago @@ -87,7 +140,9 @@ MigrationContractsUpdate=Corrección de datos contractuales MigrationContractsNumberToUpdate=%scontrato (s) para actualizar MigrationContractsLineCreation=Crear una línea de contrato para la ref. De contrato %s MigrationContractsNothingToUpdate=No más cosas para hacer +MigrationContractsFieldDontExist=El campo fk_facture ya no existe. Nada que hacer. MigrationContractsEmptyDatesUpdate=Contrato de corrección de fecha vacía +MigrationContractsEmptyDatesUpdateSuccess=La corrección de la fecha vacía del contrato se realizó con éxito MigrationContractsEmptyDatesNothingToUpdate=Sin contrato fecha vacía para corregir MigrationContractsEmptyCreationDatesNothingToUpdate=Sin fecha de creación de contrato para corregir MigrationContractsInvalidDatesUpdate=Corrección de contrato de fecha de mal valor @@ -107,11 +162,20 @@ MigrationDeliveryDetail=Actualización de entrega MigrationStockDetail=Actualizar el valor de stock de los productos MigrationMenusDetail=Actualizar tablas de menús dinámicos MigrationDeliveryAddress=Actualizar la dirección de entrega en los envíos +MigrationProjectTaskActors=Migración de datos para la tabla llx_projet_task_actors MigrationProjectUserResp=Campo de migración de datos fk_user_resp de llx_projet a llx_element_contact MigrationProjectTaskTime=Tiempo de actualización pasado en segundos MigrationActioncommElement=Actualizar datos sobre acciones +MigrationPaymentMode=Migración de datos por tipo de pago. MigrationCategorieAssociation=Migración de categorías +MigrationEvents=Migración de eventos para agregar el propietario del evento en la tabla de asignación +MigrationEventsContact=Migración de eventos para agregar contactos de eventos a la tabla de asignación MigrationRemiseEntity=Actualizar el valor del campo de entidad de llx_societe_remise MigrationRemiseExceptEntity=Actualizar el valor del campo de entidad de llx_societe_remise_except MigrationUserRightsEntity=Actualizar el valor del campo de entidad de llx_user_rights MigrationUserGroupRightsEntity=Actualizar el valor del campo de entidad de llx_usergroup_rights +MigrationUserPhotoPath=Migración de rutas de fotos para usuarios. +ErrorFoundDuringMigration=Se informaron errores durante el proceso de migración, por lo que el siguiente paso no está disponible. Para ignorar los errores, puede hacer clic aquí , pero es posible que la aplicación o algunas características no funcionen correctamente hasta que se resuelvan los errores. +YouTryInstallDisabledByDirLock=La aplicación intentó auto actualizarse, pero las páginas de instalación / actualización se han deshabilitado por seguridad (directorio renombrado con el sufijo .lock).
+YouTryInstallDisabledByFileLock=La aplicación intentó auto actualizarse, pero las páginas de instalación / actualización se han deshabilitado por seguridad (debido a la existencia de un archivo de bloqueo install.lock en el directorio de documentos de dolibarr).
+ClickOnLinkOrRemoveManualy=Haga clic en el siguiente enlace. Si siempre ve esta misma página, debe eliminar / cambiar el nombre del archivo install.lock en el directorio de documentos. diff --git a/htdocs/langs/es_CL/interventions.lang b/htdocs/langs/es_CL/interventions.lang index 40cc84043e9..8cdf1db9495 100644 --- a/htdocs/langs/es_CL/interventions.lang +++ b/htdocs/langs/es_CL/interventions.lang @@ -1,6 +1,7 @@ # Dolibarr language file - Source file is en_US - interventions InterventionCard=Tarjeta de intervención NewIntervention=Nueva intervención +ChangeIntoRepeatableIntervention=Cambio a intervención repetible. ListOfInterventions=Lista de intervenciones ActionsOnFicheInter=Acciones en intervención InterventionContact=Contacto de intervención @@ -11,6 +12,7 @@ ConfirmValidateIntervention=¿Estas seguro que deseas validad esta intervención ConfirmModifyIntervention=¿Estás seguro de que deseas modificar esta intervención? ConfirmDeleteInterventionLine=¿Estás seguro de que deseas eliminar esta línea de intervención? ConfirmCloneIntervention=¿Estás seguro de que quieres clonar esta intervención? +NameAndSignatureOfInternalContact=Nombre y firma de la intervención: DocumentModelStandard=Modelo de documento estándar para intervenciones InterventionCardsAndInterventionLines=Intervenciones y líneas de intervenciones InterventionClassifyBilled=Clasificar "Facturado" @@ -18,10 +20,12 @@ InterventionClassifyUnBilled=Clasificar "Sin facturar" InterventionClassifyDone=Clasificar "Hecho" StatusInterInvoiced=Pagado SendInterventionRef=Presentación de la intervención %s +SendInterventionByMail=Enviar intervención por correo electrónico InterventionCreatedInDolibarr=Intervención %s creado InterventionModifiedInDolibarr=Intervención %s modificado InterventionClassifiedBilledInDolibarr=Intervención %s configurada como facturada InterventionClassifiedUnbilledInDolibarr=Intervención %s configurada como no facturada +InterventionSentByEMail=Intervención %s enviada por correo electrónico InterventionDeletedInDolibarr=Intervención %s eliminado InterventionsArea=Área de intervenciones DraftFichinter=Borrador de intervenciones @@ -31,6 +35,8 @@ TypeContact_fichinter_external_CUSTOMER=Seguimiento de contacto con el cliente PrintProductsOnFichinter=Imprima también líneas de tipo "producto" (no solo servicios) en la tarjeta de intervención PrintProductsOnFichinterDetails=intervenciones generadas a partir de órdenes UseServicesDurationOnFichinter=Usar la duración de los servicios para las intervenciones generadas a partir de órdenes +NbOfinterventions=Nº de tarjetas de intervención. +NumberOfInterventionsByMonth=Nº de tarjetas de intervención por mes (fecha de validación). AmountOfInteventionNotIncludedByDefault=La cantidad de intervención no se incluye por defecto en los beneficios (en la mayoría de los casos, las hojas de tiempo se utilizan para contar el tiempo invertido). Agregue la opción PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT a 1 en home-setup-other para incluirlos. InterId=Id de intervención InterRef=Intervención ref. diff --git a/htdocs/langs/es_CL/main.lang b/htdocs/langs/es_CL/main.lang index 29fae5a5cca..8eb9aef7170 100644 --- a/htdocs/langs/es_CL/main.lang +++ b/htdocs/langs/es_CL/main.lang @@ -36,13 +36,20 @@ ErrorGoToModuleSetup=Ir a la configuración del módulo para arreglar esto ErrorFailedToSendMail=Error al enviar el correo (remitente = %s, receptor = %s) ErrorFileNotUploaded=El archivo no fue cargado. Compruebe que el tamaño no exceda el máximo permitido, que el espacio libre esté disponible en el disco y que no haya un archivo con el mismo nombre en este directorio. ErrorWrongHostParameter=Parámetro de host incorrecto +ErrorYourCountryIsNotDefined=Tu país no está definido. Vaya a Home-Setup-Edit y vuelva a publicar el formulario. +ErrorRecordIsUsedByChild=Error al eliminar este registro. Este registro es utilizado por al menos un registro secundario. ErrorWrongValueForParameterX=Valor incorrecto para el parámetro %s ErrorNoRequestInError=Sin solicitud por error +ErrorServiceUnavailableTryLater=Servicio no disponible en este momento. Inténtalo de nuevo más tarde. ErrorDuplicateField=Duplicar valor en un campo único +ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Los cambios se han retrotraído. +ErrorConfigParameterNotDefined=El parámetro %s no está definido en el archivo de configuración de Dolibarr conf.php . ErrorCantLoadUserFromDolibarrDatabase=Falló al encontrar el usuario %s en la base de datos Dolibarr. ErrorNoVATRateDefinedForSellerCountry=Error, sin tasas de IVA definidas para el país '%s'. ErrorNoSocialContributionForSellerCountry=Error, ningún tipo de impuestos sociales/fiscales definidos para el país '%s'. ErrorFailedToSaveFile=Error, no se pudo guardar el archivo. +ErrorCannotAddThisParentWarehouse=Está intentando agregar un almacén principal que ya es secundario de un almacén existente +MaxNbOfRecordPerPage=Max. número de registros por página NotAuthorized=Usted no está autorizado a hacer eso. SetDate=Establece la fecha SeeAlso=Véase también %s @@ -54,8 +61,10 @@ FileRenamed=El archivo fue renombrado con éxito FileGenerated=El archivo fue generado con éxito FileSaved=El archivo se guardó con éxito FileUploaded=El archivo se cargó correctamente +FileTransferComplete=Archivo (s) subido exitosamente FilesDeleted=Archivo eliminado con éxito FileWasNotUploaded=Se seleccionó un archivo para el archivo adjunto pero aún no se cargó. Haga clic en "Adjuntar archivo" para esto. +NbOfEntries=Numero de entradas GoToWikiHelpPage=Lea la ayuda en línea (se necesita acceso a Internet) GoToHelpPage=Leer la ayuda RecordDeleted=Registro borrado @@ -65,6 +74,8 @@ Undefined=Indefinido PasswordForgotten=¿Contraseña olvidada? NoAccount=Sin cuenta? SeeAbove=Véase más arriba +LastConnexion=Último acceso +PreviousConnexion=Inicio de sesión anterior PreviousValue=Valor anterior ConnectedOnMultiCompany=Conectado al entorno AuthenticationMode=Modo de autenticación @@ -78,18 +89,21 @@ TechnicalID=ID técnico NotePrivate=Nota (privado) PrecisionUnitIsLimitedToXDecimals=Dolibarr se configuró para limitar la precisión del precio unitario a %s decimales. DoTest=Prueba +WarningYouHaveAtLeastOneTaskLate=Advertencia, tiene al menos un elemento que ha excedido el tiempo de tolerancia. OnlineHelp=Ayuda en linea Under=debajo Period=Período PeriodEndDate=Fecha de finalización del período NotClosed=No se ha cerrado Enabled=Habilitado +Enable=Habilitar Disable=Inhabilitar Disabled=Deshabilitado AddLink=Agregar enlace AddToDraft=Agregar al borrador Update=Actualizar CloseBox=Retire el widget de su tablero de instrumentos +ConfirmSendCardByMail=¿Realmente desea enviar el contenido de esta tarjeta por correo a %s ? Delete=Borrar Remove=retirar Resiliate=Terminar @@ -100,6 +114,7 @@ Save=Guardar SaveAs=Guardar como TestConnection=Conexión de prueba ToClone=Clonar +ConfirmClone=Elija los datos que desea clonar: NoCloneOptionsSpecified=No hay datos para clonar definidos. Run=correr Show=Mostrar @@ -107,6 +122,7 @@ Hide=Ocultar ShowCardHere=Mostrar tarjeta SearchOf=Buscar Valid=Válido +Upload=Subir ToLink=Enlazar Choose=Escoger Resize=Cambiar el tamaño @@ -117,6 +133,8 @@ NoteSomeFeaturesAreDisabled=Tenga en cuenta que muchas características / módul PersonalValue=Valor personal MultiLanguage=Multi lenguaje Info=Iniciar sesión +DescriptionOfLine=Descripción de la línea +DateOfLine=Fecha de la linea Model=Plantilla de documento DefaultModel=Plantilla de documento predeterminada Action=Evento @@ -155,6 +173,9 @@ Mb=megabyte Tb=Tuberculosis Copy=Dupdo Default=Defecto +DefaultValues=Valores predeterminados / filtros / clasificación +UnitPriceHT=Precio unitario (excl.) +UnitPriceHTCurrency=Precio unitario (excl.) (Moneda) UnitPriceTTC=Precio unitario PriceU=ARRIBA. PriceUHT=P.U. (net) @@ -164,11 +185,15 @@ Amount=Cantidad AmountInvoice=Importe de la factura AmountInvoiced=Monto facturado AmountPayment=Monto del pago +AmountHTShort=Cantidad (excl.) AmountTTCShort=Monto (IVA inc.) +AmountHT=Importe (sin IVA) AmountTTC=Monto (impuesto inc.) AmountVAT=IVA +MulticurrencyAlreadyPaid=Ya pagado, moneda original. MulticurrencyRemainderToPay=Permanecer en el pago, moneda original MulticurrencyPaymentAmount=Importe del pago, moneda original +MulticurrencyAmountHT=Importe (sin IVA), moneda original MulticurrencyAmountTTC=Importe (inc. De impuestos), moneda original MulticurrencyAmountVAT=Importe de la cantidad, moneda original AmountLT1=Impuesto a la cantidad 2 @@ -176,8 +201,14 @@ AmountLT2=Impuesto a la cantidad 3 AmountLT1ES=Cantidad RE AmountTotal=Cantidad total AmountAverage=Cantidad promedio +PriceQtyMinHT=Precio cantidad min. (sin impuestos) +PriceQtyMinHTCurrency=Precio cantidad min. (sin IVA) (moneda) SubTotal=Total parcial +TotalHT100Short=Total de 100%% (excl.) +TotalHTShortCurrency=Total (excl. En moneda) TotalTTCShort=Total (IVA inc.) +TotalHT=Total (sin IVA) +TotalHTforthispage=Total (sin IVA) para esta página Totalforthispage=Total para esta página TotalTTC=Total (impuesto inc.) TotalTTCToYourCredit=Total (impuesto inc.) A su crédito @@ -185,6 +216,7 @@ TotalVAT=Total impuestos TotalLT1=Impuesto total 2 TotalLT2=Impuesto total 3 TotalLT2ES=IRPF total +HT=Excl. impuesto TTC=Inc. impuesto INCVATONLY=IVA incluido INCT=Inc. todos los impuestos @@ -194,6 +226,7 @@ LT1=Impuesto a las ventas 2 LT1Type=Tipo de impuesto a las ventas 2 LT2=Impuesto a las ventas 3 LT2Type=Tipo de impuesto a las ventas 3 +LT1GC=Centavos adicionales VATRate=Tasa de impuesto VATCode=Código de tasa impositiva VATNPR=Tasa de impuesto NPR @@ -216,6 +249,8 @@ Accountant=Contador ContactsForCompany=Contactos para este tercero ContactsAddressesForCompany=Contactos/direcciones para este tercero AddressesForCompany=Direcciones para este tercero +ActionsOnCompany=Eventos para este tercero. +ActionsOnContact=Eventos para este contacto / dirección ActionsOnMember=Eventos sobre este miembro NActionsLate=%s tarde Completed=Terminado @@ -224,6 +259,7 @@ Filter=Filtrar FilterOnInto=Criterio de búsqueda '%s' en los campos %s ChartGenerated=Gráfico generado GeneratedOn=Construir en %s +DolibarrWorkBoard=Artículos abiertos NoOpenedElementToProcess=Sin elemento abierto para procesar NotYetAvailable=No disponible aún Categories=Etiquetas / categorías @@ -233,6 +269,7 @@ ResultKo=Fracaso Reporting=Informes Drafts=Borrador Opened=Abierto +ClosedAll=Cerrado (todos) Size=tamaño Topic=Tema ByCompanies=Por terceros @@ -242,6 +279,7 @@ Preview=Previsualizar NextStep=Próximo paso None=Ninguna Late=Tarde +LateDesc=Un elemento se define como Retrasado según la configuración del sistema en el menú Inicio - Configuración - Alertas. NoItemLate=No hay artículo tarde Photo=Imagen Photos=Imágenes @@ -291,6 +329,7 @@ InfoAdmin=Información para administradores Undo=Deshacer UndoExpandAll=Deshacer expandir FeatureNotYetSupported=Característica aún no compatible +SendByMail=Enviar por correo electrónico MailSentBy=Correo electrónico enviado por TextUsedInTheMessageBody=Cuerpo del correo electronico SendAcknowledgementByMail=Enviar correo electrónico de confirmación @@ -304,6 +343,9 @@ CanBeModifiedIfKo=Puede ser modificado si no es válido ValueIsValid=El valor es valido ValueIsNotValid=El valor no es válido RecordCreatedSuccessfully=Registro creado con éxito +RecordsModified=%s registros modificados +RecordsDeleted=%s registro (s) eliminado (s) +RecordsGenerated=%s registro (s) generado (s) AutomaticCode=Código automático FeatureDisabled=Característica deshabilitada MoveBox=Mover widget @@ -314,6 +356,7 @@ Receive=Recibir CompleteOrNoMoreReceptionExpected=Completo o nada más esperado YouCanChangeValuesForThisListFromDictionarySetup=Puede cambiar los valores para esta lista desde el menú Configuración - Diccionarios YouCanChangeValuesForThisListFrom=Puede cambiar los valores para esta lista desde el menú %s +YouCanSetDefaultValueInModuleSetup=Puede establecer el valor predeterminado utilizado al crear un nuevo registro en la configuración del módulo Documents=Archivos UploadDisabled=Carga inhabilitada MenuAgendaGoogle=Agenda de Google @@ -327,17 +370,23 @@ UnHidePassword=Mostrar comando real con contraseña clara AddNewLine=Agregar nueva línea AddFile=Agregar archivo FreeZone=No es un producto / servicio predefinido +FreeLineOfType=Artículo de texto libre, escriba: CloneMainAttributes=Clonar objeto con sus atributos principales +ReGeneratePDF=Volver a generar PDF Merge=Unir DocumentModelStandardPDF=Plantilla PDF estándar PrintContentArea=Mostrar página para imprimir área de contenido principal MenuManager=Administrador de menú +WarningYouAreInMaintenanceMode=Advertencia, está en modo de mantenimiento: solo el inicio de sesión %s tiene permiso para usar la aplicación en este modo. CoreErrorMessage=Disculpe, ocurrió un error. Póngase en contacto con el administrador del sistema para verificar los registros o deshabilitar $ dolibarr_main_prod = 1 para obtener más información. ValidatePayment=Validar el pago FieldsWithAreMandatory=Campos con %s son obligatorios +FieldsWithIsForPublic=Los campos con %s se muestran en la lista pública de miembros. Si no quieres esto, desmarca la casilla "público". +AccordingToGeoIPDatabase=(De acuerdo a la conversión de GeoIP) RequiredField=campo requerido ToTest=Prueba ValidateBefore=La tarjeta debe ser validada antes de usar esta característica +TotalizableDesc=Este campo es totalizable en lista. Hidden=Oculto Source=Fuente Before=antes de @@ -350,10 +399,15 @@ LinkTo=Enlace a LinkToProposal=Enlace a la propuesta LinkToOrder=Enlace a la orden LinkToInvoice=Enlace a la factura +LinkToTemplateInvoice=Enlace a la factura de la plantilla +LinkToSupplierOrder=Enlace a la orden de compra +LinkToSupplierProposal=Enlace a la propuesta del vendedor +LinkToSupplierInvoice=Enlace a la factura del vendedor LinkToContract=Enlace a contrato LinkToIntervention=Enlace a la intervención SetToDraft=Volver al borrador ClickToEdit=Haz click para editar +ClickToRefresh=Haga clic para actualizar EditHTMLSource=Editar fuente HTML ByCountry=Por país ByTown=Por la ciudad @@ -363,6 +417,7 @@ NoResults=No hay resultados SystemTools=Herramientas del sistema ModulesSystemTools=Herramientas de módulos NoPhotoYet=No hay fotos disponibles todavía +MyDashboard=Mi tablero SelectAction=Seleccione la acción SelectTargetUser=Seleccionar usuario / empleado objetivo HelpCopyToClipboard=Usa Ctrl + C para copiar al portapapeles @@ -375,6 +430,7 @@ AddBox=Agregar caja SelectElementAndClick=Seleccione un elemento y haga clic en %s PrintFile=Imprimir archivo %s ShowTransaction=Mostrar entrada en cuenta bancaria +GoIntoSetupToChangeLogo=Vaya a Inicio - Configuración - Compañía para cambiar el logotipo o vaya a Inicio - Configuración - Mostrar para ocultar. Deny=Negar Denied=Negado ListOfTemplates=Lista de plantillas @@ -384,28 +440,47 @@ Sincerely=Sinceramente DeleteLine=Eliminar línea ConfirmDeleteLine=¿Estás seguro de que deseas eliminar esta línea? NoPDFAvailableForDocGenAmongChecked=No hay PDF disponible para la generación de documentos entre el registro verificado +TooManyRecordForMassAction=Demasiados registros seleccionados para la acción de masas. La acción está restringida a una lista de registros %s. NoRecordSelected=Ningún registro seleccionado MassFilesArea=Área para archivos creados por acciones masivas +ConfirmMassDeletion=Confirmación de eliminación masiva +ConfirmMassDeletionQuestion=¿Está seguro de que desea eliminar los registros seleccionados %s? ClassifyBilled=Clasificar pago ClassifyUnbilled=Clasificar sin facturar FrontOffice=Oficina frontal ExportFilteredList=Exportar lista filtrada ExportList=Lista de exportación +ExportOfPiecesAlreadyExportedIsEnable=Se habilita la exportación de piezas ya exportadas. +ExportOfPiecesAlreadyExportedIsDisable=La exportación de piezas ya exportadas está deshabilitada. +AllExportedMovementsWereRecordedAsExported=Todos los movimientos exportados fueron registrados como exportados. +NotAllExportedMovementsCouldBeRecordedAsExported=No todos los movimientos exportados pudieron registrarse como exportados Miscellaneous=Diverso GroupBy=Agrupar por... RemoveString=Eliminar la cadena '%s' +SomeTranslationAreUncomplete=Algunos de los idiomas ofrecidos pueden estar solo parcialmente traducidos o pueden contener errores. Ayude a corregir su idioma registrándose en https://transifex.com/projects/p/dolibarr/ para agregar sus mejoras. DirectDownloadLink=Enlace de descarga directa (público / externo) DirectDownloadInternalLink=Enlace de descarga directa (debe registrarse y necesita permisos) DownloadDocument=Descargar documento ActualizeCurrency=Actualizar la tasa de cambio +ModuleBuilder=Módulo y generador de aplicaciones ClickToShowHelp=Haga clic para mostrar la ayuda de información sobre herramientas ExpenseReport=Informe de gastos ExpenseReports=Reporte de gastos HR=HORA HRAndBank=Recursos Humanos y Banco TitleSetToDraft=Volver al borrador +ConfirmSetToDraft=¿Está seguro de que desea volver al estado de borrador? ImportId=Importar identificación +EMailTemplates=Plantillas de correo electrónico +LeadOrProject=Plomo Proyecto +LeadsOrProjects=Lleva | Proyectos +Lead=Dirigir +Leads=Lleva +ListOpenLeads=Lista de clientes potenciales abiertos +ListOpenProjects=Listar proyectos abiertos +NewLeadOrProject=Nuevo plomo o proyecto LineNb=Line no +TabLetteringSupplier=Letras del vendedor Monday=lunes Tuesday=martes Thursday=jueves @@ -430,12 +505,21 @@ Select2LoadingMoreResults=Cargando más resultados ... Select2SearchInProgress=Búsqueda en progreso ... SearchIntoCustomerInvoices=Facturas de cliente SearchIntoSupplierInvoices=Facturas del vendedor +SearchIntoCustomerOrders=Ordenes de venta SearchIntoSupplierOrders=Ordenes de compra SearchIntoCustomerProposals=Propuestas de clientes SearchIntoSupplierProposals=Propuestas del vendedor SearchIntoCustomerShipments=Envíos de clientes SearchIntoExpenseReports=Reporte de gastos +SearchIntoLeaves=Salir +SearchIntoTickets=Entradas NbComments=Numero de comentarios CommentAdded=Comentario agregado Everybody=Todos +PayedTo=Pagado para AssignedTo=Asignado a +ConfirmMassDraftDeletion=Confirmación de borrado masivo borrador +SelectAThirdPartyFirst=Seleccione un tercero primero ... +YouAreCurrentlyInSandboxMode=Actualmente se encuentra en el modo "zona de pruebas" %s +ValidFrom=Válida desde +NoRecordedUsers=No hay usuarios diff --git a/htdocs/langs/es_CL/members.lang b/htdocs/langs/es_CL/members.lang index 69068ec83aa..c360e73cbaf 100644 --- a/htdocs/langs/es_CL/members.lang +++ b/htdocs/langs/es_CL/members.lang @@ -3,6 +3,7 @@ MembersArea=Área de miembros MemberCard=Tarjeta de miembro SubscriptionCard=Tarjeta de suscripción ShowMember=Mostrar tarjeta de miembro +ThirdpartyNotLinkedToMember=Tercero no vinculado a un miembro MembersTickets=Entradas de los miembros FundationMembers=Miembros de la fundación ErrorMemberIsAlreadyLinkedToThisThirdParty=Otro miembro (nombre: %s, login: %s) ya está asignado al tercero %s. Primero elimine la asignación, porque un tercero no puede vincularse solo a un miembro (y viceversa). @@ -49,7 +50,9 @@ Subscriptions=Suscripciones SubscriptionLate=Tarde SubscriptionNotReceived=Suscripción nunca recibida ListOfSubscriptions=Lista de suscripciones +SendCardByMail=Enviar tarjeta por email NoTypeDefinedGoToSetup=Ningún tipo de miembro definido. Ir al menú "Tipos de miembros" +WelcomeEMail=Correo de bienvenida SubscriptionRequired=Suscripción requerida VoteAllowed=Voto permitido MorPhy=Moral / Físico @@ -83,6 +86,16 @@ YourSubscriptionWasRecorded=Su nueva suscripción fue grabada YourMembershipWasCanceled=Su membresía fue cancelada CardContent=Contenido de su tarjeta de miembro ThisIsContentOfYourMembershipRequestWasReceived=Queremos informarle que se recibió su solicitud de membresía.

+ThisIsContentOfSubscriptionReminderEmail=Queremos informarle que su suscripción está a punto de caducar o ya ha caducado (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). Esperamos que lo renueven.

+ThisIsContentOfYourCard=Este es un resumen de la información que tenemos sobre usted. Por favor, póngase en contacto con nosotros si algo es incorrecto.

+DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Asunto de la notificación por correo electrónico recibida en caso de autoinscripción de un invitado +DescADHERENT_AUTOREGISTER_NOTIF_MAIL=Contenido del correo electrónico de notificación recibido en caso de inscripción automática de un invitado +DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=Plantilla de correo electrónico que se utilizará para enviar un correo electrónico a un miembro en la suscripción automática de miembros +DescADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION=Plantilla de correo electrónico para usar para enviar un correo electrónico a un miembro en la validación de miembros +DescADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION=Plantilla de correo electrónico que se utiliza para enviar un correo electrónico a un miembro en una nueva grabación de suscripción +DescADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION=Plantilla de correo electrónico que se utilizará para enviar un recordatorio por correo electrónico cuando la suscripción esté a punto de caducar +DescADHERENT_EMAIL_TEMPLATE_CANCELATION=Plantilla de correo electrónico que se utiliza para enviar un correo electrónico a un miembro en caso de cancelación de miembro +DescADHERENT_MAIL_FROM=Correo electrónico del remitente para correos electrónicos automáticos DescADHERENT_ETIQUETTE_TYPE=Formato de la página de etiquetas DescADHERENT_ETIQUETTE_TEXT=Texto impreso en las hojas de direcciones de los miembros DescADHERENT_CARD_TYPE=Página de formato de tarjetas @@ -103,6 +116,8 @@ DocForAllMembersCards=Genera tarjetas de visita para todos los miembros DocForOneMemberCards=Genera tarjetas de visita para un miembro en particular DocForLabels=Generar hojas de direcciones SubscriptionPayment=Pago de suscripción +LastSubscriptionDate=Fecha del último pago de suscripción +LastSubscriptionAmount=Cantidad de la última suscripción MembersStatisticsByState=Estadísticas de miembros por estado / provincia MembersStatisticsByTown=Estadísticas de miembros por ciudad NoValidatedMemberYet=No se encontraron miembros validados @@ -126,8 +141,12 @@ MembersStatisticsByProperties=Estadísticas de miembros por naturaleza MembersByNature=Esta pantalla muestra estadísticas de los miembros por naturaleza. MembersByRegion=Esta pantalla muestra estadísticas de los miembros por región. VATToUseForSubscriptions=Tipo de IVA para suscripciones +NoVatOnSubscription=Sin IVA para suscripciones. ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Producto utilizado para la línea de suscripción en la factura: %s SubscriptionRecorded=Suscripción grabada NoEmailSentToMember=No se envió ningún correo electrónico al miembro EmailSentToMember=Correo electrónico enviado al miembro al %s SendReminderForExpiredSubscriptionTitle=Enviar recordatorio por correo electrónico para la suscripción caducada +SendReminderForExpiredSubscription=Enviar recordatorio por correo electrónico a los miembros cuando la suscripción está a punto de caducar (el parámetro es el número de días antes del final de la suscripción para enviar el recordatorio. Puede ser una lista de días separados por un punto y coma, por ejemplo, '10; 5; 0; -5 ') +YouMayFindYourInvoiceInThisEmail=Puede encontrar su factura adjunta a este correo electrónico. +XMembersClosed=%s miembro (s) cerrado (s) diff --git a/htdocs/langs/es_CL/orders.lang b/htdocs/langs/es_CL/orders.lang index 0a809f07ec0..daed592b977 100644 --- a/htdocs/langs/es_CL/orders.lang +++ b/htdocs/langs/es_CL/orders.lang @@ -15,6 +15,14 @@ MakeOrder=Hacer orden SupplierOrder=Orden de compra SuppliersOrders=Ordenes de compra SuppliersOrdersRunning=Pedidos de compra actuales +CustomerOrder=Órdenes de venta +CustomersOrders=Ordenes de venta +CustomersOrdersRunning=Órdenes de venta actuales +CustomersOrdersAndOrdersLines=Pedidos de venta y detalles del pedido +OrdersDeliveredToBill=Pedidos de venta entregados a la factura. +OrdersToBill=Pedidos de venta entregados +OrdersInProcess=Órdenes de venta en proceso +OrdersToProcess=Pedidos de venta para procesar SuppliersOrdersToProcess=Órdenes de compra para procesar StatusOrderCanceledShort=Cancelado StatusOrderSentShort=En proceso @@ -51,14 +59,18 @@ AddToDraftOrders=Añadir a orden de borrador OrdersOpened=Órdenes para procesar NoDraftOrders=No hay borradores de pedidos NoOrder=Sin orden +LastOrders=Últimos pedidos de %s +LastCustomerOrders=Últimos pedidos de %s LastSupplierOrders=Últimas %s órdenes de compra LastModifiedOrders=Últimas %s órdenes modificadas AllOrders=Todas las órdenes NbOfOrders=Numero de ordenes OrdersStatistics=Estadísticas de la orden OrdersStatisticsSuppliers=Estadísticas de orden de compra +AmountOfOrdersByMonthHT=Cantidad de pedidos por mes (sin IVA) ListOfOrders=Lista de ordenes CloseOrder=Cerrar orden +ConfirmCloseOrder=¿Está seguro de que desea configurar este pedido para entregado? Una vez que se entrega un pedido, se puede configurar para facturarse. ConfirmDeleteOrder=¿Seguro que quieres eliminar esta orden? ConfirmValidateOrder=¿Estas seguro que deseas validar esta orden con el nombre %s? ConfirmUnvalidateOrder=¿Estas seguro que deseas restaurar la orden %s al estado de borrador? @@ -80,11 +92,14 @@ AuthorRequest=Solicitar autor UserWithApproveOrderGrant=Usuarios con permiso de "aprobar órdenes". PaymentOrderRef=Pago del pedido %s ConfirmCloneOrder=¿Estas seguro que deseas clonar esta orden %s? +DispatchSupplierOrder=Recibiendo orden de compra %s FirstApprovalAlreadyDone=Primera aprobación ya hecha SecondApprovalAlreadyDone=Segunda aprobación ya hecha SupplierOrderReceivedInDolibarr=La orden de compra %s recibió %s +SupplierOrderSubmitedInDolibarr=Orden de compra %s enviada SupplierOrderClassifiedBilled=Pedido de compra %s establecido facturado OtherOrders=Otras órdenes +TypeContact_commande_internal_SALESREPFOLL=Representante seguimiento de orden de venta TypeContact_commande_internal_SHIPPING=Representante de seguimiento de envío TypeContact_commande_external_BILLING=Contacto cliente de facturación cotización TypeContact_commande_external_SHIPPING=Contacto de envío del cliente @@ -98,6 +113,7 @@ Error_COMMANDE_SUPPLIER_ADDON_NotDefined=Constante COMMANDE_SUPPLIER_ADDON no de Error_COMMANDE_ADDON_NotDefined=Constant COMMANDE_ADDON no definido Error_OrderNotChecked=No hay pedidos para facturar seleccionados PDFEinsteinDescription=Un modelo de pedido completo (logotipo ...) +PDFEratostheneDescription=Un modelo de pedido completo (logo ...) PDFEdisonDescription=Un modelo de orden simple PDFProformaDescription=Una factura proforma completa (logotipo ...) CreateInvoiceForThisCustomer=Pagar Pedidos diff --git a/htdocs/langs/es_CL/other.lang b/htdocs/langs/es_CL/other.lang index 5d75b77f846..cd109e65f63 100644 --- a/htdocs/langs/es_CL/other.lang +++ b/htdocs/langs/es_CL/other.lang @@ -3,6 +3,7 @@ SecurityCode=Código de seguridad NumberingShort=NORTE Tools=Herramientas TMenuTools=Herramientas +ToolsDesc=Todas las herramientas no incluidas en otras entradas del menú se agrupan aquí.
Se puede acceder a todas las herramientas a través del menú de la izquierda. Birthday=Cumpleaños BirthdayAlertOn=alerta de cumpleaños activa BirthdayAlertOff=alerta de cumpleaños inactiva @@ -12,11 +13,22 @@ PreviousMonthOfInvoice=Mes anterior (número 1-12) de la fecha de facturación NextMonthOfInvoice=El mes siguiente (número 1-12) de la fecha de la factura TextNextMonthOfInvoice=Mes siguiente (texto) de fecha de factura DocFileGeneratedInto=Archivo de documento generado en %s. +MessageOK=Mensaje en la página de devolución para un pago validado. +MessageKO=Mensaje en la página de devolución para un pago cancelado. ContentOfDirectoryIsNotEmpty=El contenido de este directorio no está vacío. +DeleteAlsoContentRecursively=Marque para borrar todo el contenido recursivamente YearOfInvoice=Año de la fecha de factura PreviousYearOfInvoice=Año anterior de la fecha de facturación NextYearOfInvoice=El año siguiente a la fecha de la factura +Notify_ORDER_VALIDATE=Pedido de venta validado +Notify_ORDER_SENTBYMAIL=Pedido de venta enviado por correo +Notify_ORDER_SUPPLIER_SENTBYMAIL=Orden de compra enviada por correo electrónico +Notify_ORDER_SUPPLIER_VALIDATE=Orden de compra registrada +Notify_ORDER_SUPPLIER_APPROVE=Orden de compra aprobada +Notify_ORDER_SUPPLIER_REFUSE=Orden de compra rechazada Notify_PROPAL_VALIDATE=Validación cotización cliente +Notify_PROPAL_CLOSE_SIGNED=Propuesta de cliente cerrada firmada +Notify_PROPAL_CLOSE_REFUSED=Propuesta de cliente cerrada rechazada Notify_PROPAL_SENTBYMAIL=Envío cotización por e-mail Notify_WITHDRAW_TRANSMIT=Retirada de transmisión Notify_WITHDRAW_CREDIT=Retiro de crédito @@ -27,6 +39,10 @@ Notify_BILL_VALIDATE=Factura del cliente validada Notify_BILL_UNVALIDATE=Factura del cliente sin validar Notify_BILL_CANCEL=Factura del cliente cancelada Notify_BILL_SENTBYMAIL=Factura del cliente enviada por correo +Notify_BILL_SUPPLIER_VALIDATE=Factura del proveedor validada +Notify_BILL_SUPPLIER_PAYED=Factura pagada al vendedor +Notify_BILL_SUPPLIER_SENTBYMAIL=Factura del proveedor enviada por correo +Notify_BILL_SUPPLIER_CANCELED=Factura del vendedor cancelada Notify_CONTRACT_VALIDATE=Contrato validado Notify_FICHEINTER_VALIDATE=Intervención validada Notify_FICHINTER_ADD_CONTACT=Contacto agregado a la intervención @@ -38,14 +54,26 @@ Notify_MEMBER_SUBSCRIPTION=Miembro suscrito Notify_MEMBER_RESILIATE=Miembro terminado Notify_MEMBER_DELETE=Miembro eliminado Notify_PROJECT_CREATE=Creación del proyecto +Notify_HOLIDAY_VALIDATE=Deja la solicitud validada (se requiere aprobación) +Notify_HOLIDAY_APPROVE=Dejar la solicitud aprobada SeeModuleSetup=Ver configuración del módulo %s NbOfAttachedFiles=Número de archivos / documentos adjuntos TotalSizeOfAttachedFiles=Tamaño total de los archivos / documentos adjuntos MaxSize=Talla máxima AttachANewFile=Adjunte un nuevo archivo / documento LinkedObject=Objeto vinculado +NbOfActiveNotifications=Número de notificaciones (número de correos electrónicos del destinatario) PredefinedMailTest=__(Hola)__\nEste es un correo de prueba enviado a __EMAIL__.\nLas dos líneas están separadas por un retorno de carro.\n\n__USER_SIGNATURE__ PredefinedMailTestHtml=__(Hola)__\nEste es un correo de prueba (la palabra prueba debe estar en negrita).
Las dos líneas están separadas por un retorno de carro.

__USER_SIGNATURE__ +PredefinedMailContentSendInvoice=__ (Hola) __ Encuentre la factura __REF__ adjunta __ONLINE_PAYMENT_TEXT_AND_URL__ __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendInvoiceReminder=__ (Hola) __ Nos gustaría recordarle que la factura __REF__ no parece haber sido pagada. Se adjunta una copia de la factura como recordatorio. __ONLINE_PAYMENT_TEXT_AND_URL__ __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendProposal=__ (Hola) __ Encuentre la propuesta comercial __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendSupplierProposal=__ (Hola) __ Por favor encuentre la solicitud de precio __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendOrder=__ (Hola) __ Encuentre el pedido __REF__ adjunto __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendSupplierOrder=__ (Hola) __ Encuentra nuestro pedido __REF__ adjunto __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendSupplierInvoice=__ (Hola) __ Encuentre la factura __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendShipping=__ (Hola) __ Encuentra el envío __REF__ adjunto __ (Atentamente) __ __USER_SIGNATURE__ +PredefinedMailContentSendFichInter=__ (Hola) __ Encuentre la intervención __REF__ adjunta __ (Atentamente) __ __USER_SIGNATURE__ DemoDesc=Dolibarr es un ERP / CRM compacto que admite varios módulos comerciales. Una demostración que muestra todos los módulos no tiene sentido ya que este escenario nunca ocurre (varios cientos disponibles). Entonces, varios perfiles de demostración están disponibles. ChooseYourDemoProfilMore=... o crea tu propio perfil
(selección manual del módulo) DemoFundation=Administrar miembros de una fundación @@ -83,15 +111,35 @@ EnableGDLibraryDesc=Instale o habilite la biblioteca de GD en su instalación de ProfIdShortDesc=Prof Id %s es una información que depende del país de un tercero.
Por ejemplo, para el país %s, es el código%s. DolibarrDemo=Demo de Dolibarr ERP / CRM StatsByNumberOfUnits=Estadísticas para suma de cantidad de productos / servicios +StatsByNumberOfEntities=Estadísticas en número de entidades referidas (nº de factura, o pedido ...) NumberOfProposals=Número de propuestas +NumberOfCustomerOrders=Número de órdenes de venta NumberOfCustomerInvoices=Número de facturas de clientes +NumberOfSupplierProposals=Número de propuestas de proveedores +NumberOfSupplierOrders=Número de órdenes de compra +NumberOfSupplierInvoices=Número de facturas del vendedor NumberOfUnitsProposals=Número de unidades en las propuestas +NumberOfUnitsCustomerOrders=Número de unidades en órdenes de venta NumberOfUnitsCustomerInvoices=Número de unidades en las facturas de los clientes +NumberOfUnitsSupplierProposals=Número de unidades en las propuestas de los proveedores. +NumberOfUnitsSupplierOrders=Número de unidades en órdenes de compra +NumberOfUnitsSupplierInvoices=Número de unidades en las facturas de los proveedores. +EMailTextInterventionAddedContact=Se le ha asignado una nueva intervención %s. EMailTextInterventionValidated=La intervención %s ha sido validada. +EMailTextProposalValidated=La propuesta %s ha sido validada. +EMailTextProposalClosedSigned=La propuesta %s ha sido cerrada y firmada. +EMailTextOrderApproved=El pedido %s ha sido aprobado. +EMailTextOrderApprovedBy=La orden %s ha sido aprobada por %s. +EMailTextOrderRefused=La orden %s ha sido rechazada. +EMailTextOrderRefusedBy=La orden %s ha sido rechazada por %s. +EMailTextExpenseReportApproved=Informe de gastos %s ha sido aprobado. +EMailTextHolidayValidated=Deja la solicitud %s ha sido validado. +EMailTextHolidayApproved=Deja la solicitud %s ha sido aprobada. ImportedWithSet=Conjunto de datos de importación ResizeDesc=Ingrese un nuevo ancho O nueva altura. La relación se mantendrá durante el cambio de tamaño ... NewSizeAfterCropping=Nuevo tamaño después del recorte DefineNewAreaToPick=Defina una nueva área en la imagen para elegir (haga clic con el botón izquierdo en la imagen y luego arrastre hasta que llegue a la esquina opuesta) +CurrentInformationOnImage=Esta herramienta fue diseñada para ayudarte a redimensionar o recortar una imagen. Esta es la información sobre la imagen editada actual. YouReceiveMailBecauseOfNotification=Usted recibe este mensaje porque su correo electrónico ha sido agregado a la lista de objetivos para ser informado de eventos particulares en el software %s de %s. YouReceiveMailBecauseOfNotification2=Este evento es el siguiente: ThisIsListOfModules=Esta es una lista de módulos preseleccionados por este perfil de demostración (solo los módulos más comunes son visibles en esta demostración). Edítelo para tener una demostración más personalizada y haga clic en "Comenzar". @@ -114,9 +162,15 @@ SourcesRepository=Repositorio de fuentes PassEncoding=Codificación de contraseña PermissionsAdd=Permisos agregados YourPasswordMustHaveAtLeastXChars=Su contraseña debe tener al menos %s caracteres +MissingIds=IDs que faltan +ThirdPartyCreatedByEmailCollector=Tercero creado por el recolector de correo electrónico del correo electrónico MSGID %s +ContactCreatedByEmailCollector=Contacto / dirección creada por el recolector de correo electrónico del correo electrónico MSGID %s +ProjectCreatedByEmailCollector=Proyecto creado por el recolector de correo electrónico del correo electrónico MSGID %s +TicketCreatedByEmailCollector=Ticket creado por el recolector de correo electrónico del correo electrónico MSGID %s LibraryUsed=Biblioteca utilizada LibraryVersion=Versión de biblioteca NoExportableData=No se pueden exportar datos (no hay módulos con datos exportables cargados o sin permisos) WebsiteSetup=Configuración del sitio web del módulo +WEBSITE_IMAGEDesc=Ruta relativa de los medios de imagen. Puede mantenerlo vacío, ya que rara vez se utiliza (puede ser utilizado por contenido dinámico para mostrar una vista previa de una lista de publicaciones de blog). WEBSITE_KEYWORDS=Palabras clave LinesToImport=Líneas para importar diff --git a/htdocs/langs/es_CL/products.lang b/htdocs/langs/es_CL/products.lang index 5514d75f4c1..8ef82a6ff34 100644 --- a/htdocs/langs/es_CL/products.lang +++ b/htdocs/langs/es_CL/products.lang @@ -6,6 +6,8 @@ ProductDescriptionTranslated=Descripción traducida del producto ProductNoteTranslated=Nota traducida del producto ProductServiceCard=Tarjeta de Productos/Servicios ProductId=Identificación de producto / servicio +ProductVatMassChange=Actualización de IVA global +ProductVatMassChangeDesc=¡Esta herramienta actualiza la tasa de IVA definida en TODOS los productos y servicios! MassBarcodeInit=Iniciar de código de barras masivo MassBarcodeInitDesc=Esta página se puede utilizar para inicializar un código de barras en objetos que no tienen definido el código de barras. Verifique antes de que se complete la configuración del módulo de código de barras. ProductAccountancyBuyCode=Código de contabilidad (compra) @@ -21,6 +23,7 @@ ServicesOnSaleOnly=Servicios solo para venta ServicesOnPurchaseOnly=Servicios solo para compra ServicesNotOnSell=Servicios no en venta y no en compra ServicesOnSellAndOnBuy=Servicios para venta y compra +LastModifiedProductsAndServices=Últimos productos / servicios %s modificados LastRecordedProducts=Últimos %s productos grabados LastRecordedServices=Últimos %s servicios grabados NotOnSell=No en venta @@ -31,10 +34,14 @@ ProductStatusNotOnBuyShort=No en compra UpdateVAT=Actualizar IVA UpdateDefaultPrice=Actualizar el precio predeterminado UpdateLevelPrices=Actualizar precios para cada nivel +SellingPriceHT=Precio de venta (sin IVA) SellingPriceTTC=Precio de venta (IVA incluido) +SellingMinPriceTTC=Precio mínimo de venta (impuestos incluidos) +CostPriceDescription=Este campo de precio (sin impuestos) se puede usar para almacenar el monto promedio que este producto le cuesta a su empresa. Puede ser cualquier precio que usted mismo calcule, por ejemplo, a partir del precio de compra promedio más el costo promedio de producción y distribución. CostPriceUsage=Este valor podría usarse para calcular el margen. SoldAmount=Cantidad vendida PurchasedAmount=Cantidad comprada +MinPrice=Min. precio de venta EditSellingPriceLabel=Editar etiqueta de precio de venta CantBeLessThanMinPrice=El precio de venta no puede ser inferior al mínimo permitido para este producto (%s sin IVA). Este mensaje también puede aparecer si escribe un descuento demasiado importante. ErrorProductAlreadyExists=Un producto con referencia %s ya existe. @@ -42,15 +49,20 @@ ErrorProductBadRefOrLabel=Valor incorrecto para referencia o etiqueta. ErrorProductClone=Hubo un problema al intentar clonar el producto o servicio. ErrorPriceCantBeLowerThanMinPrice=Error, el precio no puede ser inferior al precio mínimo. Suppliers=Vendedores +SupplierRef=SKU del proveedor ProductsAndServicesArea=Área de productos y servicios ProductsArea=Área de producto ServicesArea=Área de servicios ListOfStockMovements=Lista de movimientos de stock +SupplierCard=Tarjeta de proveedor SetDefaultBarcodeType=Establecer el tipo de código de barras BarcodeValue=Valor de código de barras NoteNotVisibleOnBill=Nota (no visible en las facturas, cotizaciones, etc.) ServiceLimitedDuration=Si el producto es un servicio de duración limitada: +MultiPricesAbility=Múltiples segmentos de precios por producto / servicio (cada cliente está en un segmento de precios) MultiPricesNumPrices=Cantidad de precios +AssociatedProductsAbility=Activar productos virtuales (kits) +AssociatedProducts=Productos virtuales AssociatedProductsNumber=Cantidad de productos que componen este producto virtual ParentProductsNumber=Número de producto de embalaje principal ParentProducts=Productos para padres @@ -61,13 +73,23 @@ CategoryFilter=Filtro de categoría ProductToAddSearch=Buscar producto para agregar NoMatchFound=No se encontraron coincidencias ListOfProductsServices=Lista de productos / servicios +ProductAssociationList=Lista de productos / servicios que son componentes de este producto / kit virtual ProductParentList=Lista de productos/servicios virtuales con este producto como componente ErrorAssociationIsFatherOfThis=Uno de los productos seleccionados es el padre con el producto actual ConfirmDeleteProduct=¿Seguro que quieres eliminar este producto/servicio? ProductDeleted=Producto / Servicio "%s" borrado de la base de datos. ExportDataset_produit_1=Productos ConfirmDeleteProductLine=¿Estás seguro de que deseas eliminar esta línea de productos? +QtyMin=Min. Cantidad de compra +PriceQtyMin=Precio cantidad min. +PriceQtyMinCurrency=Precio (moneda) para esta cantidad. (sin descuento) +VATRateForSupplierProduct=Tasa de IVA (para este vendedor / producto) +DiscountQtyMin=Descuento para esta cantidad. +NoPriceDefinedForThisSupplier=Sin precio / cantidad definida para este vendedor / producto +NoSupplierPriceDefinedForThisProduct=Ningún precio / cantidad de vendedor definido para este producto +PredefinedServicesToSell=Servicio Predefinido PredefinedProductsAndServicesToSell=Productos / servicios predefinidos para vender +PredefinedProductsAndServicesToPurchase=Productos / servicios predefinidos para comprar. NotPredefinedProducts=Productos / servicios no predefinidos GenerateThumb=Generar imagen ServiceNb=Servicio #%s @@ -75,12 +97,16 @@ ListProductServiceByPopularity=Lista de productos/servicios por popularidad ListProductByPopularity=Lista de productos por popularidad ListServiceByPopularity=Lista de servicios por popularidad ConfirmCloneProduct=¿Está seguro que desea clonar el producto o servicio %s? +CloneContentProduct=Clona toda la información principal del producto / servicio. +CloneCompositionProduct=Clonar producto / servicio virtual CloneCombinationsProduct=Clonar variantes de productos ProductIsUsed=Este producto es usado NewRefForClone=Referencia de nuevo producto/servicio CustomerPrices=Precios de cliente SuppliersPrices=Precios del proveedor +SuppliersPricesOfProductsOrServices=Precios de venta (de productos o servicios). CustomCode=Código de Aduanas / Productos / HS +Nature=Naturaleza del producto (material / acabado) ProductCodeModel=Plantilla de referencia de producto ServiceCodeModel=Plantilla de referencia de servicio AlwaysUseNewPrice=Utilice siempre el precio actual del producto/servicio @@ -89,6 +115,7 @@ PriceByQuantity=Diferentes precios por cantidad DisablePriceByQty=Deshabilitar precios por cantidad PriceByQuantityRange=Rango Cantidad MultipriceRules=Reglas del segmento de precios +UseMultipriceRules=Utilice las reglas de segmento de precios (definidas en la configuración del módulo del producto) para calcular automáticamente los precios de todos los demás segmentos de acuerdo con el primer segmento KeepEmptyForAutoCalculation=Manténgase vacío para que esto se calcule automáticamente a partir del peso o volumen de productos Build=Producir ProductsMultiPrice=Productos y precios para cada segmento de precio @@ -99,15 +126,20 @@ Quarter1=1er. Trimestre Quarter2=2do. Trimestre Quarter3=3er. Trimestre Quarter4=4to. Trimestre +BarCodePrintsheet=Imprimir código de barras +PageToGenerateBarCodeSheets=Con esta herramienta, puede imprimir hojas de pegatinas de códigos de barras. Elija el formato de su página de etiqueta, el tipo de código de barras y el valor del código de barras, luego haga clic en el botón %s . NumberOfStickers=Número de stickers para imprimir en la página PrintsheetForOneBarCode=Imprime varios stickers para un código de barras BuildPageToPrint=Generar página para imprimir FillBarCodeTypeAndValueManually=Llenar el tipo y el valor del código de barras manualmente. FillBarCodeTypeAndValueFromProduct=Llenar el tipo y el valor del código de barras de un producto. FillBarCodeTypeAndValueFromThirdParty=Llenar el tipo y el valor del código de barras de un tercero. +DefinitionOfBarCodeForProductNotComplete=La definición del tipo o valor del código de barras no está completa para el producto %s. +DefinitionOfBarCodeForThirdpartyNotComplete=Definición del tipo o valor del código de barras no completo para terceros %s. ResetBarcodeForAllRecords=Defina el valor del código de barras para todos los registros (esto también restablecerá el valor del código de barras ya definido con los nuevos valores) PriceByCustomer=Diferentes precios para cada cliente PriceCatalogue=Un único precio de venta por producto / servicio +PricingRule=Reglas para los precios de venta. AddCustomerPrice=Agregar precio por cliente ForceUpdateChildPriceSoc=Establezca el mismo precio en las subsidiarias de los clientes PriceByCustomerLog=Registro de precios anteriores de los clientes @@ -115,11 +147,15 @@ MinimumPriceLimit=El precio mínimo no puede ser inferior a %s PriceExpressionSelected=Expresión de precio seleccionado PriceExpressionEditorHelp1="precio = 2 + 2" o "2 + 2" para establecer el precio. Utilizar ; para separar expresiones PriceExpressionEditorHelp2=Puede acceder a ExtraFields con variables como #extrafield_myextrafieldkey # y variables globales con #global_mycode # +PriceExpressionEditorHelp3=Tanto en el precio del producto / servicio como en el de los proveedores, existen estas variables disponibles:
# tva_tx # # localtax1_tx # # localtax2_tx # # peso # # longitud # # superficie # # precio_min # +PriceExpressionEditorHelp4=Solo en el precio del producto / servicio: # supplier_min_price #
Solo en precios de proveedores: # supplier_quantity # y # supplier_tva_tx # PriceMode=Modo de precio DefaultPrice=Precio predeterminado ComposedProductIncDecStock=Aumentar / Disminuir el stock al cambiar producto padre +ComposedProduct=Productos infantiles MinCustomerPrice=Precio mínimo de venta DynamicPriceConfiguration=Configuración dinámica de precios +DynamicPriceDesc=Puede definir fórmulas matemáticas para calcular los precios de Cliente o Proveedor. Tales fórmulas pueden usar todos los operadores matemáticos, algunas constantes y variables. Aquí puede definir las variables que desea utilizar. Si la variable necesita una actualización automática, puede definir la URL externa para permitir que Dolibarr actualice el valor automáticamente. AddVariable=Agregar variable AddUpdater=Agregar actualización VariableToUpdate=Variable para actualizar @@ -136,6 +172,7 @@ IncludingProductWithTag=Incluye producto / servicio con etiqueta DefaultPriceRealPriceMayDependOnCustomer=El precio predeterminado, el precio real puede depender del cliente NbOfQtyInProposals=Cantidad en propuestas ClinkOnALinkOfColumn=Haga clic en un enlace de la columna %s para obtener una vista detallada ... +ProductsOrServicesTranslations=Traducciones de productos / servicios TranslatedLabel=Etiqueta traducida TranslatedDescription=Descripción traducida TranslatedNote=Notas traducidas @@ -144,6 +181,8 @@ VolumeUnits=Unidad de volumen SizeUnits=Unidad de tamaño ConfirmDeleteProductBuyPrice=¿Estás seguro de que deseas eliminar este precio de compra? SubProduct=Sub producto +UseProductFournDesc=Agregue una función para definir las descripciones de los productos definidos por los proveedores además de las descripciones para los clientes. +ProductSupplierDescription=Descripción del vendedor para el producto. ProductAttributeName=Atributo de variante %s ProductAttributeDeleteDialog=¿Estás seguro de que deseas eliminar este atributo? Todos los valores serán eliminados ProductAttributeValueDeleteDialog=¿Estás seguro de que deseas eliminar el valor "%s" con la referencia "%s" de este atributo? @@ -162,9 +201,15 @@ TooMuchCombinationsWarning=Generar muchas variantes puede dar como resultado una DoNotRemovePreviousCombinations=No eliminar variantes anteriores UsePercentageVariations=Usar variaciones porcentuales ErrorDeletingGeneratedProducts=Hubo un error al intentar eliminar las variantes de productos existentes +NbOfDifferentValues=No. de valores diferentes +NbProducts=No. de productos ParentProduct=Producto principal HideChildProducts=Ocultar productos variantes +ShowChildProducts=Mostrar productos variantes +NoEditVariants=Vaya a la tarjeta del producto principal y edite el impacto del precio de las variantes en la pestaña de variantes ConfirmCloneProductCombinations=¿Le gustaría copiar todas las variantes del producto al otro producto principal con la referencia dada? CloneDestinationReference=Referencia del producto de destino ErrorCopyProductCombinations=Hubo un error al copiar las variantes del producto ErrorDestinationProductNotFound=Producto de destino no encontrado +ActionAvailableOnVariantProductOnly=Acción solo disponible en la variante de producto. +ProductsPricePerCustomer=Precios de producto por cliente. diff --git a/htdocs/langs/es_CL/projects.lang b/htdocs/langs/es_CL/projects.lang index 7d7fa48df2e..228b0ad6dac 100644 --- a/htdocs/langs/es_CL/projects.lang +++ b/htdocs/langs/es_CL/projects.lang @@ -4,6 +4,7 @@ ProjectLabel=Etiqueta del proyecto ProjectsArea=Área de proyectos SharedProject=Todos PrivateProject=Contactos del proyecto +ProjectsImContactFor=Proyectos para que soy explícitamente un contacto AllAllowedProjects=Todo el proyecto que puedo leer (mío + público) MyProjectsDesc=Esta vista está limitada a los proyectos para los que es contacto ProjectsPublicDesc=Esta vista presenta todos los proyectos que puede leer. @@ -20,15 +21,21 @@ OnlyYourTaskAreVisible=Solo las tareas asignadas a ti son visibles. Asigna la ta ProjectCategories=Etiquetas / categorías de proyecto ConfirmDeleteAProject=¿Seguro que quieres eliminar este proyecto? ConfirmDeleteATask=¿Seguro que quieres eliminar esta tarea? +OpportunitiesStatusForOpenedProjects=Lleva cantidad de proyectos abiertos por estado. +OpportunitiesStatusForProjects=Lleva cantidad de proyectos por estado. ShowProject=Mostrar proyecto SetProject=Establecer proyecto NoProject=Ningún proyecto definido o propiedad TimeSpentByYou=Tiempo pasado por ti TimeSpentByUser=Tiempo dedicado por el usuario TimesSpent=Tiempo dedicado +TaskId=ID de tarea +RefTask=Tarea ref. +LabelTask=Etiqueta de tarea TaskTimeSpent=Tiempo dedicado a tareas NewTimeSpent=Tiempo dedicado BillTime=Bill el tiempo pasado +BillTimeShort=Tiempo de facturación TaskDateStart=Fecha de inicio de la tarea TaskDateEnd=Fecha de finalización de tarea TaskDescription=Descripción de la tarea @@ -44,6 +51,20 @@ ListOfTasks=Lista de tareas GoToListOfTimeConsumed=Ir a la lista de tiempo consumido GoToListOfTasks=Ir a la lista de tareas GoToGanttView=Ve a la vista de Gantt +ListProposalsAssociatedProject=Listado de las propuestas comerciales relacionadas con el proyecto. +ListOrdersAssociatedProject=Lista de pedidos relacionados con el proyecto. +ListInvoicesAssociatedProject=Listado de facturas de clientes relacionadas con el proyecto. +ListPredefinedInvoicesAssociatedProject=Lista de facturas de plantillas de clientes relacionadas con el proyecto. +ListSupplierOrdersAssociatedProject=Listado de órdenes de compra relacionadas con el proyecto. +ListSupplierInvoicesAssociatedProject=Listado de facturas de proveedores relacionadas con el proyecto. +ListContractAssociatedProject=Listado de contratos relacionados con el proyecto. +ListShippingAssociatedProject=Listado de envíos relacionados con el proyecto. +ListFichinterAssociatedProject=Listado de intervenciones relacionadas con el proyecto. +ListExpenseReportsAssociatedProject=Listado de informes de gastos relacionados con el proyecto. +ListDonationsAssociatedProject=Listado de donaciones relacionadas con el proyecto. +ListVariousPaymentsAssociatedProject=Lista de pagos varios relacionados con el proyecto. +ListSalariesAssociatedProject=Listado de pagos de salarios relacionados con el proyecto. +ListActionsAssociatedProject=Listado de eventos relacionados con el proyecto. ListTaskTimeUserProject=Lista de tiempo consumido en las tareas del proyecto ListTaskTimeForTask=Lista de tiempo consumido en la tarea ActivityOnProjectToday=Actividad en proyecto hoy @@ -60,11 +81,13 @@ ConfirmCloseAProject=¿Seguro que quieres cerrar este proyecto? AlsoCloseAProject=También cierre el proyecto (manténgalo abierto si todavía necesita seguir tareas de producción en él) ReOpenAProject=Proyecto abierto ConfirmReOpenAProject=¿Estás seguro de que quieres volver a abrir este proyecto? +ProjectContact=Contactos de proyecto ActionsOnProject=Eventos en el proyecto YouAreNotContactOfProject=No eres un contacto de este proyecto privado DeleteATimeSpent=Eliminar el tiempo pasado ConfirmDeleteATimeSpent=¿Estás seguro de que deseas eliminar este tiempo gastado? ShowMyTasksOnly=Ver solo las tareas asignadas a mí +TaskRessourceLinks=Contactos de tarea NoTasks=No hay tareas para este proyecto LinkedToAnotherCompany=Vinculado a otro tercero TaskIsNotAssignedToUser=Tarea no asignada al usuario. Use el botón '%s' para asignar la tarea ahora. @@ -83,6 +106,14 @@ ErrorShiftTaskDate=Imposible cambiar la fecha de la tarea según la fecha de ini TaskCreatedInDolibarr=Tarea %s creada TaskModifiedInDolibarr=Tarea %s modificada TaskDeletedInDolibarr=Tarea %s eliminada +OpportunityStatus=Estado de plomo +OpportunityStatusShort=Estado de plomo +OpportunityProbability=Probabilidad de plomo +OpportunityProbabilityShort=Probab plomo. +OpportunityAmount=Cantidad de plomo +OpportunityAmountShort=Cantidad de plomo +OpportunityAmountAverageShort=Cantidad de plomo promedio +OpportunityAmountWeigthedShort=Cantidad de plomo ponderada WonLostExcluded=Ganado/Perdido excluido TypeContact_project_internal_PROJECTLEADER=Líder del proyecto TypeContact_project_external_PROJECTLEADER=Líder del proyecto @@ -94,26 +125,50 @@ TypeContact_project_task_internal_TASKCONTRIBUTOR=Colaborador TypeContact_project_task_external_TASKCONTRIBUTOR=Colaborador SelectElement=Seleccionar elemento AddElement=Enlace al elemento +DocumentModelBeluga=Plantilla de documento de proyecto para la descripción de objetos vinculados +DocumentModelBaleine=Plantilla de documento de proyecto para tareas +DocumentModelTimeSpent=Plantilla de informe de proyecto para el tiempo empleado. PlannedWorkload=Carga de trabajo planificada ProjectReferers=Artículos relacionados ProjectMustBeValidatedFirst=El proyecto debe ser validado primero FirstAddRessourceToAllocateTime=Asignar un recurso de usuario a la tarea para asignar tiempo TimeAlreadyRecorded=Este es el tiempo que ya se ha registrado para esta tarea / día y el usuario %s +NoUserAssignedToTheProject=No hay usuarios asignados a este proyecto. TimeSpentBy=Tiempo consumido por AssignTaskToMe=Asignarme una tarea AssignTaskToUser=Asignar tarea a %s SelectTaskToAssign=Seleccionar tarea para asignar ... +ManageTasks=Usar proyectos para seguir tareas y / o informar el tiempo empleado (hojas de tiempo) ManageOpportunitiesStatus=Usa proyectos para seguir leads / opportinuties +ProjectNbProjectByMonth=Nº de proyectos creados por mes. +ProjectNbTaskByMonth=Nº de tareas creadas por mes. +ProjectOppAmountOfProjectsByMonth=Cantidad de clientes potenciales por mes +ProjectWeightedOppAmountOfProjectsByMonth=Cantidad ponderada de clientes potenciales por mes +ProjectOpenedProjectByOppStatus=Abrir proyecto / liderar por estado de plomo ProjectsStatistics=Estadísticas de proyectos / leads TasksStatistics=Estadísticas sobre proyectos/tareas principales TaskAssignedToEnterTime=Tarea asignada Ingresar el tiempo en esta tarea debería ser posible. IdTaskTime=Tiempo de la tarea de identificación +YouCanCompleteRef=Si desea completar la referencia con algún sufijo, se recomienda agregar un carácter para separarlo, por lo que la numeración automática seguirá funcionando correctamente para los próximos proyectos. Por ejemplo %s-MYSUFFIX OpenedProjectsByThirdparties=Proyectos abiertos por terceros +OnlyOpportunitiesShort=Solo lleva +OpenedOpportunitiesShort=Conductores abiertos +NotOpenedOpportunitiesShort=No es una ventaja abierta +NotAnOpportunityShort=No es una pista +OpportunityTotalAmount=Cantidad total de clientes potenciales +OpportunityPonderatedAmount=Cantidad ponderada de clientes potenciales +OpportunityPonderatedAmountDesc=Cantidad de leads ponderada con probabilidad OppStatusQUAL=Calificación OppStatusPROPO=Cotización +AllowToLinkFromOtherCompany=Permite vincular proyectos de otra empresa.

Valores soportados:
- Mantener vacío: puede vincular cualquier proyecto de la empresa (por defecto)
- "todos": puede vincular cualquier proyecto, incluso proyectos de otras compañías
- Una lista de identificadores de terceros separados por comas: puede vincular todos los proyectos de estos terceros (Ejemplo: 123,4795,53)
LatestProjects=Últimos %s proyectos LatestModifiedProjects=Últimos proyectos modificados %s +NoAssignedTasks=No se encontraron tareas asignadas (asigne proyectos / tareas al usuario actual desde el cuadro de selección superior para ingresar el tiempo) AllowCommentOnProject=Permitir comentarios de los usuarios sobre los proyectos RecordsClosed=%s proyecto (s) cerrado SendProjectRef=Proyecto de información %s +ModuleSalaryToDefineHourlyRateMustBeEnabled=El módulo 'Salarios' debe estar habilitado para definir la tarifa por hora de los empleados para que el tiempo empleado se valore +NewTaskRefSuggested=Referencia de tarea ya utilizada, se requiere una nueva referencia de tarea TimeSpentForInvoice=Tiempo dedicado +InvoiceGeneratedFromTimeSpent=La factura %s se ha generado desde el tiempo invertido en el proyecto +ProjectBillTimeDescription=Verifique si ingresa la hoja de tiempo en las tareas del proyecto Y planea generar facturas de la hoja de tiempo para facturar al cliente del proyecto (no verifique si planea crear una factura que no esté basada en las hojas de tiempo ingresadas). diff --git a/htdocs/langs/es_CL/propal.lang b/htdocs/langs/es_CL/propal.lang index 1ab2a26f16f..de37c77b039 100644 --- a/htdocs/langs/es_CL/propal.lang +++ b/htdocs/langs/es_CL/propal.lang @@ -43,7 +43,9 @@ ErrorPropalNotFound=%s cotizaciones no encontradas AddToDraftProposals=Añadir a cotización borrador NoDraftProposals=Sin cotizaciones borrador CopyPropalFrom=Crear cotización por copia de una existente +CreateEmptyPropal=Crear propuesta comercial vacía o desde lista de productos / servicios. DefaultProposalDurationValidity=Validar duración de cotización (en días) +UseCustomerContactAsPropalRecipientIfExist=Utilice el contacto / dirección con el tipo 'Propuesta de seguimiento de contacto' si se define en lugar de la dirección de un tercero como dirección del destinatario de la propuesta ConfirmClonePropal=¿Está seguro de que desea clonar la propuesta comercial %s? ConfirmReOpenProp=¿Está seguro de que desea abrir de nuevo la propuesta comercial %s? ProposalsAndProposalsLines=Cotizaciones a clientes y líneas de cotizaciones @@ -63,3 +65,4 @@ DefaultModelPropalCreate=Creación de modelo por defecto DefaultModelPropalToBill=Modelo por defecto al cerrar una cotización (a facturar) DefaultModelPropalClosed=Modelo por defecto al cerrar una cotización (no facturado) ProposalCustomerSignature=Aprobación, timbre, fecha y firma +ProposalsStatisticsSuppliers=Estadísticas de propuestas de proveedores. diff --git a/htdocs/langs/es_CL/receptions.lang b/htdocs/langs/es_CL/receptions.lang index b2805eae1e4..7413f516204 100644 --- a/htdocs/langs/es_CL/receptions.lang +++ b/htdocs/langs/es_CL/receptions.lang @@ -1,4 +1,32 @@ # Dolibarr language file - Source file is en_US - receptions +RefReception=Árbitro. recepción +Reception=Recepción +ReceptionsArea=Area de recepciones +ListOfReceptions=Lista de recepciones +LastReceptions=Últimas recepciones de %s +StatisticsOfReceptions=Estadisticas para recepciones. +NumberOfReceptionsByMonth=Número de recepciones por mes. +ReceptionCard=Tarjeta de recepcion +NewReception=Nueva recepcion +CreateReception=Crear recepcion +QtyInOtherReceptions=Cantidad en otras recepciones +OtherReceptionsForSameOrder=Otras recepciones para este pedido. +ReceptionsAndReceivingForSameOrder=Recepciones y recibos por este pedido. +ReceptionsToValidate=Recepciones para validar StatusReceptionCanceled=Cancelado +StatusReceptionValidated=Validado (productos a enviar o ya enviados) StatusReceptionProcessed=Procesada StatusReceptionProcessedShort=Procesada +ConfirmDeleteReception=¿Estás seguro de que deseas eliminar esta recepción? +ConfirmValidateReception=¿Está seguro de que desea validar esta recepción con la referencia %s ? +ConfirmCancelReception=¿Seguro que quieres cancelar esta recepción? +StatsOnReceptionsOnlyValidated=Estadísticas realizadas en recepciones solo validadas. La fecha utilizada es la fecha de validación de la recepción (la fecha de entrega prevista no siempre se conoce). +SendReceptionByEMail=Enviar recepción por correo electrónico +SendReceptionRef=Presentación de la recepción %s +ActionsOnReception=Eventos en recepción +ReceptionCreationIsDoneFromOrder=Por el momento, la creación de una nueva recepción se realiza desde la tarjeta de pedido. +ProductQtyInReceptionAlreadySent=Cantidad de producto de pedido abierto ya enviado +ProductQtyInSuppliersReceptionAlreadyRecevied=Cantidad de producto de pedido de proveedor abierto ya recibido +ValidateOrderFirstBeforeReception=Primero debe validar el pedido antes de poder hacer recepciones. +ReceptionsNumberingModules=Módulo de numeración para recepciones. +ReceptionsReceiptModel=Plantillas de documentos para recepciones. diff --git a/htdocs/langs/es_CL/stocks.lang b/htdocs/langs/es_CL/stocks.lang index 3ec3de75e9f..4e9f9b90191 100644 --- a/htdocs/langs/es_CL/stocks.lang +++ b/htdocs/langs/es_CL/stocks.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - stocks WarehouseCard=Tarjeta de almacenamiento ParentWarehouse=Almacén principal -NewWarehouse=Nuevo almacén/área de stock +NewWarehouse=Nuevo almacén / ubicación de stock WarehouseEdit=Modificar el almacén WarehouseSource=Almacén de origen WarehouseSourceNotDefined=Sin almacén definido @@ -18,6 +18,7 @@ MovementId=Identificación del movimiento StockMovementForId=ID de movimiento %d ListMouvementStockProject=Lista de movimientos de stock asociados al proyecto StocksArea=Área de almacenes +IncludeAlsoDraftOrders=Incluir también órdenes de giro. Location=Ubicación LocationSummary=Nombre corto NumberOfDifferentProducts=Cantidad de productos diferentes @@ -34,30 +35,31 @@ StockLowerThanLimit=Stock inferior al límite de alerta (%s) PMPValue=Precio promedio ponderado EnhancedValueOfWarehouses=Valor de las bodegas UserWarehouseAutoCreate=Crear un almacén de usuario automáticamente al crear un usuario -AllowAddLimitStockByWarehouse=Permitir agregar límite y stock deseado por pareja (producto, almacén) en lugar de por producto -IndependantSubProductStock=Las existencias de productos y subproductos son independientes +AllowAddLimitStockByWarehouse=Administre también los valores para el stock mínimo y deseado por emparejamiento (producto-almacén) además de los valores por producto +IndependantSubProductStock=El stock de producto y el stock de subproducto son independientes. QtyDispatched=Cantidad despachada QtyDispatchedShort=Cantidad despachada QtyToDispatchShort=Cantidad a despachar OrderDispatch=Recibos de artículos -RuleForStockManagementDecrease=Regla para la disminución automática de la gestión de stock (la disminución manual siempre es posible, incluso si se activa una regla de disminución automática) -RuleForStockManagementIncrease=Regla para el aumento automático de la gestión de existencias (el aumento manual siempre es posible, incluso si se activa una regla de aumento automático) -DeStockOnBill=Disminuir las existencias reales en las facturas de clientes / validación de notas de crédito -DeStockOnValidateOrder=Disminuir las existencias reales en la validación de pedidos de clientes +RuleForStockManagementDecrease=Elija Regla para la reducción automática de existencias (siempre es posible una reducción manual, incluso si se activa una regla de disminución automática) +RuleForStockManagementIncrease=Elija la regla para el aumento automático de existencias (siempre es posible un aumento manual, incluso si se activa una regla de aumento automático) +DeStockOnBill=Disminuir las existencias reales en la validación de la factura del cliente / nota de crédito +DeStockOnValidateOrder=Disminuir las existencias reales en la validación de la orden de venta. DeStockOnShipment=Disminuir las existencias reales en la validación de envío -DeStockOnShipmentOnClosing=Disminuir las existencias reales en la clasificación de envío cerrado -ReStockOnBill=Aumentar el stock real en la validación de facturas/notas de crédito de proveedores -ReStockOnDispatchOrder=Aumente las existencias reales en el despacho manual a los almacenes, después de que el proveedor ordene la recepción de los bienes +DeStockOnShipmentOnClosing=Disminuir las existencias reales cuando el envío se establece en cerrado +ReStockOnBill=Aumentar las existencias reales en la validación de la factura del proveedor / nota de crédito +ReStockOnValidateOrder=Aumentar las existencias reales en la aprobación de la orden de compra +ReStockOnDispatchOrder=Aumente las existencias reales en el envío manual al almacén, después del pedido de compra de las mercancías. OrderStatusNotReadyToDispatch=El pedido todavía no tiene o no tiene un estado que permite el despacho de productos en almacenes de existencias. StockDiffPhysicTeoric=Explicación de la diferencia entre stock físico y virtual NoPredefinedProductToDispatch=No hay productos predefinidos para este objeto. Por lo tanto, no se requiere envío en stock. DispatchVerb=Envío StockLimit=Límite de existencias para alerta StockLimitDesc=(vacío) significa que no hay advertencia.
0 se puede utilizar como advertencia tan pronto como el stock esté vacío. -PhysicalStock=Stock fisico -RealStockDesc=Las existencias físicas o reales son las existencias que tiene actualmente en sus almacenes / emplazamientos internos. -RealStockWillAutomaticallyWhen=El stock real cambiará automáticamente de acuerdo con estas reglas (consulte la configuración del módulo de stock para cambiar esto): -VirtualStockDesc=Las existencias virtuales son las acciones que recibirá una vez que todas las acciones pendientes pendientes que afecten a las existencias se cerrarán (orden de proveedor recibida, pedido del cliente enviado, ...) +PhysicalStock=Inventario FISICO +RealStockDesc=El stock físico / real es el stock actualmente en los almacenes. +RealStockWillAutomaticallyWhen=El stock real se modificará de acuerdo con esta regla (como se define en el módulo de Stock): +VirtualStockDesc=El stock virtual es el stock calculado disponible una vez que se cierran todas las acciones abiertas / pendientes (que afectan a las acciones) (pedidos recibidos, pedidos de ventas enviados, etc.) IdWarehouse=Id almacén LieuWareHouse=Almacén de localización WarehousesAndProductsBatchDetail=Almacenes y productos (con detalle por lote / serie) @@ -73,7 +75,6 @@ ThisWarehouseIsPersonalStock=Este almacén representa stock personal de %s %s SelectWarehouseForStockDecrease=Elija el almacén para usar para la disminución de stock SelectWarehouseForStockIncrease=Elija un almacén para aumentar las existencias NoStockAction=Stock sin movimientos -DesiredStock=Stock óptima deseado DesiredStockDesc=Esta cantidad de stock será el valor utilizado para rellenar el stock mediante la función de reposición. StockToBuy=Ordenar Replenishment=Reposición @@ -88,8 +89,8 @@ SelectProductWithNotNullQty=Seleccione al menos un producto con una cantidad no AlertOnly=Solo alertas WarehouseForStockDecrease=El almacén %s se usará para la disminución de stock WarehouseForStockIncrease=El almacén %s se usará para aumentar las existencias -ReplenishmentStatusDesc=Esta es una lista de todos los productos con un stock inferior al stock deseado (o menor que el valor de alerta si está marcada la casilla "solo alerta"). Con la casilla de verificación, puede crear pedidos a proveedores para completar la diferencia. -ReplenishmentOrdersDesc=Esta es una lista de todos los pedidos a proveedores abiertos, incluidos los productos predefinidos. Solo se muestran pedidos abiertos con productos predefinidos, por lo que los pedidos que pueden afectar a las existencias son visibles aquí. +ReplenishmentStatusDesc=Esta es una lista de todos los productos con un stock inferior al stock deseado (o inferior al valor de alerta si la casilla de verificación "solo alerta" está marcada). Usando la casilla de verificación, puede crear órdenes de compra para llenar la diferencia. +ReplenishmentOrdersDesc=Esta es una lista de todas las órdenes de compra abiertas que incluyen productos predefinidos. Solo las órdenes abiertas con productos predefinidos, por lo que las órdenes que pueden afectar a las existencias, son visibles aquí. Replenishments=Reposición NbOfProductBeforePeriod=Cantidad de producto %s en stock antes del período seleccionado (<%s) NbOfProductAfterPeriod=Cantidad de producto %s en stock después del período seleccionado (> %s) @@ -99,19 +100,19 @@ RecordMovement=Transferencia de registros ReceivingForSameOrder=Recibos por esta orden StockMovementRecorded=Movimientos de stock grabados RuleForStockAvailability=Reglas sobre requisitos de stock -StockMustBeEnoughForInvoice=El nivel de stock debe ser suficiente para agregar producto / servicio a la factura (se realiza un control en el stock real actual al agregar una línea en la factura, cualquiera que sea la regla para el cambio automático de stock) -StockMustBeEnoughForOrder=El nivel de stock debe ser suficiente para agregar producto / servicio al pedido (la verificación se realiza sobre el stock real actual al agregar una línea al orden, cualquiera que sea la regla para el cambio automático de stock) -StockMustBeEnoughForShipment=El nivel de stock debe ser suficiente para agregar producto / servicio al envío (el control se realiza sobre el stock real actual al agregar una línea al envío, cualquiera que sea la regla para el cambio automático de stock) +StockMustBeEnoughForInvoice=El nivel de stock debe ser suficiente para agregar un producto / servicio a la factura (el cheque se realiza en el stock real actual al agregar una línea en la factura, independientemente de la regla para el cambio automático de stock) +StockMustBeEnoughForOrder=El nivel de stock debe ser suficiente para agregar el producto / servicio al pedido (la verificación se realiza en el stock real actual al agregar una línea en el pedido, cualquiera que sea la regla para el cambio automático de stock) +StockMustBeEnoughForShipment=El nivel de stock debe ser suficiente para agregar el producto / servicio al envío (la verificación se realiza en el stock real actual al agregar una línea en el envío, independientemente de la regla para el cambio automático de stock) MovementLabel=Etiqueta de movimiento InventoryCode=Código de movimiento o inventario WarehouseAllowNegativeTransfer=Stock puede ser negativo qtyToTranferIsNotEnough=No tiene stock suficiente de su almacén de origen y su configuración no permite existencias negativas. MovementCorrectStock=Corrección de Stock para el producto %s InventoryCodeShort=Inv./Mov. código -NoPendingReceptionOnSupplierOrder=No hay recepción pendiente debido a la orden abierta a proveedor +NoPendingReceptionOnSupplierOrder=No hay recepción pendiente debido a la orden de compra abierta. ThisSerialAlreadyExistWithDifferentDate=Este número de lote/serie (%s) ya existe pero con fecha de consumo o de vencimiento diferente (se encontró %s pero ingresó %s). OpenInternal=Abierto solo para acciones internas -UseDispatchStatus=Utilice un estado de envío (aprobación / rechazo) para las líneas de productos en la recepción de pedidos del proveedor +UseDispatchStatus=Utilice un estado de envío (aprobar / rechazar) para las líneas de productos en la recepción de la orden de compra OptionMULTIPRICESIsOn=La opción "varios precios por segmento" está activada. Significa que un producto tiene varios precios de venta por lo que el valor de venta no se puede calcular ProductStockWarehouseCreated=Límite de stock para alerta y stock óptimo deseado correctamente creado ProductStockWarehouseUpdated=Límite de stock para alerta y stock óptimo deseado correctamente actualizado @@ -128,9 +129,9 @@ inventoryErrorQtyAdd=Error: una cantidad es menor que cero inventoryWarningProductAlreadyExists=Este producto ya está en la lista SelectCategory=Filtro de categoría SelectFournisseur=Filtro de proveedor -INVENTORY_DISABLE_VIRTUAL=Permitir que no se destockone producto infantil de un kit en inventario +INVENTORY_DISABLE_VIRTUAL=Producto virtual (kit): no disminuir el stock de un producto infantil INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Utilice el precio de compra si no se puede encontrar el último precio de compra -INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Movimiento de stock tiene fecha de inventario +INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=El movimiento de stock tiene fecha de inventario. inventoryChangePMPPermission=Permitir cambiar el valor de PMP para un producto OnlyProdsInStock=No agregue productos sin stock TheoricalQty=Cantidad teórica @@ -140,10 +141,14 @@ RealValue=Valor real RegulatedQty=Cantidad regulada AddInventoryProduct=Agregar producto al inventario FlushInventory=Inventario sobrante -ConfirmFlushInventory=¿Confirmas esta acción? +ConfirmFlushInventory=¿Confirma usted esta acción? InventoryFlushed=Inventario eliminado ExitEditMode=Edición de salida inventoryDeleteLine=Eliminar línea RegulateStock=Regular el stock -StockSupportServices=Servicios de soporte de gestión de stock -StockSupportServicesDesc=Por defecto, puede almacenar solo productos con el tipo "producto". Si está activado, y si el servicio de módulo está activado, también puede almacenar un producto con el tipo "servicio" +StockSupportServices=Servicios de gestión de stock. +StockSupportServicesDesc=Por defecto, puede almacenar solo productos del tipo "producto". También puede almacenar un producto de tipo "servicio" si los Servicios del módulo y esta opción están habilitados. +StockIncreaseAfterCorrectTransfer=Incremento por corrección / transferencia. +StockDecreaseAfterCorrectTransfer=Disminución por corrección / transferencia +StockIncrease=Aumento de existencias +StockDecrease=Disminución de existencias diff --git a/htdocs/langs/es_CL/supplier_proposal.lang b/htdocs/langs/es_CL/supplier_proposal.lang index 0c2537dd99d..649d19042a4 100644 --- a/htdocs/langs/es_CL/supplier_proposal.lang +++ b/htdocs/langs/es_CL/supplier_proposal.lang @@ -1,5 +1,6 @@ # Dolibarr language file - Source file is en_US - supplier_proposal SupplierProposal=Propuestas comerciales del vendedor +supplier_proposalDESC=Gestionar solicitudes de precios a proveedores. SupplierProposalNew=Nueva solicitud de precio CommRequest=Precio requerido CommRequests=Peticiones de precio diff --git a/htdocs/langs/es_CL/ticket.lang b/htdocs/langs/es_CL/ticket.lang index 39e2e1b15ba..288993b4520 100644 --- a/htdocs/langs/es_CL/ticket.lang +++ b/htdocs/langs/es_CL/ticket.lang @@ -3,6 +3,10 @@ Module56000Name=Entradas Module56000Desc=Sistema de tickets para gestión de problemas o solicitudes Permission56001=Ver entradas Permission56002=Modificar entradas +Permission56005=Ver boletos de todos los terceros (no es efectivo para usuarios externos, siempre debe limitarse al tercero del que dependen) +TicketDictType=Boleto - Tipos +TicketDictCategory=Boleto - Grupos +TicketDictSeverity=Ticket - Severidades TicketTypeShortINCIDENT=Solicitud de asistencia ErrorBadEmailAddress=Campo '%s' incorrecto MenuTicketMyAssign=Mis boletos @@ -11,21 +15,27 @@ MenuListNonClosed=Boletos abiertos TypeContact_ticket_internal_CONTRIBUTOR=Colaborador TypeContact_ticket_external_SUPPORTCLI=Contacto con el cliente / seguimiento de incidentes OriginEmail=Fuente de correo electrónico +Notify_TICKET_SENTBYMAIL=Enviar mensaje de boleto por correo electrónico NotRead=No leer Read=Leer +NeedMoreInformation=Esperando informacion Answered=Contestada Waiting=Esperando Type=Tipo MailToSendTicketMessage=Para enviar un correo electrónico desde un mensaje de ticket +TicketSetupDictionaries=El tipo de ticket, severidad y códigos analíticos son configurables desde los diccionarios. TicketParamMail=Configuración de correo electrónico TicketEmailNotificationFrom=Correo electrónico de notificación de TicketEmailNotificationFromHelp=Utilizado en la respuesta del mensaje del boleto por ejemplo TicketEmailNotificationTo=Notificaciones de correo electrónico a TicketEmailNotificationToHelp=Envíe notificaciones por correo electrónico a esta dirección. +TicketNewEmailBodyLabel=Mensaje de texto enviado después de crear un ticket. TicketNewEmailBodyHelp=El texto especificado aquí se insertará en el correo electrónico confirmando la creación de un nuevo ticket desde la interfaz pública. La información sobre la consulta del ticket se agrega automáticamente. TicketsEmailMustExist=Requerir una dirección de correo electrónico existente para crear un boleto TicketsEmailMustExistHelp=En la interfaz pública, la dirección de correo electrónico ya debe estar llena en la base de datos para crear un nuevo ticket. PublicInterface=Interfaz pública +TicketUrlPublicInterfaceLabelAdmin=URL alternativa para la interfaz pública +TicketUrlPublicInterfaceHelpAdmin=Es posible definir un alias para el servidor web y, por lo tanto, hacer que la interfaz pública esté disponible con otra URL (el servidor debe actuar como un proxy en esta nueva URL) TicketPublicInterfaceTextHome=Puede crear un ticket de soporte o visualizar existente a partir de su ticket de seguimiento de identificador. ExtraFieldsTicket=Atributos adicionales TicketCkEditorEmailNotActivated=El editor de HTML no está activado. Coloque el contenido FCKEDITOR_ENABLE_MAIL en 1 para obtenerlo. @@ -37,15 +47,21 @@ TicketsShowModuleLogoHelp=Habilite esta opción para ocultar el módulo de logot TicketsShowCompanyLogoHelp=Habilite esta opción para ocultar el logotipo de la empresa principal en las páginas de la interfaz pública TicketsEmailAlsoSendToMainAddress=También envíe notificaciones a la dirección de correo electrónico principal TicketsEmailAlsoSendToMainAddressHelp=Habilite esta opción para enviar un correo electrónico a la dirección "Correo electrónico de notificación de" (consulte la configuración a continuación) +TicketsLimitViewAssignedOnly=Restrinja la visualización a los tickets asignados al usuario actual (no es efectivo para usuarios externos, siempre debe limitarse al tercero del que dependen) TicketsLimitViewAssignedOnlyHelp=Solo las entradas asignadas al usuario actual serán visibles. No se aplica a un usuario con derechos de gestión de tickets. TicketsActivatePublicInterface=Activar la interfaz pública TicketsActivatePublicInterfaceHelp=La interfaz pública permite a los visitantes crear tickets. TicketsAutoAssignTicket=Asigna automáticamente al usuario que creó el ticket +TicketNotifyTiersAtCreation=Notificar a un tercero en la creación +TicketsDisableCustomerEmail=Deshabilite siempre los correos electrónicos cuando se crea un ticket desde la interfaz pública TicketsIndex=Ticket - hogar TicketList=Lista de entradas +TicketAssignedToMeInfos=Esta página muestra la lista de tickets creada por o asignada al usuario actual NoTicketsFound=No se encontró boleto +NoUnreadTicketsFound=No se encontraron entradas sin leer TicketViewAllTickets=Ver todos los boletos TicketStatByStatus=Entradas por estado +Ticket=Boleto TicketCard=Tarjeta de boleto CreateTicket=Crear boleto TicketsManagement=Gestión de entradas @@ -55,6 +71,7 @@ SeeTicket=Ver boleto TicketReadOn=Sigue leyendo TicketHistory=Historial de entradas TicketAssigned=Ticket ahora está asignado +TicketChangeCategory=Cambiar código analítico TicketChangeSeverity=Cambiar severidad TicketAddMessage=Añade un mensaje AddMessage=Añade un mensaje @@ -75,9 +92,12 @@ SendMessageByEmail=Enviar mensaje por correo electrónico ErrorMailRecipientIsEmptyForSendTicketMessage=El destinatario está vacío. Sin enviar correo electrónico TicketMessageMailIntroHelp=Este texto se agrega solo al comienzo del correo electrónico y no se guardará. TicketMessageMailIntroLabelAdmin=Introducción al mensaje cuando se envía un correo electrónico +TicketMessageMailIntroText=Hola,
Se envió una nueva respuesta en un ticket que contactaste. Aquí está el mensaje:
TicketMessageMailSignatureHelp=Este texto se agrega solo al final del correo electrónico y no se guardará. +TicketMessageMailSignatureText=

Sinceramente,

-

TicketMessageMailSignatureLabelAdmin=Firma del correo electrónico de respuesta TicketMessageHelp=Solo este texto se guardará en la lista de mensajes en la tarjeta de boletos. +TicketTimeToRead=Tiempo transcurrido antes de leer TicketContacts=Boleto de contactos TicketDocumentsLinked=Documentos vinculados al boleto ConfirmReOpenTicket=¿Confirma volver a abrir este ticket? @@ -85,10 +105,15 @@ TicketAssignedToYou=Boleto asignado TicketAssignedEmailBody=Se le ha asignado el ticket # %s por %s TicketEmailOriginIssuer=Emisor al origen de los boletos LinkToAContract=Enlace a un contrato +UnableToCreateInterIfNoSocid=No se puede crear una intervención cuando no se define un tercero TicketMailExchanges=Intercambios de correo TicketChangeStatus=Cambiar Estado +TicketConfirmChangeStatus=Confirme el cambio de estado: %s? TicketNotNotifyTiersAtCreate=No notificar a la compañía en crear NoLogForThisTicket=Aún no hay registro para este boleto +TicketLogPropertyChanged=Ticket %s modificado: clasificación de %s a %s +TicketLogClosedBy=Boleto %s cerrado por %s +TicketLogReopen=Boleto %s reabierto TicketSystem=Sistema de entradas ShowListTicketWithTrackId=Mostrar lista de tickets de la ID de la pista ShowTicketWithTrackId=Mostrar ticket desde ID de seguimiento @@ -99,16 +124,28 @@ TicketNewEmailSubject=Confirmación de creación de entradas TicketNewEmailBody=Este es un correo electrónico automático para confirmar que ha registrado un nuevo boleto. TicketNewEmailBodyCustomer=Este es un correo electrónico automático para confirmar que se acaba de crear un nuevo ticket en su cuenta. TicketNewEmailBodyInfosTicket=Información para monitorear el boleto +TicketNewEmailBodyInfosTrackId=Número de seguimiento de entradas: %s TicketNewEmailBodyInfosTrackUrl=Puede ver el progreso del ticket haciendo clic en el enlace de arriba. TicketEmailPleaseDoNotReplyToThisEmail=¡Por favor no responda directamente a este correo! Usa el enlace para responder a la interfaz. TicketPublicInfoCreateTicket=Este formulario le permite registrar un ticket de soporte en nuestro sistema de gestión. TicketPublicPleaseBeAccuratelyDescribe=Por favor describe con precisión el problema. Proporcione la mayor cantidad de información posible que nos permita identificar correctamente su solicitud. TicketPublicMsgViewLogIn=Ingrese la ID de seguimiento de boletos +TicketTrackId=ID de seguimiento público +OneOfTicketTrackId=Una de tus ID de seguimiento +ErrorTicketNotFound=¡No se encontró el ticket con el ID de seguimiento %s! Subject=Tema ViewTicket=Ver boleto ViewMyTicketList=Ver mi lista de boletos +ErrorEmailMustExistToCreateTicket=Error: la dirección de correo electrónico no se encuentra en nuestra base de datos TicketNewEmailSubjectAdmin=Nuevo boleto creado +TicketNewEmailBodyAdmin=

El ticket se acaba de crear con ID # %s, ver información:

SeeThisTicketIntomanagementInterface=Ver boleto en la interfaz de administración +ErrorEmailOrTrackingInvalid=Mal valor para el seguimiento de ID o correo electrónico +OldUser=Antiguo usuario +NumberOfTicketsByMonth=Número de entradas al mes +NbOfTickets=Número de entradas +TicketNotificationNumberEmailSent=Correo electrónico de notificación enviado: %s +ActionsOnTicket=Eventos en la entrada BoxLastTicketDescription=Últimas %s entradas creadas BoxLastTicketNoRecordedTickets=No hay entradas recientes sin leer BoxLastModifiedTicketDescription=Las últimas entradas modificadas %s diff --git a/htdocs/langs/es_CL/workflow.lang b/htdocs/langs/es_CL/workflow.lang index 9946bbcb13d..b1ea13c8a0b 100644 --- a/htdocs/langs/es_CL/workflow.lang +++ b/htdocs/langs/es_CL/workflow.lang @@ -1,15 +1,14 @@ # Dolibarr language file - Source file is en_US - workflow WorkflowSetup=Configuración del módulo de flujo de trabajo -WorkflowDesc=Este módulo está diseñado para modificar el comportamiento de las acciones automáticas en la aplicación. Por defecto, el flujo de trabajo está abierto (puede hacer las cosas en el orden que desee). Usted puede activar las acciones automáticas que le interesen. ThereIsNoWorkflowToModify=No hay modificaciones de flujo de trabajo disponibles con los módulos activados. -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Crear automáticamente un pedido de cliente después de que se firme una propuesta comercial (el nuevo pedido tendrá la misma cantidad que la propuesta) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Cree automáticamente una factura de cliente después de que se firme una propuesta comercial (la nueva factura tendrá el mismo importe que la propuesta) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Crear automáticamente un pedido de venta después de que se haya firmado una propuesta comercial (el nuevo pedido tendrá la misma cantidad que la propuesta) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Crear automáticamente una factura de cliente después de que se haya firmado una propuesta comercial (la nueva factura tendrá el mismo importe que la propuesta) descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Crear automáticamente una factura de cliente después de que un contrato es validado -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Cree automáticamente una factura de cliente después de cerrar una orden de cliente (la nueva factura tendrá el mismo importe que la orden) -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Clasifique la(s) fuente(s) propuesta(s) vinculada(s) a facturar cuando el pedido del cliente se configura para facturar (y si el monto del pedido es igual al monto total de propuestas vinculadas firmadas) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Clasifique la (s) propuesta (s) fuente (s) vinculada (s) para facturar cuando la factura del cliente sea validada (y si el monto de la factura es igual al monto total de las propuestas vinculadas firmadas) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Clasifique los pedidos de origen del cliente vinculados para facturar cuando se valida la factura del cliente (y si el importe de la factura es igual al importe total de los pedidos vinculados) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Clasifique los pedidos de origen del cliente vinculados para facturar cuando la factura del cliente se establece como pagada (y si el importe de la factura es igual al importe total de los pedidos vinculados) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Clasifique la orden del cliente de origen vinculado para enviar cuando se valida un envío (y si la cantidad enviada por todos los envíos es la misma que en el orden de actualización) -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Clasifique la (s) propuesta (s) de proveedores de origen vinculados para facturar cuando se valida la factura del proveedor (y si el importe de la factura es igual al importe total de las propuestas vinculadas) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Clasifique las órdenes de compra de origen vinculadas para facturar cuando se valida la factura del proveedor (y si el importe de la factura es igual al importe total de las órdenes vinculadas) +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Crear automáticamente una factura de cliente después de que se cierre un pedido de venta (la nueva factura tendrá el mismo importe que el pedido) +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Clasifique la propuesta de origen vinculado como facturada cuando el pedido de venta se establece en facturado (y si el monto del pedido es el mismo que el monto total de la propuesta vinculada firmada) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Clasifique la propuesta de origen vinculado como facturada cuando la factura del cliente se valida (y si el monto de la factura es el mismo que el monto total de la propuesta vinculada firmada) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Clasifique el pedido de ventas de origen vinculado como facturado cuando la factura del cliente se valida (y si el monto de la factura es el mismo que el monto total del pedido vinculado) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Clasifique el pedido de venta de origen vinculado como facturado cuando la factura del cliente se establece en pagada (y si el monto de la factura es el mismo que el monto total del pedido vinculado) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Clasifique el pedido de venta de origen vinculado como enviado cuando se valida un envío (y si la cantidad enviada por todos los envíos es la misma que en el pedido de actualización) +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Clasifique la propuesta del proveedor de origen vinculado como facturada cuando se valida la factura del proveedor (y si el monto de la factura es el mismo que el monto total de la propuesta vinculada) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Clasifique la orden de compra de origen vinculado como facturada cuando se valida la factura del proveedor (y si el monto de la factura es el mismo que el monto total del pedido vinculado) diff --git a/htdocs/langs/es_CO/admin.lang b/htdocs/langs/es_CO/admin.lang index 88f1d404b80..c931369f00e 100644 --- a/htdocs/langs/es_CO/admin.lang +++ b/htdocs/langs/es_CO/admin.lang @@ -101,7 +101,6 @@ MenuForUsers=Menú para usuarios. SystemInfo=Información del sistema SystemToolsArea=Área de herramientas del sistema PurgeDeleteLogFile=Elimine los archivos de registro, incluido el %s definido para el módulo Syslog (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos) PurgeDeleteTemporaryFilesShort=Borrar archivos temporales PurgeRunNow=Purga ahora PurgeNothingToDelete=No hay directorio o archivos para eliminar. @@ -666,7 +665,6 @@ ListOfSecurityEvents=Listado de eventos de seguridad de Dolibarr. AreaForAdminOnly=Los parámetros de configuración solo pueden ser configurados por usuarios administradores . SystemInfoDesc=La información del sistema es información técnica diversa que se obtiene en modo de solo lectura y visible solo para administradores. CompanyFundationDesc=Editar la información de la empresa / entidad. Haga clic en el botón "%s" o "%s" en la parte inferior de la página. -AccountantDesc=Edite los detalles de su contador / contador AvailableModules=Aplicación / módulos disponibles ToActivateModule=Para activar los módulos, vaya al área de configuración (Inicio-> Configuración-> Módulos). SessionTimeOut=Tiempo fuera para sesión @@ -1072,6 +1070,8 @@ ExpenseReportsRulesSetup=Configuración de los informes de gastos del módulo - ExpenseReportNumberingModules=Módulo de numeración de informes de gastos. NoModueToManageStockIncrease=No se ha activado ningún módulo capaz de gestionar el aumento automático de stock. El aumento de stock se realizará solo con entrada manual. ListOfNotificationsPerUser=Lista de notificaciones por usuario * +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para agregar o eliminar notificaciones para usuarios GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un tercero para agregar o eliminar notificaciones de contactos / direcciones Threshold=Límite diff --git a/htdocs/langs/es_CO/bills.lang b/htdocs/langs/es_CO/bills.lang index b018909f2aa..91e935e7a99 100644 --- a/htdocs/langs/es_CO/bills.lang +++ b/htdocs/langs/es_CO/bills.lang @@ -18,7 +18,6 @@ InvoiceProFormaAsk=Factura de proforma InvoiceProFormaDesc= Factura proforma es una imagen de una factura real pero no tiene valor contable. InvoiceReplacement=Factura de reemplazo InvoiceReplacementAsk=Factura de reemplazo para la factura. -InvoiceReplacementDesc= Factura de reemplazo se utiliza para cancelar y reemplazar completamente una factura que no haya recibido ningún pago.

Nota: Solo se pueden reemplazar las facturas que no tengan ningún pago. Si la factura que reemplaza aún no está cerrada, se cerrará automáticamente a "abandonada". InvoiceAvoir=Nota de crédito InvoiceAvoirAsk=Nota de crédito para corregir factura invoiceAvoirWithLines=Crear nota de crédito con líneas de la factura de origen. diff --git a/htdocs/langs/es_DO/admin.lang b/htdocs/langs/es_DO/admin.lang index 79fb1cc6155..9bc2c2bc07b 100644 --- a/htdocs/langs/es_DO/admin.lang +++ b/htdocs/langs/es_DO/admin.lang @@ -7,4 +7,6 @@ Permission93=Eliminar impuestos e ITBIS DictionaryVAT=Tasa de ITBIS (Impuesto sobre ventas en EEUU) UnitPriceOfProduct=Precio unitario sin ITBIS de un producto OptionVatMode=Opción de carga de ITBIS +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/es_EC/admin.lang b/htdocs/langs/es_EC/admin.lang index 6e52d4ec437..e388f61c604 100644 --- a/htdocs/langs/es_EC/admin.lang +++ b/htdocs/langs/es_EC/admin.lang @@ -107,7 +107,6 @@ SystemToolsAreaDesc=Esta área proporciona funciones de administración. Utilice Purge=Purgar PurgeAreaDesc=Esta página le permite eliminar todos los archivos generados o almacenados por Dolibarr (archivos temporales o todos los archivos en el directorio %s). Usando esta característica normalmente no es necesario. Se proporciona como una solución para los usuarios cuyo Dolibarr está alojado por un proveedor que no ofrece permisos para eliminar archivos generados por el servidor web. PurgeDeleteLogFile=Eliminar archivo de registro %s definido para el módulo de Registro del Sistema (Syslog) (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales. PurgeDeleteAllFilesInDocumentsDir=Eliminar todos los archivos en el directorio: %s.
Esto eliminará todos los documentos generados relacionados con los elementos (terceros, facturas, etc.), los archivos cargados en el módulo ECM, los volcados de respaldo de la base de datos y archivos temporales. PurgeRunNow=Purgar ahora PurgeNothingToDelete=Sin directorio o archivos que desea eliminar. @@ -811,7 +810,6 @@ LogEventDesc=Habilitar el registro para eventos de seguridad específicos. Los a AreaForAdminOnly=Los parámetros de configuración sólo pueden ser establecidos por usuarios de administrador . SystemInfoDesc=La información del sistema es la información técnica diversa que se obtiene en el modo de solo lectura y visible sólo para los administradores. CompanyFundationDesc=Editar la información de la empresa / entidad. Haga clic en el botón " %s" o " %s" en la parte inferior de la página. -AccountantDesc=Edite los detalles de su contador / contador AvailableModules=Aplicaciones / módulos disponibles ToActivateModule=Para activar los módulos, vaya a área de configuración (Inicio-> Configuración-> Módulos). SessionTimeOut=Tiempo de espera para la sesión diff --git a/htdocs/langs/es_ES/accountancy.lang b/htdocs/langs/es_ES/accountancy.lang index f80257a135c..c98d1b1ed99 100644 --- a/htdocs/langs/es_ES/accountancy.lang +++ b/htdocs/langs/es_ES/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Cuenta contable de resultados (Pérdidas) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Diario de cierre ACCOUNTING_ACCOUNT_TRANSFER_CASH=Cuenta de caja +TransitionalAccount=Cuenta de transferencia bancaria de transición ACCOUNTING_ACCOUNT_SUSPENSE=Cuenta operaciones pendientes de asignar DONATION_ACCOUNTINGACCOUNT=Cuenta contable para registrar donaciones @@ -216,7 +217,7 @@ DescThirdPartyReport=Consulte aquí el listado de clientes y proveedores y sus c ListAccounts=Listado de cuentas contables UnknownAccountForThirdparty=Cuenta contable de tercero desconocida, usaremos %s UnknownAccountForThirdpartyBlocking=Cuenta contable de tercero desconocida. Error de bloqueo -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Cuenta de tercero no definida o tercero desconocido. Usaremos %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Cuenta del tercero desconocida o tercero desconocido. Error de bloqueo UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Cuenta del tercero desconocida y cuenta de espera no definida. Error de bloqueo PaymentsNotLinkedToProduct=Pagos no vinculados a un producto/servicio @@ -292,7 +293,7 @@ Modelcsv_cogilog=Eportar a Cogilog Modelcsv_agiris=Exportar a Agiris Modelcsv_openconcerto=Exportar a OpenConcerto (En pruebas) Modelcsv_configurable=Exportación CSV Configurable -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Exportación FEC Modelcsv_Sage50_Swiss=Exportación a Sage 50 Suiza ChartofaccountsId=Id plan contable @@ -317,9 +318,9 @@ WithoutValidAccount=Sin cuenta dedicada válida WithValidAccount=Con cuenta dedicada válida ValueNotIntoChartOfAccount=Este valor de cuenta contable no existe en el plan general contable AccountRemovedFromGroup=Cuenta eliminada del grupo -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Venta local +SaleExport=Venta de exportación +SaleEEC=Venta en CEE ## Dictionary Range=Rango de cuenta contable @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=No es posible autodetectar, utilice el menú %s
). El uso de esta función no es necesaria. Se proporciona como solución para los usuarios cuyos Dolibarr se encuentran en un proveedor que no ofrece permisos para eliminar los archivos generados por el servidor web. PurgeDeleteLogFile=Eliminar archivos de registro, incluidos %s definidos por el módulo Syslog (sin riesgo de perder datos) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos). Nota: la eliminación se realiza solo si el directorio temporal se creó hace 24 horas. PurgeDeleteTemporaryFilesShort=Eliminar archivos temporales PurgeDeleteAllFilesInDocumentsDir=Eliminar todos los archivos del directorio %s. Serán eliminados archivos temporales y archivos relacionados con elementos (terceros, facturas, etc.), archivos subidos al módulo GED, copias de seguridad de la base de datos y archivos temporales. PurgeRunNow=Purgar @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Casilla de selección de tabla ExtrafieldLink=Objeto adjuntado ComputedFormula=Campo combinado ComputedFormulaDesc=Puede introducir aquí una fórmula utilizando otras propiedades de objeto o cualquier código PHP para obtener un valor calculado dinámico. Puede utilizar cualquier fórmula compatible con PHP, incluido el operador de condición "?" y los objetos globales siguientes: $db, $conf, $langs, $mysoc, $user, $object.
ATENCIÓN: Sólo algunas propiedades de $object pueden estar disponibles. Si necesita propiedades no cargadas, solo busque el objeto en su fórmula como en el segundo ejemplo.
Usando un campo computado significa que no puede ingresar ningún valor de la interfaz. Además, si hay un error de sintaxis, la fórmula puede devolver nada.

Ejemplo de fórmula:
$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Ejemlo de recarga de objeto
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Otro ejemplo de fórmula para forzar la carga del objeto y su objeto principal:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found' +Computedpersistent=Almacenar campo combinado +ComputedpersistentDesc=Los campos adicionales calculados se almacenarán en la base de datos, sin embargo, el valor solo se volverá a calcular cuando se cambie el objeto de este campo. ¡Si el campo calculado depende de otros objetos o datos globales, este valor podría ser incorrecto! ExtrafieldParamHelpPassword=Mantener este campo vacío significa que el valor se almacenará sin cifrado (el campo permanecerá solo oculto con estrellas en la pantalla).
Establezca aquí el valor 'auto' para usar la regla de cifrado predeterminada para guardar la contraseña en la base de datos (entonces el valor leído será solo el hash, no hay forma de recuperar el valor original) ExtrafieldParamHelpselect=El listado de valores tiene que ser líneas key,valor

por ejemplo:
1,value1
2,value2
3,value3
...

Para tener una lista en funcion de campos adicionales de lista:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

Para tener la lista en función de otra:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=El listado de valores tiene que ser líneas con el formato key,valor

por ejemplo:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=El listado de valores tiene que ser líneas con el form ExtrafieldParamHelpsellist=Lista de valores proviene de una tabla
Sintaxis: nombre_tabla: etiqueta_field: id_field :: filtro
Ejemplo: c_typent: libelle: id :: filtro

filtro puede ser una prueba simple (por ejemplo, activa = 1) Para mostrar sólo el valor activo
También puede utilizar $ ID $ en el filtro witch es el actual id del objeto actual
Para hacer un SELECT en el filtro de uso $ SEL $
si desea filtrar en campos adicionales utilizar la sintaxis Extra.fieldcode = ... (donde código de campo es el código de campo adicional)

Para que la lista dependa de otra lista de campos adicionales:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Para que la lista dependa de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=Lista de valores proviene de una tabla
Sintaxis: nombre_tabla: etiqueta_field: id_field :: filtro
Ejemplo: c_typent: libelle: id :: filtro

filtro puede ser una prueba simple (por ejemplo, activa = 1) Para mostrar sólo el valor activo
También puede utilizar $ ID $ en el filtro witch es el id actual del objeto actual
Para hacer un SELECT en el filtro de uso $ SEL $
si desea filtrar en campos adicionales utilizar la sintaxis Extra.fieldcode = ... (donde código de campo es el código de campo adicional)

Para que la lista dependa de otra lista de campos adicionales:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

Para que la lista dependa de otra lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Los parámetros deben ser ObjectName: Classpath
Sintaxis: ObjectName:Classpath
Ejemplo:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Mantener vacío para un separador simple.
Establézcalo a 1 para un separador colapsado (abierto de manera predeterminada)
Establézcalo a 2 para un separador de colapso (colapsado de forma predeterminada) LibraryToBuildPDF=Libreria usada en la generación de los PDF LocalTaxDesc=Algunos países aplican 2 o 3 tasas a cada línea de factura. Si es el caso, escoja el tipo de la segunda y tercera tasa y su valor. Los posibles tipos son:
1 : tasa local aplicable a productos y servicios sin IVA (tasa local es calculada sobre la base imponible)
2 : tasa local se aplica a productos y servicios incluyendo el IVA (tasa local es calculada sobre base imponible+IVA)
3 : tasa local se aplica a productos sin IVA (tasa local es calculada sobre la base imponible)
4 : tasa local se aplica a productos incluyendo el IVA (tasa local es calculada sobre base imponible+IVA)
5 : tasa local se aplica a servicios sin IVA (tasa local es calculada sobre base imponible)
6 : tasa local se aplica a servicios incluyendo el IVA (tasa local es calculada sobre base imponible+IVA) SMS=SMS @@ -804,7 +807,7 @@ Permission401=Consultar haberes Permission402=Crear/modificar haberes Permission403=Validar haberes Permission404=Eliminar haberes -Permission430=Use Debug Bar +Permission430=Usa barra de debug Permission511=Consultar pagos de salarios Permission512=Crear/modificar pagos de salarios Permission514=Eliminar pagos de salarios @@ -819,9 +822,9 @@ Permission532=Crear/modificar servicios Permission534=Eliminar servicios Permission536=Ver/gestionar los servicios ocultos Permission538=Exportar servicios -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Leer lista de materiales +Permission651=Crear/Actualizar lista de material +Permission652=Eliminar lista de material Permission701=Consultar donaciones Permission702=Crear/modificar donaciones Permission703=Eliminar donaciones @@ -841,12 +844,12 @@ Permission1101=Consultar ordenes de envío Permission1102=Crear/modificar ordenes de envío Permission1104=Validar orden de envío Permission1109=Eliminar orden de envío -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Leer presupuestos de proveedor +Permission1122=Crear/modificar presupuestos de proveedor +Permission1123=Validar presupuestos de proveedor +Permission1124=Enviar presupuestos de proveedor +Permission1125=Eliminar presupuestos de proveedor +Permission1126=Cerrar presupuestos de proveedor Permission1181=Consultar proveedores Permission1182=Leer pedidos de compra Permission1183=Crear/modificar pedidos a proveedores @@ -882,15 +885,15 @@ Permission2503=Enviar o eliminar documentos Permission2515=Configuración directorios de documentos Permission2801=Utilizar el cliente FTP en modo lectura (sólo explorar y descargar) Permission2802=Utilizar el cliente FTP en modo escritura (borrar o subir archivos) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Leer eventos archivados y huellas digitales +Permission4001=Ver empleados +Permission4002=Crear empleados +Permission4003=Eliminar empleados +Permission4004=Exportar empleados +Permission10001=Leer contenido del sitio web +Permission10002=Crear modificar contenido del sitio web (contenido html y javascript) +Permission10003=Crear/modificar contenido del sitio web (código php dinámico). Peligroso, debe reservarse a desarrolladores restringidos. +Permission10005=Eliminar contenido del sitio web Permission20001=Leer peticiones días líbres (suyos y subordinados) Permission20002=Crear/modificar peticiones días libres (suyos y de sus subordinados) Permission20003=Eliminar peticiones de días retribuidos @@ -904,19 +907,19 @@ Permission23004=Ejecutar Trabajo programado Permission50101=Utilizar TPV Permission50201=Consultar las transacciones Permission50202=Importar las transacciones -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Contabilizar productos y facturas con cuentas contables +Permission50411=Leer operaciones del Libro Mayor +Permission50412=Registrar/Editar operaciones en el Libro Mayor +Permission50414=Eliminar operaciones del Libro Mayor +Permission50415=Eliminar todas las operaciones por año y diario del Libro Mayor +Permission50418=Exportar operaciones del Libro Mayor +Permission50420=Informes y exportaciones (facturación, balance, diarios, libro mayor) +Permission50430=Definir y cerrar un período fiscal. +Permission50440=Gestionar plan contable, configuración de contabilidad. +Permission51001=Leer activos +Permission51002=Crear/actualizar activos +Permission51003=Eliminar activos +Permission51005=Configurar tipos de activos Permission54001=Imprimir Permission55001=Leer encuestas Permission55002=Crear/modificar encuestas @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Los parámetros de configuración solamente pueden ser tratados SystemInfoDesc=La información del sistema es información técnica accesible solamente en solo lectura a los administradores. SystemAreaForAdminOnly=Esta área está disponible solo para usuarios administradores. Los permisos de usuario de Dolibarr no pueden cambiar esta restricción. CompanyFundationDesc=Edite la información de la empresa o institución. Haga clic en el botón "%s" o "%s" a pié de página -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Si tiene un contable/asesor externo, puede editar aquí su información. AccountantFileNumber=Código contable DisplayDesc=Los parámetros que afectan el aspecto y el comportamiento de Dolibarr se pueden modificar aquí. AvailableModules=Módulos disponibles @@ -1923,5 +1926,5 @@ IFTTTDesc=Este módulo está diseñado para desencadenar eventos en IFTTT y/o pa UrlForIFTTT=URL endpoint de IFTTT YouWillFindItOnYourIFTTTAccount=Lo encontrará en su cuenta de IFTTT. EndPointFor=End point for %s : %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Eliminar el recolector de e-mail +ConfirmDeleteEmailCollector=¿Está seguro de que querer eliminar este recolector de e-mail? diff --git a/htdocs/langs/es_ES/cashdesk.lang b/htdocs/langs/es_ES/cashdesk.lang index 0fd77fcbbac..c2754213585 100644 --- a/htdocs/langs/es_ES/cashdesk.lang +++ b/htdocs/langs/es_ES/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Número de terminales TerminalSelect=Seleccione el terminal que desea usar: POSTicket=Ticket POS -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Utilizar diseño básico para teléfonos. diff --git a/htdocs/langs/es_ES/companies.lang b/htdocs/langs/es_ES/companies.lang index 7d1aa5104f8..62e66cd8440 100644 --- a/htdocs/langs/es_ES/companies.lang +++ b/htdocs/langs/es_ES/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Descuentos fijos de proveedores (acordado por t SupplierAbsoluteDiscountMy=Descuentos fijos de proveedores (acordados personalmente) DiscountNone=Ninguna Vendor=Proveedor +Supplier=Proveedor AddContact=Crear contacto AddContactAddress=Crear contacto/dirección EditContact=Editar contacto diff --git a/htdocs/langs/es_ES/mails.lang b/htdocs/langs/es_ES/mails.lang index 3ec73be0883..c8a8896187b 100644 --- a/htdocs/langs/es_ES/mails.lang +++ b/htdocs/langs/es_ES/mails.lang @@ -78,9 +78,9 @@ GroupEmails=E-mail grupales OneEmailPerRecipient=Un e-mail por destinatario (de forma predeterminada, un e-mail por registro seleccionado) WarningIfYouCheckOneRecipientPerEmail=Atención: Si marca esta casilla, significa que solo se enviará un e-mail para varios registros diferentes seleccionados, por lo tanto, si su mensaje contiene variables de sustitución que hacen referencia a los datos de un registro, no será posible reemplazarlos. ResultOfMailSending=Resultado del envío masivo de e-mails -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Seleccionados +NbIgnored=Ignorados +NbSent=Enviados SentXXXmessages=%s mensaje(s) enviado(s) ConfirmUnvalidateEmailing=¿Está seguro de querer cambiar el estado del e-mailing %s a borrador? MailingModuleDescContactsWithThirdpartyFilter=Filtro de contactos con tercero diff --git a/htdocs/langs/es_ES/members.lang b/htdocs/langs/es_ES/members.lang index 369def6ea99..a1025b9b61e 100644 --- a/htdocs/langs/es_ES/members.lang +++ b/htdocs/langs/es_ES/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Elija las estadísticas que desea consultar... MenuMembersStats=Estadísticas LastMemberDate=Última fecha de miembro LatestSubscriptionDate=Fecha de la última cotización -MemberNature=Nature of member +MemberNature=Naturaleza del miembro Public=Información pública NewMemberbyWeb=Nuevo miembro añadido. En espera de validación NewMemberForm=Formulario de inscripción diff --git a/htdocs/langs/es_ES/other.lang b/htdocs/langs/es_ES/other.lang index 047bd238587..e3a372cd525 100644 --- a/htdocs/langs/es_ES/other.lang +++ b/htdocs/langs/es_ES/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Número de facturas a clientes NumberOfSupplierProposals=Número de presupuestos de proveedores NumberOfSupplierOrders=Número de pedidos a proveedores NumberOfSupplierInvoices=Número de facturas de proveedores +NumberOfContracts=Número de contratos NumberOfUnitsProposals=Número de unidades en los presupuestos a clientes NumberOfUnitsCustomerOrders=Número de unidades en los pedidos de clientes NumberOfUnitsCustomerInvoices=Número de unidades en las facturas a clientes NumberOfUnitsSupplierProposals=Número de unidades en los presupuestos de proveedores NumberOfUnitsSupplierOrders=Número de unidades en los pedidos a proveedores NumberOfUnitsSupplierInvoices=Número de unidades en las facturas de proveedores +NumberOfUnitsContracts=Número de unidades en los contratos EMailTextInterventionAddedContact=Se le ha asignado la intervención %s EMailTextInterventionValidated=Ficha intervención %s validada EMailTextInvoiceValidated=Factura %s ha sido validada. diff --git a/htdocs/langs/es_ES/products.lang b/htdocs/langs/es_ES/products.lang index 26f341e862a..68d21c54e3c 100644 --- a/htdocs/langs/es_ES/products.lang +++ b/htdocs/langs/es_ES/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Precios de proveedores SuppliersPricesOfProductsOrServices=Precios de proveedores (productos o servicios) CustomCode=Código aduanero CountryOrigin=País de origen -Nature=Nature of produt (material/finished) +Nature=Naturaleza del producto (materia prima/acabado) ShortLabel=Etiqueta corta Unit=Unidad p=u. diff --git a/htdocs/langs/es_ES/salaries.lang b/htdocs/langs/es_ES/salaries.lang index 741fff7e2a4..48215b71f6e 100644 --- a/htdocs/langs/es_ES/salaries.lang +++ b/htdocs/langs/es_ES/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Últimos %s pagos salariales AllSalaries=Todos los pagos salariales SalariesStatistics=Estadísticas salariales # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Salarios y pagos diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang index 017b503b915..7595b3f75ee 100644 --- a/htdocs/langs/es_ES/stocks.lang +++ b/htdocs/langs/es_ES/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Regla para el aumento automático de stocks (el a DeStockOnBill=Decrementar los stocks físicos sobre las facturas/abonos a clientes DeStockOnValidateOrder=Decrementar el stock real en la validación los pedidos de clientes DeStockOnShipment=Decrementar stock real en la validación de envíos -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Decrementar el stock real en el cierre del envío ReStockOnBill=Incrementar el stock real en la validación de las facturas/abonos de proveedores ReStockOnValidateOrder=Incrementar los stocks físicos en la aprobación de pedidos a proveedores ReStockOnDispatchOrder=Incrementa el stock real en el desglose manual de la recepción de los pedidos a proveedores -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Incrementar el stock real en la validación de la recepción. +StockOnReceptionOnClosing=Incrementar el stock real en el cierre de la recepción OrderStatusNotReadyToDispatch=El pedido aún no está o no tiene un estado que permita un desglose de stock. StockDiffPhysicTeoric=Motivo de la diferencia entre valores físicos y teóricos NoPredefinedProductToDispatch=No hay productos predefinidos en este objeto. Por lo tanto no se puede realizar un desglose de stock. diff --git a/htdocs/langs/es_ES/website.lang b/htdocs/langs/es_ES/website.lang index 8e33637f714..58ebf80dece 100644 --- a/htdocs/langs/es_ES/website.lang +++ b/htdocs/langs/es_ES/website.lang @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Todavía no se ha creado ningún sitio web. Cree uno pri GoTo=Ir a DynamicPHPCodeContainsAForbiddenInstruction=Ha añadido código PHP dinámico que contiene la instrucción de PHP '%s' que está prohibida por defecto como contenido dinámico (vea las opciones ocultas WEBSITE_PHP_ALLOW_xxx para aumentar la lista de comandos permitidos). NotAllowedToAddDynamicContent=No tiene permiso para agregar o editar contenido dinámico de PHP en sitios web. Pida permiso o simplemente mantenga el código en las etiquetas php sin modificar. -ReplaceWebsiteContent=Reemplazar el contenido del sitio web +ReplaceWebsiteContent=Buscar o reemplazar el contenido del sitio web DeleteAlsoJs=¿Eliminar también todos los archivos javascript específicos de este sitio web? DeleteAlsoMedias=¿Eliminar también todos los archivos de medios específicos de este sitio web? # Export -MyWebsitePages=My website pages +MyWebsitePages=Mis páginas web diff --git a/htdocs/langs/es_ES/withdrawals.lang b/htdocs/langs/es_ES/withdrawals.lang index c82b2821aa9..e31170475ac 100644 --- a/htdocs/langs/es_ES/withdrawals.lang +++ b/htdocs/langs/es_ES/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Para las cuentas bancarias que utilizan el código BAN/BIC/S BankToReceiveWithdraw=Cuenta bancaria para recibir la domiciliación CreditDate=Abonada el WithdrawalFileNotCapable=No es posible generar el fichero bancario de domiciliación para el país %s (El país no está soportado) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Mostrar domiciliación +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Sin embargo, si la factura tiene pendiente algún pago por domiciliación no procesado, no será marcada como pagada para permitir la gestión de la domiciliación. DoStandingOrdersBeforePayments=Esta pestaña le permite realizar una petición de domiciliación. Una vez realizadas las peticiones, vaya al menú Bancos->Domiciliaciones para gestionar la domiciliación. Al cerrar una domiciliación, los pagos de las facturas se registrarán automáticamente, y las facturas completamente pagadas serán cerradas. WithdrawalFile=Archivo de la domiciliación SetToStatusSent=Clasificar como "Archivo enviado" diff --git a/htdocs/langs/es_MX/accountancy.lang b/htdocs/langs/es_MX/accountancy.lang index 8150366c070..d712bd5c6c4 100644 --- a/htdocs/langs/es_MX/accountancy.lang +++ b/htdocs/langs/es_MX/accountancy.lang @@ -46,7 +46,6 @@ NewAccountingMvt=Nueva transacción NumMvts=Número de transacción ListeMvts=Lista de movimientos ErrorDebitCredit=Débito y Crédito no pueden tener un valor al mismo tiempo -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalVente=Facturación total antes de impuestos TotalMarge=Margen de ventas total DescVentilExpenseReport=Consulte aquí la lista de líneas de reporte de gastos vinculadas (o no) a una cuenta de contabilidad de comisiones @@ -57,7 +56,7 @@ AccountingJournalType5=Informe de gastos AccountingJournalType9=Tiene nuevo ErrorAccountingJournalIsAlreadyUse=Este diario ya está en uso ExportDraftJournal=Exportar borrador de diario -Modelcsv_FEC=Export FEC (Art. L47 A) +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. SomeMandatoryStepsOfSetupWereNotDone=Algunos pasos obligatorios de la instalación no se realizaron, favor de completar ExportNotSupported=El formato de exportación configurado no se admite en esta página NoJournalDefined=Ningún diario definido diff --git a/htdocs/langs/es_MX/admin.lang b/htdocs/langs/es_MX/admin.lang index 9747469d49d..6c0f8fd1ec9 100644 --- a/htdocs/langs/es_MX/admin.lang +++ b/htdocs/langs/es_MX/admin.lang @@ -87,7 +87,6 @@ SystemInfo=Información del sistema SystemToolsArea=Área de herramientas del sistema SystemToolsAreaDesc=Esta área provee funciones administrativas. Usar el menú para seleccionar la característica requerida. PurgeAreaDesc=Esta página te permite eliminar todos los archivos generados o guardados por Dolibarr (archivos temporales o todos los archivos en %s el directorio). Usar esta característica no es normalmente necesario. Esta es proporcionada como una solución alternativa para usuarios cuyo Dolibarr es hospedado por un proveedor que no ofrece permisos de borrado de archivos generados por el servidor web. -PurgeDeleteTemporaryFiles=Eliminar todos los archivos temporales (sin riesgo de perder datos) PurgeRunNow=Purgar ahora PurgeNothingToDelete=Ningún directorio o archivos que desee eliminar. PurgeNDirectoriesDeleted= %s archivos o directorios eliminados. @@ -132,6 +131,8 @@ DictionaryProspectStatus=Estatus del cliente potencial Upgrade=Actualizar LDAPFieldFirstName=Nombre(s) AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications ConfFileMustContainCustom=Instalar o construir un módulo externo desde la aplicación necesita guardar los archivos del módulo en el directorio %s . Para que este directorio sea procesado por Dolibarr, debe configurar su conf/conf.php para agregar las 2 líneas de directiva: $dolibarr_main_url_root_alt='/custom';
$dolibarr_main_document_root_alt='%s/custom'; MailToSendProposal=Propuestas de clientes MailToSendInvoice=Facturas de clientes diff --git a/htdocs/langs/es_PA/admin.lang b/htdocs/langs/es_PA/admin.lang index 5f6898087d4..a4a7a82aaa0 100644 --- a/htdocs/langs/es_PA/admin.lang +++ b/htdocs/langs/es_PA/admin.lang @@ -1,3 +1,5 @@ # Dolibarr language file - Source file is en_US - admin VersionUnknown=Desconocido +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/es_PE/accountancy.lang b/htdocs/langs/es_PE/accountancy.lang index c651b103468..24d7b8e4f3b 100644 --- a/htdocs/langs/es_PE/accountancy.lang +++ b/htdocs/langs/es_PE/accountancy.lang @@ -43,6 +43,5 @@ ACCOUNTING_PRODUCT_BUY_ACCOUNT=Cuenta de contabilidad por defecto para los produ Sens=Significado Codejournal=Periódico FinanceJournal=Periodo Financiero -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalMarge=Margen total de ventas -Modelcsv_FEC=Export FEC (Art. L47 A) +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. diff --git a/htdocs/langs/es_PE/admin.lang b/htdocs/langs/es_PE/admin.lang index cc415c6dda9..0f15310bb3a 100644 --- a/htdocs/langs/es_PE/admin.lang +++ b/htdocs/langs/es_PE/admin.lang @@ -5,4 +5,6 @@ Permission93=Eliminar impuestos e IGV DictionaryVAT=Tasa de IGV (Impuesto sobre ventas en EEUU) UnitPriceOfProduct=Precio unitario sin IGV de un producto OptionVatMode=Opción de carga de IGV +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/es_VE/admin.lang b/htdocs/langs/es_VE/admin.lang index 9d3c0f25368..4daf55ade15 100644 --- a/htdocs/langs/es_VE/admin.lang +++ b/htdocs/langs/es_VE/admin.lang @@ -32,4 +32,6 @@ WatermarkOnDraftSupplierProposal=Marca de agua en solicitudes de precios a prove LDAPMemberObjectClassListExample=Lista de ObjectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory) LDAPUserObjectClassListExample=Lista de ObjectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory) LDAPContactObjectClassListExample=Lista de objectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory) +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/et_EE/accountancy.lang b/htdocs/langs/et_EE/accountancy.lang index f06e0291439..69bb680becb 100644 --- a/htdocs/langs/et_EE/accountancy.lang +++ b/htdocs/langs/et_EE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/et_EE/admin.lang b/htdocs/langs/et_EE/admin.lang index 89b4189f8ab..bb4631de3fe 100644 --- a/htdocs/langs/et_EE/admin.lang +++ b/htdocs/langs/et_EE/admin.lang @@ -20,8 +20,8 @@ LocalSignature=Embedded local signature (less reliable) RemoteSignature=Remote distant signature (more reliable) FilesMissing=Missing Files FilesUpdated=Updated Files -FilesModified=Modified Files -FilesAdded=Added Files +FilesModified=Muudetud failid +FilesAdded=Lisatud failid FileCheckDolibarr=Check integrity of application files AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when the application is installed from an official package XmlNotFound=Xml Integrity File of application not found @@ -35,7 +35,7 @@ LockNewSessions=Keela uued ühendused ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user %s will be able to connect after that. UnlockNewSessions=Luba uued ühendused YourSession=Sinu sessioon -Sessions=Users Sessions +Sessions=Kasutajate sessioonid WebUserGroup=Veebiserveri kasutaja/grupp NoSessionFound=Your PHP configuration seems to not allow listing of active sessions. The directory used to save sessions (%s) may be protected (for example by OS permissions or by PHP directive open_basedir). DBStoringCharset=Märgistik, mida kasutatakse andmete salvestamiseks andmebaasi @@ -114,14 +114,14 @@ NotConfigured=Moodul/Rakendus pole veel seadistatud Active=Aktiivne SetupShort=Seadistamine OtherOptions=Muud seaded -OtherSetup=Other Setup +OtherSetup=Muud seadistused CurrentValueSeparatorDecimal=Kümnendkoha eraldaja CurrentValueSeparatorThousand=Tuhandete eraldaja Destination=Sihtkoht IdModule=Mooduli ID IdPermissions=Kasutajaõiguste ID LanguageBrowserParameter=Parameeter %s -LocalisationDolibarrParameters=Localization parameters +LocalisationDolibarrParameters=Lokaliseerimise parameetrid ClientTZ=Kliendi ajavöönd (kasutaja) ClientHour=Kliendi aeg (kasutaja) OSTZ=Serveri operatsioonisüsteemi ajavöönd @@ -133,15 +133,15 @@ YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to a HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server. Box=Vidin Boxes=Vidinad -MaxNbOfLinesForBoxes=Max. number of lines for widgets -AllWidgetsWereEnabled=All available widgets are enabled +MaxNbOfLinesForBoxes=Vidinate maksimaalne ridade arv +AllWidgetsWereEnabled=Kõik saadaval vidinad on lubatud PositionByDefault=Vaikimisi järjestus Position=Ametikoht MenusDesc=Menu managers set content of the two menu bars (horizontal and vertical). MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.
Some modules add menu entries (in menu All mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module. MenuForUsers=Kasutajatele mõeldud menüü -LangFile=File. Lang -Language_en_US_es_MX_etc=Language (en_US, es_MX, ...) +LangFile=.lang fail +Language_en_US_es_MX_etc=Keel (en_US,es_MX,...) System=Süsteem SystemInfo=Süsteemi info SystemToolsArea=Süsteemi tööriistade ala @@ -150,7 +150,7 @@ Purge=Tühjenda PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. PurgeDeleteLogFile=Delete log files, including %s defined for Syslog module (no risk of losing data) PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. -PurgeDeleteTemporaryFilesShort=Delete temporary files +PurgeDeleteTemporaryFilesShort=Kustuta ajutised failid PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. PurgeRunNow=Tühjenda nüüd PurgeNothingToDelete=Pole ühtki faili ega kausta, mida kustutada. @@ -173,7 +173,7 @@ ImportMySqlDesc=To import a MySQL backup file, you may use phpMyAdmin via your h ImportPostgreSqlDesc=Varukoopia importimiseks pead kasutama käsureal pg_restore käsku: ImportMySqlCommand=%s %s < minuvarukoopia.sql ImportPostgreSqlCommand=%s %s minuvarukoopia.sql -FileNameToGenerate=Filename for backup: +FileNameToGenerate=Varukoopia faili nimi: Compression=Pakkimine CommandsToDisableForeignKeysForImport=Käsk, millega keelata välisvõtmete kasutamise keelamine importimisel CommandsToDisableForeignKeysForImportWarning=Kohustuslik, kui tahad tõmmist hiljem taastamiseks kasutada @@ -201,18 +201,18 @@ ModulesDesc=The modules/applications determine which features are available in t ModulesMarketPlaceDesc=Alla laadimiseks leiad rohkem mooduleid Internetist. ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab %s. ModulesMarketPlaces=Otsi katsetuskärgus rakendusi/mooduleid -ModulesDevelopYourModule=Develop your own app/modules +ModulesDevelopYourModule=Arenda enda äpp/moodul ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you. DOLISTOREdescriptionLong=Instead of switching on
www.dolistore.com web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)... NewModule=Uus -FreeModule=Free -CompatibleUpTo=Compatible with version %s +FreeModule=Vaba +CompatibleUpTo=Ühilduv versioooniga %s NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s). CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s). SeeInMarkerPlace=See in Market place -Updated=Updated +Updated=Uuendatud Nouveauté=Novelty -AchatTelechargement=Buy / Download +AchatTelechargement=Osta / Laadi alla GoModuleSetupArea=To deploy/install a new module, go to the Module setup area: %s. DoliStoreDesc=DoliStore on ametlik Dolibarr ERP/CRM moodulite müümiseks kasutatav koht DoliPartnersDesc=List of companies providing custom-developed modules or features.
Note: since Dolibarr is an open source application, anyone experienced in PHP programming may develop a module. @@ -238,31 +238,31 @@ ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to Feature=Funktsionaalsus DolibarrLicense=Litsents Developpers=Arendajad/toetajad -OfficialWebSite=Dolibarr official web site -OfficialWebSiteLocal=Local web site (%s) -OfficialWiki=Dolibarr documentation / Wiki +OfficialWebSite=Dolibarri ametlik veebileht +OfficialWebSiteLocal=Kohalik veebisait (%s) +OfficialWiki=Dolibarri dokumentatsioon / Wiki OfficialDemo=Dolibarri online demo OfficialMarketPlace=Väliste moodulite ja lisade ametlik müügikoht OfficialWebHostingService=Viidatavad veebimajutuse pakkujad (pilveteenused) ReferencedPreferredPartners=Eelistatud partnerid -OtherResources=Other resources -ExternalResources=External Resources -SocialNetworks=Social Networks +OtherResources=Muud ressursid +ExternalResources=Välised ressursid +SocialNetworks=Sotsiaalvõrgud ForDocumentationSeeWiki=Kasutaja või arendaja dokumentatsiooni (KKK jms) võid leida
ametlikust Dolibarri Wikist:
%s ForAnswersSeeForum=Muude küsimuste või abi küsimise tarbeks saab kasutada Dolibarri foorumit:
%s HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr. HelpCenterDesc2=Some of these resources are only available in english. CurrentMenuHandler=Praegune menüü töötleja MeasuringUnit=Mõõtühik -LeftMargin=Left margin -TopMargin=Top margin -PaperSize=Paper type +LeftMargin=Vasak serv +TopMargin=Ülemine serv +PaperSize=Paberi tüüp Orientation=Orientation SpaceX=Space X SpaceY=Space Y -FontSize=Font size -Content=Content -NoticePeriod=Notice period +FontSize=Kirjasuurus +Content=Sisu +NoticePeriod=Teavitamisperiood NewByMonth=New by month Emails=E-postid EMailsSetup=E-posti seadistamine @@ -278,12 +278,12 @@ MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos) MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes) MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list -MAIN_MAIL_SENDMODE=Email sending method -MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication) -MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication) -MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption -MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption -MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature +MAIN_MAIL_SENDMODE=E-posti saatmise viis +MAIN_MAIL_SMTPS_ID=SMTP-ID (kui saatev server nõuab autentimist) +MAIN_MAIL_SMTPS_PW=SMTP parool (kui saatev server nõuab autentimist) +MAIN_MAIL_EMAIL_TLS=Kasutage TLS (SSL) krüpteerimist +MAIN_MAIL_EMAIL_STARTTLS=Kasutage TLS (STARTTLS) krüpteerimist +MAIN_MAIL_EMAIL_DKIM_ENABLED=E-posti allkirja loomiseks kasutage DKIM-i MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing @@ -291,18 +291,18 @@ MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos) MAIN_SMS_SENDMODE=SMSi saatmiseks kasutatav meetod MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email) -UserEmail=User email -CompanyEmail=Company Email +UserEmail=Kasutaja e-post +CompanyEmail=Ettevõtte e-post FeatureNotAvailableOnLinux=Funktsionaalsus pole kasutatav Unixi laadsel süsteemil. Kontrolli oma sendmail programmi seadistust. SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory langs/%s and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr. ModuleSetup=Moodulite seadistamine -ModulesSetup=Modules/Application setup +ModulesSetup=Moodulid / rakenduse seadistamine ModuleFamilyBase=Süsteem -ModuleFamilyCrm=Customer Relationship Management (CRM) -ModuleFamilySrm=Vendor Relationship Management (VRM) -ModuleFamilyProducts=Product Management (PM) -ModuleFamilyHr=Human Resource Management (HR) +ModuleFamilyCrm=Kliendisuhete haldamine (CRM) +ModuleFamilySrm=Müügisuhete haldamine (VRM) +ModuleFamilyProducts=Toote haldamine (PM) +ModuleFamilyHr=Personalijuhtimine (HR) ModuleFamilyProjects=Projektid/koostöö ModuleFamilyOther=Muu ModuleFamilyTechnic=Multimoodulite tööriistad @@ -314,8 +314,8 @@ ModuleFamilyInterface=Interfaces with external systems MenuHandlers=Menüüde töötlejad MenuAdmin=Menüü toimeti DoNotUseInProduction=Ära kasuta tootmispaigaldustes -ThisIsProcessToFollow=Upgrade procedure: -ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually: +ThisIsProcessToFollow=Uuendusprotseduur: +ThisIsAlternativeProcessToFollow=See on käsitsi töödeldav alternatiivne seadistus: StepNb=Samm %s FindPackageFromWebSite=Find a package that provides the features you need (for example on the official web site %s). DownloadPackageFromWebSite=Download package (for example from the official web site %s). @@ -325,13 +325,13 @@ SetupIsReadyForUse=Module deployment is finished. You must however enable and se NotExistsDirect=The alternative root directory is not defined to an existing directory.
InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.
Just create a directory at the root of Dolibarr (eg: custom).
InfDirExample=
Then declare it in the file conf.php
$dolibarr_main_url_root_alt='/custom'
$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'
If these lines are commented with "#", to enable them, just uncomment by removing the "#" character. -YouCanSubmitFile=Alternatively, you may upload the module .zip file package: -CurrentVersion=Dolibarri praegune versioo +YouCanSubmitFile=Teise võimalusena võite mooduli .zip failipaketi üles laadida: +CurrentVersion=Praegune Dolibarr versioon CallUpdatePage=Browse to the page that updates the database structure and data: %s. LastStableVersion=Viimane stabiilne versioon -LastActivationDate=Latest activation date -LastActivationAuthor=Latest activation author -LastActivationIP=Latest activation IP +LastActivationDate=Viimane aktiveerimise kuupäev +LastActivationAuthor=Viimane aktiveerimise autor +LastActivationIP=Viimane aktiveerimise IP UpdateServerOffline=Update server offline WithCounter=Manage a counter GenericMaskCodes=Sa võid sisestada suvalise numeratsiooni maski. Järgnevas maskis saab kasutada järgmisi silte:
{000000} vastab arvule, mida suurendatakse iga sündmuse %s korral. Sisesta niipalju nulle, kui soovid loenduri pikkuseks. Loendurile lisatakse vasakult alates niipalju nulle, et ta oleks maskiga sama pikk.
{000000+000} on eelmisega sama, kuid esimesele %s lisatakse nihe, mis vastab + märgist paremal asuvale arvule.
{000000@x} on eelmisega sama, ent kuuni x jõudmisel nullitakse loendur (x on 1 ja 12 vahel, või 0 seadistuses määratletud majandusaasta alguse kasutamiseks, või 99 loenduri nullimiseks iga kuu alguses). Kui kasutad seda funktsiooni ja x on 2 või kõrgem, siis on jada {yy}{mm} or {yyyy}{mm} nõutud.
{dd} päev (01 kuni 31).
{mm} kuu (01 kuni 12).
{yy}, {yyyy} või {y} aasta 2, 4 või 1 numbri kasutamisks.
@@ -351,40 +351,40 @@ ErrorCantUseRazIfNoYearInMask=Viga: ei saa kasutada seadet @ iga aasta alguses l ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Viga: ei saa kasutada võimalust @, kui maskis ei sisaldu jada {yy} {mm} või {yyyy} {mm}. UMask=Umask parameeter uute failide loomiseks Unix/Linux/BSD/Mac failisüsteemidel. UMaskExplanation=See parameeter võimaldab määratleda Dolibarri poolt loodud failide vaikimise õigused (näiteks üleslaadimise ajal)
See peab olema kaheksandsüsteemi väärtus (nt 0666 tähendab lubada kõigile lugemise ja kirjutamise õigused)
Windows serveris seda parameetrit ei kasutata. -SeeWikiForAllTeam=Take a look at the Wiki page for a list of contributors and their organization +SeeWikiForAllTeam=Vaadake Wiki lehekülge, kus on nimekiri osalejatest ja nende organisatsioonist UseACacheDelay= Eksportimise vastuse vahemällu salvestamise viivitus (0 või tühi vahemälu mitte kasutamiseks) DisableLinkToHelpCenter=Peida link "Vajad abi või tuge" sisselogimise lehel -DisableLinkToHelp=Hide link to online help "%s" +DisableLinkToHelp=Peida link veebipõhisele abile " %s " AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed. ConfirmPurge=Are you sure you want to execute this purge?
This will permanently delete all your data files with no way to restore them (ECM files, attached files...). MinLength=Minimaalne pikkus LanguageFilesCachedIntoShmopSharedMemory=Jagatud mällu laetud .lang failid -LanguageFile=Language file -ExamplesWithCurrentSetup=Examples with current configuration +LanguageFile=Keelefail +ExamplesWithCurrentSetup=Praeguse konfiguratsiooniga näited ListOfDirectories=OpenDocument mallide kaustad ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.

Put here full path of directories.
Add a carriage return between eah directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. -NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories +NumberOfModelFilesFound=Nendes kataloogides leiduvate ODT / ODS-malli failide arv ExampleOfDirectoriesForModelGen=Süntaksi näited:
c:\\mydir
/home/mydir
DOL_DATA_ROOT/ecm/ecmdir FollowingSubstitutionKeysCanBeUsed=
Enne dokumendimallide loomist loe wikis olevat dokumentatsiooni: FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=Nimi/perekonnanimi ametikoht -DescWeather=The following images will be shown on the dashboard when the number of late actions reach the following values: +DescWeather=Juhtpaneelil kuvatakse järgmised pildid, kui hilisemate toimingute arv on järgmine: KeyForWebServicesAccess=Veebiteenuste kasutamise võti (parameeter "dolibarrkey" webservices moodulis) TestSubmitForm=Sisestamise testimiseks mõeldud vorm ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever the user choice. Also this menu manager specialized for smartphones does not work on all smartphone. Use another menu manager if you experience problems with yours. ThemeDir=Kestade kataloog -ConnectionTimeout=Connection timeout +ConnectionTimeout=Ühenduse aegumine ResponseTimeout=Vastuse aegumine SmsTestMessage=Test sõnum __TELEFONIST__TELEFONI__ -ModuleMustBeEnabledFirst=Module %s must be enabled first if you need this feature. +ModuleMustBeEnabledFirst=Selle funktsiooni kasutamiseks tuleb kõigepealt aktiveerida moodul %s . SecurityToken=URLide kaitsmiseks kasutatav võti NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external vendor, but you can find some on %s PDF=PDF -PDFDesc=Global options for PDF generation. +PDFDesc=PDFi globaalsed seaded. PDFAddressForging=Rules for address boxes -HideAnyVATInformationOnPDF=Hide all information related to Sales Tax / VAT -PDFRulesForSalesTax=Rules for Sales Tax / VAT -PDFLocaltax=Rules for %s +HideAnyVATInformationOnPDF=Peida kõik müügimaksu / käibemaksuga seotud andmed +PDFRulesForSalesTax=Müügimaksu / käibemaksu reeglid +PDFLocaltax=%s reeglid HideLocalTaxOnPDF=Hide %s rate in column Tax Sale HideDescOnPDF=Hide products description HideRefOnPDF=Hide products ref. @@ -400,28 +400,30 @@ OldVATRates=Vana käibemaksumäär NewVATRates=Uus käibemaksumäär PriceBaseTypeToChange=Muuda hindadel, mille baasväärtus on defineeritud kui MassConvert=Launch bulk conversion -String=Sõne +String=Sõna TextLong=Pikk tekst -HtmlText=Html text +HtmlText=HTML-tekst Int=Täisarv Float=Ujukomaarv DateAndTime=Kuupäev ja tund Unique=Unikaalne -Boolean=Boolean (one checkbox) +Boolean=Tõeväärtus (üks märkeruut) ExtrafieldPhone = Telefon ExtrafieldPrice = Hind ExtrafieldMail = E-post -ExtrafieldUrl = Url +ExtrafieldUrl = URL ExtrafieldSelect = Valikute nimekiri ExtrafieldSelectList = Vali tabelist -ExtrafieldSeparator=Separator (not a field) +ExtrafieldSeparator=Eraldaja (mitte väli) ExtrafieldPassword=Salasõna -ExtrafieldRadio=Radio buttons (one choice only) -ExtrafieldCheckBox=Checkboxes -ExtrafieldCheckBoxFromList=Checkboxes from table -ExtrafieldLink=Link to an object -ComputedFormula=Computed field +ExtrafieldRadio=Raadionupud (ainult üks valik) +ExtrafieldCheckBox=Märkeruudud +ExtrafieldCheckBoxFromList=Märkeruudud tabelist +ExtrafieldLink=Viide objektile +ComputedFormula=Arvutatud väli ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -437,23 +440,23 @@ RefreshPhoneLink=Värskenda linki LinkToTest=Kasutaja %s jaoks genereeriti klõpsatav link (testimiseks klõpsa telefoninumbril) KeepEmptyToUseDefault=Jäta tühjaks vaikeväärtuse kasutamiseks DefaultLink=Vaikimisi link -SetAsDefault=Set as default +SetAsDefault=Määra vaikimisi ValueOverwrittenByUserSetup=Hoiatus: kasutaja võib selle väärtuse üle kirjutada oma seadetega (iga kasutaja saab määratleda isikliku clicktodial URLi) ExternalModule=Väline moodul - paigaldatud kausta %s -BarcodeInitForthird-parties=Mass barcode init for third-parties +BarcodeInitForthird-parties=Mass-vöötkoodi loomine kolmandatele osapooltele BarcodeInitForProductsOrServices=Toodete/teenuste jaoks massiline vöötkoodide loomine või lähtestamine -CurrentlyNWithoutBarCode=Currently, you have %s record on %s %s without barcode defined. +CurrentlyNWithoutBarCode=Praegu on teil %s kirje %s %s kohta ilma vöötkoodi määramata. InitEmptyBarCode=Järgmise %s tühja kirje lähtestamise väärtus EraseAllCurrentBarCode=Kustuta kõik hetkel kasutatavad vöötkoodide väärtused -ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values? +ConfirmEraseAllCurrentBarCode=Kas soovite kindlasti kõik praegused vöötkoodi väärtused kustutada? AllBarcodeReset=Kõik triipkoodi väärtused on eemaldatud NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the Barcode module setup. -EnableFileCache=Enable file cache -ShowDetailsInPDFPageFoot=Add more details into footer, such as company address or manager names (in addition to professional ids, company capital and VAT number). -NoDetails=No additional details in footer -DisplayCompanyInfo=Display company address -DisplayCompanyManagers=Display manager names -DisplayCompanyInfoAndManagers=Display company address and manager names +EnableFileCache=Luba faili vahemälu +ShowDetailsInPDFPageFoot=Lisage jalusesse rohkem üksikasju, näiteks ettevõtte aadress või juhtide nimed (ettevõtte registrikood, kapital ja KMKR number). +NoDetails=Jaluses ei ole täiendavaid andmeid +DisplayCompanyInfo=Kuva ettevõtte aadressi +DisplayCompanyManagers=Kuva haldajate nimed +DisplayCompanyInfoAndManagers=Kuva ettevõtte aadress ja haldaja nimed EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible. ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code ModuleCompanyCodeSupplierAquarium=%s followed by vendor code for a vendor accounting code @@ -463,24 +466,24 @@ Use3StepsApproval=By default, Purchase Orders need to be created and approved by UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than... WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not theirs, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).
If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider. WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: %s. -ClickToShowDescription=Click to show description -DependsOn=This module needs the module(s) -RequiredBy=This module is required by module(s) +ClickToShowDescription=Klõpsake kirjelduse nägemiseks +DependsOn=See moodul vajab moodulit +RequiredBy=See moodul on mooduli(te) poolt nõutav TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field. PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, the default values will be effective if all parameters are set to same value. PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) -EnableDefaultValues=Enable customization of default values -EnableOverwriteTranslation=Enable usage of overwritten translation +EnableDefaultValues=Lubage vaikeväärtuste kohandamine +EnableOverwriteTranslation=Lubage ülekirjutatud tõlke kasutamine GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation. WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior. Field=Väli -ProductDocumentTemplates=Document templates to generate product document +ProductDocumentTemplates=Dokumendi mallid tootedokumendi loomiseks FreeLegalTextOnExpenseReports=Free legal text on expense reports WatermarkOnDraftExpenseReports=Watermark on draft expense reports AttachMainDocByDefault=Set this to 1 if you want to attach main document to email by default (if applicable) -FilesAttachedToEmail=Attach file +FilesAttachedToEmail=Lisage fail SendEmailsReminders=Send agenda reminders by emails davDescription=Setup a WebDAV server DAVSetup=Setup of module DAV @@ -493,11 +496,11 @@ DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploade # Modules Module0Name=Kasutajad ja grupid Module0Desc=Users / Employees and Groups management -Module1Name=Third Parties -Module1Desc=Companies and contacts management (customers, prospects...) +Module1Name=Kolmandad isikud +Module1Desc=Ettevõtete ja kontaktide haldamine (kliendid, huvilised ...) Module2Name=Äritegevus Module2Desc=Äritegevuse seadistamine -Module10Name=Accounting (simplified) +Module10Name=Raamatupidamine (lihtsustatud) Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table. Module20Name=Pakkumised Module20Desc=Pakkumiste haldamine @@ -505,16 +508,16 @@ Module22Name=Mass Emailings Module22Desc=Manage bulk emailing Module23Name=Energia Module23Desc=Energiatarbimise järelevalve -Module25Name=Sales Orders -Module25Desc=Sales order management +Module25Name=Müügitellimused +Module25Desc=Müügitellimuste haldamine Module30Name=Arved Module30Desc=Management of invoices and credit notes for customers. Management of invoices and credit notes for suppliers -Module40Name=Vendors -Module40Desc=Vendors and purchase management (purchase orders and billing) +Module40Name=Tarnijad +Module40Desc=Tarnijad ja ostuhaldus (ostutellimused ja arveldus) Module42Name=Debug Logs Module42Desc=Logging facilities (file, syslog, ...). Such logs are for technical/debug purposes. -Module49Name=Toimetid -Module49Desc=Toimetite haldamine +Module49Name=Toimetajad +Module49Desc=Toimetaja haldamine Module50Name=Tooted Module50Desc=Management of Products Module51Name=Masspostitus @@ -541,14 +544,14 @@ Module75Name=Kulud ja lähetused Module75Desc=Kulude ja lähetuste haldamine Module80Name=Saadetised Module80Desc=Shipments and delivery note management -Module85Name=Banks & Cash +Module85Name=Pangad ja kassa Module85Desc=Panga- ja kassakontode haldamine -Module100Name=External Site +Module100Name=Väline veebileht Module100Desc=Add a link to an external website as a main menu icon. Website is shown in a frame under the top menu. Module105Name=Mailman ja SPIP Module105Desc=Mailman või SPIP liides liikme mooduli jaoks Module200Name=LDAP -Module200Desc=LDAP directory synchronization +Module200Desc=LDAP kausta sünkroniseerimine Module210Name=PostNuke Module210Desc=PostNuke integratsioon Module240Name=Andmete eksport @@ -578,7 +581,7 @@ Module610Name=Product Variants Module610Desc=Creation of product variants (color, size etc.) Module700Name=Annetused Module700Desc=Annetuste haldamine -Module770Name=Expense Reports +Module770Name=Kulude aruanne Module770Desc=Manage expense reports claims (transportation, meal, ...) Module1120Name=Vendor Commercial Proposals Module1120Desc=Request vendor commercial proposal and prices @@ -819,9 +822,9 @@ Permission532=Teenuste loomine/muutmine Permission534=Teenuste kustutamine Permission536=Peidetud teenuste vaatamine/haldamine Permission538=Teenuste eksport -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Annetuste vaatamine Permission702=Annetuste loomine/muutmine Permission703=Annetuste kustutamine @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -939,7 +942,7 @@ DictionaryActions=Types of agenda events DictionarySocialContributions=Types of social or fiscal taxes DictionaryVAT=Käibe- või müügimaksumäärad DictionaryRevenueStamp=Amount of tax stamps -DictionaryPaymentConditions=Payment Terms +DictionaryPaymentConditions=Maksetähtajad DictionaryPaymentModes=Payment Modes DictionaryTypeContact=Kontakti/Aadressi tüübid DictionaryTypeOfContainer=Website - Type of website pages/containers @@ -1082,7 +1085,7 @@ Delays_MAIN_DELAY_PROPALS_TO_BILL=Proposal not billed Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Service to activate Delays_MAIN_DELAY_RUNNING_SERVICES=Expired service Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Unpaid vendor invoice -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Unpaid customer invoice +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tasumata müügiarve Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Pending bank reconciliation Delays_MAIN_DELAY_MEMBERS=Delayed membership fee Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Check deposit not done @@ -1278,7 +1281,7 @@ SuggestPaymentByChequeToAddress=Suggest payment by check to FreeLegalTextOnInvoices=Vaba tekst arvetel WatermarkOnDraftInvoices=Vesimärk arvete mustanditel (puudub, kui tühi) PaymentsNumberingModule=Payments numbering model -SuppliersPayment=Vendor payments +SuppliersPayment=Tarnija maksed SupplierPaymentSetup=Vendor payments setup ##### Proposals ##### PropalSetup=Pakkumiste mooduli seadistamine @@ -1777,14 +1780,14 @@ FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced) ExpectedChecksum=Expected Checksum CurrentChecksum=Current Checksum ForcedConstants=Required constant values -MailToSendProposal=Customer proposals +MailToSendProposal=Müügipakkumised MailToSendOrder=Sales orders -MailToSendInvoice=Customer invoices +MailToSendInvoice=Müügiarved MailToSendShipment=Saadetised MailToSendIntervention=Sekkumised MailToSendSupplierRequestForQuotation=Quotation request MailToSendSupplierOrder=Purchase orders -MailToSendSupplierInvoice=Vendor invoices +MailToSendSupplierInvoice=Tarnija arved MailToSendContract=Lepingud MailToThirdparty=Kolmandad isikud MailToMember=Liikmed @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/et_EE/agenda.lang b/htdocs/langs/et_EE/agenda.lang index 0bd909eb402..8140922c4f7 100644 --- a/htdocs/langs/et_EE/agenda.lang +++ b/htdocs/langs/et_EE/agenda.lang @@ -5,16 +5,16 @@ Agenda=Päevakava TMenuAgenda=Päevakava Agendas=Päevakavad LocalAgenda=Sisemine kalender -ActionsOwnedBy=Event owned by +ActionsOwnedBy=Sündmus kuulub ActionsOwnedByShort=Omanik AffectedTo=Mõjutatud isik -Event=Sündmus +Event=Tegevus Events=Tegevused EventsNb=Tegevuste arv ListOfActions=Tegevuste nimekiri -EventReports=Event reports +EventReports=Tegevuste aruanded Location=Asukoht -ToUserOfGroup=To any user in group +ToUserOfGroup=Iga grupi kasutajale EventOnFullDay=Tegevus kestab kogu/kõik päeva(d) MenuToDoActions=Kõik lõpetamata tegevused MenuDoneActions=Kõik lõpetatud tegevused @@ -37,68 +37,68 @@ AgendaExtSitesDesc=See leht võimaldab määratleda väliseid kalendreid, mis sa ActionsEvents=Tegevused, mille kohta lisab Dolibarr automaatselt päevakavasse sündmuse. EventRemindersByEmailNotEnabled=Event reminders by email was not enabled into %s module setup. ##### Agenda event labels ##### -NewCompanyToDolibarr=Third party %s created -COMPANY_DELETEInDolibarr=Third party %s deleted -ContractValidatedInDolibarr=Contract %s validated -CONTRACT_DELETEInDolibarr=Contract %s deleted -PropalClosedSignedInDolibarr=Proposal %s signed -PropalClosedRefusedInDolibarr=Proposal %s refused +NewCompanyToDolibarr=Kolmasosapool %s loodud +COMPANY_DELETEInDolibarr=Kolmasosapool %s kustutatud +ContractValidatedInDolibarr=Leping %s kinnitatud +CONTRACT_DELETEInDolibarr=Leping %s kustutatud +PropalClosedSignedInDolibarr=Pakkumine %s kinnitatud +PropalClosedRefusedInDolibarr=Pakkumisest %s keelduti PropalValidatedInDolibarr=Pakkumine %s on kinnitatud -PropalClassifiedBilledInDolibarr=Proposal %s classified billed +PropalClassifiedBilledInDolibarr=Pakkumine %s arveldatud InvoiceValidatedInDolibarr=Arve %s on kinnitatud InvoiceValidatedInDolibarrFromPos=Invoice %s validated from POS InvoiceBackToDraftInDolibarr=Arve %s on tagasi mustandi staatuses InvoiceDeleteDolibarr=Arve %s on kustutatud -InvoicePaidInDolibarr=Invoice %s changed to paid -InvoiceCanceledInDolibarr=Invoice %s canceled -MemberValidatedInDolibarr=Member %s validated -MemberModifiedInDolibarr=Member %s modified -MemberResiliatedInDolibarr=Member %s terminated -MemberDeletedInDolibarr=Member %s deleted +InvoicePaidInDolibarr=Arve %s märgitud makstuks +InvoiceCanceledInDolibarr=Arve %s tühistatud +MemberValidatedInDolibarr=Liige %s kinnitatud +MemberModifiedInDolibarr=Liige %s muudetud +MemberResiliatedInDolibarr=Liige %s lõpetatud +MemberDeletedInDolibarr=Liige %s kustutatud MemberSubscriptionAddedInDolibarr=Subscription %s for member %s added MemberSubscriptionModifiedInDolibarr=Subscription %s for member %s modified MemberSubscriptionDeletedInDolibarr=Subscription %s for member %s deleted -ShipmentValidatedInDolibarr=Shipment %s validated -ShipmentClassifyClosedInDolibarr=Shipment %s classified billed -ShipmentUnClassifyCloseddInDolibarr=Shipment %s classified reopened -ShipmentBackToDraftInDolibarr=Shipment %s go back to draft status -ShipmentDeletedInDolibarr=Shipment %s deleted -OrderCreatedInDolibarr=Order %s created +ShipmentValidatedInDolibarr=Saadetis %s kinnitatud +ShipmentClassifyClosedInDolibarr=Saadetise %s arveldatud +ShipmentUnClassifyCloseddInDolibarr=Saadetis %s taasavatud +ShipmentBackToDraftInDolibarr=Saadetis %s on muudetud mustandiks +ShipmentDeletedInDolibarr=Saadetis %s kustutatud +OrderCreatedInDolibarr=Tellimus %s loodud OrderValidatedInDolibarr=Tellimus %s on kinnitatud -OrderDeliveredInDolibarr=Order %s classified delivered +OrderDeliveredInDolibarr=Tellimus %s tarnitud OrderCanceledInDolibarr=Tellimus %s on tühistatud -OrderBilledInDolibarr=Order %s classified billed -OrderApprovedInDolibarr=Tellimus %s on heaks kiidetud -OrderRefusedInDolibarr=Tellimus %s on tagasi lükatud +OrderBilledInDolibarr=Tellimus %s arveldatud +OrderApprovedInDolibarr=Tellimus %s kinnitatud +OrderRefusedInDolibarr=Tellimusest %s keelduti OrderBackToDraftInDolibarr=Tellimus %s on muudetud mustandiks ProposalSentByEMail=Commercial proposal %s sent by email -ContractSentByEMail=Contract %s sent by email -OrderSentByEMail=Sales order %s sent by email -InvoiceSentByEMail=Customer invoice %s sent by email -SupplierOrderSentByEMail=Purchase order %s sent by email -SupplierInvoiceSentByEMail=Vendor invoice %s sent by email -ShippingSentByEMail=Shipment %s sent by email -ShippingValidated= Shipment %s validated -InterventionSentByEMail=Intervention %s sent by email -ProposalDeleted=Proposal deleted -OrderDeleted=Order deleted -InvoiceDeleted=Invoice deleted -PRODUCT_CREATEInDolibarr=Product %s created -PRODUCT_MODIFYInDolibarr=Product %s modified -PRODUCT_DELETEInDolibarr=Product %s deleted -EXPENSE_REPORT_CREATEInDolibarr=Expense report %s created -EXPENSE_REPORT_VALIDATEInDolibarr=Expense report %s validated -EXPENSE_REPORT_APPROVEInDolibarr=Expense report %s approved -EXPENSE_REPORT_DELETEInDolibarr=Expense report %s deleted -EXPENSE_REPORT_REFUSEDInDolibarr=Expense report %s refused +ContractSentByEMail=Leping %s saadetud e-postiga +OrderSentByEMail=Müügitellimus %s saadetud e-postiga +InvoiceSentByEMail=Kliendi arve %s saadetud e-postiga +SupplierOrderSentByEMail=Ostutellimus %s saadetud e-postiga +SupplierInvoiceSentByEMail=Tarnija arve %s saadetud e-postiga +ShippingSentByEMail=Saadetise %s saadetud e-postiga +ShippingValidated= Saadetis %s kinnitatud +InterventionSentByEMail=Sekkumine %s saadetud e-postiga +ProposalDeleted=Pakkumine kustutatud +OrderDeleted=Tellimus kustutatud +InvoiceDeleted=Arve kustutatud +PRODUCT_CREATEInDolibarr=Toode %s loodud +PRODUCT_MODIFYInDolibarr=Toote %s muudetud +PRODUCT_DELETEInDolibarr=Toode %s kustutatud +EXPENSE_REPORT_CREATEInDolibarr=Kuluaruanne %s loodud +EXPENSE_REPORT_VALIDATEInDolibarr=Kuluaruanne %s kinnitatud +EXPENSE_REPORT_APPROVEInDolibarr=Kuluaruanne %s heaks kiidetud +EXPENSE_REPORT_DELETEInDolibarr=Kuluaruanne %s kustutatud +EXPENSE_REPORT_REFUSEDInDolibarr=Kuluaruanne %s keeldutud PROJECT_CREATEInDolibarr=Projekt %s on loodud -PROJECT_MODIFYInDolibarr=Project %s modified -PROJECT_DELETEInDolibarr=Project %s deleted -TICKET_CREATEInDolibarr=Ticket %s created -TICKET_MODIFYInDolibarr=Ticket %s modified -TICKET_ASSIGNEDInDolibarr=Ticket %s assigned -TICKET_CLOSEInDolibarr=Ticket %s closed -TICKET_DELETEInDolibarr=Ticket %s deleted +PROJECT_MODIFYInDolibarr=Projekti %s muudetud +PROJECT_DELETEInDolibarr=Projekt %s kustutatud +TICKET_CREATEInDolibarr=Pilet %s loodud +TICKET_MODIFYInDolibarr=Pilet %s muudetud +TICKET_ASSIGNEDInDolibarr=Pilet %s määratud +TICKET_CLOSEInDolibarr=Pilet %s suletud +TICKET_DELETEInDolibarr=Pilet %s kustutatud ##### End agenda events ##### AgendaModelModule=Document templates for event DateActionStart=Alguskuupäev @@ -109,18 +109,18 @@ AgendaUrlOptionsNotAdmin=logina=!%s to restrict output to actions not own AgendaUrlOptions4=logint=%s to restrict output to actions assigned to user %s (owner and others). AgendaUrlOptionsProject=project=__PROJECT_ID__ to restrict output to actions linked to project __PROJECT_ID__. AgendaUrlOptionsNotAutoEvent=notactiontype=systemauto to exclude automatic events. -AgendaShowBirthdayEvents=Show birthdays of contacts -AgendaHideBirthdayEvents=Hide birthdays of contacts +AgendaShowBirthdayEvents=Näita kontaktide sünnipäevi +AgendaHideBirthdayEvents=Peida kontaktide sünnipäevad Busy=Hõivatud ExportDataset_event1=Päevakavas olevate tegevuste nimekiri DefaultWorkingDays=Default working days range in week (Example: 1-5, 1-6) -DefaultWorkingHours=Default working hours in day (Example: 9-18) +DefaultWorkingHours=Vaikimisi tööaeg (näide: 9-18) # External Sites ical ExportCal=Ekspordi kalender ExtSites=Impordi väline kalender ExtSitesEnableThisTool=Show external calendars (defined in global setup) in Agenda. Does not affect external calendars defined by users. ExtSitesNbOfAgenda=Kalendrite arv -AgendaExtNb=Calendar no. %s +AgendaExtNb=Kalendri nr. %s ExtSiteUrlAgenda=URL .ical failile ligi pääsemiseks ExtSiteNoLabel=Kirjeldus puudub VisibleTimeRange=Nähtav ajavahemik @@ -129,10 +129,10 @@ AddEvent=Loo sündmus MyAvailability=Minu saadavus ActionType=Sündmuse tüüp DateActionBegin=Sündmuse alguse kuupäev -ConfirmCloneEvent=Are you sure you want to clone the event %s? +ConfirmCloneEvent=Kas soovite kindlasti sündmuse kloonida %s ? RepeatEvent=Korda sündmust EveryWeek=Igal nädalal EveryMonth=Igal kuul DayOfMonth=Kuu päeval DayOfWeek=Nädala päeval -DateStartPlusOne=Date start + 1 hour +DateStartPlusOne=Kuupäeva algus + 1 tund diff --git a/htdocs/langs/et_EE/assets.lang b/htdocs/langs/et_EE/assets.lang index 0d459677948..0c25eb8ba5a 100644 --- a/htdocs/langs/et_EE/assets.lang +++ b/htdocs/langs/et_EE/assets.lang @@ -16,44 +16,44 @@ # # Generic # -Assets = Assets -NewAsset = New asset -AccountancyCodeAsset = Accounting code (asset) -AccountancyCodeDepreciationAsset = Accounting code (depreciation asset account) -AccountancyCodeDepreciationExpense = Accounting code (depreciation expense account) -NewAssetType=New asset type -AssetsTypeSetup=Asset type setup -AssetTypeModified=Asset type modified -AssetType=Asset type -AssetsLines=Assets +Assets = Varad +NewAsset = Uus vara +AccountancyCodeAsset = Raamatupidamise kood (vara) +AccountancyCodeDepreciationAsset = Raamatupidamise kood (amortisatsioonivara konto) +AccountancyCodeDepreciationExpense = Raamatupidamise kood (amortisatsioonikulu konto) +NewAssetType=Uus vara tüüp +AssetsTypeSetup=Varade tüübi seadistamine +AssetTypeModified=Varade tüüp on muudetud +AssetType=Vara tüüp +AssetsLines=Varad DeleteType=Kustuta -DeleteAnAssetType=Delete an asset type -ConfirmDeleteAssetType=Are you sure you want to delete this asset type? +DeleteAnAssetType=Kustuta vara tüüp +ConfirmDeleteAssetType=Kas soovite kindlasti selle vara tüübi kustutada? ShowTypeCard=Kuva tüüp '%s' # Module label 'ModuleAssetsName' -ModuleAssetsName = Assets +ModuleAssetsName = Varad # Module description 'ModuleAssetsDesc' -ModuleAssetsDesc = Assets description +ModuleAssetsDesc = Varade kirjeldus # # Admin page # -AssetsSetup = Assets setup -Settings = Settings -AssetsSetupPage = Assets setup page -ExtraFieldsAssetsType = Complementary attributes (Asset type) -AssetsType=Asset type -AssetsTypeId=Asset type id -AssetsTypeLabel=Asset type label -AssetsTypes=Assets types +AssetsSetup = Varade seadistamine +Settings = Seaded +AssetsSetupPage = Varade seadistamise leht +ExtraFieldsAssetsType = Täiendavad atribuudid (vara tüüp) +AssetsType=Vara tüüp +AssetsTypeId=Varade tüübi ID +AssetsTypeLabel=Varade tüübi silt +AssetsTypes=Varade liigid # # Menu # -MenuAssets = Assets -MenuNewAsset = New asset -MenuTypeAssets = Type assets +MenuAssets = Varad +MenuNewAsset = Uus vara +MenuTypeAssets = Tüüp varasid MenuListAssets = Loend MenuNewTypeAssets = Uus MenuListTypeAssets = Loend @@ -61,5 +61,5 @@ MenuListTypeAssets = Loend # # Module # -NewAssetType=New asset type -NewAsset=New asset +NewAssetType=Uus vara tüüp +NewAsset=Uus vara diff --git a/htdocs/langs/et_EE/banks.lang b/htdocs/langs/et_EE/banks.lang index 91cd2cc0f24..57eb2a49921 100644 --- a/htdocs/langs/et_EE/banks.lang +++ b/htdocs/langs/et_EE/banks.lang @@ -1,13 +1,13 @@ # Dolibarr language file - Source file is en_US - banks Bank=Pank -MenuBankCash=Banks | Cash -MenuVariousPayment=Miscellaneous payments -MenuNewVariousPayment=New Miscellaneous payment +MenuBankCash=Pangad | Kassa +MenuVariousPayment=Mitmesugused maksed +MenuNewVariousPayment=Uus mitmesugune makse BankName=Panga nimi FinancialAccount=Konto BankAccount=Pangakonto BankAccounts=Pangakontod -BankAccountsAndGateways=Bank accounts | Gateways +BankAccountsAndGateways=Pangakontod | Sisendid ShowAccount=Show Account AccountRef=Finantskonto viide AccountLabel=Finantskonto silt @@ -30,7 +30,7 @@ AllTime=From start Reconciliation=Vastavusse viimine RIB=Arvelduskonto number IBAN=IBAN number -BIC=BIC/SWIFT code +BIC=BIC / SWIFT kood SwiftValid=BIC/SWIFT valid SwiftVNotalid=BIC/SWIFT not valid IbanValid=BAN valid @@ -42,7 +42,7 @@ AccountStatementShort=Väljavõte AccountStatements=Kontoväljavõtted LastAccountStatements=Viimased kontoväljavõtted IOMonthlyReporting=Igakuine aruandlus -BankAccountDomiciliation=Bank address +BankAccountDomiciliation=Panga aadress BankAccountCountry=Konto riik BankAccountOwner=Konto omaniku nimi BankAccountOwnerAddress=Konto omaniku aadress @@ -76,7 +76,7 @@ TransactionsToConciliate=Entries to reconcile Conciliable=Saab viia vastavusse Conciliate=Vii vastavusse Conciliation=Vastavusse viimine -SaveStatementOnly=Save statement only +SaveStatementOnly=Salvesta ainult avaldus ReconciliationLate=Reconciliation late IncludeClosedAccount=Sh suletud tehingute summad OnlyOpenedAccount=Ainult avatud tehingud @@ -98,9 +98,9 @@ BankLineConciliated=Entry reconciled Reconciled=Reconciled NotReconciled=Not reconciled CustomerInvoicePayment=Kliendi laekumi -SupplierInvoicePayment=Vendor payment +SupplierInvoicePayment=Tarnija makse SubscriptionPayment=Liikmemaks -WithdrawalPayment=Debit payment order +WithdrawalPayment=Deebetmaksekorraldus SocialContributionPayment=Social/fiscal tax payment BankTransfer=Pangaülekanne BankTransfers=Pangaülekanded @@ -158,7 +158,7 @@ DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries DocumentModelBan=Template to print a page with BAN information. NewVariousPayment=New miscellaneous payment VariousPayment=Miscellaneous payment -VariousPayments=Miscellaneous payments +VariousPayments=Mitmesugused maksed ShowVariousPayment=Show miscellaneous payment AddVariousPayment=Add miscellaneous payment SEPAMandate=SEPA mandate diff --git a/htdocs/langs/et_EE/bills.lang b/htdocs/langs/et_EE/bills.lang index 3d3140d1068..e7d4083a6a7 100644 --- a/htdocs/langs/et_EE/bills.lang +++ b/htdocs/langs/et_EE/bills.lang @@ -1,16 +1,16 @@ # Dolibarr language file - Source file is en_US - bills Bill=Arve Bills=Arved -BillsCustomers=Customer invoices +BillsCustomers=Kliendi arved BillsCustomer=Müügiarve -BillsSuppliers=Vendor invoices +BillsSuppliers=Tarnija arved BillsCustomersUnpaid=Maksmata kliendiarved -BillsCustomersUnpaidForCompany=Unpaid customer invoices for %s -BillsSuppliersUnpaid=Unpaid vendor invoices -BillsSuppliersUnpaidForCompany=Unpaid vendors invoices for %s +BillsCustomersUnpaidForCompany=Tasumata kliendiarved %s +BillsSuppliersUnpaid=Tasumata tarnija arved +BillsSuppliersUnpaidForCompany=Tasumata tarnijate arved %s BillsLate=Hilinenud maksed BillsStatistics=Müügiiarvete statistika -BillsStatisticsSuppliers=Vendors invoices statistics +BillsStatisticsSuppliers=Tarnijate arved statistika DisabledBecauseDispatchedInBookkeeping=Disabled because invoice was dispatched into bookkeeping DisabledBecauseNotLastInvoice=Disabled because invoice is not erasable. Some invoices were recorded after this one and it will create holes in the counter. DisabledBecauseNotErasable=Disabled because cannot be erased @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma arve InvoiceProFormaDesc=Proforma arve on õige arve kujuga, kuid ei oma raamatupidamislikku tähendust. InvoiceReplacement=Parandusarve InvoiceReplacementAsk=Parandusarve asendab arve -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreeditarve InvoiceAvoirAsk=Kreeditarve parandab arve InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -53,9 +53,9 @@ InvoiceLine=Arve rida InvoiceCustomer=Müügiarve CustomerInvoice=Müügiarve CustomersInvoices=Müügiarved -SupplierInvoice=Vendor invoice -SuppliersInvoices=Vendors invoices -SupplierBill=Vendor invoice +SupplierInvoice=Tarnija arve +SuppliersInvoices=Tarnijate arved +SupplierBill=Tarnija arve SupplierBills=ostuarved Payment=Makse PaymentBack=Tagasimakse @@ -65,12 +65,12 @@ PaymentsBack=Tagasimaksed paymentInInvoiceCurrency=in invoices currency PaidBack=Tagasi makstud DeletePayment=Kustuta makse -ConfirmDeletePayment=Are you sure you want to delete this payment? -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? -ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? +ConfirmDeletePayment=Kas olete kindel, et soovite selle makse kustutada? +ConfirmConvertToReduc=Kas soovite selle %s konverteerida absoluutseks allahindluseks? +ConfirmConvertToReduc2=Summa salvestatakse kõigi allahindluste hulka ja seda saab kasutada selle kliendi jooksva või tulevase arve allahindlusena. +ConfirmConvertToReducSupplier=Kas soovite selle %s konverteerida absoluutseks allahindluseks? ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. -SupplierPayments=Vendor payments +SupplierPayments=Tarnija maksed ReceivedPayments=Laekunud maksed ReceivedCustomersPayments=Klientidelt laekunud maksed PayedSuppliersPayments=Payments paid to vendors @@ -80,16 +80,16 @@ PaymentsReports=Maksete aruanded PaymentsAlreadyDone=Juba tehtud maksed PaymentsBackAlreadyDone=Juba tehtud tagasimaksed PaymentRule=Maksereegel -PaymentMode=Payment Type +PaymentMode=Makse tüüp PaymentTypeDC=Debit/Credit Card PaymentTypePP=PayPal -IdPaymentMode=Payment Type (id) -CodePaymentMode=Payment Type (code) -LabelPaymentMode=Payment Type (label) -PaymentModeShort=Payment Type -PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms +IdPaymentMode=Makse tüüp (id) +CodePaymentMode=Makse tüüp (kood) +LabelPaymentMode=Makse tüüp (silt) +PaymentModeShort=Makse tüüp +PaymentTerm=Maksetähtaeg +PaymentConditions=Maksetähtajad +PaymentConditionsShort=Maksetähtajad PaymentAmount=Makse summa PaymentHigherThanReminderToPay=Makse on suurem, kui makstava summa jääk HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. @@ -98,7 +98,7 @@ ClassifyPaid=Liigita 'Makstud' ClassifyPaidPartially=Liigita 'Osaliselt makstud' ClassifyCanceled=Liigita 'Hüljatud' ClassifyClosed=Liigita 'Suletud' -ClassifyUnBilled=Classify 'Unbilled' +ClassifyUnBilled=Liigita „tasumata” CreateBill=Loo arve CreateCreditNote=Koosta kreeditarve AddBill=Create invoice or credit note @@ -248,7 +248,7 @@ DateInvoice=Arve kuupäev DatePointOfTax=Point of tax NoInvoice=Ühtki arvet ei ole ClassifyBill=Liigita arve -SupplierBillsToPay=Unpaid vendor invoices +SupplierBillsToPay=Tasumata tarnija arved CustomerBillsUnpaid=Maksmata kliendiarved NonPercuRecuperable=Tagastamatu SetConditions=Set Payment Terms @@ -404,7 +404,7 @@ VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s' PaymentTypeVIR=Pangaülekanne PaymentTypeShortVIR=Pangaülekanne PaymentTypePRE=Direct debit payment order -PaymentTypeShortPRE=Debit payment order +PaymentTypeShortPRE=Deebetmaksekorraldus PaymentTypeLIQ=Sularaha PaymentTypeShortLIQ=Sularaha PaymentTypeCB=Krediitkaart @@ -428,7 +428,7 @@ Residence=Aadress IBANNumber=IBAN account number IBAN=IBAN BIC=BIC/SWIFT -BICNumber=BIC/SWIFT code +BICNumber=BIC / SWIFT kood ExtraInfos=Lisainfo RegulatedOn=Reguleeritud üksusel ChequeNumber=Tšeki nr @@ -552,4 +552,4 @@ AutoFillDateFromShort=Set start date AutoFillDateTo=Set end date for service line with next invoice date AutoFillDateToShort=Set end date MaxNumberOfGenerationReached=Max number of gen. reached -BILL_DELETEInDolibarr=Invoice deleted +BILL_DELETEInDolibarr=Arve kustutatud diff --git a/htdocs/langs/et_EE/companies.lang b/htdocs/langs/et_EE/companies.lang index b9ef4ee0fa9..df5ddbd8531 100644 --- a/htdocs/langs/et_EE/companies.lang +++ b/htdocs/langs/et_EE/companies.lang @@ -28,7 +28,7 @@ AliasNames=Hüüdnimi (ärinimi, kaubamärk, ...) AliasNameShort=Alias Name Companies=Ettevõtted CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -38,7 +38,7 @@ ThirdPartyProspectsStats=Huvilised ThirdPartyCustomers=Kliendid ThirdPartyCustomersStats=Kliendid ThirdPartyCustomersWithIdProf12=Klient koos %s või %s -ThirdPartySuppliers=Vendors +ThirdPartySuppliers=Tarnijad ThirdPartyType=Third-party type Individual=Eraisik ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Pole Vendor=Vendor +Supplier=Vendor AddContact=Uus kontakt AddContactAddress=Uus kontakt/aadress EditContact=Muuda kontakti diff --git a/htdocs/langs/et_EE/exports.lang b/htdocs/langs/et_EE/exports.lang index 69b4e92183d..0b020401a33 100644 --- a/htdocs/langs/et_EE/exports.lang +++ b/htdocs/langs/et_EE/exports.lang @@ -1,39 +1,39 @@ # Dolibarr language file - Source file is en_US - exports -ExportsArea=Ekspordi ala -ImportArea=Impordi ala -NewExport=Uus eksport -NewImport=Uus import +ExportsArea=Eksportimised +ImportArea=Import +NewExport=New Export +NewImport=New Import ExportableDatas=Eksporditav andmekogu ImportableDatas=Imporditav andmekog SelectExportDataSet=Vali eksporditav andmekog... SelectImportDataSet=Vali imporditav andmehulk... -SelectExportFields=Vali väljad, mida soovid eksportida või vali eelmääratletud ekspordi profiil -SelectImportFields=Choose source file fields you want to import and their target field in database by moving them up and down with anchor %s, or select a predefined import profile: +SelectExportFields=Choose the fields you want to export, or select a predefined export profile +SelectImportFields=Choose the source file fields you want to import and their target field in database by moving them up and down with anchor %s, or select a predefined import profile: NotImportedFields=Lähtefaili väljad, mida ei impordita -SaveExportModel=Salvesta see ekspordi profiil, kui kavatsed seda hiljem uuesti kasutada... -SaveImportModel=Salvesta see impordi profiil, kui kavatsed seda hiljem uuesti kasutada... +SaveExportModel=Save your selections as an export profile/template (for reuse). +SaveImportModel=Save this import profile (for reuse) ... ExportModelName=Ekspordi profiili nimi -ExportModelSaved=Ekspordi profiil salvestatud nimega %s. +ExportModelSaved=Export profile saved as %s. ExportableFields=Eksporditavad väljad ExportedFields=Eksporditud väljad ImportModelName=Impordi profiili nimi -ImportModelSaved=Impordi profiil salvestatud nimega %s. +ImportModelSaved=Import profile saved as %s. DatasetToExport=Eksporditav andmekogu DatasetToImport=Impordi fail andmekogusse ChooseFieldsOrdersAndTitle=Vali väljade järjekord... FieldsTitle=Väljade nimed FieldTitle=Välja nimi -NowClickToGenerateToBuildExportFile=Nüüd vali liitboksis faili formaat ja klõpsa "Loo" nupul ekspordifaili loomiseks... -AvailableFormats=Saadaval olevad formaadid +NowClickToGenerateToBuildExportFile=Now, select the file format in the combo box and click on "Generate" to build the export file... +AvailableFormats=Available Formats LibraryShort=Teek Step=Samm -FormatedImport=Importimise assistent -FormatedImportDesc1=See ala võimaldab assistendi abil isikustatud andmete importimist sügavaid tehnilisi teadmisi omamata. -FormatedImportDesc2=Esimese sammuna tuleb valida imporditavate andmete liik, siis laetav fail ja seejärel laetavad väljad. -FormatedExport=Eksportimise assistent -FormatedExportDesc1=See ala võimaldab assistendi abil isikustatud andmete eksportimist sügavaid tehnilisi teadmisi omamata. -FormatedExportDesc2=Esimesena sammuna tuleb valide eelmääratletud andmekogu, seejärel sihtfailides soovitavad väljad ja nende järjekord. -FormatedExportDesc3=Kui eksporditavad andmed on valitud, saad valida sihtfaili formaadi, kuhu soovid andmeid eksportida. +FormatedImport=Import Assistant +FormatedImportDesc1=This module allows you to update existing data or add new objects into the database from a file without technical knowledge, using an assistant. +FormatedImportDesc2=First step is to choose the kind of data you want to import, then the format of the source file, then the fields you want to import. +FormatedExport=Export Assistant +FormatedExportDesc1=These tools allow the export of personalized data using an assistant, to help you in the process without requiring technical knowledge. +FormatedExportDesc2=First step is to choose a predefined dataset, then which fields you want to export, and in which order. +FormatedExportDesc3=When data to export are selected, you can choose the format of the output file. Sheet=Leht NoImportableData=Imporditavaid andmeid ei ole (ükski moodul ei luba andmete importimist) FileSuccessfullyBuilt=File generated @@ -44,16 +44,16 @@ LineDescription=Rea kirjeldus LineUnitPrice=Rea ühikuhind LineVATRate=Rea KM määr LineQty=Rea kogus -LineTotalHT=Rea summa käibemaksuta +LineTotalHT=Amount excl. tax for line LineTotalTTC=Rea summa käibemaksuga LineTotalVAT=Rea käibemaks TypeOfLineServiceOrProduct=Rea liik (0=toode, 1=teenus) FileWithDataToImport=Imporditavate andmetega fai FileToImport=Imporditav lähtefai -FileMustHaveOneOfFollowingFormat=Imporditav fail peab olema ühes järgnevatest formaatidest -DownloadEmptyExample=Lae alla tühja lähtefaili näidis -ChooseFormatOfFileToImport=Vali kasutatav impordi faili formaat, klõpsates pildil %s selle valimiseks.. -ChooseFileToImport=Lae fail üles, seejärel klõpsa pildil %s faili kasutamiseks impordi failina... +FileMustHaveOneOfFollowingFormat=File to import must have one of following formats +DownloadEmptyExample=Download template file with field content information (* are mandatory fields) +ChooseFormatOfFileToImport=Choose the file format to use as import file format by clicking on the %s icon to select it... +ChooseFileToImport=Upload file then click on the %s icon to select file as source import file... SourceFileFormat=Lähtefaili formaat FieldsInSourceFile=Lähtefailis olevad väljad FieldsInTargetDatabase=Dolibarri andmebaasi sihtväljad (rasvane=kohustuslik) @@ -68,66 +68,66 @@ FieldsTarget=Sihtväljad FieldTarget=Sihtväli FieldSource=Lähteväl NbOfSourceLines=Lähtefaili ridade arv -NowClickToTestTheImport=Kontrolli üle seadistatud importimise parameetrid. Kui nad on õiged, siis klõpsa nupul "%s" importimise simulatsiooni käivitamiseks (andmebaasis andmeid ei muudeta, vaid lihtsalt simuleeritakse muudatusi hetkel) -RunSimulateImportFile=Käivita importimise simulatsioo +NowClickToTestTheImport=Check that the file format (field and string delimiters) of your file matches the options shown and that you have omitted the header line, or these will be flagged as errors in the following simulation.
Click on the "%s" button to run a check of the file structure/contents and simulate the import process.
No data will be changed in your database. +RunSimulateImportFile=Run Import Simulation FieldNeedSource=This field requires data from the source file SomeMandatoryFieldHaveNoSource=Mõnedel kohustuslikel väljadel pole andmefailis allikat InformationOnSourceFile=Lähtefaili informatsioone InformationOnTargetTables=Sihtväljade informatsioon SelectAtLeastOneField=Vaheta ringi vähemalt üks lähteväli eksporditavate väljade veerus SelectFormat=Vali selle impordi faili formaat -RunImportFile=Käivita impordi fail -NowClickToRunTheImport=Kontrolli impordi simulatsiooni tulemust. Kui kõik on korras, käivita lõplik import. -DataLoadedWithId=All data will be loaded with the following import id: %s -ErrorMissingMandatoryValue=Kohustuslikud andmed on tühjad lähtefailis välja %s jaoks. -TooMuchErrors=On veel %s muud rida vigadega, kuid väljundit on piiratud. -TooMuchWarnings=On veel %s muud rida hoiatustega, kuid väljundit on piiratud. +RunImportFile=Import Data +NowClickToRunTheImport=Check the results of the import simulation. Correct any errors and re-test.
When the simulation reports no errors you may proceed to import the data into the database. +DataLoadedWithId=The imported data will have an additional field in each database table with this import id: %s, to allow it to be searchable in the case of investigating a problem related to this import. +ErrorMissingMandatoryValue=Mandatory data is empty in the source file for field %s. +TooMuchErrors=There are still %s other source lines with errors but output has been limited. +TooMuchWarnings=There are still %s other source lines with warnings but output has been limited. EmptyLine=Tühi rida (ära visata) -CorrectErrorBeforeRunningImport=Enne lõpliku impordi käivitamist pead esmalt parandama kõik vead. +CorrectErrorBeforeRunningImport=You must correct all errors before running the definitive import. FileWasImported=Fail on imporditud numbriga %s. -YouCanUseImportIdToFindRecord=You can find all imported record in your database by filtering on field import_key='%s'. +YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field import_key='%s'. NbOfLinesOK=Hoiatuste ja vigadeta ridu: %s. NbOfLinesImported=Edukalt imporditud ridu: %s. DataComeFromNoWhere=Sisestavat väärtust ei ole mitte kuskil lähtefailis. DataComeFromFileFieldNb=Sisestav väärtus pärineb lähtefaili %s. väljalt. -DataComeFromIdFoundFromRef=Väärtust, mis pärineb lähtefaili %s. realt, kasutatakse emaobjekti ID leidmiseks (selle kindlustamiseks, et objekt %s, millel on lähtefaili viide, oleks Dolibarris olemas). -DataComeFromIdFoundFromCodeId=Code that comes from field number %s of source file will be used to find id of parent object to use (So the code from source file must exists into dictionary %s). Note that if you know id, you can also use it into source file instead of code. Import should work in both cases. +DataComeFromIdFoundFromRef=Value that comes from field number %s of source file will be used to find the id of the parent object to use (so the object %s that has the ref. from source file must exist in the database). +DataComeFromIdFoundFromCodeId=Code that comes from field number %s of source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary %s). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases. DataIsInsertedInto=Lähtefailist pärinevad andmed sisestatakse järgmisse välja: -DataIDSourceIsInsertedInto=Lähtefailis leitud emaobjekti ID sisestatakse järgmisse välja: +DataIDSourceIsInsertedInto=The id of parent object was found using the data in the source file, will be inserted into the following field: DataCodeIDSourceIsInsertedInto=Koodist leitud emarea ID sisestatakse järgmisse välja: SourceRequired=Andmeväärtus on kohustuslik SourceExample=Võimaliku andmeväärtuse näide ExampleAnyRefFoundIntoElement=Iga elemendi %s jaoks leitud viide ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary %s -CSVFormatDesc=Comma Separated Value faili formaat (.csv).
See on tekstifaili formaat, kus väljad on eraldatud eraldajaga [ %s ]. Kui välja sisus leidub eraldaja, eraldatakse väli teistest väljadest eraldusssümboliga [ %s ]. Eraldussümboli paomärk on [ %s ]. -Excel95FormatDesc=Excel faili formaat (.xls)
Excel 95 formaat (BIFF5). -Excel2007FormatDesc=Excel faili formaat (.xlsx)
Excel 2007 formaat (SpreadsheetML). +CSVFormatDesc=Comma Separated Value file format (.csv).
This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ]. +Excel95FormatDesc=Excel file format (.xls)
This is the native Excel 95 format (BIFF5). +Excel2007FormatDesc=Excel file format (.xlsx)
This is the native Excel 2007 format (SpreadsheetML). TsvFormatDesc=Tab Separated Value faili formaat (.tsv)
See on tekstifaili formaat, kus väljad on eraldatud tabulaatoriga [tab]. ExportFieldAutomaticallyAdded=Field %s was automatically added. It will avoid you to have similar lines to be treated as duplicate record (with this field added, all lines will own their own id and will differ). -CsvOptions=CSV lisavalikud -Separator=Eraldaja -Enclosure=Aedik +CsvOptions=CSV format options +Separator=Field Separator +Enclosure=String Delimiter SpecialCode=Erikood ExportStringFilter=%% allows replacing one or more characters in the text -ExportDateFilter=YYYY, YYYYMM, YYYYMMDD : filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD : filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD : filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD : filters on all previous years/months/days +ExportDateFilter=YYYY, YYYYMM, YYYYMMDD: filters by one year/month/day
YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD: filters over a range of years/months/days
> YYYY, > YYYYMM, > YYYYMMDD: filters on all following years/months/days
< YYYY, < YYYYMM, < YYYYMMDD: filters on all previous years/months/days ExportNumericFilter=NNNNN filters by one value
NNNNN+NNNNN filters over a range of values
< NNNNN filters by lower values
> NNNNN filters by higher values ImportFromLine=Import starting from line number EndAtLineNb=End at line number -ImportFromToLine=Import line numbers (from - to) -SetThisValueTo2ToExcludeFirstLine=For example, set this value to 3 to exclude the 2 first lines -KeepEmptyToGoToEndOfFile=Keep this field empty to go up to the end of file -SelectPrimaryColumnsForUpdateAttempt=Select column(s) to use as primary key for update attempt +ImportFromToLine=Limit range (From - To) eg. to omit header line(s) +SetThisValueTo2ToExcludeFirstLine=For example, set this value to 3 to exclude the 2 first lines.
If the header lines are NOT omitted, this will result in multiple errors in the Import Simulation. +KeepEmptyToGoToEndOfFile=Keep this field empty to process all lines to the end of the file. +SelectPrimaryColumnsForUpdateAttempt=Select column(s) to use as primary key for an UPDATE import UpdateNotYetSupportedForThisImport=Update is not supported for this type of import (only insert) NoUpdateAttempt=No update attempt was performed, only insert ImportDataset_user_1=Users (employees or not) and properties -ComputedField=Computed field +ComputedField=Arvutatud väli ## filters SelectFilterFields=Kui soovid mõnede väärtuste põhjal filtreerida, siis sisesta nad siia. FilteredFields=Filtreeritav väl FilteredFieldsValues=Filtri väärtus FormatControlRule=Format control rule ## imports updates -KeysToUseForUpdates=Key to use for updating data +KeysToUseForUpdates=Key (column) to use for updating existing data NbInsert=Number of inserted lines: %s NbUpdate=Number of updated lines: %s MultipleRecordFoundWithTheseFilters=Multiple records have been found with these filters: %s diff --git a/htdocs/langs/et_EE/holiday.lang b/htdocs/langs/et_EE/holiday.lang index ecb10d79497..a811df5093a 100644 --- a/htdocs/langs/et_EE/holiday.lang +++ b/htdocs/langs/et_EE/holiday.lang @@ -107,7 +107,7 @@ UpdateConfCPOK=Edukalt uuendatud. Module27130Name= Management of leave requests Module27130Desc= Management of leave requests ErrorMailNotSend=E-kirja saatmisel tekkis viga: -NoticePeriod=Notice period +NoticePeriod=Teavitamisperiood #Messages HolidaysToValidate=Validate leave requests HolidaysToValidateBody=Below is a leave request to validate diff --git a/htdocs/langs/et_EE/interventions.lang b/htdocs/langs/et_EE/interventions.lang index 304f7a1f4bb..f9a8bb06dfe 100644 --- a/htdocs/langs/et_EE/interventions.lang +++ b/htdocs/langs/et_EE/interventions.lang @@ -35,7 +35,7 @@ InterventionValidatedInDolibarr=Sekkumine %s on kinnitatud InterventionModifiedInDolibarr=Intervention %s modified InterventionClassifiedBilledInDolibarr=Intervention %s set as billed InterventionClassifiedUnbilledInDolibarr=Intervention %s set as unbilled -InterventionSentByEMail=Intervention %s sent by email +InterventionSentByEMail=Sekkumine %s saadetud e-postiga InterventionDeletedInDolibarr=Intervention %s deleted InterventionsArea=Interventions area DraftFichinter=Draft interventions diff --git a/htdocs/langs/et_EE/main.lang b/htdocs/langs/et_EE/main.lang index 61150076e73..045be9f36b2 100644 --- a/htdocs/langs/et_EE/main.lang +++ b/htdocs/langs/et_EE/main.lang @@ -936,11 +936,11 @@ SearchIntoUsers=Kasutajad SearchIntoProductsOrServices=Products or services SearchIntoProjects=Projektid SearchIntoTasks=Ülesanded -SearchIntoCustomerInvoices=Customer invoices -SearchIntoSupplierInvoices=Vendor invoices +SearchIntoCustomerInvoices=Kliendi arved +SearchIntoSupplierInvoices=Tarnija arved SearchIntoCustomerOrders=Sales orders SearchIntoSupplierOrders=Purchase orders -SearchIntoCustomerProposals=Customer proposals +SearchIntoCustomerProposals=Kliendi pakkumised SearchIntoSupplierProposals=Vendor proposals SearchIntoInterventions=Sekkumised SearchIntoContracts=Lepingud diff --git a/htdocs/langs/et_EE/orders.lang b/htdocs/langs/et_EE/orders.lang index 2125c5f13af..8c792f3fc7b 100644 --- a/htdocs/langs/et_EE/orders.lang +++ b/htdocs/langs/et_EE/orders.lang @@ -17,7 +17,7 @@ SupplierOrder=Purchase order SuppliersOrders=Purchase orders SuppliersOrdersRunning=Current purchase orders CustomerOrder=Sales Order -CustomersOrders=Sales Orders +CustomersOrders=Müügitellimused CustomersOrdersRunning=Current sales orders CustomersOrdersAndOrdersLines=Sales orders and order details OrdersDeliveredToBill=Sales orders delivered to bill diff --git a/htdocs/langs/et_EE/other.lang b/htdocs/langs/et_EE/other.lang index 0af94d6bd39..6a0e6fbdcd2 100644 --- a/htdocs/langs/et_EE/other.lang +++ b/htdocs/langs/et_EE/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Sekkumine %s on kinnitatud. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/et_EE/products.lang b/htdocs/langs/et_EE/products.lang index 5eb54c89bf3..d488dbb1fea 100644 --- a/htdocs/langs/et_EE/products.lang +++ b/htdocs/langs/et_EE/products.lang @@ -79,7 +79,7 @@ ErrorProductAlreadyExists=Toode viitega %s on juba olemas. ErrorProductBadRefOrLabel=Vale viite või nime väärtus. ErrorProductClone=Toote või teenuse kloonimisel tekkis probleem. ErrorPriceCantBeLowerThanMinPrice=Error, price can't be lower than minimum price. -Suppliers=Vendors +Suppliers=Tarnijad SupplierRef=Vendor SKU ShowProduct=Näita toodet ShowService=Näita teenust diff --git a/htdocs/langs/et_EE/projects.lang b/htdocs/langs/et_EE/projects.lang index 07a4497af69..55e25fe2ef9 100644 --- a/htdocs/langs/et_EE/projects.lang +++ b/htdocs/langs/et_EE/projects.lang @@ -146,7 +146,7 @@ ErrorShiftTaskDate=Ülesande kuupäeva ei ole võimalik nihutada vastavalt uuele ProjectsAndTasksLines=Projektid ja ülesanded ProjectCreatedInDolibarr=Projekt %s on loodud ProjectValidatedInDolibarr=Project %s validated -ProjectModifiedInDolibarr=Project %s modified +ProjectModifiedInDolibarr=Projekti %s muudetud TaskCreatedInDolibarr=Ülesanne %s on loodud TaskModifiedInDolibarr=Ülesannet %s on muudetud TaskDeletedInDolibarr=Ülesanne %s on kustutatud diff --git a/htdocs/langs/et_EE/suppliers.lang b/htdocs/langs/et_EE/suppliers.lang index a68a5d7df7b..715be4d8897 100644 --- a/htdocs/langs/et_EE/suppliers.lang +++ b/htdocs/langs/et_EE/suppliers.lang @@ -1,6 +1,6 @@ -# Dolibarr language file - Source file is en_US - suppliers -Suppliers=Vendors -SuppliersInvoice=Vendor invoice +# Dolibarr language file - Source file is en_US - vendors +Suppliers=Tarnijad +SuppliersInvoice=Tarnija arve ShowSupplierInvoice=Show Vendor Invoice NewSupplier=New vendor History=Ajalugu @@ -15,15 +15,15 @@ SomeSubProductHaveNoPrices=Mõnedel alatoodetel pole määratletud hinda AddSupplierPrice=Add buying price ChangeSupplierPrice=Change buying price SupplierPrices=Vendor prices -ReferenceSupplierIsAlreadyAssociatedWithAProduct=See hankija viide on juba seotud viitega: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=This vendor reference is already associated with a product: %s NoRecordedSuppliers=No vendor recorded -SupplierPayment=Vendor payment +SupplierPayment=Tarnija makse SuppliersArea=Vendor area RefSupplierShort=Ref. vendor Availability=Kättesaadavus -ExportDataset_fournisseur_1=Vendor invoices list and invoice lines +ExportDataset_fournisseur_1=Vendor invoices and invoice details ExportDataset_fournisseur_2=Vendor invoices and payments -ExportDataset_fournisseur_3=Purchase orders and order lines +ExportDataset_fournisseur_3=Purchase orders and order details ApproveThisOrder=KIida see tellimuse heaks ConfirmApproveThisOrder=Are you sure you want to approve order %s? DenyingThisOrder=Deny this order @@ -35,13 +35,13 @@ ListOfSupplierProductForSupplier=List of products and prices for vendor %s%s
' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/eu_ES/accountancy.lang b/htdocs/langs/eu_ES/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/eu_ES/accountancy.lang +++ b/htdocs/langs/eu_ES/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/eu_ES/admin.lang b/htdocs/langs/eu_ES/admin.lang index 085961d7266..0fdb64717fc 100644 --- a/htdocs/langs/eu_ES/admin.lang +++ b/htdocs/langs/eu_ES/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/eu_ES/bills.lang b/htdocs/langs/eu_ES/bills.lang index 0a03fd602e1..a90736a569d 100644 --- a/htdocs/langs/eu_ES/bills.lang +++ b/htdocs/langs/eu_ES/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/eu_ES/companies.lang b/htdocs/langs/eu_ES/companies.lang index d4d0feb7315..6bd24295b2d 100644 --- a/htdocs/langs/eu_ES/companies.lang +++ b/htdocs/langs/eu_ES/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Kontaktua sortu AddContactAddress=Kontua/helbidea sortu EditContact=Kontaktua editatu diff --git a/htdocs/langs/eu_ES/other.lang b/htdocs/langs/eu_ES/other.lang index 2a38543e942..aa113e36f92 100644 --- a/htdocs/langs/eu_ES/other.lang +++ b/htdocs/langs/eu_ES/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/eu_ES/website.lang b/htdocs/langs/eu_ES/website.lang index 4771a5d59d2..df217e77646 100644 --- a/htdocs/langs/eu_ES/website.lang +++ b/htdocs/langs/eu_ES/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/fa_IR/accountancy.lang b/htdocs/langs/fa_IR/accountancy.lang index a95ab2d55ed..5b8e93fda67 100644 --- a/htdocs/langs/fa_IR/accountancy.lang +++ b/htdocs/langs/fa_IR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=نتیجۀ حساب حساب‌داری (ضرر) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=دفتر خاتمه ACCOUNTING_ACCOUNT_TRANSFER_CASH=حساب‌حسابداری انتقال پول بین‌بانکی +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=حساب حساب‌داری انتظار DONATION_ACCOUNTINGACCOUNT=حساب حساب‌داری ثبت کمک و اعانه diff --git a/htdocs/langs/fa_IR/admin.lang b/htdocs/langs/fa_IR/admin.lang index 14062d810cf..a142ce5e7c8 100644 --- a/htdocs/langs/fa_IR/admin.lang +++ b/htdocs/langs/fa_IR/admin.lang @@ -149,7 +149,7 @@ SystemToolsAreaDesc=این واحد دربردارندۀ عوامل مربوط Purge=پاک‌کردن PurgeAreaDesc=این صفحه به شما امکان حذف همۀ فایل‌های تولید شده و ذخیره شده با Dolibarr  را می‌دهد (فایل‌های موقت یا همۀ فایلهای داخل پوشۀ %s). استفاده از این قابلیت در شرایط عادی ضرورتی ندارد. این قابلیت برای کاربرانی ایجاد شده است که میزبانی وبگاه آن‌ها امکان حذف فایل‌هائی که توسط سرویس‌دهندۀ وب ایجاد شده‌اند را نداده است. PurgeDeleteLogFile=حذف فایل‌های گزارش‌کار، شامل تعریف %s برای واحد گزارش‌کار سامانه Syslog (خطری برای از دست دادن داده‌ها نیست) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=حذف همۀ فایل‌های موقت (خطری برای از دست دادن داده نیست). توجه: حذف تها در صورتی انجام خواهد شد که پوشۀ موقتی حداقل 24 ساعت قبل ساخته شده باشد. PurgeDeleteTemporaryFilesShort=حذف فایل‌های موقتی PurgeDeleteAllFilesInDocumentsDir=حذف همۀ فایل‌های موجود در پوشۀ: %s.
این باعث حذف همۀ مستنداتی که به عناصر مربوطند ( اشخاص سوم، صورت‌حساب و غیره ...)، فایل‌هائی که به واحد ECM ارسال شده‌اند، نسخه‌برداری‌های پشتیبان بانک‌داده و فایل‌های موقت خواهد شد. PurgeRunNow=شروع پاک‌سازی @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=کادرهای تائید از جدول ExtrafieldLink=پیوند به یک شیء ComputedFormula=بخش محاسبه شده ComputedFormulaDesc=شما در این‌جا می‌توانید فرمولی را با استفاده از مشخصات دیگر یک شیء یا یک کدنوشتۀ PHP وارد نمائید تا یک مقدار پویای محاسبه شده دریافت کنید. شما همچنین می‌توانید هر فرمول سازگار با PHP را به همراه عمل‌گر شرطی "?" وارد نمائید که با یک شیء سراسری دنبال می‌شود: $db, $conf, $langs, $mysoc, $user, $object.
هشدار: تنها برخی از مشخصه‌های $object در دسترس هستند. در صورتی که نیاز به مشخصه‌ای دارید که بارگذاری نشده، همانند مثال دوم خودتان باید آن شیء را واکشی نمائید.
استفاده از یک بخش محاسبه‌شده به آن معناست که شما قادر نخواهید باد که از رابط خود مقداری وارد نمائید. همچنین، در صورتی که یک خطای نوشتاری وجود داشته باشد، فرمول هیچ چیز ارائه نخواهد داد.

مثال فرمول:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

مثال بارگذاری مجدد شیئ
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

مثال دیگر فرمول برای اازام به بارگذاری شیء و والد آن:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=بخش محاسبه‌شدۀ فروشگاه +ComputedpersistentDesc=بخش‌های محاسبه‌شدۀ اضافی در پایگاه داده ذخیره خواهند شد، به‌هرحال مقدار تنها در زمانی دوباره محاسبه خواهد شد که شیء این بخش تغییر کند. در صورتی که بخش محاسبه‌شده به سایر اشیاء یا داده‌های سراسری وابسته باشد، این مقدار ممکن است خطا باشد!! ExtrafieldParamHelpPassword=خالی رها کردن این بخش به معنای این است که مقدار بدون حفاظت ذخیره خواهد شد (بخش مربوطه باید با یک ستاره روی صفحه پنهان باشد).
'auto' را برای استفاده از قواعد حفاظت برای ذخیرۀ گذرواژه در بانک‌داده ذخیره کنید (مقدار خوانده شده کدبندی شده است و امکان خواندن مقدار اصلی دیگر وجود نخواهد داشت) ExtrafieldParamHelpselect=فهرست مقادیر باید به صورت سطور به شکل key,value باشد (که key نمی‌تواند برابر با 0 باشد.)

برای مثال:
1,value1
2,value2
code3,value3
...

برای برخورداری از فهرستی وابسته به فهرست دیگری از مشخصات تکمیلی:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

برای برخورداری از یک فهرست وابسته به یک فهرست دیگر:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=فهرست مقادیر باید سطوری به شکل key,value باشد که (که key نمی‌تواند برابر با 0 باشد)

برای مثال:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=فهرست مقادیر باید سطوری به شکل ExtrafieldParamHelpsellist=فهرست مقادیری که از یک جدول گرفته می‌شود
روش درج: table_name:label_field:id_field::filter
مثال: c_typent:libelle:id::filter

- idfilter برای primary int key ضروری است
- فیلتر می‌تواند یک آزمایش ساده باشد (مثلا active=1) تا صرفا مقدار فعال را نمایش دهد.
شما همچنین در فیلتر می‌توانید از $ID$ استفاده کنید که برابر با شناسۀ کنونی شیء کنونی است
برای انجام یک جستار SELECT در فیلتر از $SEL$ استفاده نمائید.
در صورتی که بخواهید بخش‌های دیگر - extrafields را فیلتر کنید از این روش استفاده کنید extra.fieldcode=... (که fieldcode درآن کد مربوط به آن extrafield است)

برای دریافت یک فهرست بسته به یک فهرست تکمیلی از مشخصه‌های دیگر:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

برای دریافت فهرستی که مبتنی بر فهرستی دیگر است:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=فهرست مقادیری که از یک جدول گرفته می‌شود
روش درج: table_name:label_field:id_field::filter
مثال: c_typent:libelle:id::filter

filter می‌تواند یک آزمایش ساده باشد (مثال active=1) برای نمایش مقدار فعال
شما همچنین می‌توانید از $ID$ در فیلتر استفاده نمائید که شناسۀ کنونی شیء فعلی است
برای انجام جستار SELECTدر فیلتر از $SEL$
اگر بخواهید از extrafields در فیلتر استفاده نمائید، از روش‌درج extra.fieldcode=... استفاده نمائید، (که کد فیلتر، همان کد extrafiled است)

باری دریافت ک فهرست وابسته به یک فهرست تکمیلی از مشخصه‌ها دیگر:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

برای دریافت یک فهرست وابسته به یک فهرست دیگر:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=مؤلفه‌ها باید به شکل ObjectName:Classpath باشد،
روش درج: ObjectName:Classpath
مثال‌ها:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=برای جداکنندۀ ساده خالی بگذارید
برای یک جداکنندۀ نزولی به 1 تنظیم کنید (به طور پیش‌فرض باز است)
برای یک جداکنندۀ نزولی به 2 تنظیم کنید ( به طور پیش‌فرض نزول کرده است) LibraryToBuildPDF=کتابخانۀ قابل استفاده برای تولید PDF LocalTaxDesc=برخی کشورها دو یا سه سطر مالیات در خصوص هر سطر از صورت‌حساب دارند. در این حالت، نوع مالیات دوم و سوم و نرخ آن را تعیین کنید. انواع قابل درج عبارتند از:
1: مالیات محلی به محصولات و خدمات بدون مالیات‌برارزش‌افزوده اختصاص داده می‌شود (مالیات محلی بر مبنای مبلغ بدون مالیات بر ارزش افزوده محاسبه می‌شود)
2: مالیات محلی بر محصولات و خدمات به‌همراه مالیات‌بر‌ارزش‌افزوده (مالیات‌محلی بر مبنای مبلغ + مالیات اصلی محاسبه می‌شود)
3: مالیات محلی بر محصولات بدون مالیات بر ارزش افزوده (مالیات محلی بر اساس مبلع بدون مالیات حساب می‌شود)
4: مالیت محلی بر محصولات به همراه مالیات بر ارزش افزوده محاسبه می‌شود (مالیات محلی بر اساس مبلغ + مالیات بر ارزش افزوده اصلی محاسبه می‌شود)
5: مالیات محلی بر بر خدمات بدون مالیات بر ارزش افزوده محاسبه می‌شود (مالیات محلی بر اساس مبلغ بدون مالیات بر ارزش افزوده)
6: مالیات محلی بر خدمات و شامل مالیات بر ارزش افزوده ( مالیات محلی بر اساس مبلغ + مالیات بر ارزش افزوده) SMS=پیامک @@ -804,7 +807,7 @@ Permission401=ملاحظۀ تخفیف‌ها Permission402=ساخت/ویرایش تخفیف‌ها Permission403=اعتباردهی تخفیف‌ها Permission404=حذف تخفیف‌ها -Permission430=Use Debug Bar +Permission430=استفاده از نوار اشکال‌یابی Permission511=ملاحظۀ پرداخت حقوق‌ها Permission512=ساخت/ویرایش پرداخت حقوق Permission514=حذف پرداخت حقوق @@ -819,9 +822,9 @@ Permission532=ایجاد/ویرایش خدمات Permission534=حذف خدمات Permission536=مشاهده/مدیریت خدمات پنهان Permission538=صادرکردن خدمات -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=خواندن صورت‌حساب‌های مواد +Permission651=ایجاد/به‌هنگام سازی صورت‌حساب‌های موا +Permission652=حذف صورت‌حساب‌های مواد Permission701=ملاحظۀ کمک‌های‌مالی Permission702=ایجاد/ویرایش کمک‌های‌مالی Permission703=حذف کمک‌های‌مالی @@ -841,12 +844,12 @@ Permission1101=ملاحظۀ سفارشات تحویل Permission1102=ساخت/ویرایش سفارشات تحویل Permission1104=اعتباردهی سفارشات تحویل Permission1109=حذف سفارشات تحویل -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=خواندن پیشنهادهای تامین کنندگان +Permission1122=ساخت/ویرایش پیشنهاد‌های تامین‌کنندگان +Permission1123=تائید اعتبار پیشنهادهای تامین‌کنندگان +Permission1124=ارسال پیشنهادهای تامین کنندگان +Permission1125=حذف پیشنهادهای تامین‌کنندگان +Permission1126=بستن درخواست قیمت تامین کنندگان Permission1181=ملاحظۀ تامین‌کنندگان Permission1182=خواندن سفارشات خرید Permission1183=ساخت/ویرایش سفارشات خرید @@ -882,15 +885,15 @@ Permission2503=تسلیم یا حذف مستندات Permission2515=تنظیم پوشه‌های مستندات Permission2801=استفاده از متقاضی FTP در حالت خواندنی (منحصر به مرور و دریافت) Permission2802=استفاده از متقاضی FTP در حالت نوشتنی (حذف یا ارسال فایل) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=خواندن روی‌دادهای بایگانی شده و اثرانگشت‌ها +Permission4001=نمایش کارمندان +Permission4002=ساخت کارمند +Permission4003=حذف کارمند +Permission4004=صادرکردن کارمندان +Permission10001=خواندن محتوای وبگاه +Permission10002=ساخت/ویرایش محتوای وبگاه (محتوای html و javascript ) +Permission10003=ساخت/ویرایش محتوای وبگاه (کد پویای PHP). خطرناک، تنها باید تحت نظر توسعه‌دهندگان مشخص و محدود باشد. +Permission10005=حذف محتوای وبگاه Permission20001=ملاحظۀ درخواست‌های مرخصی (درخواست‌های مرخصی افراد تحت مدیریت شما) Permission20002=ساخت/ویرایش درخواست‌های مرخصی شما (شما و افراد تحت نظر شما) Permission20003=حذف درخواست‌های مرخصی @@ -904,19 +907,19 @@ Permission23004=اجرای وظایف زمان‌بندی‌شده Permission50101=استفاده از صندوق POS Permission50201=ملاحظۀ تراکنش‌ها Permission50202=واردکردن تراکنش‌ها -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=بندکردن محصولات و صورت‌حساب‌های با حساب‌های حساب‌داری +Permission50411=خواندن عملیات موجود در دفترکل +Permission50412=نوشتن/ویرایش عملیات در دفترکل +Permission50414=حذف عملیات از دفترکل +Permission50415=حذف همۀ عملیات در یک سال یا یک دفترروزنامه +Permission50418=صادرکردن عمیات یک دفترکل +Permission50420=گزارش و صادرکردن گزارشات ( گردش مالی، مانده، دفترروزنامه، دفترکل) +Permission50430=تعریف و بستن بازۀ سال‌مالی +Permission50440=مدیریت نمودار حساب‌ها، برپاسازی حساب‌داری +Permission51001=خواندن دارائی‌ها +Permission51002=ساخت/به‌روزرسانی دارائی‌ها +Permission51003=حذف دارائی‌ها +Permission51005=برپاسازی انواع دارائی‌ها Permission54001=چاپ Permission55001=ملاحظۀ نظرسنجی‌ها Permission55002=ساخت/ویرایش نظرسنجی‌ها @@ -1110,7 +1113,7 @@ AreaForAdminOnly=مقادیر برپاسازی تنها توسط کاربرا SystemInfoDesc=اطلاعات سامانه، اطلاعاتی فنی است که در حالت فقط خواندنی است و تنها برای مدیران قابل نمایش است. SystemAreaForAdminOnly=این ناحیه تنها برای کاربران مدیر در دسترس است. مجوزهای کاربران Dolibarr  این محدودیت‌ها را تغییر نمی‌دهد. CompanyFundationDesc=ویرایش اطلاعات مربوط به شرکت/موجودیت. بر روی "%s" یا "%s" در انتهای صفحه کلیک نمائید. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=در صورتی‌که شما یک حساب‌دار/دفتردار بیرونی دارید، می‌توانید اطلاعات وی را این‌جا ویرایش نمائید AccountantFileNumber=کد حساب‌دار DisplayDesc=مقادیری که بر شکل و رفتار Dolibarr اثرگذارند از این‌جا قابل تغییرند. AvailableModules=برنامه‌ها/واحد‌های دردسترس @@ -1923,5 +1926,5 @@ IFTTTDesc=این واحد برای راه‌انداختن رخدادها بر I UrlForIFTTT=نشانی اینترنتی نهائی برای IFTTT YouWillFindItOnYourIFTTTAccount=شما آن را بر حساب IFTTT خود پیدا خواهید کرد EndPointFor=نقطۀ آخر برای %s : %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=حذف جمع‌آورندۀ رایانامه +ConfirmDeleteEmailCollector=آیا مطمئن هستید می‌خواهید این جمع‌آورندۀ رایانامه را حذف کنید؟ diff --git a/htdocs/langs/fa_IR/agenda.lang b/htdocs/langs/fa_IR/agenda.lang index 73f931ebe52..e1f74dbf8c9 100644 --- a/htdocs/langs/fa_IR/agenda.lang +++ b/htdocs/langs/fa_IR/agenda.lang @@ -38,7 +38,7 @@ ActionsEvents=روی‌دادهائی که Dolibarr برای آن‌ها در ص EventRemindersByEmailNotEnabled=یادآورنده‌های روی‌داد توسط رایانامه در بخش برپاسازی واحد %s فعال نشده اند. ##### Agenda event labels ##### NewCompanyToDolibarr=شخص‌سوم %s ساخته شد -COMPANY_DELETEInDolibarr=Third party %s deleted +COMPANY_DELETEInDolibarr=طرف‌سوم %s حذف شد ContractValidatedInDolibarr=قرارداد %s تائید شد CONTRACT_DELETEInDolibarr=قرارداد %s حذف شد PropalClosedSignedInDolibarr=پیشنهاد %s امضا شد diff --git a/htdocs/langs/fa_IR/bills.lang b/htdocs/langs/fa_IR/bills.lang index 567e78c4bb7..42ecb831c69 100644 --- a/htdocs/langs/fa_IR/bills.lang +++ b/htdocs/langs/fa_IR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=پیش‌صورت‌حساب InvoiceProFormaDesc=پیش‌صورت‌حساب تصویری درست از یک صورت‌حساب است اما ارزش حساب‌داری ندارد. InvoiceReplacement=صورت‌حساب تعویض InvoiceReplacementAsk=صورت‌حساب تعویض برای صورت‌حساب -InvoiceReplacementDesc=صورت‌حساب تعویض برای لغو یا جایگزینی کامل یک صورت‌حساب در هنگامی که هیچ مبلغی هنوز دریافت نشده است.

نکته: تنها صورت‌حساب‌های پرداخت‌نشده قابل تعویض هستند. در صورتی که صورت‌حسابی که تعویض می‌کنید هنوز بسته نشده، به طور خودکار به صورت "معلق" بسته خواهد شد. +InvoiceReplacementDesc=فاکتور تعویض در هنگام جایگزینی یک صورت‌حساب که هرگز برای آن پرداختی وجود ندارد استفاده می‌شود.

توجه: تنها صورت‌حساب‌های بدون پرداخت قابلیت جایگزین شدن دارند. در صورتی که صورت‌حسابی که جایگزین می‌کنید هنوز بسته نشده باشد، به طور خودکار به شکل "معلق" بسته خواهد شد. InvoiceAvoir=یادداشت اعتباری InvoiceAvoirAsk=یادداشت اعتباری برای اصلاح صورت‌حساب InvoiceAvoirDesc=یادداشت اعتباری یک صورت‌حساب منفی است که این واقعیت را اصلاح می‌کند که یک صورت‌حساب مبلغی متفاوت از مبلغی که واقعا پرداخت شده نشان می‌دهد (مثلا مشتری به اشتباه مبلغی بیش از مبلغ صورت‌حساب پرداخت کرده، یا این‌که مبلغ کامل را به دلیل بازگرداندن بعضی از کالاها پرداخت نخواهد کرد). @@ -66,10 +66,10 @@ paymentInInvoiceCurrency=به واحد‌پولی صورت‌حساب PaidBack=پرداخت برگردانده شد DeletePayment=حذف پرداخت ConfirmDeletePayment=آیا مطمئنید که می‌خواهید این پرداخت را حذف کنید؟ -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? -ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? -ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. +ConfirmConvertToReduc=آیا می‌خواهید این %s را به یک تخفیفت مطلق تبدیل کنید؟ +ConfirmConvertToReduc2=این مبلغ در میان همۀ تخفیف‌ها ذخیره خواهد شد و می‌تواند به‌عنوان یک صورت‌حساب فعلی یا آینده برای این مشتری مورد استفاده قرار گیرد. +ConfirmConvertToReducSupplier=آیا می‌خواهید این %s را به یک تخفیفت مطلق تبدیل کنید؟ +ConfirmConvertToReducSupplier2=این مبلغ در میان همۀ تخفیف‌ها ذخیره خواهد شد و می‌تواند به‌عنوان یک صورت‌حساب فعلی یا آینده برای این فروشنده مورد استفاده قرار گیرد. SupplierPayments=پرداخت‌های فروشندگان ReceivedPayments=پول‌های دریافتی ReceivedCustomersPayments=پول‌های دریافت شده از مشتریان diff --git a/htdocs/langs/fa_IR/companies.lang b/htdocs/langs/fa_IR/companies.lang index a400f0772e7..379ad776c06 100644 --- a/htdocs/langs/fa_IR/companies.lang +++ b/htdocs/langs/fa_IR/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=تخفیف مطلق فروشندگان(وارد SupplierAbsoluteDiscountMy=تخفیف مطلق فروشندگان(واردشدۀ خودشما) DiscountNone=هیچ‌یک Vendor=فروشنده +Supplier=فروشنده AddContact=ساخت طرف‌تماس AddContactAddress=ساخت طرف‌تماس/نشانی EditContact=ویرایش طرف‌تماس diff --git a/htdocs/langs/fa_IR/main.lang b/htdocs/langs/fa_IR/main.lang index d68b3a85323..e5d0d766ec5 100644 --- a/htdocs/langs/fa_IR/main.lang +++ b/htdocs/langs/fa_IR/main.lang @@ -842,11 +842,11 @@ Exports=صادرات ExportFilteredList=فهرست گزینشی صادرا ExportList=فهرست صادرات ExportOptions=گزینه‌های صادرکردن -IncludeDocsAlreadyExported=Include docs already exported -ExportOfPiecesAlreadyExportedIsEnable=Export of pieces already exported is enable -ExportOfPiecesAlreadyExportedIsDisable=Export of pieces already exported is disable -AllExportedMovementsWereRecordedAsExported=All exported movements were recorded as exported -NotAllExportedMovementsCouldBeRecordedAsExported=Not all exported movements could be recorded as exported +IncludeDocsAlreadyExported=دربرگرفتن مستنداتی که قبلا صادر شده‌اند +ExportOfPiecesAlreadyExportedIsEnable=دربرگیری بخش‌هائی که قبلا صادر شده‌اند فعال است +ExportOfPiecesAlreadyExportedIsDisable=دربرگیری بخش‌هائی که قبلا صادر شده‌اند غیر فعال است +AllExportedMovementsWereRecordedAsExported=همۀ جابه‌جائی‌های صادر شده به عنوان صادرشده ثبت شد +NotAllExportedMovementsCouldBeRecordedAsExported=همۀ جابه‌جائی‌های صادرشده نمی‌توانند به‌عنوان صادرشده ثبت شوند Miscellaneous=متفرقه Calendar=تقویم GroupBy=گروه‌بندی توسط... @@ -978,4 +978,4 @@ SeePrivateNote=ملاحظۀ یادداشت خصوصی PaymentInformation=اطلاعات پرداخت ValidFrom=معتبر از ValidUntil=معتبر تا -NoRecordedUsers=No users +NoRecordedUsers=کاربری نیست diff --git a/htdocs/langs/fa_IR/other.lang b/htdocs/langs/fa_IR/other.lang index d7787db0f50..26646bd3e4c 100644 --- a/htdocs/langs/fa_IR/other.lang +++ b/htdocs/langs/fa_IR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=مداخله٪ s را دارای اعتبار بوده است. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/fa_IR/website.lang b/htdocs/langs/fa_IR/website.lang index 8720bfb102b..e8d9603803b 100644 --- a/htdocs/langs/fa_IR/website.lang +++ b/htdocs/langs/fa_IR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/fi_FI/accountancy.lang b/htdocs/langs/fi_FI/accountancy.lang index a855b64b9b3..96ae44884fd 100644 --- a/htdocs/langs/fi_FI/accountancy.lang +++ b/htdocs/langs/fi_FI/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/fi_FI/admin.lang b/htdocs/langs/fi_FI/admin.lang index 76c3d67dfc2..bcf1f3161f8 100644 --- a/htdocs/langs/fi_FI/admin.lang +++ b/htdocs/langs/fi_FI/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Käytettävä kirjasto PDF:n luomiseen LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=Tekstiviesti @@ -819,9 +822,9 @@ Permission532=Luoda / muuttaa palvelut Permission534=Poista palvelut Permission536=Katso / hoitaa piilotettu palvelut Permission538=Vienti palvelut -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Lue lahjoitukset Permission702=Luoda / muuttaa lahjoitusten Permission703=Poista lahjoitukset @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/fi_FI/bills.lang b/htdocs/langs/fi_FI/bills.lang index c44f6ba2298..3528ca862ab 100644 --- a/htdocs/langs/fi_FI/bills.lang +++ b/htdocs/langs/fi_FI/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma lasku InvoiceProFormaDesc=Proforma lasku on todellinen lasku, mutta sillä ei ole kirjanpidollista arvoa. InvoiceReplacement=Korvaava lasku InvoiceReplacementAsk=Laskun korvaava lasku -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Menoilmoitus InvoiceAvoirAsk=Menoilmoitus korjata laskun InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/fi_FI/companies.lang b/htdocs/langs/fi_FI/companies.lang index 2702ff40a84..cf6410370c7 100644 --- a/htdocs/langs/fi_FI/companies.lang +++ b/htdocs/langs/fi_FI/companies.lang @@ -28,7 +28,7 @@ AliasNames=Lisänimi (tuotenimi, brändi, ...) AliasNameShort=Alias Name Companies=Yritykset CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Ei mitään Vendor=Vendor +Supplier=Vendor AddContact=Luo yhteystiedot AddContactAddress=Luo yhteystiedot/osoite EditContact=Muokkaa yhteystiedot / osoite diff --git a/htdocs/langs/fi_FI/other.lang b/htdocs/langs/fi_FI/other.lang index 14d62be772a..eb8b1a67c65 100644 --- a/htdocs/langs/fi_FI/other.lang +++ b/htdocs/langs/fi_FI/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Väliintulo %s validoitava EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/fi_FI/website.lang b/htdocs/langs/fi_FI/website.lang index b84581dc8e9..805210f3811 100644 --- a/htdocs/langs/fi_FI/website.lang +++ b/htdocs/langs/fi_FI/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/fr_BE/accountancy.lang b/htdocs/langs/fr_BE/accountancy.lang index 008ccdab2d7..30535d01188 100644 --- a/htdocs/langs/fr_BE/accountancy.lang +++ b/htdocs/langs/fr_BE/accountancy.lang @@ -4,8 +4,7 @@ Processing=Exécution Lineofinvoice=Lignes de facture Doctype=Type de document ErrorDebitCredit=Débit et crédit ne peuvent pas être non-nuls en même temps -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalMarge=Marge de ventes totale Selectmodelcsv=Sélectionnez un modèle d'export Modelcsv_normal=Export classique -Modelcsv_FEC=Export FEC (Art. L47 A) +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. diff --git a/htdocs/langs/fr_BE/admin.lang b/htdocs/langs/fr_BE/admin.lang index 45352a47b83..3090455190b 100644 --- a/htdocs/langs/fr_BE/admin.lang +++ b/htdocs/langs/fr_BE/admin.lang @@ -17,4 +17,6 @@ IfModuleEnabled=Note: oui ne fonctionne que si le module %s est activé Module20Name=Propales Module30Name=Factures Target=Objectif +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/fr_CA/accountancy.lang b/htdocs/langs/fr_CA/accountancy.lang index 64a7ba02334..f7069e0d730 100644 --- a/htdocs/langs/fr_CA/accountancy.lang +++ b/htdocs/langs/fr_CA/accountancy.lang @@ -81,7 +81,6 @@ FeeAccountNotDefined=Compte pour frais non définis BankAccountNotDefined=Compte pour banque non défini NumMvts=Nombre de transactions AddCompteFromBK=Ajouter des comptes comptables au groupe -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalVente=Chiffre d'affaires total avant taxes DescVentilCustomer=Consultez ici la liste des lignes de facture client liées (ou non) à un compte comptable produit DescVentilDoneCustomer=Consultez ici la liste des lignes clients des factures et leur compte comptable produit @@ -100,10 +99,10 @@ AccountingJournals=Revues comptables ShowAccoutingJournal=Afficher le journal comptable AccountingJournalType9=A-nouveau ErrorAccountingJournalIsAlreadyUse=Ce journal est déjà utilisé -Modelcsv_FEC=Export FEC (Art. L47 A) ChartofaccountsId=Carte comptable Id InitAccountancy=Compabilité initiale DefaultBindingDesc=Cette page peut être utilisée pour définir un compte par défaut à utiliser pour lier l'historique des transactions sur les salaires de paiement, le don, les taxes et la TVA lorsque aucun compte comptable spécifique n'a été défini. +DefaultClosureDesc=This page can be used to set parameters to use to enclose a balance sheet. OptionModeProductSell=Mode de ventes OptionModeProductBuy=Mode d'achats OptionModeProductSellDesc=Afficher tous les produits avec compte comptable pour les ventes. diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang index 142fd0cec93..fa8441ff760 100644 --- a/htdocs/langs/fr_CA/admin.lang +++ b/htdocs/langs/fr_CA/admin.lang @@ -24,7 +24,6 @@ AllWidgetsWereEnabled=Tous les widgets disponibles sont activés MenusDesc=Les gestionnaires de menu définissent le contenu des deux barres de menus (horizontales et verticales). MenusEditorDesc=L'éditeur de menu vous permet de définir des entrées de menu personnalisées. Utilisez-le soigneusement pour éviter l'instabilité et les entrées de menu inaccessibles en permanence.
Certains modules ajoutent des entrées de menu (dans le menu principal principalement). Si vous supprimez certaines de ces entrées par erreur, vous pouvez les restaurer en désactivant et en réactivant le module. PurgeDeleteLogFile=Supprimer les fichiers journaux, y compris ceux%s définis pour le module Syslog (pas de risque de perte de données) -PurgeDeleteTemporaryFiles=Supprimez tous les fichiers temporaires (pas de risque de perte de données) PurgeDeleteTemporaryFilesShort=Supprimer les fichiers temporaires PurgeNothingToDelete=Pas de répertoire ou de fichiers à supprimer. PurgeNDirectoriesFailed=Impossible de supprimer %s fichiers ou les répertoires. @@ -200,6 +199,8 @@ ConfirmDeleteFiscalYear=Êtes-vous sûr de supprimer cette période comptable? ShowFiscalYear=Afficher la période comptable SalariesSetup=Configuration du module salariés ListOfNotificationsPerUser=Liste des notifications par utilisateur * +ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** +ListOfFixedNotifications=List of Fixed Notifications ConfFileMustContainCustom=L'installation ou la construction d'un module externe à partir de l'application doit sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit traité par Dolibarr, vous devez configurer votre conf / conf.php pour ajouter les 2 lignes de directive:
$ dolibarr_main_url_root_alt = '/ custom';
$ dolibarr_main_document_root_alt = '%s / custom'; HighlightLinesOnMouseHover=Mettez en surbrillance les lignes de table lorsque déplacement de la souris passe au-dessus PressF5AfterChangingThis=Appuyez sur CTRL + F5 sur le clavier ou effacez votre cache de navigateur après avoir changé cette valeur pour l'avoir efficace diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang index ae89a4e57ae..de6f26337d7 100644 --- a/htdocs/langs/fr_FR/accountancy.lang +++ b/htdocs/langs/fr_FR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Compte de résultat (perte) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal de fermeture ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte comptable de transfert transitoire bancaire +TransitionalAccount=Compte transitoire de virement bancaire ACCOUNTING_ACCOUNT_SUSPENSE=Compte comptable d'attente DONATION_ACCOUNTINGACCOUNT=Compte comptable pour l'enregistrement des dons @@ -216,7 +217,7 @@ DescThirdPartyReport=Consultez ici la liste des tiers clients et fournisseurs et ListAccounts=Liste des comptes comptables UnknownAccountForThirdparty=Compte de tiers inconnu. %s sera utilisé UnknownAccountForThirdpartyBlocking=Compte de tiers inconnu. Erreur bloquante. -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Code comptable du tiers non défini ou tiers inconnu. On utilisera %s. ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Compte tiers non défini ou inconnu. Erreur bloquante. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Compte tiers inconnu et compte d'attente non défini. Erreur blocante. PaymentsNotLinkedToProduct=Paiement non lié à un produit / service @@ -317,9 +318,9 @@ WithoutValidAccount=Sans compte dédié valide WithValidAccount=Avec un compte dédié valide ValueNotIntoChartOfAccount=Cette valeur de compte comptable n'existe pas dans le plan comptable AccountRemovedFromGroup=Compte supprimé du groupe -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Vente locale +SaleExport=Vente export +SaleEEC=Vente dans la CEE ## Dictionary Range=Plage de comptes @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Lignes non encore liées, utilisez le menu $db, $conf, $langs, $mysoc, $user, $object
.
ATTENTION : Seulement quelques propriétés de l'objet $object pourraient être disponibles. Si vous avez besoin de propriétés non chargées, créez vous même une instance de l'objet dans votre formule, comme dans le deuxième exemple.
Utiliser un champs calculé signifie que vous ne pouvez pas entrer vous même toute valeur à partir de l'interface. Aussi, s'il y a une erreur de syntaxe, la formule pourrait ne rien retourner.

Exemple de formule:
$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Exemple pour recharger l'objet:
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'

Un autre exemple de formule pour forcer le rechargement d'un objet et de son objet parent:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Objet parent projet non trouvé' +Computedpersistent=Stocker le champ calculé +ComputedpersistentDesc=Les champs supplémentaires calculés seront stockés dans la base de données. Toutefois, la valeur ne sera recalculée que lorsque l'objet de ce champ sera modifié. Si le champ calculé dépend d'autres objets ou de données globales, cette valeur peut être fausse !! ExtrafieldParamHelpPassword=Laissez ce champ vide signifie que la valeur sera stockée sans cryptage (le champ doit juste être caché avec des étoiles sur l'écran).
Définissez la valeur 'auto' pour utiliser la règle de cryptage par défaut pour enregistrer le mot de passe dans la base de données (ensuite la valeur utilisée sera le hash uniquement, sans moyen de retrouver la valeur d'origine) ExtrafieldParamHelpselect=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')

par exemple :
1,valeur1
2,valeur2
3,valeur3
...

Pour afficher une liste dépendant d'une autre liste attribut complémentaire:
1, valeur1|options_code_liste_parente:clé_parente
2,valeur2|options_ode_liste_parente:clé_parente

Pour que la liste soit dépendante d'une autre liste:
1,valeur1|code_liste_parent:clef_parent
2,valeur2|code_liste_parent:clef_parent ExtrafieldParamHelpcheckbox=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')

par exemple :
1,valeur1
2,valeur2
3,valeur3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=La liste doit être de la forme clef,valeur (où la cl ExtrafieldParamHelpsellist=Les paramètres de la liste viennent d'une table
Syntax : table_name:label_field:id_field::filter
Exemple : c_typent:libelle:id::filter

-idfilter est nécessairement une clé primaire int
- filter peut être un simple test (e.g. active=1) pour seulement montrer les valeurs actives
Vous pouvez aussi utiliser $ID$ dans le filtre qui est le ID actuel de l'objet
Pour faire un SELECT dans le filtre, utilisez $SEL$
Si vous voulez filtrer sur un extrafield, utilisez la syntaxe extra.fieldcode=... (ou fieldcode est le code de l'extrafield)

Pour avoir une liste qui dépend d'un autre attribut complémentaire:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Pour avoir une liste qui dépend d'une autre liste:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=Les paramètres de la liste proviennent d'une table
:Syntaxe : nom_de_la_table:libelle_champ:id_champ::filtre
Exemple : c_typent:libelle:id::filter

le filtre peut n'est qu'un test (ex : active=1) pour n'afficher que les valeurs actives.
Vous pouvez aussi utiliser $ID$ dans les filtres pour indiquer l'ID de l'élément courant.
Pour utiliser un SELECT dans un filtre, utilisez $SEL$
Pour filtrer sur un attribut supplémentaire, utilisez la syntaxeextra.fieldcode=... (ou fieldcode est le code de l'attribut supplémentaire)

Pour afficher une liste dépendant d'un autre attribut supplémentaire :
c_typent:libelle:id:options_code_liste_parente|colonne_parente:filtre

Pour afficher une liste dépendant d'une autre liste :
c_typent:libelle:id:code_liste_parente|colonne_parente:filter ExtrafieldParamHelplink=Les paramètres doivent être ObjectName:Classpath
Syntaxe: ObjectName:Classpath
Exemples:
Société:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Garder vide pour un simple séparateur
Définissez-le sur 1 pour un séparateur accordéon (ouvert par défaut)
Définissez-le sur 2 pour un séparateur accordéon (réduit par défaut) LibraryToBuildPDF=Bibliothèque utilisée pour la génération des PDF LocalTaxDesc=Certains pays appliquent 2 voire 3 taux sur chaque ligne de facture. Si c'est le cas, choisissez le type du deuxième et troisième taux et sa valeur. Les types possibles sont:
1 : taxe locale sur les produits et services hors tva (la taxe locale est calculée sur le montant hors taxe)
2 : taxe locale sur les produits et services avant tva (la taxe locale est calculée sur le montant + tva)
3 : taxe locale uniquement sur les produits hors tva (la taxe locale est calculée sur le montant hors taxe)
4 : taxe locale uniquement sur les produits avant tva (la taxe locale est calculée sur le montant + tva)
5 : taxe locale uniquement sur les services hors tva (la taxe locale est calculée sur le montant hors taxe)
6 : taxe locale uniquement sur les service avant tva (la taxe locale est calculée sur le montant + tva) SMS=SMS @@ -804,7 +807,7 @@ Permission401=Consulter les avoirs Permission402=Créer/modifier les avoirs Permission403=Valider les avoirs Permission404=Supprimer les avoirs -Permission430=Use Debug Bar +Permission430=Utilisez la barre de débogage Permission511=Lire les règlements de salaires Permission512=Créer/modifier les règlements de salaires Permission514=Supprimer les paiements de salaires @@ -819,9 +822,9 @@ Permission532=Créer/modifier les services Permission534=Supprimer les services Permission536=Voir/gérer les services cachés Permission538=Exporter les services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Lire les Nomenclatures (BOM) +Permission651=Créer/modifier les Nomenclatures (BOM) +Permission652=Supprimer les Nomenclatures (BOM) Permission701=Consulter les dons Permission702=Créer/modifier les dons Permission703=Supprimer les dons @@ -841,12 +844,12 @@ Permission1101=Consulter les bons de livraison Permission1102=Créer/modifier les bons de livraison Permission1104=Valider les bons de livraison Permission1109=Supprimer les bons de livraison -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Lire les propositions fournisseurs +Permission1122=Créer/modifier les demandes de prix fournisseurs +Permission1123=Valider les demandes de prix fournisseurs +Permission1124=Envoyer les demandes de prix fournisseurs +Permission1125=Effacer les demandes de prix de fournisseurs +Permission1126=Fermer les demandes de prix fournisseurs Permission1181=Consulter les fournisseurs Permission1182=Consulter les commandes fournisseurs Permission1183=Créer/modifier les commandes fournisseurs @@ -882,15 +885,15 @@ Permission2503=Soumettre ou supprimer des documents Permission2515=Administrer les rubriques de documents Permission2801=Utiliser un client FTP en mode lecture (parcours et téléchargement de fichiers) Permission2802=Utiliser un client FTP en mode écriture (suppression et envoi de fichiers) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Lire les événements archivés et leurs empreintes +Permission4001=Voir les employés +Permission4002=Créer/modifier les employés +Permission4003=Supprimer les employés +Permission4004=Exporter les employés +Permission10001=Lire le contenu du site +Permission10002=Créer/modifier le contenu du site Web (contenu HTML et JavaScript) +Permission10003=Créer/modifier le contenu du site Web (code php dynamique). Dangereux, doit être réservé à un nombre restreint de développeurs. +Permission10005=Supprimer du contenu de site web Permission20001=Lire les demandes de congé (les vôtres et celle de vos subordonnés) Permission20002=Créer/modifier vos demandes de congé (les vôtres et celle de vos subordonnés) Permission20003=Supprimer les demandes de congé @@ -904,19 +907,19 @@ Permission23004=Exécuter travail planifié Permission50101=Utiliser le point de vente Permission50201=Consulter les transactions Permission50202=Importer les transactions -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Lier les produits et factures avec des comptes comptables +Permission50411=Lire les opérations du Grand livre +Permission50412=Créer/modifier des opérations dans le Grand livre +Permission50414=Supprimer les opérations dans le Grand livre +Permission50415=Supprimer toutes les opérations par année ou journal dans le Grand livre +Permission50418=Exporter les opérations dans le Grand livre +Permission50420=Consulter les rapports et exports de rapports (chiffre d'affaires, solde, journaux, grand livre) +Permission50430=Définir et clôturer une période fiscale +Permission50440=Gérer le plan comptable, configurer la comptabilité +Permission51001=Lire les actifs +Permission51002=Créer/Mettre à jour des actifs +Permission51003=Supprimer les actifs +Permission51005=Configurer les types d'actif Permission54001=Imprimer Permission55001=Lire sondages Permission55002=Créer/modifier les sondages @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Les paramètres d'installation ne peuvent être remplis que par SystemInfoDesc=Les informations systèmes sont des informations techniques diverses accessibles en lecture seule aux administrateurs uniquement. SystemAreaForAdminOnly=Cet espace n'est accessible qu'aux utilisateurs de type administrateur. Aucune permission Dolibarr ne permet d'étendre le cercle des utilisateurs autorisés à cet espace. CompanyFundationDesc=Éditez sur cette page toutes les informations connues de la société ou de l'association que vous souhaitez gérer. Pour cela, cliquez sur les boutons "%s" ou "%s" en bas de page. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Si vous avez un comptable externe, vous pouvez saisir ici ses informations. AccountantFileNumber=Code comptable DisplayDesc=Vous pouvez choisir ici tous les paramètres liés à l'apparence de Dolibarr AvailableModules=Modules/applications installés @@ -1923,5 +1926,5 @@ IFTTTDesc=Ce module est conçu pour déclencher des événements sur IFTTT et/ou UrlForIFTTT=URL endpoint pour IFTTT YouWillFindItOnYourIFTTTAccount=Vous le trouverez sur votre compte IFTTT EndPointFor=Endpoint pour %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Supprimer le collecteur d'email +ConfirmDeleteEmailCollector=Êtes-vous sûr de vouloir supprimer ce collecteur d'email ? diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index 063b1056884..41f5aca717c 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Facture proforma InvoiceProFormaDesc=La facture proforma est une image de facture définitive mais qui n'a aucune valeur comptable. InvoiceReplacement=Facture de remplacement InvoiceReplacementAsk=Facture de remplacement de la facture -InvoiceReplacementDesc=La facture de remplacement sert à annuler et remplacer complètement une facture existante sur laquelle aucun paiement n'a encore eu lieu.

Rem: Seules les factures sans aucun paiement peuvent être remplacées. Si ces dernières ne sont pas fermées, elles le seront automatiquement au statut 'abandonnée'. +InvoiceReplacementDesc=La facture de remplacement sert à remplacer complètement une facture existante sur laquelle aucun paiement n'a encore eu lieu.

Rem: Seules les factures sans aucun paiement peuvent être remplacées. Si ces dernières ne sont pas encore fermées, elles le seront automatiquement au statut 'abandonnée'. InvoiceAvoir=Facture avoir InvoiceAvoirAsk=Facture avoir pour correction de la facture InvoiceAvoirDesc=La facture d'avoir est une facture négative destinée à compenser un montant de facture qui diffère du montant réellement versé (suite à un trop versé par le client par erreur ou un manque non versé par le client suite à un retour produit par exemple). diff --git a/htdocs/langs/fr_FR/blockedlog.lang b/htdocs/langs/fr_FR/blockedlog.lang index c9d0ff0b731..2588df90cee 100644 --- a/htdocs/langs/fr_FR/blockedlog.lang +++ b/htdocs/langs/fr_FR/blockedlog.lang @@ -48,7 +48,7 @@ DataOfArchivedEvent=Données complètes de l'événement archivé ImpossibleToReloadObject=Objet d'origine (type %s, id %s) non lié (voir la colonne 'Données complètes' pour obtenir les données sauvegardées non modifiables) BlockedLogAreRequiredByYourCountryLegislation=Le module Journaux inaltérables peut être requis par la législation de votre pays. La désactivation de ce module peut invalider toute transaction future au regard de la loi et de l'utilisation de logiciels légaux, car elles ne peuvent être validées par un contrôle fiscal. BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Le module Journaux inaltérables a été activé en raison de la législation de votre pays. La désactivation de ce module peut invalider toute transaction future au regard de la loi et de l’utilisation de logiciels légaux, car elles ne peuvent pas être validées par un audit fiscal. -BlockedLogDisableNotAllowedForCountry=Liste des pays où l'utilisation de ce module est obligatoire (juste pour éviter de désactiver le module par erreur. Si votre pays est dans cette liste, la désactivation du module n'est pas possible sans la modification préalable de cette liste. Notez également que l'activation/désactivation de ce module garder une trace dans le journal des logs inaltérables). +BlockedLogDisableNotAllowedForCountry=Liste des pays où l'utilisation de ce module est obligatoire (juste pour éviter de désactiver le module par erreur. Si votre pays est dans cette liste, la désactivation du module n'est pas possible sans la modification préalable de cette liste. Notez également que l'activation/désactivation de ce module garde une trace dans le journal des logs inaltérables). OnlyNonValid=Non valide TooManyRecordToScanRestrictFilters=Trop d'enregistrements à analyser / analyser. Veuillez restreindre la liste avec des filtres plus restrictifs. RestrictYearToExport=Restreindre mois / année pour exporter diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang index 52a6eb863a9..25465ebc4b2 100644 --- a/htdocs/langs/fr_FR/cashdesk.lang +++ b/htdocs/langs/fr_FR/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Nombre de terminaux TerminalSelect=Sélectionnez le terminal que vous souhaitez utiliser: POSTicket=Ticket POS -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Utiliser une interface basique pour les smartphones diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang index a25a7ffba4f..8f39b8ce7a9 100644 --- a/htdocs/langs/fr_FR/companies.lang +++ b/htdocs/langs/fr_FR/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Remises fournisseurs absolues (saisies par tous SupplierAbsoluteDiscountMy=Remises fournisseur absolues (saisies par vous-même) DiscountNone=Aucune Vendor=Fournisseur +Supplier=Fournisseur AddContact=Créer contact AddContactAddress=Créer contact/adresse EditContact=Éditer contact diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang index 1e4bb836708..178b3dd421d 100644 --- a/htdocs/langs/fr_FR/mails.lang +++ b/htdocs/langs/fr_FR/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Regroupement emails OneEmailPerRecipient=Un e-mail par destinataire (par défaut, un e-mail par enregistrement sélectionné) WarningIfYouCheckOneRecipientPerEmail=Attention, si vous cochez cette case, cela signifie qu'un seul email sera envoyé pour plusieurs enregistrements différents, donc, si votre message contient des variables de substitution qui se réfèrent aux données d'un enregistrement, il devient impossible de les remplacer. ResultOfMailSending=Résultat de l'envoi d'EMail en masse -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Nombre sélectionné +NbIgnored=Nombre ignoré +NbSent=Nombre envoyé SentXXXmessages=%s message(s) envoyé(s). ConfirmUnvalidateEmailing=Êtes-vous sûr de vouloir repasser l'emailing %s au statut brouillon ? MailingModuleDescContactsWithThirdpartyFilter=Contact avec filtres des tiers diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index c0e0a3057e4..14185575b3f 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -947,7 +947,7 @@ SearchIntoContracts=Contrats SearchIntoCustomerShipments=Expéditions clients SearchIntoExpenseReports=Notes de frais SearchIntoLeaves=Congés -SearchIntoTickets=Gestionnaire de tickets +SearchIntoTickets=Tickets CommentLink=Commentaires NbComments=Nombre de commentaires CommentPage=Commentaires diff --git a/htdocs/langs/fr_FR/members.lang b/htdocs/langs/fr_FR/members.lang index 0f6e7ecb589..2d5b024df4f 100644 --- a/htdocs/langs/fr_FR/members.lang +++ b/htdocs/langs/fr_FR/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Choisissez les statistiques que vous désirez consulter... MenuMembersStats=Statistiques LastMemberDate=Date dernier adhérent LatestSubscriptionDate=Date de dernière adhésion -MemberNature=Nature of member +MemberNature=Nature d'adhérent Public=Informations publiques NewMemberbyWeb=Nouvel adhérent ajouté. En attente de validation NewMemberForm=Nouvel Adhérent form diff --git a/htdocs/langs/fr_FR/mrp.lang b/htdocs/langs/fr_FR/mrp.lang index 6bcdb4e11c4..6916c178554 100644 --- a/htdocs/langs/fr_FR/mrp.lang +++ b/htdocs/langs/fr_FR/mrp.lang @@ -1,6 +1,6 @@ MRPArea=Espace MRP MenuBOM=Nomenclatures BOM -LatestBOMModified=Le %sdernières BOMs modifiées +LatestBOMModified=Le %s dernières BOMs modifiées BillOfMaterials=Nomenclature BOM BOMsSetup=Configuration du module BOM ListOfBOMs=Liste des BOMs diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index 1b8b24d61a6..f6286b6ea23 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -104,7 +104,7 @@ DemoFundation=Gestion des adhérents d'une association DemoFundation2=Gestion des adhérents et trésorerie d'une association DemoCompanyServiceOnly=Société ou indépendant faisant du service uniquement DemoCompanyShopWithCashDesk=Gestion d'un magasin avec caisse -DemoCompanyProductAndStocks=Société vendant des produits avec magazin +DemoCompanyProductAndStocks=Société vendant des produits avec magasin DemoCompanyAll=Société avec de multiples activités (tous les modules principaux) CreatedBy=Créé par %s ModifiedBy=Modifié par %s @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Nombre de factures clients NumberOfSupplierProposals=Nombre de demandes de prix NumberOfSupplierOrders=Nombre de commandes fournisseurs NumberOfSupplierInvoices=Nombre de factures fournisseurs +NumberOfContracts=Nombre de contrats NumberOfUnitsProposals=Quantités présentes dans les propositions commerciales NumberOfUnitsCustomerOrders=Quantités présentes dans les commandes clients NumberOfUnitsCustomerInvoices=Quantités présentes dans les factures clients NumberOfUnitsSupplierProposals=Quantités présentes dans les demande de prix NumberOfUnitsSupplierOrders=Quantités présentes dans les commandes fournisseurs NumberOfUnitsSupplierInvoices=Quantités présentes dans les factures fournisseurs +NumberOfUnitsContracts=Nombre d'unités en contrat EMailTextInterventionAddedContact=Une nouvelle intervention %s vous a été assignée EMailTextInterventionValidated=La fiche intervention %s vous concernant a été validée. EMailTextInvoiceValidated=La facture %s vous concernant a été validée. diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index d4135c2273e..fe794e65446 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Prix fournisseurs SuppliersPricesOfProductsOrServices=Prix fournisseurs (des produits ou services) CustomCode=Nomenclature douanière / Code SH CountryOrigin=Pays d'origine -Nature=Nature of produt (material/finished) +Nature=Nature du produit (matière première / produit fini) ShortLabel=Libellé court Unit=Unité p=u. diff --git a/htdocs/langs/fr_FR/salaries.lang b/htdocs/langs/fr_FR/salaries.lang index dc2ff783ed9..f4138177a16 100644 --- a/htdocs/langs/fr_FR/salaries.lang +++ b/htdocs/langs/fr_FR/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Les %s derniers règlements de salaires AllSalaries=Tous les règlements de salaires SalariesStatistics=Statistiques # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Salaires et paiements diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang index 13367adcc31..f4d7e789ff5 100644 --- a/htdocs/langs/fr_FR/stocks.lang +++ b/htdocs/langs/fr_FR/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Règle de gestion des incrémentations de stock ( DeStockOnBill=Décrémenter les stocks physiques sur validation des factures/avoirs clients DeStockOnValidateOrder=Décrémenterr les stocks physiques sur validation des commandes clients DeStockOnShipment=Décrémenter les stocks physiques sur validation des expéditions -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Décrémente les stocks physiques au classement "clôturée" de l'expédition ReStockOnBill=Incrémenter les stocks physiques sur validation des factures/avoirs fournisseurs ReStockOnValidateOrder=Incrémenter les stocks physiques sur approbation des commandes fournisseurs ReStockOnDispatchOrder=Incrémenter les stocks physiques sur ventilation manuelle dans les entrepôts, après réception de la marchandise -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Incrémenter les stocks physiques sur validation des réceptions +StockOnReceptionOnClosing=Incrémenter les stocks physiques lorsque la réception est classée "Close". OrderStatusNotReadyToDispatch=La commande n'a pas encore ou n'a plus un statut permettant une ventilation en stock. StockDiffPhysicTeoric=Explication de l'écart stock physique-virtuel NoPredefinedProductToDispatch=Pas de produits prédéfinis dans cet objet. Aucune ventilation en stock n'est donc à faire. diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index e52f9f2f955..e8a11ce5594 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -71,7 +71,7 @@ Banner=Bandeau BlogPost=Article de Blog WebsiteAccount=Compte de site Web WebsiteAccounts=Comptes de site web -AddWebsiteAccount=Créer un compte sur le site web +AddWebsiteAccount=Créer un compte de site web BackToListOfThirdParty=Retour à la liste pour le Tiers DisableSiteFirst=Désactiver le site Web d'abord MyContainerTitle=Titre de mon site web @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Aucun site Web n'a encore été créé. Créez-en un d'a GoTo=Aller à DynamicPHPCodeContainsAForbiddenInstruction=Vous ajoutez du code PHP dynamique contenant l'instruction PHP '%s ' qui est interdite par défaut en tant que contenu dynamique (voir les options masquées WEBSITE_PHP_ALLOW_xxx pour augmenter la liste des commandes autorisées). NotAllowedToAddDynamicContent=Vous n'êtes pas autorisé à ajouter ou modifier du contenu dynamique PHP sur des sites Web. Demandez la permission ou conservez simplement le code dans les balises php non modifié. -ReplaceWebsiteContent=Remplacer un contenu du site +ReplaceWebsiteContent=Rechercher ou remplacer un contenu du site DeleteAlsoJs=Supprimer également tous les fichiers javascript spécifiques à ce site? DeleteAlsoMedias=Supprimer également tous les fichiers médias spécifiques à ce site? # Export -MyWebsitePages=My website pages +MyWebsitePages=Mes pages de site web diff --git a/htdocs/langs/fr_FR/withdrawals.lang b/htdocs/langs/fr_FR/withdrawals.lang index d3ee922f75a..586da7253da 100644 --- a/htdocs/langs/fr_FR/withdrawals.lang +++ b/htdocs/langs/fr_FR/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Pour les comptes bancaires utilisant le code BAN/BIC/SWIFT BankToReceiveWithdraw=Compte bancaire pour recevoir les prélèvements CreditDate=Crédité le WithdrawalFileNotCapable=Impossible de générer le fichier de reçu des prélèvement pour votre pays %s (Votre pays n'est pas supporté) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Afficher ordre de prélèvement +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Toutefois, si la facture a au moins une demande de prélèvement non traité, elle ne sera pas classée payée afin de permettre le prélèvement d'abord. DoStandingOrdersBeforePayments=Cet onglet vous permet de demander un prélèvement. Une fois la demande faite, allez dans le menu Banque->Prélèvement pour gérer l'ordre de prélèvement. Lorsque l'ordre de paiement est fermé, le paiement sur la facture sera automatiquement enregistrée, et la facture fermée si le reste à payer est nul. WithdrawalFile=Fichier de prélèvement SetToStatusSent=Mettre au statut "Fichier envoyé" diff --git a/htdocs/langs/he_IL/accountancy.lang b/htdocs/langs/he_IL/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/he_IL/accountancy.lang +++ b/htdocs/langs/he_IL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/he_IL/admin.lang b/htdocs/langs/he_IL/admin.lang index 168e49e5d72..91d7f6f0c2c 100644 --- a/htdocs/langs/he_IL/admin.lang +++ b/htdocs/langs/he_IL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=יצירה / שינוי שירותים Permission534=מחק את השירותים Permission536=ראה / ניהול שירותים נסתרים Permission538=יצוא שירותים -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=לקרוא תרומות Permission702=צור / לשנות תרומות Permission703=מחק תרומות @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/he_IL/bills.lang b/htdocs/langs/he_IL/bills.lang index 073dfd7d215..51e56257d26 100644 --- a/htdocs/langs/he_IL/bills.lang +++ b/htdocs/langs/he_IL/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=כתב זכויות InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/he_IL/companies.lang b/htdocs/langs/he_IL/companies.lang index a2a3da50aa6..e7677c858d7 100644 --- a/htdocs/langs/he_IL/companies.lang +++ b/htdocs/langs/he_IL/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/he_IL/other.lang b/htdocs/langs/he_IL/other.lang index 5f07aac3436..ff970b34c23 100644 --- a/htdocs/langs/he_IL/other.lang +++ b/htdocs/langs/he_IL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/he_IL/website.lang b/htdocs/langs/he_IL/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/he_IL/website.lang +++ b/htdocs/langs/he_IL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/hr_HR/accountancy.lang b/htdocs/langs/hr_HR/accountancy.lang index 93dd454abfc..81a9aa03a11 100644 --- a/htdocs/langs/hr_HR/accountancy.lang +++ b/htdocs/langs/hr_HR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/hr_HR/admin.lang b/htdocs/langs/hr_HR/admin.lang index bf0af08078e..40f4dc40255 100644 --- a/htdocs/langs/hr_HR/admin.lang +++ b/htdocs/langs/hr_HR/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Poveži s objektom ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Biblioteka korištena za kreiranje PDF-a LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Kreiraj/izmjeni usluge Permission534=Obriši usluge Permission536=Vidi/upravljaj skrivenim uslugama Permission538=Izvezi usluge -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Čitaj donacije Permission702=Kreiraj/izmjeni donacije Permission703=Obriši donacije @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/hr_HR/bills.lang b/htdocs/langs/hr_HR/bills.lang index 16543aeb9fb..6f68286f9ae 100644 --- a/htdocs/langs/hr_HR/bills.lang +++ b/htdocs/langs/hr_HR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Zamjenski račun InvoiceReplacementAsk=Zamjenski račun za račun -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Storno računa/knjižno odobrenje InvoiceAvoirAsk=Storno računa/knjižno odobrenje za ispravak računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/hr_HR/companies.lang b/htdocs/langs/hr_HR/companies.lang index aa486c9437c..a8189128d76 100644 --- a/htdocs/langs/hr_HR/companies.lang +++ b/htdocs/langs/hr_HR/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias (komercijala, zaštitni znak, ...) AliasNameShort=Alias Name Companies=Kompanije CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Ništa Vendor=Vendor +Supplier=Vendor AddContact=Kreiraj kontakt AddContactAddress=Izradi kontakt/adresu EditContact=Uredi kontakt diff --git a/htdocs/langs/hr_HR/other.lang b/htdocs/langs/hr_HR/other.lang index 755ac4b0040..81defa05c8d 100644 --- a/htdocs/langs/hr_HR/other.lang +++ b/htdocs/langs/hr_HR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/hr_HR/website.lang b/htdocs/langs/hr_HR/website.lang index e0b26a0ac1b..ada37124c25 100644 --- a/htdocs/langs/hr_HR/website.lang +++ b/htdocs/langs/hr_HR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/hu_HU/accountancy.lang b/htdocs/langs/hu_HU/accountancy.lang index fe4a3421bb3..d6b1e1ba041 100644 --- a/htdocs/langs/hu_HU/accountancy.lang +++ b/htdocs/langs/hu_HU/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/hu_HU/admin.lang b/htdocs/langs/hu_HU/admin.lang index 78f0003530f..381bd02eadf 100644 --- a/htdocs/langs/hu_HU/admin.lang +++ b/htdocs/langs/hu_HU/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Létrehozza / módosítja szolgáltatások Permission534=Törlés szolgáltatások Permission536=Lásd még: / szolgáltatások kezelésére rejtett Permission538=Export szolgáltatások -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Olvassa el adományokat Permission702=Létrehozza / módosítja adományok Permission703=Törlés adományok @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/hu_HU/bills.lang b/htdocs/langs/hu_HU/bills.lang index fbc72fd179a..3b14581d116 100644 --- a/htdocs/langs/hu_HU/bills.lang +++ b/htdocs/langs/hu_HU/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma számla InvoiceProFormaDesc=Proforma számla egy kép egy valódi számla, de nincs könyvelési értéke. InvoiceReplacement=Csere számla InvoiceReplacementAsk=A számla csere számlája -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Jóváírás InvoiceAvoirAsk=Számlát javtó jóváíró számla InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/hu_HU/companies.lang b/htdocs/langs/hu_HU/companies.lang index 22ab3c6c139..06b41da68c4 100644 --- a/htdocs/langs/hu_HU/companies.lang +++ b/htdocs/langs/hu_HU/companies.lang @@ -28,7 +28,7 @@ AliasNames=Álnév megnevezése (kereskedelmi, jogvédett, ...) AliasNameShort=Alias Name Companies=Cégek CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nincs Vendor=Vendor +Supplier=Vendor AddContact=Kapcsolat létrehozása AddContactAddress=Kapcsolat/cím létrehozása EditContact=Kapcsoalt szerkesztése diff --git a/htdocs/langs/hu_HU/other.lang b/htdocs/langs/hu_HU/other.lang index 553b69e8446..6d0a9f9a1a6 100644 --- a/htdocs/langs/hu_HU/other.lang +++ b/htdocs/langs/hu_HU/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=A beavatkozás %s nem érvényesítette. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/hu_HU/website.lang b/htdocs/langs/hu_HU/website.lang index e84a4c5aa47..6a6693d8b9a 100644 --- a/htdocs/langs/hu_HU/website.lang +++ b/htdocs/langs/hu_HU/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/id_ID/accountancy.lang b/htdocs/langs/id_ID/accountancy.lang index 87a4ab6c61b..e54efc59469 100644 --- a/htdocs/langs/id_ID/accountancy.lang +++ b/htdocs/langs/id_ID/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/id_ID/admin.lang b/htdocs/langs/id_ID/admin.lang index 6287fa067bc..122aa5382fb 100644 --- a/htdocs/langs/id_ID/admin.lang +++ b/htdocs/langs/id_ID/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Membuat/Merubah Jasa Permission534=Menghapus Jasa Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Membaca Sumbangan Permission702=Membuat/Merubah Sumbangan Permission703=Menghapus Sumbangan @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/id_ID/bills.lang b/htdocs/langs/id_ID/bills.lang index c2123564da9..81ec0d98abc 100644 --- a/htdocs/langs/id_ID/bills.lang +++ b/htdocs/langs/id_ID/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Tagihan Proforma InvoiceProFormaDesc=Tagihan Proforma adalah gambaran untuk tagihan sebenarnya tapi tidak mempunyai nilai akutansi. InvoiceReplacement=Taghian pengganti InvoiceReplacementAsk=Tagihan pengganti untuk tagihan -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Catatan kredit InvoiceAvoirAsk=Catatan kredit untuk tagihan yang cocok atau yang sudah benar InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/id_ID/companies.lang b/htdocs/langs/id_ID/companies.lang index 4d2e8218d11..cb085d5e958 100644 --- a/htdocs/langs/id_ID/companies.lang +++ b/htdocs/langs/id_ID/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/id_ID/other.lang b/htdocs/langs/id_ID/other.lang index 0424ff71fbd..66f7b57c3fe 100644 --- a/htdocs/langs/id_ID/other.lang +++ b/htdocs/langs/id_ID/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/id_ID/website.lang b/htdocs/langs/id_ID/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/id_ID/website.lang +++ b/htdocs/langs/id_ID/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/is_IS/accountancy.lang b/htdocs/langs/is_IS/accountancy.lang index c15b5f30176..54ec9883ec9 100644 --- a/htdocs/langs/is_IS/accountancy.lang +++ b/htdocs/langs/is_IS/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/is_IS/admin.lang b/htdocs/langs/is_IS/admin.lang index 6492046725e..7deb68bf5a0 100644 --- a/htdocs/langs/is_IS/admin.lang +++ b/htdocs/langs/is_IS/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Búa til / breyta þjónusta Permission534=Eyða þjónustu Permission536=Sjá / stjórna falinn þjónusta Permission538=Útflutningur þjónustu -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Lesa Fjárframlög Permission702=Búa til / breyta framlög Permission703=Eyða Fjárframlög @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/is_IS/bills.lang b/htdocs/langs/is_IS/bills.lang index cb0b6d34674..d4bcf37cc17 100644 --- a/htdocs/langs/is_IS/bills.lang +++ b/htdocs/langs/is_IS/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma reikning InvoiceProFormaDesc=Proforma reikningur með mynd af a sannur reikning en hefur engar bókhalds gildi. InvoiceReplacement=Skipti reikningi InvoiceReplacementAsk=Skipti reikning fyrir reikning -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit athugið InvoiceAvoirAsk=Credit athugið að leiðrétta reikning InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/is_IS/companies.lang b/htdocs/langs/is_IS/companies.lang index b971ddb1127..29eb767e26f 100644 --- a/htdocs/langs/is_IS/companies.lang +++ b/htdocs/langs/is_IS/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Stofnanir CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Breyta tengilið / netfang diff --git a/htdocs/langs/is_IS/other.lang b/htdocs/langs/is_IS/other.lang index f159c4d45dd..a505cac202b 100644 --- a/htdocs/langs/is_IS/other.lang +++ b/htdocs/langs/is_IS/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Á% afskipti s hefur verið staðfest. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/is_IS/website.lang b/htdocs/langs/is_IS/website.lang index e5fe3f05d8a..c6b0f89f0b0 100644 --- a/htdocs/langs/is_IS/website.lang +++ b/htdocs/langs/is_IS/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/it_IT/accountancy.lang b/htdocs/langs/it_IT/accountancy.lang index d48ef981c48..49e09d6bed2 100644 --- a/htdocs/langs/it_IT/accountancy.lang +++ b/htdocs/langs/it_IT/accountancy.lang @@ -9,13 +9,13 @@ ACCOUNTING_EXPORT_AMOUNT=Esporta importo ACCOUNTING_EXPORT_DEVISE=Esporta valuta Selectformat=Scegli il formato del file ACCOUNTING_EXPORT_FORMAT=Scegli il formato del file -ACCOUNTING_EXPORT_ENDLINE=Select the carriage return type +ACCOUNTING_EXPORT_ENDLINE=Seleziona il tipo di ritorno a capo ACCOUNTING_EXPORT_PREFIX_SPEC=Specifica il prefisso per il nome del file ThisService=Questo servizio ThisProduct=Questo prodotto DefaultForService=Predefinito per servizio DefaultForProduct=Predefinito per prodotto -CantSuggest=Can't suggest +CantSuggest=Non posso suggerire AccountancySetupDoneFromAccountancyMenu=La maggior parte del setup della contabilità è effettuata dal menù %s ConfigAccountingExpert=Configurazione del modulo contabilità esperta Journalization=Giornali @@ -23,14 +23,14 @@ Journaux=Giornali JournalFinancial=Giornali finanziari BackToChartofaccounts=Ritorna alla lista dell'account Chartofaccounts=Piano dei conti -CurrentDedicatedAccountingAccount=Current dedicated account +CurrentDedicatedAccountingAccount=Attuale account dedicato AssignDedicatedAccountingAccount=Nuovo account da assegnare InvoiceLabel=Etichetta fattura -OverviewOfAmountOfLinesNotBound=Overview of amount of lines not bound to an accounting account -OverviewOfAmountOfLinesBound=Overview of amount of lines already bound to an accounting account +OverviewOfAmountOfLinesNotBound=Panoramica della quantità di linee non collegate a un account contabile +OverviewOfAmountOfLinesBound=Panoramica della quantità di linee già associate a un account contabile OtherInfo=Altre informazioni DeleteCptCategory=Rimuovi conto corrente dal gruppo -ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group? +ConfirmDeleteCptCategory=Sei sicuro di voler rimuovere questo account contabile dal gruppo di account contabilità? JournalizationInLedgerStatus=Stato delle registrazioni AlreadyInGeneralLedger=Già registrato nei libri mastri NotYetInGeneralLedger=Non ancora registrato nei libri mastri @@ -42,7 +42,7 @@ CountriesInEEC=Paesi nella CEE CountriesNotInEEC=Paesi al di fuori della CEE CountriesInEECExceptMe=Paesi nella CEE eccetto %s CountriesExceptMe=Tutti i paesi eccetto %s -AccountantFiles=Export accounting documents +AccountantFiles=Esportare documenti contabili MainAccountForCustomersNotDefined=Account principale di contabilità per i clienti non definito nel setup MainAccountForSuppliersNotDefined=Account principale di contabilità per fornitori non definito nel setup @@ -53,10 +53,10 @@ MainAccountForSubscriptionPaymentNotDefined=Account principale di contabilità p AccountancyArea=Area di contabilità AccountancyAreaDescIntro=L'utilizzo del modulo di contabilità è effettuato in diversi step: AccountancyAreaDescActionOnce=Le seguenti azioni vengono di solito eseguite una volta sola, o una volta all'anno... -AccountancyAreaDescActionOnceBis=Next steps should be done to save you time in future by suggesting you the correct default accounting account when making the journalization (writing record in Journals and General ledger) +AccountancyAreaDescActionOnceBis=I prossimi passi dovrebbero essere fatti per farti risparmiare tempo in futuro, suggerendoti l'account di contabilità predefinito corretto quando fai la registrazione nel Giornale (registra nel Libro Mastro e Contabilità Generale) AccountancyAreaDescActionFreq=Le seguenti azioni vengono di solito eseguite ogni mese, settimana o giorno per le grandi compagnie... -AccountancyAreaDescJournalSetup=STEP %s: Create or check content of your journal list from menu %s +AccountancyAreaDescJournalSetup=PASSO %s: Crea o controlla il contenuto del tuo elenco del giornale dal menu %s AccountancyAreaDescChartModel=STEP %s: Crea un modello di piano dei conti dal menu %s AccountancyAreaDescChart=STEP %s: Crea o seleziona il tuo piano dei conti dal menu %s @@ -79,40 +79,40 @@ AccountancyAreaDescAnalyze=STEP %s: Aggiunti o modifica le transazioni esistenti AccountancyAreaDescClosePeriod=STEP %s: Chiudo il periodo così non verranno fatte modifiche in futuro. TheJournalCodeIsNotDefinedOnSomeBankAccount=Uno step obbligatorio non è stato completato (il codice del diario contabile non è stato definito per tutti i conti bancari) -Selectchartofaccounts=Seleziona una lista degli account +Selectchartofaccounts=Seleziona il piano dei conti attivo ChangeAndLoad=Cambia e carica -Addanaccount=Aggiungi un account di contabilità -AccountAccounting=Account di contabilità +Addanaccount=Aggiungi un conto di contabilità +AccountAccounting=Conto di contabilità AccountAccountingShort=Conto -SubledgerAccount=Subledger account -SubledgerAccountLabel=Subledger account label -ShowAccountingAccount=Mostra account di contabilità +SubledgerAccount=Conto del registro secondario +SubledgerAccountLabel=Etichetta del conto Registro secondario +ShowAccountingAccount=Mostra conti di contabilità ShowAccountingJournal=Mostra diario contabile -AccountAccountingSuggest=Account per contabilità suggerito -MenuDefaultAccounts=Account di default +AccountAccountingSuggest=Conto suggerito per contabilità +MenuDefaultAccounts=Conti predefiniti MenuBankAccounts=Conti bancari MenuVatAccounts=Conti IVA MenuTaxAccounts=Imposte fiscali MenuExpenseReportAccounts=Conto spese MenuLoanAccounts=Conti di prestito -MenuProductsAccounts=Account prodotto -MenuClosureAccounts=Closure accounts -ProductsBinding=Account prodotti -TransferInAccounting=Transfer in accounting -RegistrationInAccounting=Registration in accounting -Binding=Vincola all'account +MenuProductsAccounts=Conto prodotto +MenuClosureAccounts=Conti di chiusura +ProductsBinding=Conti prodotti +TransferInAccounting=Trasferimento in contabilità +RegistrationInAccounting=Registrazione in contabilità +Binding=Associazione ai conti CustomersVentilation=Collegamento fatture attive SuppliersVentilation=Associa fattura fornitore ExpenseReportsVentilation=Associa nota spese CreateMvts=Crea nuova transazione UpdateMvts=Modifica una transazione ValidTransaction=Valida transazione -WriteBookKeeping=Register transactions in Ledger +WriteBookKeeping=Registrare le transazioni nel Libro Mastro Bookkeeping=Libro contabile AccountBalance=Saldo ObjectsRef=Sorgente oggetto in riferimento -CAHTF=Total purchase vendor before tax -TotalExpenseReport=Report spese totali +CAHTF=Totale acquisto al lordo delle imposte +TotalExpenseReport=Rapporto spese totale InvoiceLines=Righe di fatture da vincolare InvoiceLinesDone=Righe di fatture bloccate ExpenseReportLines=Linee di note spese da associare @@ -120,14 +120,14 @@ ExpenseReportLinesDone=Linee vincolate di note spese IntoAccount=Collega linee con il piano dei conti -Ventilate=Vincola +Ventilate=Associa LineId=Id di linea Processing=In elaborazione EndProcessing=Fine del processo SelectedLines=Righe selezionate Lineofinvoice=Riga fattura LineOfExpenseReport=Linea di note spese -NoAccountSelected=Nessun account di contabilità selezionato +NoAccountSelected=Nessun conto di contabilità selezionato VentilatedinAccount=Collegamento completato al piano dei conti NotVentilatedinAccount=Non collegato al piano dei conti XLineSuccessfullyBinded=%sprodotti/servizi correttamente collegato ad un piano dei conti @@ -138,85 +138,86 @@ ACCOUNTING_LIST_SORT_VENTILATION_TODO=Inizia ad ordinare la pagina "Associazioni ACCOUNTING_LIST_SORT_VENTILATION_DONE=Inizia ad ordinare la pagina "Associazioni effettuate" dagli elementi più recenti ACCOUNTING_LENGTH_DESCRIPTION=Tronca la descrizione di prodotto & servizi negli elenchi dopo x caratteri (Consigliato = 50) -ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Truncate product & services account description form in listings after x chars (Best = 50) +ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Troncare il modulo di descrizione del conto prodotti e servizi in elenchi dopo x caratteri (Migliore = 50) ACCOUNTING_LENGTH_GACCOUNT=Lunghezza generale del piano dei conti (se imposti come valore 6 qui, il conto 706 apparirà come 706000) -ACCOUNTING_LENGTH_AACCOUNT=Lunghezza della contabilità di terze parti (se imposti un valore uguale a 6 ad esempio, l'account '401' apparirà come '401000' sullo schermo) -ACCOUNTING_MANAGE_ZERO=Allow to manage different number of zeros at the end of an accounting account. Needed by some countries (like Switzerland). If set to off (default), you can set the following two parameters to ask the application to add virtual zeros. -BANK_DISABLE_DIRECT_INPUT=Disabilita la registrazione diretta della transazione sul conto banca -ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Enable draft export on journal -ACCOUNTANCY_COMBO_FOR_AUX=Enable combo list for subsidiary account (may be slow if you have a lot of third parties) +ACCOUNTING_LENGTH_AACCOUNT=Lunghezza della contabilità di terze parti (se imposti un valore uguale a 6 ad esempio, il conto '401' apparirà come '401000' sullo schermo) +ACCOUNTING_MANAGE_ZERO=Consentire di gestire un diverso numero di zeri alla fine di un conto contabile. Necessario in alcuni paesi (come la Svizzera). Se impostato su off (predefinito), è possibile impostare i seguenti due parametri per chiedere all'applicazione di aggiungere zeri virtuali. +BANK_DISABLE_DIRECT_INPUT=Disabilita la registrazione diretta della transazione nel conto bancario +ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Abilita la bozza di esportazione sul giornale +ACCOUNTANCY_COMBO_FOR_AUX=Abilita l'elenco combinato per il conto secondario (potrebbe essere lento se hai un sacco di terze parti) ACCOUNTING_SELL_JOURNAL=Giornale Vendite ACCOUNTING_PURCHASE_JOURNAL=Giornale Acquisti ACCOUNTING_MISCELLANEOUS_JOURNAL=Giornale Varie ACCOUNTING_EXPENSEREPORT_JOURNAL=Giornale Note Spese ACCOUNTING_SOCIAL_JOURNAL=Giornale Sociale -ACCOUNTING_HAS_NEW_JOURNAL=Has new Journal +ACCOUNTING_HAS_NEW_JOURNAL=Ha un nuovo giornale -ACCOUNTING_RESULT_PROFIT=Result accounting account (Profit) -ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) -ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure +ACCOUNTING_RESULT_PROFIT=Conto contabile risultante (profitto) +ACCOUNTING_RESULT_LOSS=Conto contabile risultato (perdita) +ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Giornale di chiusura -ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +ACCOUNTING_ACCOUNT_TRANSFER_CASH=Conto contabile del bonifico bancario transitorio +TransitionalAccount=Conto di trasferimento bancario transitorio -ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait -DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations -ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Accounting account to register subscriptions +ACCOUNTING_ACCOUNT_SUSPENSE=Conto di contabilità di attesa +DONATION_ACCOUNTINGACCOUNT=Conto di contabilità per registrare le donazioni +ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT=Conto contabile per registrare gli abbonamenti -ACCOUNTING_PRODUCT_BUY_ACCOUNT=Account di contabilità predefinito per i prodotti acquistati (se non definito nella scheda prodotto) -ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Account di contabilità predefinito per i prodotti venduti (se non definito nella scheda prodotto) -ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Accounting account by default for the sold products in EEC (used if not defined in the product sheet) -ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Accounting account by default for the sold products export out of EEC (used if not defined in the product sheet) -ACCOUNTING_SERVICE_BUY_ACCOUNT=Account di contabilità predefinito per i servizi acquistati (se non definito nella scheda servizio) -ACCOUNTING_SERVICE_SOLD_ACCOUNT=Account di contabilità predefinito per i servizi venduti (se non definito nella scheda servizio) +ACCOUNTING_PRODUCT_BUY_ACCOUNT=Conto di contabilità predefinito per i prodotti acquistati (se non definito nella scheda prodotto) +ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Conto di contabilità predefinito per i prodotti venduti (se non definito nella scheda prodotto) +ACCOUNTING_PRODUCT_SOLD_INTRA_ACCOUNT=Conto contabile per impostazione predefinita per i prodotti venduti in CEE (utilizzato se non definito nella scheda prodotto) +ACCOUNTING_PRODUCT_SOLD_EXPORT_ACCOUNT=Conto contabile per impostazione predefinita per l'esportazione dei prodotti venduti fuori dalla CEE (utilizzato se non definito nella scheda prodotto) +ACCOUNTING_SERVICE_BUY_ACCOUNT=Conto di contabilità per impostazione predefinita per i servizi acquistati (utilizzato se non definito nel foglio di servizio) +ACCOUNTING_SERVICE_SOLD_ACCOUNT=Conto di contabilità per impostazione predefinita per i servizi venduti (utilizzato se non definito nel foglio di servizio) Doctype=Tipo documento Docdate=Data Docref=Riferimento -LabelAccount=Etichetta account +LabelAccount=Etichetta conto LabelOperation=Etichetta operazione Sens=Verso -LetteringCode=Lettering code -Lettering=Lettering +LetteringCode=Codice impressioni +Lettering=Impressioni Codejournal=Giornale -JournalLabel=Journal label +JournalLabel=Etichetta del giornale NumPiece=Numero del pezzo TransactionNumShort=Num. transazione -AccountingCategory=Personalized groups +AccountingCategory=Gruppi personalizzati GroupByAccountAccounting=Raggruppamento piano dei conti -AccountingAccountGroupsDesc=You can define here some groups of accounting account. They will be used for personalized accounting reports. -ByAccounts=By accounts -ByPredefinedAccountGroups=By predefined groups +AccountingAccountGroupsDesc=Qui puoi definire alcuni gruppi di conti contabili. Saranno utilizzati per rapporti contabili personalizzati. +ByAccounts=Per conto +ByPredefinedAccountGroups=Per gruppi predefiniti ByPersonalizedAccountGroups=Gruppi personalizzati ByYear=Per anno NotMatch=Non impostato DeleteMvt=Cancella linee libro contabile DelYear=Anno da cancellare DelJournal=Giornale da cancellare -ConfirmDeleteMvt=This will delete all lines of the Ledger for year and/or from a specific journal. At least one criterion is required. -ConfirmDeleteMvtPartial=This will delete the transaction from the Ledger (all lines related to same transaction will be deleted) -FinanceJournal=Finance journal -ExpenseReportsJournal=Expense reports journal -DescFinanceJournal=Finance journal including all the types of payments by bank account -DescJournalOnlyBindedVisible=This is a view of record that are bound to an accounting account and can be recorded into the Ledger. -VATAccountNotDefined=Account for VAT not defined -ThirdpartyAccountNotDefined=Account for third party not defined -ProductAccountNotDefined=Account for product not defined -FeeAccountNotDefined=Account for fee not defined -BankAccountNotDefined=Account for bank not defined +ConfirmDeleteMvt=Questo cancellerà tutte le righe del libro mastro per l'anno e/o da un giornale specifico. È richiesto almeno un criterio. +ConfirmDeleteMvtPartial=Questo cancellerà la transazione dal libro mastro (tutte le righe relative alla stessa transazione saranno cancellate) +FinanceJournal=Giornale delle finanze +ExpenseReportsJournal=Rapporto spese +DescFinanceJournal=Giornale finanziario che include tutti i tipi di pagamenti per conto bancario +DescJournalOnlyBindedVisible=Questa è una vista del record che sono legati a un conto contabile e possono essere registrati nel libro mastro. +VATAccountNotDefined=Conto per IVA non definito +ThirdpartyAccountNotDefined=Conto per terze parti non definito +ProductAccountNotDefined=Account per prodotto non definito +FeeAccountNotDefined=Conto per tassa non definito +BankAccountNotDefined=Conto per banca non definito CustomerInvoicePayment=Pagamento fattura attiva -ThirdPartyAccount=Third-party account +ThirdPartyAccount=Conto terze parti NewAccountingMvt=Nuova transazione NumMvts=Numero della transazione ListeMvts=Lista dei movimenti ErrorDebitCredit=Debito e Credito non possono avere un valore contemporaneamente -AddCompteFromBK=Add accounting accounts to the group -ReportThirdParty=List third-party account -DescThirdPartyReport=Consult here the list of third-party customers and vendors and their accounting accounts +AddCompteFromBK=Aggiungi conto di contabilità al gruppo +ReportThirdParty=Elenca conti di terze parti +DescThirdPartyReport=Consulta qui l'elenco dei clienti e fornitori di terze parti e i loro conti contabili ListAccounts=Lista delle voci del piano dei conti -UnknownAccountForThirdparty=Unknown third-party account. We will use %s -UnknownAccountForThirdpartyBlocking=Unknown third-party account. Blocking error -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +UnknownAccountForThirdparty=Conto di terze parti sconosciuto. Useremo %s +UnknownAccountForThirdpartyBlocking=Conto di terze parti sconosciuto. Errore di blocco +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Conto di terzi non definito o sconosciuto. Useremo %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Third-party account not defined or third party unknown. Blocking error. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Unknown third-party account and waiting account not defined. Blocking error PaymentsNotLinkedToProduct=Payment not linked to any product / service diff --git a/htdocs/langs/it_IT/admin.lang b/htdocs/langs/it_IT/admin.lang index 76561fafefa..61af6b824bb 100644 --- a/htdocs/langs/it_IT/admin.lang +++ b/htdocs/langs/it_IT/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Campo calcolato ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Libreria utilizzata per generare PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -493,7 +496,7 @@ DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploade # Modules Module0Name=Utenti e gruppi Module0Desc=Gestione utenti/impiegati e gruppi -Module1Name=Sogg. Terzi +Module1Name=Soggetti terzi Module1Desc=Companies and contacts management (customers, prospects...) Module2Name=Commerciale Module2Desc=Gestione commerciale @@ -541,7 +544,7 @@ Module75Name=Spese di viaggio e note spese Module75Desc=Gestione spese di viaggio e note spese Module80Name=Spedizioni Module80Desc=Shipments and delivery note management -Module85Name=Banks & Cash +Module85Name=Banche & Denaro Module85Desc=Gestione di conti bancari o conti di cassa Module100Name=External Site Module100Desc=Add a link to an external website as a main menu icon. Website is shown in a frame under the top menu. @@ -772,7 +775,7 @@ PermissionAdvanced253=Creare/modificare utenti interni/esterni e permessi Permission254=Eliminare o disattivare altri utenti Permission255=Cambiare le password di altri utenti Permission256=Eliminare o disabilitare altri utenti -Permission262=Extend access to all third parties (not only third parties for which that user is a sale representative).
Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).
Not effective for projects (only rules on project permissions, visibility and assignment matters). +Permission262=Estendere l'accesso a tutte le terze parti (non solo le terze parti per le quali tale utente è un rappresentante di vendita).
Non efficace per gli utenti esterni (sempre limitato a se stessi per proposte, ordini, fatture, contratti, ecc.).
Non efficace per i progetti (solo le regole sulle autorizzazioni del progetto, la visibilità e le questioni relative all'assegnazione). Permission271=Vedere CA Permission272=Vedere fatture Permission273=Emettere fatture @@ -819,9 +822,9 @@ Permission532=Creare/modificare servizi Permission534=Eliminare servizi Permission536=Vedere/gestire servizi nascosti Permission538=Esportare servizi -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Vedere donazioni Permission702=Creare/modificare donazioni Permission703=Eliminare donazioni @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -927,8 +930,8 @@ Permission63001=Leggi risorse Permission63002=Crea/modifica risorse Permission63003=Elimina risorsa Permission63004=Collega le risorse agli eventi -DictionaryCompanyType=Third-party types -DictionaryCompanyJuridicalType=Third-party legal entities +DictionaryCompanyType=Tipo di soggetto terzo +DictionaryCompanyJuridicalType=Entità legali di terze parti DictionaryProspectLevel=Liv. cliente potenziale DictionaryCanton=States/Provinces DictionaryRegion=Regioni @@ -939,7 +942,7 @@ DictionaryActions=Tipi di azioni/eventi DictionarySocialContributions=Types of social or fiscal taxes DictionaryVAT=Aliquote IVA o Tasse di vendita DictionaryRevenueStamp=Amount of tax stamps -DictionaryPaymentConditions=Payment Terms +DictionaryPaymentConditions=Termini di Pagamento DictionaryPaymentModes=Payment Modes DictionaryTypeContact=Tipi di contatti/indirizzi DictionaryTypeOfContainer=Website - Type of website pages/containers @@ -982,9 +985,9 @@ LocalTax1Management=Secondo tipo di tassa LocalTax1IsUsedExample= LocalTax1IsNotUsedExample= LocalTax2IsNotUsed=Non usare terza tassa -LocalTax2IsUsedDesc=Use a third type of tax (other than first one) +LocalTax2IsUsedDesc=Utilizzare un terzo tipo di imposta (diversa dalla prima) LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one) -LocalTax2Management=Terzo tipo di tassa +LocalTax2Management=Terzo: tipo di tassa LocalTax2IsUsedExample= LocalTax2IsNotUsedExample= LocalTax1ManagementES=Gestione RE @@ -1180,7 +1183,7 @@ ExtraFieldsLines=Complementary attributes (lines) ExtraFieldsLinesRec=Complementary attributes (templates invoices lines) ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines) ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines) -ExtraFieldsThirdParties=Complementary attributes (third party) +ExtraFieldsThirdParties=Attributi complementari (soggetto terzo) ExtraFieldsContacts=Complementary attributes (contacts/address) ExtraFieldsMember=Attributi Complementari (membri) ExtraFieldsMemberType=Attributi Complementari (tipo di membro) @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/it_IT/banks.lang b/htdocs/langs/it_IT/banks.lang index 9195288e505..48a20673482 100644 --- a/htdocs/langs/it_IT/banks.lang +++ b/htdocs/langs/it_IT/banks.lang @@ -1,6 +1,6 @@ # Dolibarr language file - Source file is en_US - banks Bank=Banca -MenuBankCash=Banks | Cash +MenuBankCash=Banche | Denaro MenuVariousPayment=Pagamenti vari MenuNewVariousPayment=Nuovo pagamento vario BankName=Nome della Banca @@ -30,7 +30,7 @@ AllTime=Dall'inizio Reconciliation=Riconciliazione RIB=Coordinate bancarie IBAN=Codice IBAN -BIC=BIC/SWIFT code +BIC=Codice BIC/SWIFT SwiftValid=Il codice BIC/SWIFT è valido SwiftVNotalid=BIC/SWIFT non valido IbanValid=Il codice IBAN è valido diff --git a/htdocs/langs/it_IT/bills.lang b/htdocs/langs/it_IT/bills.lang index 71887c0b194..4955a8a9598 100644 --- a/htdocs/langs/it_IT/bills.lang +++ b/htdocs/langs/it_IT/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Fattura proforma InvoiceProFormaDesc=La fattura proforma è uguale ad una fattura vera, ma non ha valore contabile. InvoiceReplacement=Fattura sostitutiva InvoiceReplacementAsk=Fattura sostitutiva -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota di credito InvoiceAvoirAsk=Nota di credito per correggere fattura InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -88,8 +88,8 @@ CodePaymentMode=Payment Type (code) LabelPaymentMode=Payment Type (label) PaymentModeShort=Payment Type PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms +PaymentConditions=Termini di Pagamento +PaymentConditionsShort=Termini di Pagamento PaymentAmount=Importo del pagamento PaymentHigherThanReminderToPay=Pagamento superiore alla rimanenza da pagare HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. @@ -251,7 +251,7 @@ ClassifyBill=Classificazione fattura SupplierBillsToPay=Unpaid vendor invoices CustomerBillsUnpaid=Fatture attive non pagate NonPercuRecuperable=Non recuperabile -SetConditions=Set Payment Terms +SetConditions=Imposta Termini di Pagamento SetMode=Set Payment Type SetRevenuStamp=Imposta marca da bollo Billed=Fatturati @@ -375,11 +375,11 @@ ViewAvailableGlobalDiscounts=Mostra gli sconti disponibili Statut=Stato PaymentConditionShortRECEP=Rimessa diretta PaymentConditionRECEP=Rimessa diretta -PaymentConditionShort30D=a 30 giorni +PaymentConditionShort30D=30 giorni PaymentCondition30D=Pagamento a 30 giorni PaymentConditionShort30DENDMONTH=30 giorni fine mese PaymentCondition30DENDMONTH=Pagamento a 30 giorni fine mese -PaymentConditionShort60D=a 60 giorni +PaymentConditionShort60D=60 giorni PaymentCondition60D=Pagamento a 60 giorni PaymentConditionShort60DENDMONTH=60 giorni fine mese PaymentCondition60DENDMONTH=Pagamento a 60 giorni fine mese @@ -425,10 +425,10 @@ DeskCode=Branch code BankAccountNumber=C.C. BankAccountNumberKey=Checksum Residence=Indirizzo -IBANNumber=IBAN account number +IBANNumber=Codice IBAN IBAN=IBAN BIC=BIC/SWIFT -BICNumber=BIC/SWIFT code +BICNumber=Codice BIC/SWIFT ExtraInfos=Extra info RegulatedOn=Regolamentato su ChequeNumber=Assegno N° @@ -446,7 +446,7 @@ IntracommunityVATNumber=Intra-Community VAT ID PaymentByChequeOrderedTo=Check payments (including tax) are payable to %s, send to PaymentByChequeOrderedToShort=Check payments (incl. tax) are payable to SendTo=spedire a -PaymentByTransferOnThisBankAccount=Payment by transfer to the following bank account +PaymentByTransferOnThisBankAccount=Pagamento tramite Bonifico sul seguente Conto Bancario VATIsNotUsedForInvoice=* Non applicabile IVA art-293B del CGI LawApplicationPart1=Con l'applicazione della legge 80.335 del 12/05/80 LawApplicationPart2=I beni restano di proprietà della diff --git a/htdocs/langs/it_IT/boxes.lang b/htdocs/langs/it_IT/boxes.lang index 259920ab099..1879e9f03c1 100644 --- a/htdocs/langs/it_IT/boxes.lang +++ b/htdocs/langs/it_IT/boxes.lang @@ -23,16 +23,16 @@ BoxTitleLastRssInfos=Ultime %s notizie da %s BoxTitleLastProducts=Products/Services: last %s modified BoxTitleProductsAlertStock=Prodotti: allerta scorte BoxTitleLastSuppliers=Ultimi %s ordini fornitore -BoxTitleLastModifiedSuppliers=Vendors: last %s modified -BoxTitleLastModifiedCustomers=Customers: last %s modified +BoxTitleLastModifiedSuppliers=Fornitori: ultimi %s modificati +BoxTitleLastModifiedCustomers=Clienti: ultimi %s modificati BoxTitleLastCustomersOrProspects=Ultimi %s clienti o potenziali clienti BoxTitleLastCustomerBills=Latest %s Customer invoices BoxTitleLastSupplierBills=Latest %s Vendor invoices -BoxTitleLastModifiedProspects=Prospects: last %s modified +BoxTitleLastModifiedProspects=Clienti potenziali: ultimi %s modificati BoxTitleLastModifiedMembers=Ultimi %s membri BoxTitleLastFicheInter=Ultimi %s interventi modificati BoxTitleOldestUnpaidCustomerBills=Fatture cliente: %s non pagate più vecchie -BoxTitleOldestUnpaidSupplierBills=Vendor Invoices: oldest %s unpaid +BoxTitleOldestUnpaidSupplierBills=Fatture fornitori: %s più vecchie non pagate BoxTitleCurrentAccounts=Conti aperti: bilanci BoxTitleLastModifiedContacts=Contacts/Addresses: last %s modified BoxMyLastBookmarks=Bookmarks: latest %s @@ -76,7 +76,7 @@ ForObject=On %s BoxTitleLastModifiedSupplierBills=Vendor Invoices: last %s modified BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified -BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified +BoxTitleLastModifiedCustomerOrders=Ordini: ultimi %s modificati BoxTitleLastModifiedPropals=Ultime %s proposte modificate ForCustomersInvoices=Fatture attive ForCustomersOrders=Ordini cliente diff --git a/htdocs/langs/it_IT/companies.lang b/htdocs/langs/it_IT/companies.lang index 9666ac35dfa..556096c3565 100644 --- a/htdocs/langs/it_IT/companies.lang +++ b/htdocs/langs/it_IT/companies.lang @@ -32,7 +32,7 @@ PriceFormatInCurrentLanguage=Price display format in the current language and cu ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party -ThirdParties=Third-parties +ThirdParties=Soggetti Terzi ThirdPartyProspects=Clienti potenziali ThirdPartyProspectsStats=Clienti potenziali ThirdPartyCustomers=Clienti @@ -257,8 +257,8 @@ ProfId1DZ=RC ProfId2DZ=Art. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID +VATIntra=Partita IVA +VATIntraShort=Partita IVA VATIntraSyntaxIsValid=La sintassi è valida VATReturn=Rimborso IVA ProspectCustomer=Cliente/Cliente potenziale @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Sconti globali fornitore (inseriti da tutti gli SupplierAbsoluteDiscountMy=Sconti globali fornitore (inseriti da me stesso) DiscountNone=Nessuno Vendor=Fornitore +Supplier=Fornitore AddContact=Crea contatto AddContactAddress=Crea contatto/indirizzo EditContact=Modifica contatto/indirizzo @@ -434,7 +435,7 @@ ErrorThirdpartiesMerge=Si è verificato un errore durante l'eliminazione di terz NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested #Imports PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer +PaymentTermsCustomer=Termini di Pagamento - Cliente PaymentTypeSupplier=Payment Type - Vendor PaymentTermsSupplier=Payment Term - Vendor MulticurrencyUsed=Use Multicurrency diff --git a/htdocs/langs/it_IT/main.lang b/htdocs/langs/it_IT/main.lang index f7995b0ef97..1cdfe3e6746 100644 --- a/htdocs/langs/it_IT/main.lang +++ b/htdocs/langs/it_IT/main.lang @@ -370,12 +370,12 @@ PriceQtyMinHTCurrency=Price quantity min. (excl. tax) (currency) Percentage=Percentuale Total=Totale SubTotal=Totale parziale -TotalHTShort=Total (excl.) -TotalHT100Short=Total 100%% (excl.) -TotalHTShortCurrency=Total (excl. in currency) +TotalHTShort=Totale Netto +TotalHT100Short=Totalke 100 1%% Netto +TotalHTShortCurrency=Totale Netto in valuta TotalTTCShort=Totale (IVA inc.) -TotalHT=Total (excl. tax) -TotalHTforthispage=Total (excl. tax) for this page +TotalHT=Totale Netto +TotalHTforthispage=Totale Netto per questa Pagina Totalforthispage=Totale in questa pagina TotalTTC=Totale (IVA inclusa) TotalTTCToYourCredit=Totale (IVA inclusa) a tuo credito @@ -462,8 +462,8 @@ Generate=Genera Duration=Durata TotalDuration=Durata totale Summary=Riepilogo -DolibarrStateBoard=Database Statistics -DolibarrWorkBoard=Open Items +DolibarrStateBoard=Statistiche Gestionale +DolibarrWorkBoard=Oggetti Aperti NoOpenedElementToProcess=Nessun elemento aperto da elaborare Available=Disponibile NotYetAvailable=Non ancora disponibile diff --git a/htdocs/langs/it_IT/members.lang b/htdocs/langs/it_IT/members.lang index 40f41c18a6c..7e387e3ebd3 100644 --- a/htdocs/langs/it_IT/members.lang +++ b/htdocs/langs/it_IT/members.lang @@ -26,7 +26,7 @@ MembersListQualified=Elenco dei membri qualificati MenuMembersToValidate=Membri da convalidare MenuMembersValidated=Membri convalidati MenuMembersUpToDate=Membri aggiornati -MenuMembersNotUpToDate=Membri non aggiornTI +MenuMembersNotUpToDate=Membri non aggiornati MenuMembersResiliated=Terminated members MembersWithSubscriptionToReceive=Membri con adesione da riscuotere DateSubscription=Data di adesione diff --git a/htdocs/langs/it_IT/other.lang b/htdocs/langs/it_IT/other.lang index b1c16f67868..4ce59b419c6 100644 --- a/htdocs/langs/it_IT/other.lang +++ b/htdocs/langs/it_IT/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Numero di ordini fornitore NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Intervento %s convalidato EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/it_IT/website.lang b/htdocs/langs/it_IT/website.lang index 8f9b03f504a..2cd44a0519c 100644 --- a/htdocs/langs/it_IT/website.lang +++ b/htdocs/langs/it_IT/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ja_JP/accountancy.lang b/htdocs/langs/ja_JP/accountancy.lang index e24f3e5506c..11b5f42eb07 100644 --- a/htdocs/langs/ja_JP/accountancy.lang +++ b/htdocs/langs/ja_JP/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ja_JP/admin.lang b/htdocs/langs/ja_JP/admin.lang index 201227b6b2c..d3e4b8730ca 100644 --- a/htdocs/langs/ja_JP/admin.lang +++ b/htdocs/langs/ja_JP/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=サービスを作成/変更 Permission534=サービスを削除する Permission536=隠されたサービスを参照してください/管理 Permission538=輸出サービス -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=寄付を読む Permission702=寄付を作成/変更 Permission703=寄付を削除します。 @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ja_JP/bills.lang b/htdocs/langs/ja_JP/bills.lang index 65249f1760e..f821606de2e 100644 --- a/htdocs/langs/ja_JP/bills.lang +++ b/htdocs/langs/ja_JP/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=見積送り状 InvoiceProFormaDesc=プロフォーマインボイスは、請求書のイメージですが、どんな会計の値を持っていません。 InvoiceReplacement=交換用の請求書 InvoiceReplacementAsk=請求書の交換請求書 -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=クレジットメモ InvoiceAvoirAsk=請求書を訂正するためにクレジットノート InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ja_JP/companies.lang b/htdocs/langs/ja_JP/companies.lang index b7983355f88..46d03183003 100644 --- a/htdocs/langs/ja_JP/companies.lang +++ b/htdocs/langs/ja_JP/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=企業 CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=なし Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=コンタクト/アドレスを編集 diff --git a/htdocs/langs/ja_JP/other.lang b/htdocs/langs/ja_JP/other.lang index bb8dc667a4b..f511dcb82ee 100644 --- a/htdocs/langs/ja_JP/other.lang +++ b/htdocs/langs/ja_JP/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=介入%sが検証されています。 EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ja_JP/website.lang b/htdocs/langs/ja_JP/website.lang index a923caf67b7..5cd14c6da32 100644 --- a/htdocs/langs/ja_JP/website.lang +++ b/htdocs/langs/ja_JP/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ka_GE/accountancy.lang b/htdocs/langs/ka_GE/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/ka_GE/accountancy.lang +++ b/htdocs/langs/ka_GE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ka_GE/admin.lang b/htdocs/langs/ka_GE/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/ka_GE/admin.lang +++ b/htdocs/langs/ka_GE/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ka_GE/bills.lang b/htdocs/langs/ka_GE/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/ka_GE/bills.lang +++ b/htdocs/langs/ka_GE/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ka_GE/companies.lang b/htdocs/langs/ka_GE/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/ka_GE/companies.lang +++ b/htdocs/langs/ka_GE/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/ka_GE/other.lang b/htdocs/langs/ka_GE/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/ka_GE/other.lang +++ b/htdocs/langs/ka_GE/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ka_GE/website.lang b/htdocs/langs/ka_GE/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/ka_GE/website.lang +++ b/htdocs/langs/ka_GE/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/kn_IN/accountancy.lang b/htdocs/langs/kn_IN/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/kn_IN/accountancy.lang +++ b/htdocs/langs/kn_IN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/kn_IN/admin.lang b/htdocs/langs/kn_IN/admin.lang index c2ac3d4bc8e..4f98d74a676 100644 --- a/htdocs/langs/kn_IN/admin.lang +++ b/htdocs/langs/kn_IN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/kn_IN/bills.lang b/htdocs/langs/kn_IN/bills.lang index cc78ae53b31..e7b17c926d2 100644 --- a/htdocs/langs/kn_IN/bills.lang +++ b/htdocs/langs/kn_IN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/kn_IN/companies.lang b/htdocs/langs/kn_IN/companies.lang index 483d54f3a45..b24894cd7f8 100644 --- a/htdocs/langs/kn_IN/companies.lang +++ b/htdocs/langs/kn_IN/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=ಕಂಪನಿಗಳು CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=ಯಾವುದೂ ಇಲ್ಲ Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=ಸಂಪರ್ಕವನ್ನು ತಿದ್ದಿ diff --git a/htdocs/langs/kn_IN/other.lang b/htdocs/langs/kn_IN/other.lang index 8540b2f5d2b..a9c16fa7894 100644 --- a/htdocs/langs/kn_IN/other.lang +++ b/htdocs/langs/kn_IN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/kn_IN/website.lang b/htdocs/langs/kn_IN/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/kn_IN/website.lang +++ b/htdocs/langs/kn_IN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ko_KR/accountancy.lang b/htdocs/langs/ko_KR/accountancy.lang index 734271adbf0..3ce2ffde609 100644 --- a/htdocs/langs/ko_KR/accountancy.lang +++ b/htdocs/langs/ko_KR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/ko_KR/admin.lang b/htdocs/langs/ko_KR/admin.lang index 5b2ce325260..00d354072b1 100644 --- a/htdocs/langs/ko_KR/admin.lang +++ b/htdocs/langs/ko_KR/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ko_KR/bills.lang b/htdocs/langs/ko_KR/bills.lang index 2d92a5836da..fc1a2e2058d 100644 --- a/htdocs/langs/ko_KR/bills.lang +++ b/htdocs/langs/ko_KR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/ko_KR/companies.lang b/htdocs/langs/ko_KR/companies.lang index f5e2e79962a..d446029ff46 100644 --- a/htdocs/langs/ko_KR/companies.lang +++ b/htdocs/langs/ko_KR/companies.lang @@ -28,7 +28,7 @@ AliasNames=별칭 (상업용, 상표권 ...) AliasNameShort=Alias Name Companies=회사 CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=없음 Vendor=Vendor +Supplier=Vendor AddContact=연락처 생성 AddContactAddress=연락처 / 주소 생성 EditContact=연락처 편집 diff --git a/htdocs/langs/ko_KR/other.lang b/htdocs/langs/ko_KR/other.lang index dac4183c645..d7000f4e661 100644 --- a/htdocs/langs/ko_KR/other.lang +++ b/htdocs/langs/ko_KR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ko_KR/website.lang b/htdocs/langs/ko_KR/website.lang index 09d273e28e7..c73b128d7bc 100644 --- a/htdocs/langs/ko_KR/website.lang +++ b/htdocs/langs/ko_KR/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/lo_LA/accountancy.lang b/htdocs/langs/lo_LA/accountancy.lang index 54ff1f68337..d64c13327b4 100644 --- a/htdocs/langs/lo_LA/accountancy.lang +++ b/htdocs/langs/lo_LA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/lo_LA/admin.lang b/htdocs/langs/lo_LA/admin.lang index 9da8cc7c37b..f3335cb7b23 100644 --- a/htdocs/langs/lo_LA/admin.lang +++ b/htdocs/langs/lo_LA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/lo_LA/bills.lang b/htdocs/langs/lo_LA/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/lo_LA/bills.lang +++ b/htdocs/langs/lo_LA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/lo_LA/companies.lang b/htdocs/langs/lo_LA/companies.lang index 7790e8d173e..20e74ab2ac1 100644 --- a/htdocs/langs/lo_LA/companies.lang +++ b/htdocs/langs/lo_LA/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/lo_LA/other.lang b/htdocs/langs/lo_LA/other.lang index b2242a76887..67df8a82501 100644 --- a/htdocs/langs/lo_LA/other.lang +++ b/htdocs/langs/lo_LA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/lo_LA/website.lang b/htdocs/langs/lo_LA/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/lo_LA/website.lang +++ b/htdocs/langs/lo_LA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/lt_LT/accountancy.lang b/htdocs/langs/lt_LT/accountancy.lang index e95f36b0abd..d3befafadf9 100644 --- a/htdocs/langs/lt_LT/accountancy.lang +++ b/htdocs/langs/lt_LT/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/lt_LT/admin.lang b/htdocs/langs/lt_LT/admin.lang index 2a4945d9fae..40655912693 100644 --- a/htdocs/langs/lt_LT/admin.lang +++ b/htdocs/langs/lt_LT/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Nuoroda į objektą, ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Sukurti/keisti paslaugas Permission534=Ištrinti paslaugas Permission536=Žiūrėti/tvarkyti paslėptas paslaugas Permission538=Eksportuoti paslaugas -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Skaityti aukas Permission702=Sukurti/keisti aukas Permission703=Ištrinti aukas @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/lt_LT/bills.lang b/htdocs/langs/lt_LT/bills.lang index c40206e8d2d..a0f656f429a 100644 --- a/htdocs/langs/lt_LT/bills.lang +++ b/htdocs/langs/lt_LT/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=išankstinė (proforma) sąskaita-faktūra InvoiceProFormaDesc=Išankstinė sąskaita-faktūra yra tikros sąskaitos forma, bet neatvaizduojama realioje apskaitoje. InvoiceReplacement=Sąskaitos-faktūros pakeitimas InvoiceReplacementAsk=Sąskaitos-faktūros pakeitimas sąskaita-faktūra -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreditinė sąskaita (kredito aviza) InvoiceAvoirAsk=Kreditinė sąskaita tikslinanti sąskaitą-faktūrą InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/lt_LT/companies.lang b/htdocs/langs/lt_LT/companies.lang index ff990678b36..4272211bf31 100644 --- a/htdocs/langs/lt_LT/companies.lang +++ b/htdocs/langs/lt_LT/companies.lang @@ -28,7 +28,7 @@ AliasNames=Pseudonimo pavadinimas (komercinis, prekės ženklas, ...) AliasNameShort=Alias Name Companies=Įmonės CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nė vienas Vendor=Vendor +Supplier=Vendor AddContact=Sukurti kontaktą AddContactAddress=Sukurti kontaktą / adresą EditContact=Redaguoti adresatą diff --git a/htdocs/langs/lt_LT/other.lang b/htdocs/langs/lt_LT/other.lang index eea79328a0e..7399591bf0c 100644 --- a/htdocs/langs/lt_LT/other.lang +++ b/htdocs/langs/lt_LT/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Intervencija %s buvo patvirtinta EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/lt_LT/website.lang b/htdocs/langs/lt_LT/website.lang index 9acf3675a3b..61265c3251d 100644 --- a/htdocs/langs/lt_LT/website.lang +++ b/htdocs/langs/lt_LT/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/lv_LV/accountancy.lang b/htdocs/langs/lv_LV/accountancy.lang index 5ae8808bf6b..7808991734b 100644 --- a/htdocs/langs/lv_LV/accountancy.lang +++ b/htdocs/langs/lv_LV/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Rezultātu uzskaites konts (zaudējumi) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Noslēguma žurnāls ACCOUNTING_ACCOUNT_TRANSFER_CASH=Grāmatvedības konts bankas pārskaitījuma starp konts +TransitionalAccount=Pārejas bankas konta pārejas konts ACCOUNTING_ACCOUNT_SUSPENSE=Gaidīšanas grāmatvedības konts DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations @@ -216,7 +217,7 @@ DescThirdPartyReport=Konsultējieties ar trešo pušu klientu un pārdevēju sar ListAccounts=Grāmatvedības kontu saraksts UnknownAccountForThirdparty=Nezināmas trešās puses konts. Mēs izmantosim %s UnknownAccountForThirdpartyBlocking=Nezināms trešās puses konts. Bloķēšanas kļūda -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Trešās puses konts nav definēts vai trešā persona nav zināma. Mēs izmantosim %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Trešās puses konts nav definēts vai trešā persona nav zināma. Bloķēšanas kļūda. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Nav noteikts nezināms trešās puses konts un gaidīšanas konts. Bloķēšanas kļūda PaymentsNotLinkedToProduct=Maksājums nav saistīts ar kādu produktu / pakalpojumu @@ -292,7 +293,7 @@ Modelcsv_cogilog=Eksportēt uz Cogilog Modelcsv_agiris=Eksports uz Agiris Modelcsv_openconcerto=Eksportēt OpenConcerto (tests) Modelcsv_configurable=Eksportēt CSV konfigurējamu -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Eksporta FEC Modelcsv_Sage50_Swiss=Eksports uz Sage 50 Šveici ChartofaccountsId=Kontu konts. Id @@ -317,9 +318,9 @@ WithoutValidAccount=Bez derīga veltīta konta WithValidAccount=Izmantojot derīgu veltītu kontu ValueNotIntoChartOfAccount=Šī grāmatvedības konta vērtība konta diagrammā nepastāv AccountRemovedFromGroup=Konts ir noņemts no grupas -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Vietējā pārdošana +SaleExport=Eksporta pārdošana +SaleEEC=Pārdošana EEK ## Dictionary Range=Range of accounting account @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Līnijas, kas vēl nav saistītas, izmantojiet izvēl ## Import ImportAccountingEntries=Grāmatvedības ieraksti -DateExport=Date export +DateExport=Eksporta datums WarningReportNotReliable=Brīdinājums. Šis pārskats nav balstīts uz grāmatvedi, tādēļ tajā nav darījumu, kas Manuāli ir manuāli modificēts. Ja žurnāls ir atjaunināts, grāmatvedības skats ir precīzāks. ExpenseReportJournal=Izdevumu atskaites žurnāls InventoryJournal=Inventāra žurnāls diff --git a/htdocs/langs/lv_LV/admin.lang b/htdocs/langs/lv_LV/admin.lang index c0937d9be97..226e333fcd1 100644 --- a/htdocs/langs/lv_LV/admin.lang +++ b/htdocs/langs/lv_LV/admin.lang @@ -149,7 +149,7 @@ SystemToolsAreaDesc=Šī sadaļa nodrošina administrēšanas funkcijas. Izmanto Purge=Tīrīt PurgeAreaDesc=Šī lapa ļauj izdzēst visus Dolibarr ģenerētos vai glabātos failus (pagaidu faili vai visi faili %s direktorijā). Šīs funkcijas izmantošana parasti nav nepieciešama. Tas tiek nodrošināts kā risinājums lietotājiem, kuru Dolibarr uztur pakalpojumu sniedzējs, kas nepiedāvā atļaujas, lai dzēstu tīmekļa servera ģenerētos failus. PurgeDeleteLogFile=Dzēsiet žurnāla failus, tostarp %s, kas definēti Syslog modulim (nav datu pazaudēšanas riska). -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Dzēst visus pagaidu failus (nav datu zaudēšanas riska). Piezīme. Dzēšana tiek veikta tikai tad, ja pagaidu katalogs tika izveidots pirms 24 stundām. PurgeDeleteTemporaryFilesShort=Dzēst pagaidu failus PurgeDeleteAllFilesInDocumentsDir=Dzēsiet visus failus direktorijā: %s .
Tas izdzēsīs visus radītos dokumentus, kas saistīti ar elementiem (trešajām personām, rēķiniem utt.), ECM modulī augšupielādētiem failiem, datu bāzes rezerves izgāztuvēm un pagaidu failus. PurgeRunNow=Tīrīt tagad @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Izvēles rūtiņas no tabulas ExtrafieldLink=Saite uz objektu ComputedFormula=Aprēķinātais lauks ComputedFormulaDesc=Šeit varat ievadīt formulu, izmantojot citas objekta īpašības vai jebkuru PHP kodējumu, lai iegūtu dinamisku aprēķināto vērtību. Jūs varat izmantot jebkuru PHP saderīgu formulu, ieskaitot "?" stāvokļa operators un šāds globāls objekts: $ db, $ conf, $ langs, $ mysoc, $ user, $ object .
BRĪDINĀJUMS : tikai daži $ $ rekvizīti objekts var būt pieejams. Ja jums nav vajadzīgo īpašību, vienkārši ielādējiet objektu savā formulā, piemēram, otrajā piemērā.
Izmantojot aprēķināto lauku, jūs nevarat ievadīt sev nekādu vērtību no saskarnes. Arī tad, ja ir sintakses kļūda, formula nevar atgriezties neko.

Piemērs formulas:
$ object-> id <10? apaļa ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2)

Piemērs, lai ielādētu objektu
(($ reloadedobj = jauns Societe ($ db)) & & ($ reloadedobj-> ielādēt ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj-> rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'

Cits piemērs formulas, lai piespiestu objektu slodzi un tā mātes objektu:
(($ reloadedobj = jauns uzdevums ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) & & ($ secondloadedobj = jauns projekts ($ db)) & & ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref: 'Vecāku projekts nav atrasts' +Computedpersistent=Veikt aprēķinātu lauku +ComputedpersistentDesc=Aprēķinātie papildu lauki tiks saglabāti datubāzē, taču vērtība tiks pārrēķināta tikai tad, kad mainīsies šī lauka objekts. Ja aprēķinātais lauks ir atkarīgs no citiem objektiem vai globāliem datiem, šī vērtība var būt nepareiza! ExtrafieldParamHelpPassword=Atstājot šo lauku tukšu, tas nozīmē, ka šī vērtība tiks saglabāta bez šifrēšanas (laukam jābūt paslēptai tikai ar zvaigznīti uz ekrāna).
Iestatiet 'auto', lai izmantotu noklusējuma šifrēšanas kārtulu, lai saglabātu paroli datubāzē (pēc tam vērtība lasīt būs ashh tikai, nav iespējams izgūt sākotnējo vērtību) ExtrafieldParamHelpselect=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
kods3, vērtība3 < br> ...

Lai saraksts būtu atkarīgs no cita papildinošā atribūtu saraksta:
1, vērtība1 | opcijas_ vecāku_līmeņa kods : vecāku_skava
2, vērtība2 | opcijas_ vecāku saraksts_code : parent_key

Lai saraksts būtu atkarīgs no cita saraksta:
1, vērtība1 | vecāku saraksts_code : vecāku_skava
2, vērtība2 | vecāku saraksts_code : vecāku_poga ExtrafieldParamHelpcheckbox=Vērtību sarakstam jābūt rindām ar formāta atslēgu, vērtība (kur atslēga nevar būt '0')

, piemēram,: 1, vērtība1
2, vērtība2
3, vērtība3 < br> ... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Vērtību sarakstam jābūt rindām ar formāta atslēg ExtrafieldParamHelpsellist=Vērtību saraksts nāk no tabulas
Sintakse: table_name: label_field: id_field :: filtrs
piemērs: c_typent: libelle: id :: filtrs

- idfilter ir obligāti primārs int key | - filtrs var būt vienkāršs tests (piemēram, aktīvs = 1), lai parādītu tikai aktīvo vērtību
filtru raganā var izmantot arī $ ID $, kas ir pašreizējā objekta pašreizējais ID. $
, ja vēlaties filtrēt uz ekrāna, izmantojiet sintaksi extra.fieldcode = ... (ja lauka kods ir extrafield kods)

Lai saraksts būtu atkarīgs no cita papildu atribūtu saraksta: < br> c_typent: libelle: id: options_ vecāku_list_code | vecāku_krāsa: filtrs

Lai iegūtu sarakstu atkarībā no cita saraksta:
c_typent: libelle: id: parent_list_code | vecāku_ sleja: filtrs ExtrafieldParamHelpchkbxlst=Vērtību saraksts nāk no tabulas
Sintakse: table_name: label_field: id_field :: filtrs
piemērs: c_typent: libelle: id :: filtrs

filtrs var būt vienkāršs tests (piemēram, aktīvs = 1 ), lai parādītu tikai aktīvo vērtību
Jūs varat arī izmantot $ ID $ filtru raganā, kas ir pašreizējā objekta pašreizējais ID
Lai SELECT veiktu filtru, izmantojiet $ SEL $
, ja vēlaties filtrēt uz ekrāna. syntax extra.fieldcode = ... (ja lauka kods ir extrafield kods)

Lai iegūtu sarakstu atkarībā no cita papildu atribūtu saraksta:
c_typent: libelle: id: options_ parent_list_code | vecāku_krāsa: filtrs

Lai iegūtu sarakstu atkarībā no cita saraksta:
c_typent: libelle: id: vecāku saraksts_code | vecāku_ sleja: filtrs ExtrafieldParamHelplink=Parametriem jābūt ObjectName: Classpath
Syntax: ObjectName: Classpath
Piemēri:
Societe: societe / class / societe.class.php
Kontakti: contact / class / contact.class.php +ExtrafieldParamHelpSeparator=Vienkāršam atdalītājam jāglabā tukšs
Iestatiet to uz 1, lai atdalītu atdalītāju (atvērts pēc noklusējuma)
Iestatiet to uz 2, lai atdalītu atdalītāju (noklusēts pēc noklusējuma) LibraryToBuildPDF=Bibliotēka, ko izmanto PDF veidošanai LocalTaxDesc=Dažas valstis var piemērot divus vai trīs nodokļus katrā rēķina rindā. Šādā gadījumā izvēlieties otrā un trešā nodokļa veidu un likmi. Iespējamie veidi ir:
1: vietējais nodoklis attiecas uz produktiem un pakalpojumiem bez tvertnes (localtax tiek aprēķināts bez nodokļa)
2: vietējie nodokļi attiecas uz produktiem un pakalpojumiem, ieskaitot vat (localtax tiek aprēķināta pēc summas + galvenais nodoklis) )
3: vietējie nodokļi attiecas uz produktiem bez cisternām (localtax tiek aprēķināta bez nodokļa)
4: vietējie nodokļi attiecas uz produktiem, ieskaitot tvertni (localtax tiek aprēķināta pēc summas + galvenā tvertne)
5: vietējais nodoklis, ko piemēro par pakalpojumiem bez vat (vietējais maksājums tiek aprēķināts bez nodokļa)
6: vietējiem nodokļiem, kas attiecas uz pakalpojumiem, ieskaitot mucu (vietējais maksājums tiek aprēķināts pēc summas + nodokļa) SMS=SMS @@ -804,7 +807,7 @@ Permission401=Lasīt atlaides Permission402=Izveidot/mainīt atlaides Permission403=Apstiprināt atlaides Permission404=Dzēst atlaides -Permission430=Use Debug Bar +Permission430=Izmantot Debug Bar Permission511=Lasīt algu maksājumus Permission512=Izveidojiet / modificējiet algu maksājumus Permission514=Dzēst algu maksājumus @@ -819,9 +822,9 @@ Permission532=Izveidot/mainīt pakalpojumus Permission534=Dzēst pakalpojumus Permission536=Skatīt/vadīt slēptos pakalpojumus Permission538=Eksportēt pakalpojumus -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Lasīt materiālu rēķinus +Permission651=Izveidot / atjaunināt materiālu rēķinus +Permission652=Dzēst materiālu rēķinus Permission701=Lasīt ziedojumus Permission702=Izveidot/mainīt ziedojumus Permission703=Dzēst ziedojumus @@ -841,12 +844,12 @@ Permission1101=Skatīt piegādes pasūtījumus Permission1102=Izveidot/mainīt piegādes pasūtījumus Permission1104=Apstiprināt piegādes pasūtījumus Permission1109=Dzēst piegādes pasūtījumus -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Lasiet piegādātāja priekšlikumus +Permission1122=Izveidojiet / modificējiet piegādātāja priekšlikumus +Permission1123=Apstipriniet piegādātāja priekšlikumus +Permission1124=Sūtīt piegādātāja priekšlikumus +Permission1125=Dzēst piegādātāja priekšlikumus +Permission1126=Aizvērt piegādātāja cenu pieprasījumus Permission1181=Lasīt piegādātājus Permission1182=Lasīt pirkuma pasūtījumus Permission1183=Izveidot / mainīt pirkuma pasūtījumus @@ -882,15 +885,15 @@ Permission2503=Pievienot vai dzēst dokumentus Permission2515=Iestatīt dokumentu direktorijas Permission2801=Lietot FTP klientu lasīšanas režīmā (pārlūko un lejupielādē) Permission2802=Lietot FTP klientu rakstīšanas režīmā (dzēst vai augšupielādēt failus) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Lasīt arhivētos notikumus un pirkstu nospiedumus +Permission4001=Skatīt darbiniekus +Permission4002=Izveidot darbiniekus +Permission4003=Dzēst darbiniekus +Permission4004=Eksportēt darbiniekus +Permission10001=Lasīt tīmekļa vietnes saturu +Permission10002=Izveidot / mainīt vietnes saturu (html un javascript saturu) +Permission10003=Izveidojiet / modificējiet vietnes saturu (dinamisko php kodu). Bīstami, tie ir jārezervē ierobežotiem izstrādātājiem. +Permission10005=Dzēst vietnes saturu Permission20001=Lasiet atvaļinājuma pieprasījumus (jūsu atvaļinājumu un jūsu padoto atvaļinājumu) Permission20002=Izveidojiet / modificējiet atvaļinājuma pieprasījumus (jūsu atvaļinājumu un jūsu padotajiem) Permission20003=Dzēst atvaļinājumu pieprasījumus @@ -904,19 +907,19 @@ Permission23004=Izpildīt ieplānoto uzdevumu Permission50101=Izmantot pārdošanas vietu Permission50201=Lasīt darījumus Permission50202=Importēt darījumus -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Iesiet produktus un rēķinus ar grāmatvedības kontiem +Permission50411=Lasiet operācijas virsgrāmatā +Permission50412=Rakstīt / rediģēt operācijas virsgrāmatā +Permission50414=Dzēst operācijas virsgrāmatā +Permission50415=Izdzēsiet visas darbības pēc gada un žurnāla žurnālā +Permission50418=Virsgrāmatas eksporta operācijas +Permission50420=Ziņot un eksportēt pārskatus (apgrozījums, bilance, žurnāli, virsgrāmatas) +Permission50430=Definēt un slēgt fiskālo periodu +Permission50440=Pārvaldiet kontu sarakstu, grāmatvedības uzskaiti +Permission51001=Lasīt krājumus +Permission51002=Izveidot / atjaunināt aktīvus +Permission51003=Dzēst aktīvus +Permission51005=Aktīvu iestatīšanas veidi Permission54001=Drukāt Permission55001=Lasīt aptaujas Permission55002=Izveidot/labot aptaujas @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Iestatīšanas parametrus var iestatīt tikai administrator SystemInfoDesc=Sistēmas informācija ir dažādi tehniskā informācija jums tikai lasīšanas režīmā un redzama tikai administratoriem. SystemAreaForAdminOnly=Šī joma ir pieejama tikai administratora lietotājiem. Dolibarr lietotāja atļaujas nevar mainīt šo ierobežojumu. CompanyFundationDesc=Rediģējiet uzņēmuma / organizācijas informāciju. Noklikšķiniet uz pogas "%s" vai "%s" lapas apakšdaļā. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. +AccountantDesc=Ja jums ir ārējais grāmatvedis / grāmatvedis, varat rediģēt šeit savu informāciju. AccountantFileNumber=Grāmatveža kods DisplayDesc=Šeit var mainīt parametrus, kas ietekmē Dolibarr izskatu un uzvedību. AvailableModules=Pieejamās progrmma / moduļi @@ -1923,5 +1926,5 @@ IFTTTDesc=Šis modulis ir paredzēts, lai aktivizētu IFTTT notikumus un / vai v UrlForIFTTT=URL beigu punkts IFTTT YouWillFindItOnYourIFTTTAccount=Jūs atradīsiet to savā IFTTT kontā EndPointFor=Beigu punkts %s: %s -DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +DeleteEmailCollector=Dzēst e-pasta kolekcionāru +ConfirmDeleteEmailCollector=Vai tiešām vēlaties dzēst šo e-pasta kolekcionāru? diff --git a/htdocs/langs/lv_LV/bills.lang b/htdocs/langs/lv_LV/bills.lang index 47690bc4ba5..44f7d7838b1 100644 --- a/htdocs/langs/lv_LV/bills.lang +++ b/htdocs/langs/lv_LV/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma rēķins InvoiceProFormaDesc=Formāta rēķins ir attēls patiesu rēķina, bet nav nekādas grāmatvedības uzskaites vērtības. InvoiceReplacement=Nomaiņas rēķins InvoiceReplacementAsk=Nomaiņa rēķins par rēķinu -InvoiceReplacementDesc= Nomaiņa rēķins tiek izmantots, lai atceltu un pilnībā nomainītu rēķinu bez jau saņemta maksājuma.

Piezīme. Var nomainīt tikai rēķinus bez maksājuma. Ja rēķins, kuru nomaināt, vēl nav aizvērts, tas tiks automātiski slēgts, lai "pamestu". +InvoiceReplacementDesc=Rezerves rēķinu izmanto, lai pilnībā aizstātu rēķinu bez maksājuma, kas jau saņemts.

Piezīme: var nomainīt tikai rēķinus, kuriem nav maksājuma. Ja aizstātais rēķins vēl nav slēgts, tas tiks automātiski aizvērts, lai to atteiktu. InvoiceAvoir=Kredīta piezīme InvoiceAvoirAsk=Kredīta piezīme, lai koriģētu rēķinu InvoiceAvoirDesc= Kredīta piezīme ir negatīvs rēķins, ko izmanto, lai izlabotu faktu, ka rēķinā parādīta summa, kas atšķiras no faktiski samaksātās summas (piemēram, klients kļūdaini samaksājis pārāk daudz vai nemaksās pilno summu kopš daži produkti tika atgriezti). diff --git a/htdocs/langs/lv_LV/cashdesk.lang b/htdocs/langs/lv_LV/cashdesk.lang index 1c71ba8aa6c..461fd16da52 100644 --- a/htdocs/langs/lv_LV/cashdesk.lang +++ b/htdocs/langs/lv_LV/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Termināļu skaits TerminalSelect=Atlasiet termināli, kuru vēlaties izmantot: POSTicket=POS biļete -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Izmantojiet telefonu pamata izkārtojumu diff --git a/htdocs/langs/lv_LV/companies.lang b/htdocs/langs/lv_LV/companies.lang index 4061ed23e72..349661c2a6f 100644 --- a/htdocs/langs/lv_LV/companies.lang +++ b/htdocs/langs/lv_LV/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolūtā pārdevēju atlaides (ievada visi li SupplierAbsoluteDiscountMy=Absolūtā pārdevēja atlaides (ievadījis pats) DiscountNone=Nav Vendor=Pārdevējs +Supplier=Pārdevējs AddContact=Izveidot kontaktu AddContactAddress=Izveidot kontaktu/adresi EditContact=Labot kontaktu diff --git a/htdocs/langs/lv_LV/mails.lang b/htdocs/langs/lv_LV/mails.lang index dd400d13e7d..9eaa536b32c 100644 --- a/htdocs/langs/lv_LV/mails.lang +++ b/htdocs/langs/lv_LV/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Grupas e-pasti OneEmailPerRecipient=Viens e-pasts katram adresātam (pēc noklusējuma viens e-pasts uz vienu atlasīto ierakstu) WarningIfYouCheckOneRecipientPerEmail=Brīdinājums. Ja atzīmēsit šo izvēles rūtiņu, tas nozīmē, ka tiks nosūtīts tikai viens e-pasta ziņojums, izvēloties vairākus atšķirīgus ierakstus, tādēļ, ja jūsu ziņojumā ir iekļauti aizstājējumultiņi, kas attiecas uz ieraksta datiem, tos nevar aizstāt. ResultOfMailSending=Masu sūtīšanas rezultāts -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Numurs izvēlēts +NbIgnored=Numurs ignorēts +NbSent=Sūtītais numurs SentXXXmessages=%s ziņa (s) nosūtīta. ConfirmUnvalidateEmailing=Vai tiešām vēlaties mainīt e-pastu %s uz melnraksta statusu? MailingModuleDescContactsWithThirdpartyFilter=Sazinieties ar klientu filtriem diff --git a/htdocs/langs/lv_LV/members.lang b/htdocs/langs/lv_LV/members.lang index 1b53052c51a..03971532446 100644 --- a/htdocs/langs/lv_LV/members.lang +++ b/htdocs/langs/lv_LV/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Izvēlieties statistiku kuru vēlaties izlasīt ... MenuMembersStats=Statistika LastMemberDate=Pēdējā biedra datums LatestSubscriptionDate=Jaunākais piereģistrēšanās datums -MemberNature=Nature of member +MemberNature=Dalībnieka raksturs Public=Informācija ir publiska NewMemberbyWeb=Jauns dalībnieks pievienots. Gaida apstiprinājumu NewMemberForm=Jauna dalībnieka forma diff --git a/htdocs/langs/lv_LV/other.lang b/htdocs/langs/lv_LV/other.lang index 78f4e29d191..6a164cc5ef3 100644 --- a/htdocs/langs/lv_LV/other.lang +++ b/htdocs/langs/lv_LV/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Klientu rēķinu skaits NumberOfSupplierProposals=Pārdevēja priekšlikumu skaits NumberOfSupplierOrders=Pirkuma pasūtījumu skaits NumberOfSupplierInvoices=Pārdevēja rēķinu skaits +NumberOfContracts=Līgumu skaits NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Vienību skaits pārdošanas pasūtījumos NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Vienību skaits pārdevēja priekšlikumos NumberOfUnitsSupplierOrders=Vienību skaits pirkuma pasūtījumos NumberOfUnitsSupplierInvoices=Vienību skaits pārdevēja rēķinos +NumberOfUnitsContracts=Vienību skaits līgumos EMailTextInterventionAddedContact=Jums ir piešķirta jauna iejaukšanās %s. EMailTextInterventionValidated=Iejaukšanās %s ir apstiprināta. EMailTextInvoiceValidated=Rēķins %s ir apstiprināts. diff --git a/htdocs/langs/lv_LV/products.lang b/htdocs/langs/lv_LV/products.lang index 6dd9360e6b9..7db31a84a8e 100644 --- a/htdocs/langs/lv_LV/products.lang +++ b/htdocs/langs/lv_LV/products.lang @@ -159,7 +159,7 @@ SuppliersPrices=Pārdevēja cenas SuppliersPricesOfProductsOrServices=Pārdevēja cenas (produktiem vai pakalpojumiem) CustomCode=Muita / Prece / HS kods CountryOrigin=Izcelsmes valsts -Nature=Nature of produt (material/finished) +Nature=Izstrādājuma veids (materiāls/gatavs) ShortLabel=Īsais nosaukums Unit=Vienība p=u. diff --git a/htdocs/langs/lv_LV/salaries.lang b/htdocs/langs/lv_LV/salaries.lang index 07b280565e6..816227ad4cb 100644 --- a/htdocs/langs/lv_LV/salaries.lang +++ b/htdocs/langs/lv_LV/salaries.lang @@ -18,4 +18,4 @@ LastSalaries=Jaunākie %s algu maksājumi AllSalaries=Visi algu maksājumi SalariesStatistics=Algas statistika # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Algas un maksājumi diff --git a/htdocs/langs/lv_LV/stocks.lang b/htdocs/langs/lv_LV/stocks.lang index 26ecdf29269..7a6ff663492 100644 --- a/htdocs/langs/lv_LV/stocks.lang +++ b/htdocs/langs/lv_LV/stocks.lang @@ -66,12 +66,12 @@ RuleForStockManagementIncrease=Izvēlieties noteikumu automātiskai krājumu pal DeStockOnBill=Samaziniet reālos krājumus klienta rēķina / kredītzīmes atzīmēšanā DeStockOnValidateOrder=Samaziniet reālos krājumus pārdošanas pasūtījuma apstiprināšanā DeStockOnShipment=Samazināt reālos krājumus piegādes apstiprinājuma gadījumā -DeStockOnShipmentOnClosing=Decrease real stocks when shipping is set to closed +DeStockOnShipmentOnClosing=Samazināt reālos krājumus, kad sūtījums ir noslēgts ReStockOnBill=Palieliniet reālos krājumus, apstiprinot pārdevēja rēķinu / kredīta piezīmi ReStockOnValidateOrder=Palieliniet reālo krājumu pirkšanas pasūtījuma apstiprinājumā ReStockOnDispatchOrder=Palieliniet reālos krājumus manuālajā nosūtīšanā noliktavā, pēc pirkuma pasūtījuma saņemšanas -StockOnReception=Increase real stocks on validation of reception -StockOnReceptionOnClosing=Increase real stocks when reception is set to closed +StockOnReception=Palieliniet reālos krājumus, kad apstiprināta saņemšana +StockOnReceptionOnClosing=Palieliniet reālos krājumus, kad saņemšana ir slēgta OrderStatusNotReadyToDispatch=Lai vēl nav vai vairs statusu, kas ļauj sūtījumiem produktu krājumu noliktavās. StockDiffPhysicTeoric=Explanation for difference between physical and virtual stock NoPredefinedProductToDispatch=Nav iepriekš produktu šo objektu. Līdz ar to nav nosūtot noliktavā ir nepieciešama. diff --git a/htdocs/langs/lv_LV/website.lang b/htdocs/langs/lv_LV/website.lang index 1ceefd882d9..b751bddd422 100644 --- a/htdocs/langs/lv_LV/website.lang +++ b/htdocs/langs/lv_LV/website.lang @@ -98,8 +98,8 @@ NoWebSiteCreateOneFirst=Vēl nav izveidota neviena vietne. Vispirms izveidojiet GoTo=Iet uz DynamicPHPCodeContainsAForbiddenInstruction=Jūs pievienojat dinamisku PHP kodu, kas satur PHP norādījumu ' %s ', kas pēc noklusējuma ir aizliegta kā dinamisks saturs (skatiet slēptās opcijas WEBSITE_PHP_ALLOW_xxx, lai palielinātu atļauto komandu sarakstu). NotAllowedToAddDynamicContent=Jums nav atļaujas pievienot vai rediģēt PHP dinamisko saturu tīmekļa vietnēs. Uzdodiet atļauju vai vienkārši saglabājiet kodu php tagos nemainītā veidā. -ReplaceWebsiteContent=Nomainiet vietnes saturu +ReplaceWebsiteContent=Meklēt vai aizstāt vietnes saturu DeleteAlsoJs=Vai arī dzēst visus šajā tīmekļa vietnē raksturīgos javascript failus? DeleteAlsoMedias=Vai arī dzēst visus šajā tīmekļa vietnē esošos mediju failus? # Export -MyWebsitePages=My website pages +MyWebsitePages=Manas vietnes lapas diff --git a/htdocs/langs/lv_LV/withdrawals.lang b/htdocs/langs/lv_LV/withdrawals.lang index 43d51376581..841f1627174 100644 --- a/htdocs/langs/lv_LV/withdrawals.lang +++ b/htdocs/langs/lv_LV/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=Attiecībā uz banku kontiem, izmantojot IBAN / BIC / SWIFT BankToReceiveWithdraw=Bankas konta saņemšana CreditDate=Kredīts WithdrawalFileNotCapable=Unable to generate withdrawal receipt file for your country %s (Your country is not supported) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Rādīt tiešā debeta rīkojumu +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Tomēr, ja rēķinam ir vismaz viens tiešā debeta maksājuma rīkojums, kas vēl nav apstrādāts, tas netiks iestatīts kā maksāts, lai varētu veikt iepriekšēju izņemšanas pārvaldību. DoStandingOrdersBeforePayments=Šī cilne ļauj pieprasīt tiešā debeta maksājuma uzdevumu. Kad esat pabeidzis, dodieties uz izvēlni Bank-> Tiešais debets, lai pārvaldītu tiešā debeta maksājuma uzdevumu. Ja maksājuma uzdevums ir slēgts, rēķins tiek automātiski reģistrēts, un rēķins tiek slēgts, ja atlikušais maksājums ir nulle. WithdrawalFile=Izstāšanās fails SetToStatusSent=Nomainīt uz statusu "Fails nosūtīts" diff --git a/htdocs/langs/mk_MK/accountancy.lang b/htdocs/langs/mk_MK/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/mk_MK/accountancy.lang +++ b/htdocs/langs/mk_MK/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/mk_MK/admin.lang b/htdocs/langs/mk_MK/admin.lang index 18fac329b2d..c021eeb4cff 100644 --- a/htdocs/langs/mk_MK/admin.lang +++ b/htdocs/langs/mk_MK/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/mk_MK/bills.lang b/htdocs/langs/mk_MK/bills.lang index a5db0421635..aef2b5fce2f 100644 --- a/htdocs/langs/mk_MK/bills.lang +++ b/htdocs/langs/mk_MK/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Про Фактура InvoiceProFormaDesc= Профактурата е иста како вистинска фактура, но нема сметководствена вредност. InvoiceReplacement=Замена на фактура InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/mk_MK/companies.lang b/htdocs/langs/mk_MK/companies.lang index e88e4a1dee0..5a6e506d90e 100644 --- a/htdocs/langs/mk_MK/companies.lang +++ b/htdocs/langs/mk_MK/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/mk_MK/other.lang b/htdocs/langs/mk_MK/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/mk_MK/other.lang +++ b/htdocs/langs/mk_MK/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/mk_MK/website.lang b/htdocs/langs/mk_MK/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/mk_MK/website.lang +++ b/htdocs/langs/mk_MK/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/mn_MN/accountancy.lang b/htdocs/langs/mn_MN/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/mn_MN/accountancy.lang +++ b/htdocs/langs/mn_MN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/mn_MN/admin.lang b/htdocs/langs/mn_MN/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/mn_MN/admin.lang +++ b/htdocs/langs/mn_MN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/mn_MN/bills.lang b/htdocs/langs/mn_MN/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/mn_MN/bills.lang +++ b/htdocs/langs/mn_MN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/mn_MN/companies.lang b/htdocs/langs/mn_MN/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/mn_MN/companies.lang +++ b/htdocs/langs/mn_MN/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/mn_MN/other.lang b/htdocs/langs/mn_MN/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/mn_MN/other.lang +++ b/htdocs/langs/mn_MN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/mn_MN/website.lang b/htdocs/langs/mn_MN/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/mn_MN/website.lang +++ b/htdocs/langs/mn_MN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/nb_NO/accountancy.lang b/htdocs/langs/nb_NO/accountancy.lang index 1c296c94956..1357c7572c0 100644 --- a/htdocs/langs/nb_NO/accountancy.lang +++ b/htdocs/langs/nb_NO/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Resultatregnskapskonto (tap) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Avslutningsjournal ACCOUNTING_ACCOUNT_TRANSFER_CASH=Regnskapkonto for overgangsbasert overføring +TransitionalAccount=Overgangsbasert bankoverføringskonto ACCOUNTING_ACCOUNT_SUSPENSE=Regnskapskonto for vent DONATION_ACCOUNTINGACCOUNT=Regnskapskonto for registrering av donasjoner @@ -216,7 +217,7 @@ DescThirdPartyReport=Liste over tredjeparts kunder og leverandører og deres reg ListAccounts=Liste over regnskapskontoer UnknownAccountForThirdparty=Ukjent tredjepartskonto. Vi vil bruke %s UnknownAccountForThirdpartyBlocking=Ukjent tredjepartskonto. Blokkeringsfeil -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. We will use %s +ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Tredjepartskonto ikke definert eller tredjepart ukjent. Vi bruker %s ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Tredjepartskonto ikke definert eller tredjepart ukjent. Blokkeringsfeil. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Ukjent tredjepartskonto og ventekonto ikke definert. Blokkeringsfeil PaymentsNotLinkedToProduct=Betaling ikke knyttet til noen vare/tjeneste @@ -292,7 +293,7 @@ Modelcsv_cogilog=Eksport til Cogilog Modelcsv_agiris=Eksport til Agiris Modelcsv_openconcerto=Eksport for OpenConcerto (Test) Modelcsv_configurable=Eksport CSV Konfigurerbar -Modelcsv_FEC=Export FEC +Modelcsv_FEC=Eksporter FEC Modelcsv_Sage50_Swiss=Eksport for Sage 50 Switzerland ChartofaccountsId=Kontoplan ID @@ -317,9 +318,9 @@ WithoutValidAccount=Uten gyldig dedikert konto WithValidAccount=Med gyldig dedikert konto ValueNotIntoChartOfAccount=Denne verdien av regnskapskonto eksisterer ikke i kontoplanen AccountRemovedFromGroup=Kontoen er fjernet fra gruppen -SaleLocal=Local sale -SaleExport=Export sale -SaleEEC=Sale in EEC +SaleLocal=Lokalt salg +SaleExport=Eksportsalg +SaleEEC=Salg i EU ## Dictionary Range= Oversikt over regnskapskonto @@ -340,7 +341,7 @@ UseMenuToSetBindindManualy=Linjer som ennå ikke er bundet, bruk menyen
%s ). Bruk av denne funksjonen er normalt ikke nødvendig. Den leveres som en løsning for brukere hvis Dolibarr er vert for en leverandør som ikke tilbyr tillatelser for å slette filer generert av webserveren. PurgeDeleteLogFile=Slett loggfiler, inkludert %s definert for Syslog-modulen (ingen risiko for å miste data) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Slett alle midlertidige filer (ingen risiko for å miste data). Merk: Slettingen gjøres bare hvis temp-katalogen ble opprettet for over 24 timer siden. PurgeDeleteTemporaryFilesShort=Slett temporære filer PurgeDeleteAllFilesInDocumentsDir=Slett alle filer i katalogen: %s .
Dette vil slette alle genererte dokumenter relatert til elementer (tredjeparter, fakturaer etc ...), filer lastet opp i ECM-modulen, database backup dumper og midlertidig filer. PurgeRunNow=Start utrenskning @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Avkrysningsbokser fra tabell ExtrafieldLink=Lenke til et objekt ComputedFormula=Beregnet felt ComputedFormulaDesc=Her kan du skrive inn en formel ved hjelp av andre objektegenskaper eller PHP-koding for å få en dynamisk beregningnet verdi. Du kan bruke PHP-kompatible formler, inkludert "?" operator og følgende globale objekt: $db, $conf, $langs, $mysoc, $user, $objekt .

ADVARSEL : Kanskje bare noen egenskaper på $objekt er tilgjengelig. Hvis du trenger egenskaper som ikke er lastet, kan du bare hente objektet i formelen din som i det andre eksempelet.
Ved å bruke et beregnet felt betyr det at du ikke selv kan angi noen verdi fra grensesnittet. Også, hvis det er en syntaksfeil, kan det hende formelen ikke returnerer noe.

Eksempel på formel:
$objekt->id<10? round ($object->id / 2, 2) : ($object-> id + 2 *$user->id) * (int) substr($mysoc->zip, 1, 2)

Eksempel på å ny innlasting av objekt
(($reloadedobj = new Societe ($db)) && ($reloadedobj->fetch($obj-> id? $ obj-> id: ($obj-> rowid? $obj-> rowid: $object-> id))> 0))? $reloadedobj-> array_options ['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Annet eksempel på formel for å tvinge lasting av objekt og dets overordnede objekt:
(($reloadedobj = Ny oppgave ($db)) && ($reloadedobj->fetch($objekt->id)> 0) && ($secondloadedobj = nytt prosjekt ($db)) && ($secondloadedobj->fetch($reloadedobj-> fk_project )> 0))? $secondloadedobj-> ref: 'Foreldreprosjekt ikke funnet' +Computedpersistent=Lagre beregnede felt +ComputedpersistentDesc=Beregnede ekstrafelt vil bli lagret i databasen, men verdien blir bare omregnet når objektet til dette feltet endres. Hvis det beregnede feltet avhenger av andre objekter eller globale data, kan denne verdien være feil! ExtrafieldParamHelpPassword=Hvis dette feltet er tomt, vil denne verdien bli lagret uten kryptering (feltet må bare skjules med stjerne på skjermen).
Angi 'auto' for å bruke standard krypteringsregel for å lagre passordet i databasen (da vil verdiavlesning være bare hash, uten noen måte å hente opprinnelig verdi på) ExtrafieldParamHelpselect=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')

for eksempel:
1,verdi1
2,verdi2
kode3,verdi3
...

For å få listen avhengig av en annen komplementær attributtliste:
1,verdi1|options_parent_list_code:parent_key
2,value2|options_parent_list_code: parent_key

For å få listen avhengig av en annen liste:
1,verdi1|parent_list_code:parent_key
2,value2|parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')

for eksempel:
1,verdi1
2,verdi2
3,verdi3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Liste over verdier må være linjer med formatet nøkke ExtrafieldParamHelpsellist=Liste over verdier kommer fra en tabell
Syntaks: tabellnavn: label_field: id_field::filter
Eksempel: c_typent: libelle:id::filter

- idfilter er nødvendigvis en primær int nøkkel
- filteret kan være en enkel test (f.eks. aktiv = 1) for å vise bare aktiv verdi
Du kan også bruke $ID$ i filtre, som er gjeldende ID for nåværende objekt
For å utføre en SELECT i filtre, bruk $SEL$
Hvis du vil filtrere på ekstrafelt, bruk syntaks extra.fieldcode=... (der feltkoden er koden til ekstrafelt)

For å få listen avhengig av en annen komplementær attributtliste:
c_typent:libelle:id:options_parent_list_code | parent_column:filter

For å få listen avhengig av en annen liste:
c_typent:libelle:id:parent_list_code |parent_column:filter ExtrafieldParamHelpchkbxlst=Liste over verdier kommer fra en tabell
Syntaks: table_name:label_field:id_field::filter
Eksempel: c_typent:libelle:id::filter

filter kan være en enkel test (f.eks. Aktiv=1 ) for å vise bare aktiv verdi
Du kan også bruke $ID$ i filter, som er gjeldende ID for nåværende objekt
For å utføre en SELECT i filter, bruk $SEL$
Hvis du vil filtrere på ekstrafeltbruk bruk syntaks extra.fieldcode=... (der feltkoden er koden til ekstrafelt)

For å få listen avhengig av en annen komplementær attributtliste:
c_typent:libelle:id:options_parent_list_code |parent_column:filter

For å få listen avhengig av en annen liste:
c_typent:libelle:id:parent_list_code |parent_column:filter ExtrafieldParamHelplink=Parametere må være ObjectName: Classpath
Syntax: ObjectName: Classpath
Eksempler:
Societe: societe / class / societe.class.php
Kontakt: kontakt / class / contact.class.php +ExtrafieldParamHelpSeparator=Hold tom for en enkel separator
Sett dette til 1 for en kollapserende separator (åpen som standard)
Sett dette til 2 for en kollapserende separator (kollapset som standard) LibraryToBuildPDF=Bibliotek brukt for PDF-generering LocalTaxDesc=For noen land gjelder to eller tre skatter på hver fakturalinje. Dersom dette er tilfelle, velg type for andre og tredje skatt, samt sats. Mulig type:
1: lokalavgift gjelder på varer og tjenester uten mva (lokal avgift er beregnet beløp uten mva)
2: lokalavgift gjelder på varer og tjenester, inkludert merverdiavgift (lokalavgift beregnes på beløpet + hovedavgift)
3: lokalavgift gjelder på varer uten mva (lokalavgift er beregnet beløp uten mva)
4: lokalagift gjelder på varer inkludert mva (lokalavgift beregnes på beløpet + hovedavgift)
5: lokal skatt gjelder tjenester uten mva (lokalavgift er beregnet beløp uten mva)
6: lokalavgift gjelder på tjenester inkludert mva (lokalavgift beregnes på beløpet + mva) SMS=SMS @@ -766,10 +769,10 @@ Permission243=Slett kategorier Permission244=Se innholdet i skjulte kategorier Permission251=Vis andre brukere og grupper PermissionAdvanced251=Vis andre brukere -Permission252=Lage/endre andre brukere, grupper og deres rettigheter +Permission252=Les tillatelser fra andre brukere Permission253=Opprett/endre andre brukere, grupper og tillatelser PermissionAdvanced253=Opprett/endre interne/eksterne brukere og tillatelser -Permission254=Slette eller deaktivere andre brukere +Permission254=Opprett/modifiser kun eksterne brukere Permission255=Opprett/endre egen brukerinformasjon Permission256=Slett eller deaktiver andre brukere Permission262=Utvid tilgangen til alle tredjeparter (ikke bare tredjeparter der brukeren er en salgsrepresentant).
Virker ikke på eksterne brukere (alltid begrenset til egne tilbud, ordre, fakturaer, kontrakter mm).
Virker ikke på prosjekter (kun regler for prosjekttillatelser, synlighet og tildeling gjelder). @@ -804,7 +807,7 @@ Permission401=Vis rabatter Permission402=Opprett/endre rabatter Permission403=Valider rabatter Permission404=Slett rabatter -Permission430=Use Debug Bar +Permission430=Bruk Debug Bar Permission511=Les lønnsutbetalinger Permission512=Opprett/endre betaling av lønn Permission514=Slett utbetalinger av lønn @@ -819,9 +822,9 @@ Permission532=Opprett/endre tjenester Permission534=Slett tjenester Permission536=Administrer skjulte tjenester Permission538=Eksporter tjenester -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Les BOM (Bills of Materials) +Permission651=Opprett/oppdater BOM +Permission652=Slett BOM Permission701=Vis donasjoner Permission702=Opprett/endre donasjoner Permission703=Slett donasjoner @@ -841,12 +844,12 @@ Permission1101=Vis pakksedler Permission1102=Opprett/endre pakksedler Permission1104=Valider pakksedler Permission1109=Slett pakksedler -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Les leverandørtilbud +Permission1122=Opprett/modifiser leverandørtilbud +Permission1123=Bekreft leverandørtilbud +Permission1124=Send leverandørtilbud +Permission1125=Slett leverandørtilbud +Permission1126=Lukk leverandør prisforespørsler Permission1181=Vis leverandører Permission1182=Les innkjøpsordre Permission1183=Opprett/modifiser innkjøpsordre @@ -882,15 +885,15 @@ Permission2503=Send eller slett dokumenter Permission2515=Oppsett av dokumentmapper Permission2801=Bruk FTP-klient i lesemodus (bla gjennom og laste ned) Permission2802=Bruk FTP-klient i skrivemodus (slette eller laste opp filer) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content +Permission3200=Les arkiverte hendelser og fingeravtrykk +Permission4001=Se ansatte +Permission4002=Opprett ansatte +Permission4003=Slett ansatte +Permission4004=Eksporter ansatte +Permission10001=Les nettstedsinnhold +Permission10002=Opprett/endre innhold på nettstedet (html og javascript innhold) +Permission10003=Opprett/endre nettstedsinnhold (dynamisk PHP-kode). Farlig, må reserveres for erfarne utviklere. +Permission10005=Slett nettstedsinnhold Permission20001=Les permitteringsforespørsler (dine og dine underordnedes) Permission20002=Opprett/endre permisjonene dine (dine og dine underordnedes) Permission20003=Slett ferieforespørsler @@ -904,19 +907,19 @@ Permission23004=Utfør planlagt oppgave Permission50101=Bruk utsalgssted Permission50201=Les transaksjoner Permission50202=Importer transaksjoner -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Tilknytt varer og fakturaer til regnskapskontoer +Permission50411=Les operasjoner i hovedbok +Permission50412=Skriv/rediger operasjoner i hovedbok +Permission50414=Slett operasjoner i hovedbok +Permission50415=Slett alle operasjoner etter år og journal i hovedbok +Permission50418=Eksporter operasjoner fra hovedboken +Permission50420=Rapporter og eksportrapporter (omsetning, balanse, journaler, hovedbok) +Permission50430=Definer og lukk en regnskapsperiode +Permission50440=Administrer kontooversikt, oppsett av regnskap +Permission51001=Les eiendeler +Permission51002=Opprett/oppdater eiendeler +Permission51003=Slett eiendeler +Permission51005=Oppsett av aktivatyper Permission54001=Skriv ut Permission55001=Les meningsmålinger Permission55002=Opprett/endre meningsmålinger @@ -1110,7 +1113,7 @@ AreaForAdminOnly=Oppsettparametere kan bare angis av administratorbrukere Proforma faktura er et bilde av en ekte faktura, men har ingen verdi i regnskapsføring. InvoiceReplacement=Erstatningsfaktura InvoiceReplacementAsk=Erstatningsfaktura for faktura -InvoiceReplacementDesc=Erstatningsfaktura brukes til å avbryte og erstatte en faktura uten at betaling allerede er mottatt.

Merk: Bare faktura uten innbetaling kan erstattes. Hvis ikke faktura er lukket, vil den bli automatisk satt til 'forlatt'. +InvoiceReplacementDesc=Erstatningsfaktura brukes til å erstatte en faktura uten at betaling allerede mottatt.

Merk: Bare fakturaer uten innbetaling kan erstattes. Hvis fakturaen du erstatter, ikke er avsluttet, blir den automatisk stengt for å "forlates". InvoiceAvoir=Kreditnota InvoiceAvoirAsk=Kreditnota for å korrigere faktura InvoiceAvoirDesc=En kreditnota er en negativ faktura som brukes for å løse situasjoner hvor en faktura har et annet beløp enn det som virkelig er betalt (fordi kunden har betalt for lite ved en feil, eller for eksempel ikke ønsker å betale alt fordi han har returnert noen varer). diff --git a/htdocs/langs/nb_NO/cashdesk.lang b/htdocs/langs/nb_NO/cashdesk.lang index 9dcab394ae2..9a1c46f65a2 100644 --- a/htdocs/langs/nb_NO/cashdesk.lang +++ b/htdocs/langs/nb_NO/cashdesk.lang @@ -68,4 +68,4 @@ Terminal=Terminal NumberOfTerminals=Antall terminaler TerminalSelect=Velg terminalen du vil bruke: POSTicket=POS Billett -BasicPhoneLayout=Use basic layout for phones +BasicPhoneLayout=Bruk grunnleggende oppsett for telefoner diff --git a/htdocs/langs/nb_NO/companies.lang b/htdocs/langs/nb_NO/companies.lang index 9fc215894a4..96cb91248e5 100644 --- a/htdocs/langs/nb_NO/companies.lang +++ b/htdocs/langs/nb_NO/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolutte leverandørrabatter (oppgitt av alle SupplierAbsoluteDiscountMy=Absolutt leverandørrabatter (oppgitt av deg selv) DiscountNone=Ingen Vendor=Leverandør +Supplier=Leverandør AddContact=Opprett kontakt AddContactAddress=Opprett kontakt/adresse EditContact=Endre kontakt diff --git a/htdocs/langs/nb_NO/mails.lang b/htdocs/langs/nb_NO/mails.lang index a1e27fc6687..e0ab0167659 100644 --- a/htdocs/langs/nb_NO/mails.lang +++ b/htdocs/langs/nb_NO/mails.lang @@ -78,9 +78,9 @@ GroupEmails=Gruppe e-postmeldinger OneEmailPerRecipient=Én e-post per mottaker (som standard, en e-post per post valgt) WarningIfYouCheckOneRecipientPerEmail=Advarsel, hvis du merker av denne boksen, betyr det at bare en e-post vil bli sendt for flere forskjellige valgte poster, så hvis meldingen inneholder erstatningsvariabler som refererer til data i en post, blir det ikke mulig å erstatte dem. ResultOfMailSending=Resultat av massesending av e-post -NbSelected=Number selected -NbIgnored=Number ignored -NbSent=Number sent +NbSelected=Antall valgt +NbIgnored=Antall ignorert +NbSent=Antall sendt SentXXXmessages=%s melding(er) sendt. ConfirmUnvalidateEmailing=Er du sikker på at du vil endre status på epost %s til kladd? MailingModuleDescContactsWithThirdpartyFilter=Kontakt med kundefilter diff --git a/htdocs/langs/nb_NO/members.lang b/htdocs/langs/nb_NO/members.lang index 6faaf810b05..5949a5b499a 100644 --- a/htdocs/langs/nb_NO/members.lang +++ b/htdocs/langs/nb_NO/members.lang @@ -171,7 +171,7 @@ MembersStatisticsDesc=Velg statistikk du ønsker å lese ... MenuMembersStats=Statistikk LastMemberDate=Siste medlemsdato LatestSubscriptionDate=Siste abonnementsdato -MemberNature=Nature of member +MemberNature=Medlemskapets art Public=Informasjon er offentlig NewMemberbyWeb=Nytt medlem lagt til. Venter på godkjenning NewMemberForm=Skjema for nytt medlem diff --git a/htdocs/langs/nb_NO/other.lang b/htdocs/langs/nb_NO/other.lang index fea18d2ca40..020490eb57e 100644 --- a/htdocs/langs/nb_NO/other.lang +++ b/htdocs/langs/nb_NO/other.lang @@ -3,7 +3,7 @@ SecurityCode=Sikkerhetskode NumberingShort=Nr Tools=Verktøy TMenuTools=Verktøy -ToolsDesc=All tools not included in other menu entries are grouped here.
All the tools can be accessed via the left menu. +ToolsDesc=Alle verktøy som ikke er inkludert i andre menyoppføringer, er gruppert her.
Alle verktøyene kan nås via menyen til venstre. Birthday=Fødselsdag BirthdayDate=Fødselsdag DateToBirth=Fødselsdag @@ -20,10 +20,10 @@ ZipFileGeneratedInto=Zip-fil generert til %s. DocFileGeneratedInto=Doc-fil generert til %s. JumpToLogin=Frakoblet. Gå til påloggingssiden ... MessageForm=Melding på elektronisk betalingsformular -MessageOK=Message on the return page for a validated payment -MessageKO=Message on the return page for a canceled payment +MessageOK=Melding på retursiden for en godkjent betaling +MessageKO=Melding på retursiden for en kansellert betaling ContentOfDirectoryIsNotEmpty=Denne katalogen er ikke tom. -DeleteAlsoContentRecursively=Check to delete all content recursively +DeleteAlsoContentRecursively=Sjekk om du vil slette alt innhold rekursivt YearOfInvoice=År av fakturadato PreviousYearOfInvoice=Forrige års fakturadato @@ -31,15 +31,15 @@ NextYearOfInvoice=Følgende år av fakturadato DateNextInvoiceBeforeGen=Dato for neste faktura (før generering) DateNextInvoiceAfterGen=Dato for neste faktura (etter generering) -Notify_ORDER_VALIDATE=Sales order validated -Notify_ORDER_SENTBYMAIL=Sales order sent by mail -Notify_ORDER_SUPPLIER_SENTBYMAIL=Purchase order sent by email -Notify_ORDER_SUPPLIER_VALIDATE=Purchase order recorded -Notify_ORDER_SUPPLIER_APPROVE=Purchase order approved -Notify_ORDER_SUPPLIER_REFUSE=Purchase order refused -Notify_PROPAL_VALIDATE=Kundentilbud validert -Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed -Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused +Notify_ORDER_VALIDATE=Salgsordre validert +Notify_ORDER_SENTBYMAIL=Salgsordre sendt via epost +Notify_ORDER_SUPPLIER_SENTBYMAIL=Innkjøpsordre sendt via e-post +Notify_ORDER_SUPPLIER_VALIDATE=Innkjøpsordre er registrert +Notify_ORDER_SUPPLIER_APPROVE=Innkjøpsordre godkjent +Notify_ORDER_SUPPLIER_REFUSE=Innkjøpsordre avvist +Notify_PROPAL_VALIDATE=Kundetilbud validert +Notify_PROPAL_CLOSE_SIGNED=Kundetilbud lukket signert +Notify_PROPAL_CLOSE_REFUSED=Kundetilbud lukket avvist Notify_PROPAL_SENTBYMAIL=Tilbud sendt med post Notify_WITHDRAW_TRANSMIT=Overføring avbrudt Notify_WITHDRAW_CREDIT=Kreditt tilbaketrekning @@ -51,10 +51,10 @@ Notify_BILL_UNVALIDATE=Validering fjernet på kundefaktura Notify_BILL_PAYED=Kundefaktura betalt Notify_BILL_CANCEL=Kundefaktura kansellert Notify_BILL_SENTBYMAIL=Kundefaktura sendt i posten -Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated -Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid -Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail -Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled +Notify_BILL_SUPPLIER_VALIDATE=Leverandørfaktura validert +Notify_BILL_SUPPLIER_PAYED=Leverandørfaktura betalt +Notify_BILL_SUPPLIER_SENTBYMAIL=Leverandørfaktura sendt via post +Notify_BILL_SUPPLIER_CANCELED=Leverandørfaktura kansellert Notify_CONTRACT_VALIDATE=Kontrakt validert Notify_FICHEINTER_VALIDATE=Intervensjon validert Notify_FICHINTER_ADD_CONTACT=Kontakt lagt til intervensjon @@ -70,29 +70,29 @@ Notify_PROJECT_CREATE=Opprettelse av prosjekt Notify_TASK_CREATE=Oppgave opprettet Notify_TASK_MODIFY=Oppgave endret Notify_TASK_DELETE=Oppgave slettet -Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required) -Notify_EXPENSE_REPORT_APPROVE=Expense report approved -Notify_HOLIDAY_VALIDATE=Leave request validated (approval required) -Notify_HOLIDAY_APPROVE=Leave request approved +Notify_EXPENSE_REPORT_VALIDATE=Utgiftsrapport validert(godkjenning kreves) +Notify_EXPENSE_REPORT_APPROVE=Utgiftsrapport godkjent +Notify_HOLIDAY_VALIDATE=Permisjonsforespørselen er validert (godkjenning kreves) +Notify_HOLIDAY_APPROVE=Permisjonsforespørsel godkjent SeeModuleSetup=Se oppsett av modul %s NbOfAttachedFiles=Antall vedlagte filer/dokumenter TotalSizeOfAttachedFiles=Total størrelse på vedlagte filer/dokumenter MaxSize=Maksimal størrelse AttachANewFile=Legg ved ny fil/dokument LinkedObject=Lenkede objekter -NbOfActiveNotifications=Number of notifications (no. of recipient emails) +NbOfActiveNotifications=Antall notifikasjoner (antall e-postmottakere) PredefinedMailTest=__(Hei)__\nDette er en testmelding sendt til __EMAIL__.\nDe to linjene er skilt fra hverandre med et linjeskift.\n\n__USER_SIGNATURE__ PredefinedMailTestHtml=__(Hei)__\nDette er en test e-post (ordtesten må være i fet skrift). De to linjene skilles med et linjeskift.

__USER_SIGNATURE__ PredefinedMailContentContract=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to remind you that the invoice __REF__ seems to have not been paid. A copy of the invoice is attached as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find commercial proposal __REF__ attached \n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find price request __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find our order __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find invoice __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find shipping __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ -PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find intervention __REF__ attached\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendInvoice=__(Hei)__\n\nVedlagt faktura __REF__ \n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendInvoiceReminder=__(Hei)__\n\nVi vil gjerne minne om at fakturaen __REF__ ikke har blitt betalt. En kopi av fakturaen er vedlagt som en påminnelse.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendProposal=__(Hei)__\n\nTilbud __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierProposal=__(Hei)__\n\nPrisforespørsel __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendOrder=__(Hei)__\n\nOrdre __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierOrder=__(Hei)__\n\nBestilling __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendSupplierInvoice=__(Hei)__\n\nFaktura __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendShipping=__(Hei)__\n\nFraktbrev __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ +PredefinedMailContentSendFichInter=__(Hei)__\n\nIntervensjon __REF__ vedlagt\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ PredefinedMailContentThirdparty=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ PredefinedMailContentContact=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ PredefinedMailContentUser=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__ @@ -108,7 +108,7 @@ DemoCompanyProductAndStocks=Firma som selger varer via butikk DemoCompanyAll=Firma med mange aktiviteter (alle hovedmoduler) CreatedBy=Laget av %s ModifiedBy=Endret av %s -ValidatedBy=Validertav %s +ValidatedBy=Validert av %s ClosedBy=Lukket av %s CreatedById=Bruker-ID som opprettet ModifiedById=Bruker-ID som gjorde siste endring @@ -177,36 +177,38 @@ EnableGDLibraryDesc=Installer eller aktiver GD-bibliotek i din PHP-installasjon ProfIdShortDesc=Prof-ID %s er avhengig av tredjepartens land.
For eksempel er det for %s, koden %s. DolibarrDemo=Dolibarr ERP/CRM demo StatsByNumberOfUnits=Statistikk over summen av produkter/tjenester -StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...) +StatsByNumberOfEntities=Statistikk over antall henvisende enheter (antall fakturaer, eller ordre ...) NumberOfProposals=Antall tilbud -NumberOfCustomerOrders=Number of sales orders +NumberOfCustomerOrders=Antall salgsordre NumberOfCustomerInvoices=Antall kundefakturaer -NumberOfSupplierProposals=Number of vendor proposals -NumberOfSupplierOrders=Number of purchase orders -NumberOfSupplierInvoices=Number of vendor invoices +NumberOfSupplierProposals=Antall leverandørtilbud +NumberOfSupplierOrders=Antall innkjøpsordre +NumberOfSupplierInvoices=Antall leverandørfakturaer +NumberOfContracts=Antall kontrakter NumberOfUnitsProposals=Antall enheter i tilbud -NumberOfUnitsCustomerOrders=Number of units on sales orders +NumberOfUnitsCustomerOrders=Antall enheter på salgsordre NumberOfUnitsCustomerInvoices=Antall enheter i kundefakturaer -NumberOfUnitsSupplierProposals=Number of units on vendor proposals -NumberOfUnitsSupplierOrders=Number of units on purchase orders -NumberOfUnitsSupplierInvoices=Number of units on vendor invoices -EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. +NumberOfUnitsSupplierProposals=Antall enheter på leverandørtilbud +NumberOfUnitsSupplierOrders=Antall enheter på innkjøpsordre +NumberOfUnitsSupplierInvoices=Antall enheter på leverandørfakturaer +NumberOfUnitsContracts=Antall enheter i kontrakter +EMailTextInterventionAddedContact=En ny intervensjon %s har blitt tildelt deg. EMailTextInterventionValidated=Intervensjonen %s har blitt validert. -EMailTextInvoiceValidated=Invoice %s has been validated. -EMailTextInvoicePayed=Invoice %s has been paid. -EMailTextProposalValidated=Proposal %s has been validated. -EMailTextProposalClosedSigned=Proposal %s has been closed signed. -EMailTextOrderValidated=Order %s has been validated. -EMailTextOrderApproved=Order %s has been approved. -EMailTextOrderValidatedBy=Order %s has been recorded by %s. -EMailTextOrderApprovedBy=Order %s has been approved by %s. -EMailTextOrderRefused=Order %s has been refused. -EMailTextOrderRefusedBy=Order %s has been refused by %s. -EMailTextExpeditionValidated=Shipping %s has been validated. -EMailTextExpenseReportValidated=Expense report %s has been validated. -EMailTextExpenseReportApproved=Expense report %s has been approved. -EMailTextHolidayValidated=Leave request %s has been validated. -EMailTextHolidayApproved=Leave request %s has been approved. +EMailTextInvoiceValidated=Faktura %s er validert. +EMailTextInvoicePayed=Faktura %s er betalt. +EMailTextProposalValidated=Tilbud %s er validert. +EMailTextProposalClosedSigned=Tilbud %s er lukket, signert. +EMailTextOrderValidated=Ordre %s er validert. +EMailTextOrderApproved=Ordre %s er godkjent. +EMailTextOrderValidatedBy=Ordre %s har blitt registrert av %s. +EMailTextOrderApprovedBy=Ordre %s har blitt godkjent av %s. +EMailTextOrderRefused=Ordre%s har blitt avvist. +EMailTextOrderRefusedBy=Ordre %s har blitt avvist av %s. +EMailTextExpeditionValidated=Forsendelse %s er validert. +EMailTextExpenseReportValidated=Utgiftsrapport %s er validert. +EMailTextExpenseReportApproved=Utgiftsrapport %s er godkjent. +EMailTextHolidayValidated=Permisjonsforespørsel %s er validert. +EMailTextHolidayApproved=Permisjonsforespørsel %s er godkjent. ImportedWithSet=Datasett for import DolibarrNotification=Automatisk varsling ResizeDesc=Skriv inn ny bredde eller ny høyde. BxH forhold vil bli beholdt . @@ -214,7 +216,7 @@ NewLength=Ny bredde NewHeight=Ny høyde NewSizeAfterCropping=Ny størrelse etter beskjæring DefineNewAreaToPick=Definer nytt område på bildet for å hente (venstreklikk på bildet og dra til du kommer til motsatt hjørne) -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image +CurrentInformationOnImage=Dette verktøyet ble utviklet for å hjelpe deg med å endre størrelse eller beskjære et bilde. Dette er informasjonen om gjeldende redigert bilde ImageEditor=Billedbehandler YouReceiveMailBecauseOfNotification=Du mottar denne meldingen fordi din e-post har blitt lagt til listen over mål for å bli informert om spesielle hendelser i %s programvare av %s. YouReceiveMailBecauseOfNotification2=Denne hendelsen er følgende: @@ -245,11 +247,11 @@ YourPasswordMustHaveAtLeastXChars=Passordet ditt må ha minst %s %s' som vanligvis er forbudt som dynamisk innhold (se skjulte alternativer WEBSITE_PHP_ALLOW_xxx for å øke listen over tillatte kommandoer). NotAllowedToAddDynamicContent=Du har ikke tillatelse til å legge til eller redigere PHP dynamisk innhold på nettsteder. Be om tillatelse eller behold koden i php-kodene uendret. -ReplaceWebsiteContent=Erstatt nettsideinnhold +ReplaceWebsiteContent=Søk eller erstatt nettstedsinnhold DeleteAlsoJs=Slett også alle javascript-filer som er spesifikke for denne nettsiden? DeleteAlsoMedias=Slett også alle mediefiler som er spesifikke for denne nettsiden? # Export -MyWebsitePages=My website pages +MyWebsitePages=Mine nettsider diff --git a/htdocs/langs/nb_NO/withdrawals.lang b/htdocs/langs/nb_NO/withdrawals.lang index ce42e5e20a0..12a9ddada5f 100644 --- a/htdocs/langs/nb_NO/withdrawals.lang +++ b/htdocs/langs/nb_NO/withdrawals.lang @@ -69,8 +69,8 @@ WithBankUsingBANBIC=For bankkontoer som bruker IBAN/BIC/SWIFT BankToReceiveWithdraw=Mottakende bankkonto CreditDate=Kreditt på WithdrawalFileNotCapable=Kan ikke ikke generere kvitteringsfil for tilbaketrekking for landet ditt %s (Landet er ikke støttet) -ShowWithdraw=Show Direct Debit Order -IfInvoiceNeedOnWithdrawPaymentWontBeClosed=However, if invoice has at least one direct debit payment order not yet processed, it won't be set as paid to allow prior withdrawal management. +ShowWithdraw=Vis direkte debitordre +IfInvoiceNeedOnWithdrawPaymentWontBeClosed=Men, hvis fakturaen har minst én avbestillingsordre som ikke er behandlet ennå, blir den ikke satt som betalt for å tillate tidligere håndtering av tilbaketrekninger. DoStandingOrdersBeforePayments=Under denne fanen kan du be om en direktedebet-betalingsordre .Når dette er gjort, kan du gå inn i menyen Bank-> direktedebet-ordre for å håndtere betalingsoppdraget .Når betalingsoppdraget er lukket, vil betaling på fakturaen automatisk bli registrert, og fakturaen lukkes hvis restbeløpet er null. WithdrawalFile=Tilbaketrekkingsfil SetToStatusSent=Sett status til "Fil Sendt" diff --git a/htdocs/langs/nl_BE/accountancy.lang b/htdocs/langs/nl_BE/accountancy.lang index 119e3b4882f..5e684f25fe2 100644 --- a/htdocs/langs/nl_BE/accountancy.lang +++ b/htdocs/langs/nl_BE/accountancy.lang @@ -22,7 +22,6 @@ EndProcessing=Verwerking beëindigd Lineofinvoice=Factuur lijn Docdate=Datum Docref=Artikelcode -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Third-party account not defined or third party unknown. Blocking error. TotalVente=Totaal omzet voor belastingen AccountingJournalType2=Verkoop AccountingJournalType3=Inkoop diff --git a/htdocs/langs/nl_BE/admin.lang b/htdocs/langs/nl_BE/admin.lang index 2ffd6272541..429474d0fd5 100644 --- a/htdocs/langs/nl_BE/admin.lang +++ b/htdocs/langs/nl_BE/admin.lang @@ -1,6 +1,21 @@ # Dolibarr language file - Source file is en_US - admin VersionLastInstall=Versie van eerste installatie +FileCheck=Fileset Integriteitscontrole +FileCheckDesc=Met deze tool kunt u de integriteit van bestanden en de instellingen van uw toepassing controleren door elk bestand te vergelijken met het officiële bestand. De waarde van sommige setup-constanten kan ook worden gecontroleerd. U kunt dit hulpprogramma gebruiken om te bepalen of bestanden zijn gewijzigd (bijvoorbeeld door een hacker). +FileIntegrityIsOkButFilesWereAdded=Controle van de integriteit van bestanden is verstreken, maar er zijn enkele nieuwe bestanden toegevoegd. +FileIntegritySomeFilesWereRemovedOrModified=Controle van de integriteit van bestanden is mislukt. Sommige bestanden zijn gewijzigd, verwijderd of toegevoegd. +GlobalChecksum=Globale checksum +RemoteSignature=Remote distant handtekening (betrouwbaarder) +FilesModified=Gewijzigde bestanden +FilesAdded=Bestanden toegevoegd +AvailableOnlyOnPackagedVersions=Het lokale bestand voor integriteitscontrole is alleen beschikbaar als de toepassing is geïnstalleerd vanuit een officieel pakket +XmlNotFound=Xml-integriteitsbestand van toepassing niet gevonden +SessionSavePath=Sessie opslaglocatie ConfirmPurgeSessions=Ben je zeker dat je alle sessies wil wissen? De connectie van elke gebruiker zal worden verbroken (uitgezonderd jezelf). +NoSessionListWithThisHandler=Save session handler geconfigureerd in uw PHP staat niet toe dat alle lopende sessies worden getoond. +ConfirmLockNewSessions=Weet je zeker dat je elke nieuwe Dolibarr-verbinding wilt beperken tot jezelf? Alleen gebruiker %s kan daarna nog een verbinding maken. +Sessions=Gebruikers Sessie +NoSessionFound=Uw PHP-configuratie lijkt het toevoegen van actieve sessies niet toe te staan. De map die wordt gebruikt om sessies op te slaan ( %s ) kan worden beveiligd (bijvoorbeeld door OS-machtigingen of door PHP-richtlijn open_basedir). DBStoringCharset=Databasekarakterset voor het opslaan van gegevens DBSortingCharset=Databasekarakterset voor het sorteren van gegevens UserSetup=Gebruikersbeheerinstellingen @@ -11,7 +26,6 @@ MenusDesc=Menubeheerders stellen de inhoud van de 2 menubalken in (horizontaal e MenusEditorDesc=De menu editor laat je toe om aangepaste menu-invoer te definiëren. Wees voorzichtig bij het gebruik van deze functionaliteit, om instabiele en permanent onvindbare menus te voorkomen.
Sommige modules voegen menu-meldingen toe (in menu Alles meestal). Indien u per ongeluk sommige van deze meldingen zou verwijderen, dan kan u deze herstellen door de module eerst uit te schakelen en opnieuw in te schakelen. SystemToolsArea=Systeemwerksetoverzicht PurgeDeleteLogFile=Verwijder logbestanden, inclusief %s  gedefinieerd voor Syslog module (geen risico om gegevens te verliezen) -PurgeDeleteTemporaryFiles=Verwijder alle tijdelijke bestanden (geen risico op verlies van gegevens) PurgeNothingToDelete=Geen map of bestanden om te verwijderen. PurgeAuditEvents=Verwijder alle gebeurtenisen ConfirmPurgeAuditEvents=Ben je zeker dat je alle veiligheidsgebeurtenissen wil verwijderen? Alle veiligheidslogboeken zullen worden verwijderd, en geen andere bestanden worden verwijderd diff --git a/htdocs/langs/nl_BE/agenda.lang b/htdocs/langs/nl_BE/agenda.lang index 6ba8ec0c085..04f2b85cd6e 100644 --- a/htdocs/langs/nl_BE/agenda.lang +++ b/htdocs/langs/nl_BE/agenda.lang @@ -2,8 +2,11 @@ EventReports=Gebeurtenisrapporten ToUserOfGroup=Aan elke gebruiker in groep ViewPerType=Overzicht per type +AgendaAutoActionDesc=Hier kunt u gebeurtenissen definiëren die u Dolibarr automatisch in Agenda wilt laten maken. Als er niets wordt gecontroleerd, worden alleen handmatige acties opgenomen in logboeken en weergegeven in Agenda. Automatisch bijhouden van zakelijke acties die worden uitgevoerd op objecten (validatie, statuswijziging), wordt niet opgeslagen. +AgendaSetupOtherDesc=Deze pagina biedt opties voor het exporteren van uw Dolibarr-evenementen naar een externe agenda (Thunderbird, Google Agenda, enz.) EventRemindersByEmailNotEnabled=Herinneringen via email was niet ingeschakeld in %s van module setup. NewCompanyToDolibarr=Derde %s aangemaakt +COMPANY_DELETEInDolibarr=Derden (externen) %s verwijderd ContractValidatedInDolibarr=Contract %s goedgekeurd CONTRACT_DELETEInDolibarr=Contract %s geannuleerd MemberModifiedInDolibarr=Lid %s werd aangepast @@ -12,7 +15,15 @@ MemberSubscriptionModifiedInDolibarr=Abonnement %s voor lid %s aangepast ShipmentValidatedInDolibarr=Shipment %s goedgekeurd ShipmentClassifyClosedInDolibarr=Verzending %s werd geclassificeerd als gefactureerd ShipmentUnClassifyCloseddInDolibarr=Verzending %s werd geclassificieerd als opnieuw geopend +ShipmentBackToDraftInDolibarr=Verzending %s zet om naar conceptstatus ShipmentDeletedInDolibarr=Shipment %s gewist +ProposalSentByEMail=Commercieel voorstel %s verzonden per e-mail +ContractSentByEMail=Contract %s verzonden per e-mail +OrderSentByEMail=Verkooporder %s verzonden per e-mail +InvoiceSentByEMail=Klantfactuur %s per e-mail verzonden +SupplierOrderSentByEMail=Bestelling %s per e-mail verzonden +SupplierInvoiceSentByEMail=Leveranciersfactuur %s verzonden per e-mail +ShippingSentByEMail=Verzending %s verzonden per e-mail ProposalDeleted=Offerte verwijderd EXPENSE_REPORT_CREATEInDolibarr=Onkostenrapport %s aangemaakt EXPENSE_REPORT_VALIDATEInDolibarr=Onkostenrapport %s gevalideerd @@ -20,6 +31,11 @@ EXPENSE_REPORT_APPROVEInDolibarr=Onkostenrapport %s goedgekeurd EXPENSE_REPORT_DELETEInDolibarr=Onkostenrapport %s verwijderd EXPENSE_REPORT_REFUSEDInDolibarr=Onkostenrapport %s geweigerd PROJECT_MODIFYInDolibarr=Project %s gewijzigd +TICKET_CREATEInDolibarr=Ticket %s aangemaakt +TICKET_MODIFYInDolibarr=Ticket %s aangepast +TICKET_ASSIGNEDInDolibarr=Ticket %s toegewezen +TICKET_CLOSEInDolibarr=Ticket %s gesloten +TICKET_DELETEInDolibarr=Ticket %s verwijderd AgendaModelModule=Document sjablonen voor een gebeurtenis AgendaUrlOptionsNotAdmin=logina=!%s om de uitvoer van acties te beperken die niet werden toegewezen aan de gebruiker %s. AgendaUrlOptions4=logint=%s om de uitvoer van acties te beperken die aan de gebruiker %s is toegewezen. (eigenaar en anderen). diff --git a/htdocs/langs/nl_BE/contracts.lang b/htdocs/langs/nl_BE/contracts.lang index 149dc3ee2eb..7fb625a9a17 100644 --- a/htdocs/langs/nl_BE/contracts.lang +++ b/htdocs/langs/nl_BE/contracts.lang @@ -1,6 +1,24 @@ # Dolibarr language file - Source file is en_US - contracts +ShowContractOfService=Toon servicecontract NewContractSubscription=Nieuwe contracten/abonnementen +ActivateAllOnContract=Activeer alle diensten +ConfirmDeleteAContract=Weet je zeker dat je dit contract en alle bijbehorende services wilt verwijderen? +ConfirmValidateContract=Weet je zeker dat je dit contract wilt valideren onder de naam %s ? +ConfirmActivateAllOnContract=Hiermee worden alle services geopend (nog niet actief). Weet je zeker dat je alle diensten wil openen? +ConfirmCloseContract=Hiermee worden alle diensten gesloten (actief of niet). Weet je zeker dat je dit contract wilt sluiten? +ConfirmCloseService=Weet je zeker dat je deze dienst wilt afsluiten met de datum %s ? +ConfirmActivateService=Weet je zeker dat je deze dienst wilt activeren met de datum %s ? +LastContracts=Laatste %s-contracten +LastModifiedServices=Laatste %s gewijzigde diensten DateStartPlanned=Geplande startdatum DateStartPlannedShort=Geplande startdatum DateEndPlanned=Geplande einddatum DateEndPlannedShort=Geplande einddatum +BoardRunningServices=Lopende diensten +CloseRefusedBecauseOneServiceActive=Contract kan niet worden gesloten omdat er ten minste één open dienst op staat +ActivateAllContracts=Activeer alle contractregels +ConfirmDeleteContractLine=Weet je zeker dat je deze contractregel wilt verwijderen? +ConfirmCloneContract=Weet u zeker als u event %s wilt klonen? +LowerDateEndPlannedShort=Eerdere geplande einddatum van actieve diensten +SendContractRef=Contractinformatie __REF__ +OtherContracts=Andere contracten diff --git a/htdocs/langs/nl_BE/interventions.lang b/htdocs/langs/nl_BE/interventions.lang index 937ada94ffc..e1ec9e29b85 100644 --- a/htdocs/langs/nl_BE/interventions.lang +++ b/htdocs/langs/nl_BE/interventions.lang @@ -1,4 +1,5 @@ # Dolibarr language file - Source file is en_US - interventions +InterventionSentByEMail=Interventie %s per e-mail verzonden InterventionsArea=Interventieruimte DraftFichinter=Concept interventie LastModifiedInterventions=Laatste %s gemodificeerde interventies diff --git a/htdocs/langs/nl_BE/ticket.lang b/htdocs/langs/nl_BE/ticket.lang index 0b54b422afb..b59d26af5bc 100644 --- a/htdocs/langs/nl_BE/ticket.lang +++ b/htdocs/langs/nl_BE/ticket.lang @@ -2,6 +2,9 @@ Permission56001=Zie tickets Permission56002=Wijzig tickets Permission56003=Tickets verwijderen +Permission56005=Bekijk tickets van alle externe partijen (niet effectief voor externe gebruikers, altijd beperkt tot de derde partij waarvan ze afhankelijk zijn) +TicketDictCategory=Ticket - Groepen +TicketDictSeverity=Ticket - Gradaties TicketTypeShortBUGSOFT=Software storing TicketTypeShortBUGHARD=Hardware storing TicketTypeShortOTHER=Ander @@ -10,24 +13,31 @@ ErrorBadEmailAddress=Veld '%s' onjuist MenuTicketMyAssignNonClosed=Mijn open tickets TypeContact_ticket_external_SUPPORTCLI=Klantcontact / incident volgen TypeContact_ticket_external_CONTRIBUTOR=Externe bijdrager +Notify_TICKET_SENTBYMAIL=Verzend ticketbericht per e-mail Read=Lezen Assigned=Toegewezen InProgress=Bezig +NeedMoreInformation=Wachten op informatie Closed=Afgesloten +Category=Analytische code Severity=Strengheid TicketSetup=Installatie van ticketmodule TicketPublicAccess=Een openbare interface die geen identificatie vereist, is beschikbaar op de volgende URL +TicketSetupDictionaries=Het type ticket, Gradatie en analytische codes kunnen vanuit woordenboeken worden geconfigureerd TicketParamModule=Module variabele instelling TicketParamMail=E-mail instellen TicketEmailNotificationFrom=Meldingsmail van TicketEmailNotificationFromHelp=Gebruikt als antwoord op het ticketbericht door een voorbeeld TicketEmailNotificationTo=Meldingen e-mail naar TicketEmailNotificationToHelp=Stuur e-mailmeldingen naar dit adres. +TicketNewEmailBodyLabel=Tekstbericht verzonden na het maken van een ticket TicketNewEmailBodyHelp=De tekst die hier wordt opgegeven, wordt in de e-mail ingevoegd die bevestigt dat er een nieuw ticket is gemaakt in de openbare interface. Informatie over de raadpleging van het ticket wordt automatisch toegevoegd. TicketParamPublicInterface=Openbare interface-instellingen TicketsEmailMustExist=Een bestaand e-mailadres vereisen om een ​​ticket te maken TicketsEmailMustExistHelp=In de openbare interface moet het e-mailadres al in de database zijn ingevuld om een ​​nieuw ticket te maken. PublicInterface=Openbare interface +TicketUrlPublicInterfaceLabelAdmin=Alternatieve URL voor openbare interface +TicketUrlPublicInterfaceHelpAdmin=Het is mogelijk om een alias voor de webserver te definiëren en zo de openbare interface beschikbaar te maken met een andere URL (de server moet optreden als een proxy voor deze nieuwe URL) TicketPublicInterfaceTextHomeLabelAdmin=Welkomsttekst van de openbare interface TicketPublicInterfaceTextHome=U kunt een ondersteuningsticket of -weergave maken die bestaat uit het ID-trackingticket. TicketPublicInterfaceTextHomeHelpAdmin=De tekst die hier wordt gedefinieerd, wordt weergegeven op de startpagina van de openbare interface. @@ -37,6 +47,7 @@ TicketPublicInterfaceTextHelpMessageLabelAdmin=Hulp tekst bij het bericht TicketPublicInterfaceTextHelpMessageHelpAdmin=Deze tekst verschijnt boven het berichtinvoergedeelte van de gebruiker. ExtraFieldsTicket=Extra attributen TicketCkEditorEmailNotActivated=HTML-editor is niet geactiveerd. Plaats alstublieft de inhoud van FCKEDITOR_ENABLE_MAIL op 1 om deze te krijgen. +TicketsDisableEmail=Stuur geen e-mails voor het aanmaken van tickets of het opnemen van berichten TicketsDisableEmailHelp=Standaard worden e-mails verzonden wanneer nieuwe tickets of berichten worden aangemaakt. Schakel deze optie in om * alle * e-mailmeldingen uit te schakelen TicketsLogEnableEmail=Schakel logboek per e-mail in TicketsLogEnableEmailHelp=Bij elke wijziging wordt een e-mail ** verzonden naar elk contact ** dat aan het ticket is gekoppeld. @@ -46,12 +57,14 @@ TicketsShowCompanyLogo=Geef het logo van het bedrijf weer in de openbare interfa TicketsShowCompanyLogoHelp=Schakel deze optie in om het logo van het hoofdbedrijf te verbergen op de pagina's van de openbare interface TicketsEmailAlsoSendToMainAddress=Stuur ook een bericht naar het hoofd e-mailadres TicketsEmailAlsoSendToMainAddressHelp=Schakel deze optie in om een ​​e-mail te sturen naar het e-mailadres "Kennisgevings e-mail van" (zie onderstaande instellingen) +TicketsLimitViewAssignedOnly=Beperk de weergave tot tickets die zijn toegewezen aan de huidige gebruiker (niet effectief voor externe gebruikers, altijd beperkt tot de derde partij waarvan ze afhankelijk zijn) TicketsLimitViewAssignedOnlyHelp=Alleen tickets die aan de huidige gebruiker zijn toegewezen, zijn zichtbaar. Is niet van toepassing op een gebruiker met rechten voor ticket beheer. TicketsActivatePublicInterface=Activeer de publieke interface TicketsActivatePublicInterfaceHelp=Met de openbare interface kunnen bezoekers tickets maken. TicketsAutoAssignTicket=Wijs automatisch de gebruiker toe die het ticket heeft gemaakt TicketsAutoAssignTicketHelp=Bij het maken van een ticket kan de gebruiker automatisch worden toegewezen aan het ticket. TicketNumberingModules=Nummeringsmodule tickets +TicketNotifyTiersAtCreation=Breng externen op de hoogte tijdens het maken TicketList=Lijst met tickets TicketViewNonClosedOnly=Bekijk alleen open tickets TicketStatByStatus=Tickets op status @@ -98,6 +111,7 @@ LinkToAContract=Link naar een contract TicketMailExchanges=Mail-uitwisselingen TicketInitialMessageModified=Oorspronkelijk bericht aangepast TicketNotNotifyTiersAtCreate=Het bedrijf niet melden bij de creatie +Unread=Ongelezen NoLogForThisTicket=Nog geen log voor dit ticket TicketSystem=Ticket-systeem ShowListTicketWithTrackId=Geef ticketlijst weer vanaf track ID diff --git a/htdocs/langs/nl_NL/accountancy.lang b/htdocs/langs/nl_NL/accountancy.lang index a9c274e87fb..c815dc9d158 100644 --- a/htdocs/langs/nl_NL/accountancy.lang +++ b/htdocs/langs/nl_NL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Resultaat grootboekrekening (Verlies) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Afsluiten journaal ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Grootboekrekening kruisposten (dagboeken) DONATION_ACCOUNTINGACCOUNT=Grootboeknummer voor donaties diff --git a/htdocs/langs/nl_NL/admin.lang b/htdocs/langs/nl_NL/admin.lang index deaa6104f3c..fd7b4ac1aae 100644 --- a/htdocs/langs/nl_NL/admin.lang +++ b/htdocs/langs/nl_NL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxen uit tabel ExtrafieldLink=Link naar een object ComputedFormula=Berekend veld ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Gebruikte library voor generen PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Creëren / wijzigen van diensten Permission534=Diensten verwijderen Permission536=Inzien / beheren van verborgen diensten Permission538=Diensten exporteren -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Bekijk donaties Permission702=Creëren / wijzigen donaties Permission703=Verwijderen donaties @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/nl_NL/bills.lang b/htdocs/langs/nl_NL/bills.lang index 925a56c4613..00421a77b3b 100644 --- a/htdocs/langs/nl_NL/bills.lang +++ b/htdocs/langs/nl_NL/bills.lang @@ -10,7 +10,7 @@ BillsSuppliersUnpaid=Onbetaalde leveranciersfacturen BillsSuppliersUnpaidForCompany=Onbetaalde leveranciersfacturen voor %s BillsLate=Betalingsachterstand BillsStatistics=Statistieken afnemersfacturen -BillsStatisticsSuppliers=Vendors invoices statistics +BillsStatisticsSuppliers=Statistieken leveranciersfacturen DisabledBecauseDispatchedInBookkeeping=Uitgeschakeld omdat de factuur werd verzonden naar de boekhouding DisabledBecauseNotLastInvoice=Uitgeschakeld omdat factuur niet kan worden gewist. Er zijn vervolg-facturen aangemaakt en hierdoor zullen gaten ontstaan in de factuurteller. DisabledBecauseNotErasable=Uitgeschakeld om dat het niet verwijderd kan worden @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma factuur InvoiceProFormaDesc=Een proforma factuur is een voorlopige factuur en een orderbevestiging. Het is geen officiële factuur, maar bedoeld voor afnemers in het buitenland om bijvoorbeeld een vergunning aan te vragen of de inklaring voor te bereiden. Ze worden ook gebruikt voor het aanvragen van een Letter of Credit (L/C). InvoiceReplacement=Vervangingsfactuur InvoiceReplacementAsk=Vervangingsfactuur voor factuur -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Creditnota InvoiceAvoirAsk=Creditnota te corrigeren factuur InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -317,8 +317,8 @@ InvoiceDateCreation=Aanmaakdatum factuur InvoiceStatus=Factuurstatus InvoiceNote=Factuurnota InvoicePaid=Factuur betaald -OrderBilled=Order billed -DonationPaid=Donation paid +OrderBilled=Bestelling gefactureerd +DonationPaid=Betaalde donatie PaymentNumber=Betalingsnummer RemoveDiscount=Verwijder korting WatermarkOnDraftBill=Watermerk over conceptfacturen (niets indien leeg) @@ -397,7 +397,7 @@ PaymentConditionShort14D=14 dagen PaymentCondition14D=14 dagen PaymentConditionShort14DENDMONTH=Einde maand over 14 dagen PaymentCondition14DENDMONTH=Binnen 14 dagen na het einde van de maand -FixAmount=Fixed amount +FixAmount=Vast bedrag VarAmount=Variabel bedrag (%% tot.) VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s' # PaymentType @@ -413,8 +413,8 @@ PaymentTypeCHQ=Cheque PaymentTypeShortCHQ=Cheque PaymentTypeTIP=TIP (Documenten tegen betaling) PaymentTypeShortTIP=Betaling fooi -PaymentTypeVAD=Online payment -PaymentTypeShortVAD=Online payment +PaymentTypeVAD=Online betaling +PaymentTypeShortVAD=Online betaling PaymentTypeTRA=Bankcheque PaymentTypeShortTRA=Ontwerp PaymentTypeFAC=Factor @@ -457,11 +457,11 @@ UseLine=Toepassen UseDiscount=Gebruik korting UseCredit=Kredietbeoordelingen UseCreditNoteInInvoicePayment=Verminderen van de betaling met deze credit nota -MenuChequeDeposits=Check Deposits +MenuChequeDeposits=Controleer stortingen MenuCheques=Cheques -MenuChequesReceipts=Check receipts +MenuChequesReceipts=Controleer ontvangsten NewChequeDeposit=Nieuw depot -ChequesReceipts=Check receipts +ChequesReceipts=Controleer ontvangsten ChequesArea=Check deposits area ChequeDeposits=Check deposits Cheques=Cheques diff --git a/htdocs/langs/nl_NL/companies.lang b/htdocs/langs/nl_NL/companies.lang index d5711ccbe11..2b869938cff 100644 --- a/htdocs/langs/nl_NL/companies.lang +++ b/htdocs/langs/nl_NL/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Vastgelegde leverancier kortingen (toegekend do SupplierAbsoluteDiscountMy=Vastgelegde klant kortingen (toegekend door uzelf) DiscountNone=Geen Vendor=Verkoper +Supplier=Verkoper AddContact=Nieuwe contactpersoon AddContactAddress=Nieuw contact/adres EditContact=Bewerk contact / adres diff --git a/htdocs/langs/nl_NL/other.lang b/htdocs/langs/nl_NL/other.lang index 7a9587eebd0..7b9814a2c68 100644 --- a/htdocs/langs/nl_NL/other.lang +++ b/htdocs/langs/nl_NL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Aantal klant facturen NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Aantal eenheden in voorstel NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Aantal eenheden op klant facturen NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=De interventie %s is gevalideerd EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/nl_NL/website.lang b/htdocs/langs/nl_NL/website.lang index f466074cb2a..024e1b4b6e6 100644 --- a/htdocs/langs/nl_NL/website.lang +++ b/htdocs/langs/nl_NL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/pl_PL/accountancy.lang b/htdocs/langs/pl_PL/accountancy.lang index 006ac65e13c..fae0558c485 100644 --- a/htdocs/langs/pl_PL/accountancy.lang +++ b/htdocs/langs/pl_PL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Konto księgowe dla oczekujących DONATION_ACCOUNTINGACCOUNT=Konto księgowe dla zarejestrowanych dotatcji diff --git a/htdocs/langs/pl_PL/admin.lang b/htdocs/langs/pl_PL/admin.lang index 0ed44756d6d..7cf5c8b6e13 100644 --- a/htdocs/langs/pl_PL/admin.lang +++ b/htdocs/langs/pl_PL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link do obiektu ComputedFormula=Obliczone pole ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Biblioteka używana do generowania plików PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Tworzenie / modyfikacja usług Permission534=Usuwanie usług Permission536=Zobacz / zarządzaj ukrytymi usługami Permission538=Eksport usług -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Zobacz darowizny Permission702=Tworzenie / modyfikacja darowizn Permission703=Usuń darowizny @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/pl_PL/bills.lang b/htdocs/langs/pl_PL/bills.lang index 405d0077d50..55121d67d6c 100644 --- a/htdocs/langs/pl_PL/bills.lang +++ b/htdocs/langs/pl_PL/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktury InvoiceProFormaDesc=Faktura proforma jest obrazem prawdziwej faktury, ale nie ma jeszcze wartości księgowych. InvoiceReplacement=Duplikat faktury InvoiceReplacementAsk=Duplikat faktury do faktury -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota kredytowa InvoiceAvoirAsk=Edytuj notatkę do skorygowania faktury InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/pl_PL/companies.lang b/htdocs/langs/pl_PL/companies.lang index c0643cb0aa2..42623e23dd3 100644 --- a/htdocs/langs/pl_PL/companies.lang +++ b/htdocs/langs/pl_PL/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias (handlowy, znak firmowy, ...) AliasNameShort=Alias Name Companies=Firmy CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Żaden Vendor=Vendor +Supplier=Vendor AddContact=Stwórz konktakt AddContactAddress=Stwórz kontakt/adres EditContact=Edytuj kontakt diff --git a/htdocs/langs/pl_PL/other.lang b/htdocs/langs/pl_PL/other.lang index 0b45c36de1d..031e65c7c41 100644 --- a/htdocs/langs/pl_PL/other.lang +++ b/htdocs/langs/pl_PL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Ilość faktur klientów NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Interwencja %s zatwierdzona EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/pl_PL/website.lang b/htdocs/langs/pl_PL/website.lang index b53162bf594..be2a003ec32 100644 --- a/htdocs/langs/pl_PL/website.lang +++ b/htdocs/langs/pl_PL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/pt_BR/accountancy.lang b/htdocs/langs/pt_BR/accountancy.lang index 9804fdb4c55..a72182b0755 100644 --- a/htdocs/langs/pt_BR/accountancy.lang +++ b/htdocs/langs/pt_BR/accountancy.lang @@ -144,7 +144,7 @@ DescThirdPartyReport=Consulte aqui a lista de clientes e fornecedores de terceir ListAccounts=Lista das contas contábeis UnknownAccountForThirdparty=Conta de terceiros desconhecida. Nós usaremos %s UnknownAccountForThirdpartyBlocking=Conta de terceiros desconhecida. Erro de bloqueio -ThirdpartyAccountNotDefinedOrThirdPartyUnknown=Conta de terceiros não definida ou desconhecida de terceiros. Erro de bloqueio. +ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking=Conta de terceiros não definida ou desconhecida de terceiros. Erro de bloqueio. UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Conta de terceiros desconhecida e conta em espera não definida. Erro de bloqueio Pcgtype=Plano de Contas Pcgsubtype=Subgrupo de Contas diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang index 9878c50a066..147b7dbabcc 100644 --- a/htdocs/langs/pt_BR/admin.lang +++ b/htdocs/langs/pt_BR/admin.lang @@ -120,7 +120,6 @@ SystemToolsAreaDesc=Essa área dispõem de funções administrativas. Use esse m Purge=Purgar (apagar tudo) PurgeAreaDesc=Esta página permite deletar todos os arquivos gerados ou armazenados pelo Dolibarr (arquivos temporários ou todos os arquivos no diretório %s). Este recurso é fornecido como uma solução alternativa aos usuários cujo a instalação esteja hospedado num servidor que impeça o acesso as pastas onde os arquivos gerados pelo Dolibarr são armazenados, para excluí-los. PurgeDeleteLogFile=Excluir os arquivos de registro, incluindo o %s definido pelo módulo Syslog (não há risco de perda de dados) -PurgeDeleteTemporaryFiles=Excluir todos os arquivos temporários (sem risco de perca de dados) PurgeDeleteTemporaryFilesShort=Excluir arquivos temporários PurgeDeleteAllFilesInDocumentsDir=Eliminar todos os arquivos do diretório %s. Isto irá excluir todos documentos (Terceiros, faturas, ...), arquivos carregados no módulo ECM, Backups e arquivos temporários PurgeRunNow=Purgar(Apagar) Agora diff --git a/htdocs/langs/pt_PT/accountancy.lang b/htdocs/langs/pt_PT/accountancy.lang index 9cd6b2dc65f..7e3445ffca9 100644 --- a/htdocs/langs/pt_PT/accountancy.lang +++ b/htdocs/langs/pt_PT/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Conta contabilística de espera DONATION_ACCOUNTINGACCOUNT=Conta contabilística para registar donativos diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang index 5f8e5ed45c0..dec7048306a 100644 --- a/htdocs/langs/pt_PT/admin.lang +++ b/htdocs/langs/pt_PT/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Caixas de marcação da tabela ExtrafieldLink=Vincular a um objeto ComputedFormula=Campo calculado ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Deixar esse campo em branco significa que esse valor será armazenado sem criptografia (o campo deve ser oculto apenas com estrela na tela).
Defina 'auto' para usar a regra de criptografia padrão para salvar a senha no banco de dados (o valor lido será o hash apenas, nenhuma maneira de recuperar o valor original) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Biblioteca utilizada para gerar PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Criar/modificar serviços Permission534=Eliminar serviços Permission536=Ver/gerir serviços ocultos Permission538=Exportar serviços -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Consultar donativos Permission702=Criar/modificar donativos Permission703=Eliminar donativos @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/pt_PT/bills.lang b/htdocs/langs/pt_PT/bills.lang index e0f25e98f61..cc737fc2d1d 100644 --- a/htdocs/langs/pt_PT/bills.lang +++ b/htdocs/langs/pt_PT/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Fatura Pró-Forma InvoiceProFormaDesc=A Fatura Pró-Forma é uma imagem de uma fatura, mas não tem valor contabilístico. InvoiceReplacement=Fatura de Substituição InvoiceReplacementAsk=Fatura de Substituição para a Fatura -InvoiceReplacementDesc= A fatura de substituição é usada para cancelar e substituir completamente uma fatura sem nenhum pagamento já recebido.

Nota: Somente faturas sem pagamento podem ser substituídas. Se a fatura que você substituir ainda não estiver fechada, ela será automaticamente fechada para "abandonada". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota de Crédito InvoiceAvoirAsk=Nota de crédito para corrigir a fatura InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/pt_PT/companies.lang b/htdocs/langs/pt_PT/companies.lang index 70f9cae441e..393abc36064 100644 --- a/htdocs/langs/pt_PT/companies.lang +++ b/htdocs/langs/pt_PT/companies.lang @@ -28,7 +28,7 @@ AliasNames=Pseudónimo (comercial, marca registada, ...) AliasNameShort=Nome do alias Companies=Empresas CountryIsInEEC=País faz parte da Comunidade Económica Europeia -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Descontos de fornecedor fixos (inseridos por to SupplierAbsoluteDiscountMy=Descontos de fornecedor fixos (inseridos por si) DiscountNone=Nenhuma Vendor=Fornecedor +Supplier=Fornecedor AddContact=Criar contacto AddContactAddress=Novo contacto/morada EditContact=Editar contato / endereço diff --git a/htdocs/langs/pt_PT/other.lang b/htdocs/langs/pt_PT/other.lang index d93c411bb32..fff2fab03d4 100644 --- a/htdocs/langs/pt_PT/other.lang +++ b/htdocs/langs/pt_PT/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Número de faturas a clientes NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Número de unidades nos orçamentos NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Número de unidades em faturas a clientes NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Uma nova intervenção %s foi atribuída a você. EMailTextInterventionValidated=Intervenção %s validados EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/pt_PT/website.lang b/htdocs/langs/pt_PT/website.lang index c98603548d7..45e4472c601 100644 --- a/htdocs/langs/pt_PT/website.lang +++ b/htdocs/langs/pt_PT/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ro_RO/accountancy.lang b/htdocs/langs/ro_RO/accountancy.lang index aa81f9c0a8d..472c02c9452 100644 --- a/htdocs/langs/ro_RO/accountancy.lang +++ b/htdocs/langs/ro_RO/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Contul contabil rezultat (pierdere) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Jurnal de închidere ACCOUNTING_ACCOUNT_TRANSFER_CASH=Contul contabil al transferului bancar în tranziție +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Contul contabil de așteptare DONATION_ACCOUNTINGACCOUNT=Contul contabil pentru a înregistra donații diff --git a/htdocs/langs/ro_RO/admin.lang b/htdocs/langs/ro_RO/admin.lang index 97849658f83..8f9e5dc09fd 100644 --- a/htdocs/langs/ro_RO/admin.lang +++ b/htdocs/langs/ro_RO/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Căsuțele de selectare din tabel ExtrafieldLink=Link către un obiect ComputedFormula=Câmp calculat ComputedFormulaDesc=Puteți introduce aici o formulă care utilizează alte proprietăți ale obiectului sau orice codare PHP pentru a obține o valoare dinamică calculată. Puteți utiliza orice formule compatibile PHP, inclusiv operatorul de stare "?" și următorul obiect global:$db, $conf, $langs, $mysoc, $user, $object .
AVERTISMENT Doar unele proprietăţi ale $obiect pot fi disponibile. Dacă aveți nevoie de proprietăți care nu sunt încărcate, trebuie doar să vă aduceți obiectul în formula dvs. ca în cel de-al doilea exemplu.
Utilizarea unui câmp calculat înseamnă că nu vă puteți introduce nici o valoare din interfață. De asemenea, dacă există o eroare de sintaxă, formula poate să nu redea nimic.

Exemplul formulei:
$object->id < 10? round($object-> id / 2, 2): ($object->id + 2 * $user-> id) * (int) substr($mysoc->zip, 1, 2)

Exemplu de reîncărcare a obiectului
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ?$reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Alt exemplu de formula pentru forțarea încărcării obiectului și a obiectului său părinte:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: "Proiectul părinte nu a fost găsit" +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Lăsând acest câmp necompletat înseamnă că această valoare va fi stocată fără criptare (câmpul trebuie ascuns numai cu stea pe ecran).
Setarea "auto" pentru utilizarea regulii de criptare implicită pentru a salva parola în baza de date (atunci valoarea citită va fi hash numai, nici o şansă de a recupera valoarea inițială) ExtrafieldParamHelpselect=Lista de valori trebuie să fie linii cu format cheie,valoare (unde cheia nu poate fi "0")

de exemplu:
1,valoare1
2,valoare2
code3,valoare3
...

Pentru a avea lista în funcție de o altă listă de atribute complementare:
1, valoare1| opţiuni_ parent_list_code : parent_key
2,valoare2|opţiuni_ parent_list_code : parent_key

Pentru a avea lista în funcție de altă listă:
1, valoare1| parent_list_code : parent_key
2, valoare2| parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Lista de valori trebuie să fie linii cu format cheie,valoare ( cheia nu poate fi "0")

de exemplu:
1,valoare1
2,valoare2
3,valoare3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Lista de valori trebuie să fie linii cu format cheie,v ExtrafieldParamHelpsellist=Lista de valori provine dintr-un tabel
Sintaxă: table_name: label_field: id_field :: filter
Exemplu: c_typent: libelle: id :: filter

- idfilter este obligatoriu o cheie primară
- filtrul poate fi un test simplu (de exemplu, activ = 1) pentru a afișa numai valoarea activă
Puteți utiliza, de asemenea, $ID$ în filtrul care este ID-ul curent al obiectului curent
Pentru a face SELECT în filtru utilizați $SEL$
dacă vrei să filtrezi în extracâmpuri foloseste sintaxa extra.fieldcode = ... (unde codul de câmp este codul extra-câmpului)

Pentru a avea lista în funcție de o altă listă de atribute complementare:
c_typent: libelle: id: options_ parent_list_code |parent_column: filter

Pentru a avea lista în funcție de altă listă:
c_typent: libelle: id: parent_list_code | parent_column: filtru ExtrafieldParamHelpchkbxlst=Lista de valori vine dintr-un tabel
Sintaxă: table_name:label_field:id_field::filter
Examplu: c_typent:libelle:id::filter

filtrul poate fi un simplu test (ex active=1) pentru a afişa doar valoarea activă
De asemenea se poate utiliza $ID$ în filtrul care este ID-ul curent al obiectului curent
Pentru a face o SELECTARE în filtru folosiţi $SEL$
dacă doriţi să filtraţi în extracâmpuri folosiţi sintaxa extra.fieldcode=... (unde codul câmpului este codul extracâmpului)

Pentru a avea lista în funcție de o altă listă de atribute complementare:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

Pentru a avea lista în funcție de o altă listă :
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parametrii trebuie să fie ObjectName: Classpath
Sintaxă: ObjectName: Classpath
Exemple:
Societe:societe/class/societe.class.php
Contact: contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliotecă utilizată pentru generarea PDF-urilor LocalTaxDesc=Unele țări pot aplica două sau trei taxe pe fiecare linie de facturare. Dacă este cazul, alegeți tipul pentru a doua și a treia taxă și rata acestora. Tipuri posibile sunt:
1: taxa locală se aplică produselor și serviciilor fără TVA (localtax se calculează pe valoare fără taxă)
2: taxa locală se aplică produselor și serviciilor, inclusiv TVA (localtax se calculează în funcție de valoare+ taxa principală )
3: taxa locală se aplică produselor fără TVA (localtax se calculează pe valoare fără taxă)
4: taxa locală se aplică produselor şi includ tva (localtax se calculeaza pe valoare + TVA principală)
5: taxa locală se aplică serviciilor fără TVA (localtax se calculează pe valoarea fără TVA)
6: taxa locală se aplică serviciilor, inclusiv TVA (localtax se calculează pe sumă + taxă) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Creare / Modificare servicii Permission534=Ştergere servicii Permission536=A se vedea / administra serviciile ascunse Permission538=Exportul de servicii -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Citiţi donaţii Permission702=Creare / Modificare donaţii Permission703=Ştergere donaţii @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ro_RO/bills.lang b/htdocs/langs/ro_RO/bills.lang index 1018e4a2b24..61886b2fa25 100644 --- a/htdocs/langs/ro_RO/bills.lang +++ b/htdocs/langs/ro_RO/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Factură Proformă InvoiceProFormaDesc=Factura Proformă este o imagine a adevăratei facturi, dar nu are nici o valoare contabilă. InvoiceReplacement=Factură de Înlocuire InvoiceReplacementAsk=Factură de Înlocuire a altei facturi -InvoiceReplacementDesc=  Înlocuire factură este folosită pentru a anula și înlocui complet o factură fără plata primită deja.

Notă: Numai facturile fără plată pot fi înlocuite. În cazul în care factura pe care o înlocuiți nu este încă închisă, va fi închisă automat la "abandonat" +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Nota de credit InvoiceAvoirAsk=Nota de credit pentru a corecta factura InvoiceAvoirDesc= Nota de credit este o factură negativă utilizată pentru a corecta faptul că o factură arată o sumă care diferă de suma plătită efectiv (de exemplu, clientul a plătit prea mult din greșeală sau nu va plăti suma completă din momentul returnării unor produse). diff --git a/htdocs/langs/ro_RO/companies.lang b/htdocs/langs/ro_RO/companies.lang index 37948d05eaa..a109434b4bb 100644 --- a/htdocs/langs/ro_RO/companies.lang +++ b/htdocs/langs/ro_RO/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias nume (comercial, marca inregistrata, ...) AliasNameShort=Porecla Companies=Societăţi CountryIsInEEC=Țara se află în interiorul Comunității Economice Europene -PriceFormatInCurrentLanguage=Formatul prețului în limba curentă +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Numele terț ThirdPartyEmail=E-mail terț ThirdParty=Terț @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Reduceri absolute ale furnizorului (introduse d SupplierAbsoluteDiscountMy=Reduceri absolute ale furnizorilor (introduse de dvs.) DiscountNone=Niciunul Vendor=Furnizor +Supplier=Furnizor AddContact=Creare contact AddContactAddress=Creare contact/adresă EditContact=Editare contact diff --git a/htdocs/langs/ro_RO/other.lang b/htdocs/langs/ro_RO/other.lang index 49f96d76d85..8dd02e9abd7 100644 --- a/htdocs/langs/ro_RO/other.lang +++ b/htdocs/langs/ro_RO/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Numărul de facturi pentru clienți NumberOfSupplierProposals=Numărul de propuneri de furnizori NumberOfSupplierOrders=Numărul de ordine de cumpărare NumberOfSupplierInvoices=Numărul facturilor furnizorilor +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Numărul de unități pe propuneri NumberOfUnitsCustomerOrders=Numărul de unități din comenzile de vânzări NumberOfUnitsCustomerInvoices=Numărul de unități pe facturile clienților NumberOfUnitsSupplierProposals=Numărul de unități pe propunerile furnizorilor NumberOfUnitsSupplierOrders=Numărul de unități din comenzile de achiziție NumberOfUnitsSupplierInvoices=Numărul de unități pe facturile furnizorului +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A fost atribuită o nouă intervenție %s. EMailTextInterventionValidated=Intervenţia %s validată EMailTextInvoiceValidated=Factura %s a fost validată. diff --git a/htdocs/langs/ro_RO/website.lang b/htdocs/langs/ro_RO/website.lang index 88d70505887..5a688b89cce 100644 --- a/htdocs/langs/ro_RO/website.lang +++ b/htdocs/langs/ro_RO/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Niciun site nu a fost creat încă. Creați primul. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ru_RU/accountancy.lang b/htdocs/langs/ru_RU/accountancy.lang index b4c2e9a6f16..99e4fefd472 100644 --- a/htdocs/langs/ru_RU/accountancy.lang +++ b/htdocs/langs/ru_RU/accountancy.lang @@ -13,10 +13,10 @@ ACCOUNTING_EXPORT_ENDLINE=Select the carriage return type ACCOUNTING_EXPORT_PREFIX_SPEC=Укажите префикс для имени файла ThisService=This service ThisProduct=This product -DefaultForService=Default for service -DefaultForProduct=Default for product +DefaultForService=По умолчанию для услуги +DefaultForProduct=По умолчанию для товара CantSuggest=Can't suggest -AccountancySetupDoneFromAccountancyMenu=Most setup of the accountancy is done from the menu %s +AccountancySetupDoneFromAccountancyMenu=Больше настроек бухгалтерии выполняется из меню %s ConfigAccountingExpert=Конфигурация бухгалтерского модуля Journalization=Журналирование Journaux=Журналы @@ -26,23 +26,23 @@ Chartofaccounts=Схема учётных записей CurrentDedicatedAccountingAccount=Current dedicated account AssignDedicatedAccountingAccount=New account to assign InvoiceLabel=Invoice label -OverviewOfAmountOfLinesNotBound=Overview of amount of lines not bound to an accounting account -OverviewOfAmountOfLinesBound=Overview of amount of lines already bound to an accounting account -OtherInfo=Other information -DeleteCptCategory=Remove accounting account from group -ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group? +OverviewOfAmountOfLinesNotBound=Обзор количества строк, не привязанных к учётному счёту +OverviewOfAmountOfLinesBound=Обзор количества строк, привязанных к учётному счёту +OtherInfo=Дополнительная информация +DeleteCptCategory=Удалить учётный счёт из группы +ConfirmDeleteCptCategory=Вы действительно хотите удалить этот учетный счет из группы бухгалтерских счетов? JournalizationInLedgerStatus=Status of journalization AlreadyInGeneralLedger=Already journalized in ledgers NotYetInGeneralLedger=Not yet journalized in ledgers GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group -DetailByAccount=Show detail by account -AccountWithNonZeroValues=Accounts with non-zero values -ListOfAccounts=List of accounts +DetailByAccount=Показать детали счета +AccountWithNonZeroValues=Счета с ненулевыми значениями +ListOfAccounts=Список счетов CountriesInEEC=Countries in EEC CountriesNotInEEC=Countries not in EEC CountriesInEECExceptMe=Countries in EEC except %s CountriesExceptMe=All countries except %s -AccountantFiles=Export accounting documents +AccountantFiles=Экспорт бухгалтерских документов MainAccountForCustomersNotDefined=Main accounting account for customers not defined in setup MainAccountForSuppliersNotDefined=Main accounting account for vendors not defined in setup @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations @@ -270,7 +271,7 @@ AccountingJournalType2=Продажи AccountingJournalType3=Покупки AccountingJournalType4=Банк AccountingJournalType5=Expenses report -AccountingJournalType8=Inventory +AccountingJournalType8=Инвентарная ведомость AccountingJournalType9=Has-new ErrorAccountingJournalIsAlreadyUse=This journal is already use AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu %s - %s @@ -339,8 +340,8 @@ ToBind=Lines to bind UseMenuToSetBindindManualy=Lines not yet bound, use menu
%s to make the binding manually ## Import -ImportAccountingEntries=Accounting entries -DateExport=Date export -WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate. -ExpenseReportJournal=Expense Report Journal -InventoryJournal=Inventory Journal +ImportAccountingEntries=Бухгалтерские записи +DateExport=Дата экспорта +WarningReportNotReliable=Внимание, этот отчет не основан на Гроссбухе, поэтому не содержит транзакции, измененные вручную в Гроссбухе. Если журналирование актуально, бухгалтерский учет будет более точным. +ExpenseReportJournal=Журнал отчетов о затратах +InventoryJournal=Журнал инвентарного учета diff --git a/htdocs/langs/ru_RU/admin.lang b/htdocs/langs/ru_RU/admin.lang index c46c80ab9f8..08836e9e900 100644 --- a/htdocs/langs/ru_RU/admin.lang +++ b/htdocs/langs/ru_RU/admin.lang @@ -9,35 +9,35 @@ VersionExperimental=Экспериментальная VersionDevelopment=Разработка VersionUnknown=Неизвестно VersionRecommanded=Рекомендуемые -FileCheck=Fileset Integrity Checks -FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to determine if any files have been modified (e.g by a hacker). +FileCheck=Проверка целостности файлов +FileCheckDesc=Этот инструмент позволяет проверить целостность файлов и настройки вашего приложения, сравнивая каждый файл с официальным. Значение некоторых установочных констант также может быть проверено. Вы можете использовать этот инструмент, чтобы определить, были ли какие-либо файлы изменены (например, хакером). FileIntegrityIsStrictlyConformedWithReference=Целостность файлов строго соответствует ссылке. -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added. +FileIntegrityIsOkButFilesWereAdded=Проверка целостности файлов пройдена, однако были добавлены новые файлы. FileIntegritySomeFilesWereRemovedOrModified=Ошибка проверки целостности файлов. Некоторые файлы были изменены, удалены или добавлены. GlobalChecksum=Глобальная контрольная сумма MakeIntegrityAnalysisFrom=Сделайте анализ целостности файлов приложений LocalSignature=Встроенная локальная подпись (менее надежная) -RemoteSignature=Удаленная дальняя подпись (более надежная) +RemoteSignature=Подпись на удаленном сервере (более надежная) FilesMissing=Отсутсвующие файлы FilesUpdated=Обновлённые файлы FilesModified=Модифицированные файлы FilesAdded=Добавленные файлы FileCheckDolibarr=Проверка целостности файлов приложений -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when the application is installed from an official package -XmlNotFound=Xml Integrity Файл приложения не найден +AvailableOnlyOnPackagedVersions=Локальный файл для проверки целостности доступен только тогда, когда приложение установлено из официального пакета +XmlNotFound=Xml-файл целостности приложения не найден SessionId=ID сессии SessionSaveHandler=Обработчик для сохранения сессий -SessionSavePath=Session save location +SessionSavePath=Место сохранения сессии PurgeSessions=Очистка сессий ConfirmPurgeSessions=Вы хотите завершить все сессии? Это действие отключит всех пользователей (кроме вас). -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions. +NoSessionListWithThisHandler=Обработчик сохраненных сеансов, настроенный в вашем PHP, не позволяет листинг всех запущенных сессий. LockNewSessions=Заблокировать новые подключения -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user %s will be able to connect after that. +ConfirmLockNewSessions=Вы уверены, что хотите ограничить любое новое подключение Dolibarr к себе? Только пользователь %s сможет подключиться после этого. UnlockNewSessions=Удалить блокировку подключений YourSession=Ваша сессия -Sessions=Users Sessions +Sessions=Пользовательские сессии WebUserGroup=Пользователь / группа Web-сервера -NoSessionFound=Your PHP configuration seems to not allow listing of active sessions. The directory used to save sessions (%s) may be protected (for example by OS permissions or by PHP directive open_basedir). +NoSessionFound=Кажется, ваша конфигурация PHP не позволяет отображать активные сеансы. Каталог, используемый для сохранения сеансов ( %s ), может быть защищен (например, разрешениями ОС или директивой PHP open_basedir). DBStoringCharset=Кодировка базы данных для хранения данных DBSortingCharset=Кодировка базы данных для сортировки данных ClientCharset=Клиентская кодировка @@ -51,11 +51,11 @@ InternalUsers=Внутренние пользователи ExternalUsers=Внешние пользователи GUISetup=Внешний вид SetupArea=Настройка -UploadNewTemplate=Загрузить новый шаблон (ы) +UploadNewTemplate=Загрузить новый шаблон(ы) FormToTestFileUploadForm=Форма для проверки загрузки файлов (в зависимости от настройки) IfModuleEnabled=Примечание: "Да" влияет только тогда, когда модуль %s включен -RemoveLock=Remove/rename file %s if it exists, to allow usage of the Update/Install tool. -RestoreLock=Restore file %s, with read permission only, to disable any further use of the Update/Install tool. +RemoveLock=Удалите/переименуйте файл %s, если он существует, чтобы разрешить использование инструмента обновления/установки. +RestoreLock=Восстановите файл %s с разрешением только для чтение, чтобы отключить дальнейшее использование инструмента обновления/установки. SecuritySetup=Настройка безопасности SecurityFilesDesc=Определите здесь параметры, связанные с безопасностью загрузки файлов. ErrorModuleRequirePHPVersion=Ошибка, этот модуль требует PHP версии %s или выше @@ -66,16 +66,16 @@ Dictionary=Словари ErrorReservedTypeSystemSystemAuto=Значение 'system' и 'systemauto' для типа зарезервировано. Вы можете использовать значение 'user' для добавления вашей собственной записи ErrorCodeCantContainZero=Код не может содержать значение 0 DisableJavascript=Отключить JavaScript и Ajax функции -DisableJavascriptNote=Note: For test or debug purpose. For optimization for blind person or text browsers, you may prefer to use the setup on the profile of user -UseSearchToSelectCompanyTooltip=Кроме того, если у вас есть большое количество третьих лиц (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Setup-> Other. Затем поиск будет ограничен началом строки. -UseSearchToSelectContactTooltip=Кроме того, если у вас есть большое количество третьих лиц (> 100 000), вы можете увеличить скорость, установив постоянную связь CONTACT_DONOTSEARCH_ANYWHERE в 1 в Setup-> Other. Затем поиск будет ограничен началом строки. -DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.
This may increase performance if you have a large number of third parties, but it is less convenient. -DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.
This may increase performance if you have a large number of contacts, but it is less convenient) -NumberOfKeyToSearch=Number of characters to trigger search: %s -NumberOfBytes=Number of Bytes -SearchString=Search string +DisableJavascriptNote=Примечание. Для тестирования или отладки. Для оптимизации для слепых или текстовых браузеров, вы можете использовать настройки в профиле пользователя. +UseSearchToSelectCompanyTooltip=Кроме того, если у вас есть большое количество контрагентов (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Настройка-Доп.настройки. Затем поиск будет ограничен началом строки. +UseSearchToSelectContactTooltip=Кроме того, если у вас есть большое количество контрагентов (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Настройка-Доп.настройки. Затем поиск будет ограничен началом строки. +DelaiedFullListToSelectCompany=Ожидание нажатия клавиши, прежде чем загружать содержимое списка Контрагентов.
Это может повысить производительность, если у вас много контрагентов, но это менее удобно. +DelaiedFullListToSelectContact=Ожидание нажатия клавиши, прежде чем загружать содержимое списка Контактов.
Это может увеличить производительность, если у вас большое количество контактов, но это менее удобно +NumberOfKeyToSearch=Количество символов для запуска поиска: %s +NumberOfBytes=Количество байт +SearchString=Строка поиска NotAvailableWhenAjaxDisabled=Недоступно при отключенном Ajax -AllowToSelectProjectFromOtherCompany=В документе третьей стороны можно выбрать проект, связанный с другой третьей стороной +AllowToSelectProjectFromOtherCompany=В документе контрагента можно выбрать проект, связанный с другим контрагентом JavascriptDisabled=JavaScript отключен UsePreviewTabs=Использовать вкладки предпросмотра ShowPreview=Предварительный просмотр @@ -83,7 +83,7 @@ PreviewNotAvailable=Предварительный просмотр не дос ThemeCurrentlyActive=Текущая тема CurrentTimeZone=Текущий часовой пояс в настройках PHP MySQLTimeZone=Часовой пояс БД (MySQL) -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered). +TZHasNoEffect=Даты хранятся и возвращаются сервером базы данных, как если бы они хранились в виде переданной строки. Часовой пояс действует только при использовании функции UNIX_TIMESTAMP (которая не должна использоваться Dolibarr, поэтому часовая зона (TZ) базы данных не должна иметь никакого эффекта, даже если она изменилась после ввода данных). Space=Пробел Table=Таблица Fields=Поля @@ -94,7 +94,7 @@ NextValueForInvoices=Следующее значение (счета-факту NextValueForCreditNotes=Следующее значение (кредитные авизо) NextValueForDeposit=Следующее значение (первоначальный взнос) NextValueForReplacements=Следующее значение (замены) -MustBeLowerThanPHPLimit=Note: your PHP configuration currently limits the maximum filesize for upload to %s %s, irrespective of the value of this parameter +MustBeLowerThanPHPLimit=Примечание: ваша конфигурация PHP в настоящее время ограничивает максимальный размер файла для загрузки до %s %s, независимо от значения этого параметра NoMaxSizeByPHPLimit=Примечание: в вашей конфигурации PHP установлено no limit MaxSizeForUploadedFiles=Максимальный размер загружаемых файлов (0 для запрещения каких-либо загрузок) UseCaptchaCode=Использовать графический код (CAPTCHA) на странице входа @@ -102,8 +102,8 @@ AntiVirusCommand= Полный путь к антивирусной команд AntiVirusCommandExample= Пример для ClamWin: C: \\ Program Files (x86) \\ ClamWin \\ Bin \\ clamscan.exe
Пример для ClamAV: / USR / BIN / clamscan AntiVirusParam= Дополнительные параметры командной строки AntiVirusParamExample= Пример для ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib" -ComptaSetup=Установка модуля контрагентов -UserSetup=Установка управления пользователями +ComptaSetup=Настройка модуля бухгалтерского учета +UserSetup=Настройка управления пользователями MultiCurrencySetup=Многовалютная настройка MenuLimits=Точность и ограничения MenuIdParent=ID родительского меню @@ -114,14 +114,14 @@ NotConfigured=Модуль/Приложение не настроен Active=Активная SetupShort=Настройка OtherOptions=Другие настройки -OtherSetup=Other Setup +OtherSetup=Другие настройки CurrentValueSeparatorDecimal=Десятичный разделитель CurrentValueSeparatorThousand=Разделитель разрядов Destination=Назначение IdModule=ID модуля IdPermissions=ID прав доступа LanguageBrowserParameter=Параметр %s -LocalisationDolibarrParameters=Localization parameters +LocalisationDolibarrParameters=Параметры локализации ClientTZ=Часовой пояс пользователя ClientHour=Время клиента (пользователя) OSTZ=Часовой пояс сервера @@ -129,11 +129,11 @@ PHPTZ=Часовой пояс PHP сервера DaylingSavingTime=Летнее время CurrentHour=Время PHP (на PHP-сервере) CurrentSessionTimeOut=Тайм-аут текущей сессии -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris" -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server. +YouCanEditPHPTZ=Чтобы установить другой часовой пояс PHP (не обязательно), вы можете попробовать добавить файл .htaccess с такой строкой, как «SetEnv TZ Europe/Paris» +HoursOnThisPageAreOnServerTZ=Внимание, в отличие от других экранов, часы на этой странице не в вашем часовом поясе, а в часовом поясе сервера. Box=Виджет Boxes=Виджеты -MaxNbOfLinesForBoxes=Max. number of lines for widgets +MaxNbOfLinesForBoxes=Макс. количество строк для виджета AllWidgetsWereEnabled=Доступны все доступные виджеты PositionByDefault=Порядок по умолчанию Position=Позиция @@ -141,17 +141,17 @@ MenusDesc=Менеджеры меню позволяют настраивать MenusEditorDesc=Редактор меню позволяет задавать собственные пункты в меню. Используйте это осторожно, что бы избежать нестабильности и всегда недоступных пунктов меню.
Некоторые модули добавляют пункты меню (в основном в меню Все). Если вы удалите некоторые из них по ошибке, вы можете восстановить их отключив или включив модуль повторно. MenuForUsers=Меню для пользователей LangFile=.lang файл -Language_en_US_es_MX_etc=Language (en_US, es_MX, ...) +Language_en_US_es_MX_etc=Язык (en_US, es_MX, ...) System=Система SystemInfo=Информация о системе SystemToolsArea=Раздел системных настроек -SystemToolsAreaDesc=This area provides administration functions. Use the menu to choose the required feature. +SystemToolsAreaDesc=Эта область обеспечивает функции администрирования. Используйте меню, чтобы выбрать необходимую функцию. Purge=Очистить -PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in %s directory). Using this feature is not normally necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server. +PurgeAreaDesc=Эта страница позволяет вам удалить все файлы, созданные или сохраненные Dolibarr (временные файлы или все файлы в каталоге %s ). Использование этой функции обычно не требуется. Он предоставляется в качестве обходного пути для пользователей, чей Dolibarr размещен поставщиком, который не предлагает разрешения на удаление файлов, созданных веб-сервером. PurgeDeleteLogFile=Удаление файлов журналов, включая %s определенный для модуля Syslog (без риска потери данных) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Удалить все временные файлы (без риска потери данных). Примечание: Удаление выполняется только в том случае, если временный каталог был создан 24 часа назад. PurgeDeleteTemporaryFilesShort=Удаление временных файлов -PurgeDeleteAllFilesInDocumentsDir=Delete all files in directory: %s.
This will delete all generated documents related to elements (third parties, invoices etc...), files uploaded into the ECM module, database backup dumps and temporary files. +PurgeDeleteAllFilesInDocumentsDir=Удалить все файлы в каталоге: %s .
Это удалит все сгенерированные документы, связанные с элементами (контрагенты, счета и т.д.), файлы, загруженные в модуль ECM, резервные копии базы данных и временные файлы. PurgeRunNow=Очистить сейчас PurgeNothingToDelete=Нет директории или файла для удаления. PurgeNDirectoriesDeleted=Удалено %s файлов или каталогов. @@ -164,16 +164,16 @@ Restore=Восстановить RunCommandSummary=Резервное копирование запущено следующей командой BackupResult=Результат резервного копирования BackupFileSuccessfullyCreated=Файл резервной копии успешно создан -YouCanDownloadBackupFile=The generated file can now be downloaded +YouCanDownloadBackupFile=Созданный файл теперь можно скачать NoBackupFileAvailable=Нет файлов резервной копии. ExportMethod=Метод экспорта ImportMethod=Метод импорта ToBuildBackupFileClickHere=Для создания файла резервной копии нажмите здесь. -ImportMySqlDesc=To import a MySQL backup file, you may use phpMyAdmin via your hosting or use the mysql command from the Command line.
For example: +ImportMySqlDesc=Чтобы импортировать файл резервной копии MySQL, вы можете использовать phpMyAdmin через ваш хостинг или использовать команду mysql из командной строки.
Например: ImportPostgreSqlDesc=Для импорта файла резервной копии, вы должны использовать команду pg_restore из командной строки: ImportMySqlCommand=%s %s < mybackupfile.sql ImportPostgreSqlCommand=%s %s mybackupfile.sql -FileNameToGenerate=Filename for backup: +FileNameToGenerate=Имя файла резервной копии: Compression=Сжатие CommandsToDisableForeignKeysForImport=Команда отключения внешних ключей при импорте CommandsToDisableForeignKeysForImportWarning=Обязательно, если вы хотите иметь возможность для последующего восстановления sql dump @@ -195,15 +195,15 @@ IgnoreDuplicateRecords= Игнорировать ошибки дублирующ AutoDetectLang=Автоопределение (язык браузера) FeatureDisabledInDemo=Функция отключена в демо - FeatureAvailableOnlyOnStable=Функция доступна только в официальных стабильных версиях -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it. +BoxesDesc=Виджеты - это компоненты, показывающие некоторую информацию, которую можно добавить для персонализации некоторых страниц. Вы можете выбрать отображать или нет виджет, выбрав целевую страницу и нажав «Активировать», или щелкнув корзину, чтобы отключить ее. OnlyActiveElementsAreShown=Показаны только элементы из включенных модулей -ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button (at end of module line) to enable/disable a module/application. +ModulesDesc=Модули/приложения определяют, какие функции доступны в программном обеспечении. Некоторые модули требуют предоставления разрешений пользователям после активации модуля. Нажмите кнопку включения/выключения (в конце строки модуля), чтобы включить/отключить модуль/приложение. ModulesMarketPlaceDesc=В интернете вы можете найти больше модулей для загрузки... -ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab %s. +ModulesDeployDesc=Если разрешения вашей файловой системе позволяют, вы можете использовать этот инструмент для развертывания внешнего модуля. Модуль будет виден на вкладке %s . ModulesMarketPlaces=Поиск внешних приложений/модулей ModulesDevelopYourModule=Разработка собственного приложения/модулей -ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you. -DOLISTOREdescriptionLong=Instead of switching on www.dolistore.com web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)... +ModulesDevelopDesc=Вы также можете разработать свой собственный модуль или найти партнера для его разработки. +DOLISTOREdescriptionLong=Вместо того чтобы переключаться на сайт www.dolistore.com для поиска внешнего модуля, вы можете использовать этот встроенный инструмент, который будет выполнять поиск для вас (может быть медленным, нужен доступ в Интернет) ... NewModule=Новый FreeModule=Свободно CompatibleUpTo=Совместимость с версией %s @@ -213,10 +213,10 @@ SeeInMarkerPlace=См. На рынке Updated=Обновлено Nouveauté=Новое AchatTelechargement=Купить/Скачать -GoModuleSetupArea=To deploy/install a new module, go to the Module setup area: %s. +GoModuleSetupArea=Чтобы развернуть/установить новый модуль, перейдите в область настройки модуля: %s . DoliStoreDesc=DoliStore, официальный магазин внешних модулей Dolibarr ERP / CRM -DoliPartnersDesc=List of companies providing custom-developed modules or features.
Note: since Dolibarr is an open source application, anyone experienced in PHP programming may develop a module. -WebSiteDesc=External websites for more add-on (non-core) modules... +DoliPartnersDesc=Список компаний, предоставляющих индивидуально разработанные модули или функции.
Примечание: поскольку Dolibarr является приложением с открытым исходным кодом, любой , кто имеет опыт программирования на PHP, может разработать модуль. +WebSiteDesc=Внешние веб-сайты для дополнительных модулей (неосновных) ... DevelopYourModuleDesc=Некоторые решения для разработки собственного модуля ... URL=Ссылка BoxesAvailable=Доступные виджеты @@ -229,29 +229,29 @@ Required=Обязательный UsedOnlyWithTypeOption=Используется только для некоторых вариантов повестки дня Security=Безопасность Passwords=Пароли -DoNotStoreClearPassword=Encrypt passwords stored in database (NOT as plain-text). It is strongly recommended to activate this option. -MainDbPasswordFileConfEncrypted=Encrypt database password stored in conf.php. It is strongly recommended to activate this option. +DoNotStoreClearPassword=Шифрование паролей, хранящихся в базе данных (НЕ в виде простого текста). Настоятельно рекомендуем активировать эту опцию. +MainDbPasswordFileConfEncrypted=Зашифруйте пароль базы данных, хранящийся в conf.php. Настоятельно рекомендуем активировать эту опцию. InstrucToEncodePass=Чтобы поместить зашифрованный пароль в conf.php файл, замените строку
$dolibarr_main_db_pass ="..."
на
$dolibarr_main_db_pass"=crypted:%s" InstrucToClearPass=Чтобы поместить не зашифрованный пароль в conf.php файл, замените строку
$dolibarr_main_db_pass="crypted:..."
на
$dolibarr_main_db_pass="%s" -ProtectAndEncryptPdfFiles=Protect generated PDF files. This is NOT recommended as it breaks bulk PDF generation. +ProtectAndEncryptPdfFiles=Защита сгенерированных PDF-файлов. Это НЕ рекомендуется, поскольку это нарушает массовую генерацию PDF. ProtectAndEncryptPdfFilesDesc=Защита документов PDF допускает чтение и распечатку любым приложением просмотра файлов PDF. Однако редактирование и копирование не возможно. Использование этой возможности не позволит глобальное объединение файлов PDF. Feature=Возможность DolibarrLicense=Лицензия Developpers=Разработчики / авторы -OfficialWebSite=Dolibarr official web site +OfficialWebSite=Официальный сайт Dolibarr OfficialWebSiteLocal=Локальный веб-сайт (%s) -OfficialWiki=Dolibarr documentation / Wiki +OfficialWiki=Документация Dolibarr / Wiki OfficialDemo=Демонстрация возможностей Dolibarr в интернете -OfficialMarketPlace=Официальный магазин внешних модулей / дополнений +OfficialMarketPlace=Официальный магазин внешних модулей/дополнений OfficialWebHostingService=Рекомендуемые сервисы веб-хостинга (облачный хостинг) ReferencedPreferredPartners=Предпочитаемые партнёры OtherResources=Другие источники -ExternalResources=External Resources +ExternalResources=Внешние Ресурсы SocialNetworks=Социальные сети ForDocumentationSeeWiki=Для получения документации пользователя или разработчика (документация, часто задаваемые вопросы...),
посетите Dolibarr Wiki:
%s ForAnswersSeeForum=Для любых других вопросов / помощи, вы можете использовать форум Dolibarr:
%s -HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr. -HelpCenterDesc2=Some of these resources are only available in english. +HelpCenterDesc1=Вот некоторые ресурсы для получения помощи и поддержки с Dolibarr. +HelpCenterDesc2=Некоторые из этих ресурсов доступны только на английском языке . CurrentMenuHandler=Обработчик текущего меню MeasuringUnit=Единица измерения LeftMargin=Левое поле @@ -266,42 +266,42 @@ NoticePeriod=Период уведомления NewByMonth=Новые по месяцам Emails=Электронная почта EMailsSetup=Настройка электронной почты -EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary. +EMailsDesc=Эта страница позволяет вам переопределить параметры PHP по умолчанию для отправки электронной почты. В большинстве случаев в ОС Unix / Linux настройка PHP правильная, и эти параметры не нужны. EmailSenderProfiles=Профили отправителей электронной почты -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: %s) -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: %s) -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems) -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems) -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: %s) +MAIN_MAIL_SMTP_PORT=Порт SMTP/SMTPS (значение по умолчанию в php.ini: %s ) +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (значение по умолчанию в php.ini: %s ) +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Порт SMTP / SMTPS (не определен в PHP в Unix-подобных системах) +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (не определен в PHP в Unix-подобных системах) +MAIN_MAIL_EMAIL_FROM=Адрес электронной почты отправителя для автоматической отправки электронных писем (значение по умолчанию в php.ini: %s ) MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent) -MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to -MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos) +MAIN_MAIL_AUTOCOPY_TO= Копировать (СК) все отправленные письма в +MAIN_DISABLE_ALL_MAILS=Отключить всю отправку электронной почты (для тестирования или демонстрации) MAIN_MAIL_FORCE_SENDTO=Отправляйте все электронные письма (вместо реальных получателей, для целей тестирования) -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list -MAIN_MAIL_SENDMODE=Email sending method -MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication) -MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication) -MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption -MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption -MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature -MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim -MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector -MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing -MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos) +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Добавить сотрудников с электронной почтой в список разрешенных получателей +MAIN_MAIL_SENDMODE=Способ отправки электронной почты +MAIN_MAIL_SMTPS_ID=SMTP ID (если отправляющий сервер требует аутентификации) +MAIN_MAIL_SMTPS_PW=Пароль SMTP (если отправляющий сервер требует аутентификации) +MAIN_MAIL_EMAIL_TLS=Использовать шифрование TLS (SSL) +MAIN_MAIL_EMAIL_STARTTLS=Использовать шифрование TLS (STARTTLS) +MAIN_MAIL_EMAIL_DKIM_ENABLED=Используйте DKIM для создания подписи электронной почты +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Домен электронной почты для использования с DKIM +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Имя селектора DKIM +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Закрытый ключ для подписи DKIM +MAIN_DISABLE_ALL_SMS=Отключить всю отправку SMS (для тестирования или демонстрации) MAIN_SMS_SENDMODE=Метод, используемый для передачи SMS -MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending -MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email) +MAIN_MAIL_SMS_FROM=Номер телефона отправителя по умолчанию для отправки SMS +MAIN_MAIL_DEFAULT_FROMTYPE=Электронная почта отправителя по умолчанию для отправки вручную (электронная почта пользователя или компании) UserEmail=Электронная почта пользователя -CompanyEmail=Company Email +CompanyEmail=Электронная почта компании FeatureNotAvailableOnLinux=Функция недоступна на Unix подобных систем. Проверьте вашу программу для отправки почты локально. -SubmitTranslation=If the translation for this language is not complete or you find errors, you can correct this by editing files in directory langs/%s and submit your change to www.transifex.com/dolibarr-association/dolibarr/ +SubmitTranslation=Если перевод для этого языка не завершен или вы обнаружили ошибки, вы можете исправить это, отредактировав файлы в каталоге langs / %s и отправив свое изменение по адресу www.transifex.com/dolibarr-association/dolibarr/ SubmitTranslationENUS=Если перевод для этого языка не завершен или вы обнаружите ошибки, вы можете исправить это, отредактировав файлы в каталог langs/%s и отправив измененные файлы на dolibarr.org/forum или для разработчиков на github.com/Dolibarr/dolibarr. ModuleSetup=Настройка модуля ModulesSetup=Настройка Модулей/Приложений ModuleFamilyBase=Система -ModuleFamilyCrm=Customer Relationship Management (CRM) -ModuleFamilySrm=Vendor Relationship Management (VRM) -ModuleFamilyProducts=Product Management (PM) +ModuleFamilyCrm=Управление взаимоотношениями с клиентами (CRM) +ModuleFamilySrm=Управление взаимоотношениями с поставщиками (VRM) +ModuleFamilyProducts=Управление продуктом (PM) ModuleFamilyHr=Управление персоналом (HR) ModuleFamilyProjects=Проекты / Совместная работа ModuleFamilyOther=Другое @@ -309,25 +309,25 @@ ModuleFamilyTechnic=Много-модульные инструменты ModuleFamilyExperimental=Экспериментальные модули ModuleFamilyFinancial=Финансовые модули (Бухгалтерия / Казначейство) ModuleFamilyECM=Управление электронным содержимым (ECM) -ModuleFamilyPortal=Websites and other frontal application +ModuleFamilyPortal=Сайты и другие интерфейсные приложения ModuleFamilyInterface=Интерфейсы с внешними системами MenuHandlers=Обработчики меню MenuAdmin=Редактор меню DoNotUseInProduction=Не используйте в производстве -ThisIsProcessToFollow=Upgrade procedure: +ThisIsProcessToFollow=Процедура обновления: ThisIsAlternativeProcessToFollow=Это альтернативная настройка для обработки вручную: StepNb=Шаг %s -FindPackageFromWebSite=Find a package that provides the features you need (for example on the official web site %s). -DownloadPackageFromWebSite=Download package (for example from the official web site %s). -UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into your Dolibarr server directory: %s -UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:
%s -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: %s. +FindPackageFromWebSite=Найдите пакет, который предоставит нужные вам функции (например, на официальном веб-сайте %s). +DownloadPackageFromWebSite=Скачать пакет (например, с официального сайта %s). +UnpackPackageInDolibarrRoot=Распакуйте упакованные файлы в каталог вашего сервера Dolibarr: %s +UnpackPackageInModulesRoot=Чтобы развернуть/установить внешний модуль, распакуйте/разархивируйте упакованные файлы в каталог сервера, предназначенный для внешних модулей:
%s +SetupIsReadyForUse=Развертывание модуля завершено. Однако вы должны включить и настроить модуль в своем приложении, перейдя на страницу настройки модулей: %s . NotExistsDirect=Альтернативная корневая директория не задана.
InfDirAlt=Начиная с 3-ей версии, можно определить альтернативный корневой каталог. Это позволяет вам хранить в специальном каталоге, плагины и настраиваемые шаблоны.
Просто создайте каталог в корне Dolibarr (например: custom).
InfDirExample=
Затем объявите его в файле conf.php
$dolibarr_main_url_root_alt = '/custom'
$dolibarr_main_document_root_alt ='/path/of/dolibarr/htdocs/custom'
Если эти строки комментируются с помощью ''#", чтобы включить их, просто раскомментируйте, удалив символ "#''. -YouCanSubmitFile=Alternatively, you may upload the module .zip file package: +YouCanSubmitFile=Кроме того, вы можете загрузить файл пакета .zip: CurrentVersion=Текущая версия Dolibarr -CallUpdatePage=Browse to the page that updates the database structure and data: %s. +CallUpdatePage=Перейдите на страницу, которая обновляет структуру базы данных и данные: %s. LastStableVersion=Последняя стабильная версия LastActivationDate=Последняя дата активации LastActivationAuthor=Последний активированный автор @@ -351,55 +351,55 @@ ErrorCantUseRazIfNoYearInMask= Ошибка, не может использов ErrorCantUseRazInStartedYearIfNoYearMonthInMask=Ошибка, не возможно использовать опцию @ если последовательность {yy}{mm} или {yyyy}{mm} не в маске. UMask=UMask параметр для новых файлов в файловых системах Unix / Linux / BSD / Mac. UMaskExplanation=Этот параметр позволяет определить набор прав по умолчанию для файлов, созданных Dolibarr на сервере (при загрузке, например).
Это должно быть восьмеричное значение (например, 0666 означает, читать и записывать сможет каждый).
Этот параметр бесполезен на Windows-сервере. -SeeWikiForAllTeam=Take a look at the Wiki page for a list of contributors and their organization +SeeWikiForAllTeam=Посмотрите на вики-странице список участников и их организации. UseACacheDelay= Задержка для кэширования при экспорте в секундах (0 или пусто для отключения кэширования) DisableLinkToHelpCenter=Скрыть ссылку "нужна помощь или поддержка" на странице авторизации DisableLinkToHelp=Скрыть ссылку интернет-справки "%s" -AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed. -ConfirmPurge=Are you sure you want to execute this purge?
This will permanently delete all your data files with no way to restore them (ECM files, attached files...). +AddCRIfTooLong=Отсутствует автоматическое перенос текста, слишком длинный текст не будет отображаться в документах. При необходимости перенесите строке вручную в текстовой области. +ConfirmPurge=Вы уверены, что хотите выполнить эту очистку?
Это навсегда удалит все ваши файлы данных без возможности их восстановления (файлы ECM, вложенные файлы ...). MinLength=Минимальная длина LanguageFilesCachedIntoShmopSharedMemory=Файлы .lang, загружены в общую памяти LanguageFile=Языковой файл -ExamplesWithCurrentSetup=Examples with current configuration +ExamplesWithCurrentSetup=Примеры с текущей конфигурацией ListOfDirectories=Список каталогов с шаблонами OpenDocument -ListOfDirectoriesForModelGenODT=Список каталогов содержащих файлы шаблонов в форматеOpenDocument.

Укажите здесь полный пусть к каталогу.
Каждый каталог с новой строки.
Для добавления каталога GED-модулей, добавьте здесь DOL_DATA_ROOT/ecm/yourdirectoryname.

Файлы в этих каталогах должны заканчиваться символами .odt или .ods. -NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories +ListOfDirectoriesForModelGenODT=Список каталогов, содержащих файлы шаблонов в формате OpenDocument.

Укажите здесь полный путь к каталогу.
Каждый каталог с новой строки.
Чтобы добавить каталог GED-модуля, добавьте здесь DOL_DATA_ROOT/ecm/yourdirectoryname .

Файлы в этих каталогах должны заканчиваться на .odt или .ods . +NumberOfModelFilesFound=Количество файлов шаблонов ODT/ODS, найденных в этих каталогах ExampleOfDirectoriesForModelGen=Примеры синтаксиса:
C: \\ MYDIR
/ home / mydir
DOL_DATA_ROOT / ecm / ecmdir FollowingSubstitutionKeysCanBeUsed=
Прежде чем сохранить шаблоны в этих каталогах прочитайте документацию на Wiki чтобы узнать, как создать свой шаблоны ODT документов: FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template FirstnameNamePosition=Расположение Имени / Фамилиии -DescWeather=The following images will be shown on the dashboard when the number of late actions reach the following values: +DescWeather=Следующие изображения будут отображаться на Информ-панели, когда количество последних действий достигнет следующих значений: KeyForWebServicesAccess=Ключ к использованию веб-служб (параметр "dolibarrkey" в веб-службах) TestSubmitForm=Форма тестового ввода -ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever the user choice. Also this menu manager specialized for smartphones does not work on all smartphone. Use another menu manager if you experience problems with yours. +ThisForceAlsoTheme=При использовании этого менеджера меню также будет использоваться собственная тема независимо от выбора пользователя. Также этот менеджер меню, специализированный для смартфонов, работает не на всех смартфонах. Используйте другой менеджер меню, если у вас возникли проблемы с вашим. ThemeDir=Каталог тем оформления -ConnectionTimeout=Connection timeout +ConnectionTimeout=Время соединения вышло ResponseTimeout=Время ожидания ответа SmsTestMessage=Пробное сообщение от __PHONEFROM__ к ​​__PHONETO__ ModuleMustBeEnabledFirst=Для использования этой функции необходимо сначала включить модуль %s SecurityToken=Ключ для шифрования URL-адресов -NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external vendor, but you can find some on %s +NoSmsEngine=Менеджер отправления SMS недоступен. Диспетчер отправления SMS не устанавливается вместе с дистрибутивом по умолчанию, поскольку он зависит от внешнего поставщика, но некоторые из них можно найти на %s. PDF=PDF -PDFDesc=Global options for PDF generation. -PDFAddressForging=Rules for address boxes -HideAnyVATInformationOnPDF=Hide all information related to Sales Tax / VAT +PDFDesc=Общие опции для генерации PDF. +PDFAddressForging=Правила для зоны адреса +HideAnyVATInformationOnPDF=Скрыть всю информацию, связанную с налогом с продаж / НДС PDFRulesForSalesTax=Правила для налога с продаж/НДС PDFLocaltax=Правила для %s -HideLocalTaxOnPDF=Hide %s rate in column Tax Sale -HideDescOnPDF=Hide products description -HideRefOnPDF=Hide products ref. -HideDetailsOnPDF=Hide product lines details +HideLocalTaxOnPDF=Скрыть ставку %s в колонке Налог +HideDescOnPDF=Скрыть описание товара +HideRefOnPDF=Скрыть ссылки на продукты. +HideDetailsOnPDF=Скрыть детали о линейки продуктов PlaceCustomerAddressToIsoLocation=Используйте французскую стандартную позицию (La Poste) для позиции адреса клиента Library=Библиотека UrlGenerationParameters=Параметры безопасных URL`ов SecurityTokenIsUnique=Использовать уникальный параметр securekey для каждого URL EnterRefToBuildUrl=Введите ссылку на объект %s GetSecuredUrl=Получить рассчитанный URL -ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons +ButtonHideUnauthorized=Скрыть кнопки для пользователей без прав администратора для несанкционированных действий вместо отображения серых отключенных кнопок OldVATRates=Предыдущее значение НДС NewVATRates=Новое значение НДС PriceBaseTypeToChange=Изменять базовые цены на определенную величину -MassConvert=Launch bulk conversion +MassConvert=Запустить пакетное преобразование String=Строка TextLong=Длинный текст HtmlText=Html текст @@ -416,21 +416,24 @@ ExtrafieldSelect = Выбрать из списка ExtrafieldSelectList = Выбрать из таблицы ExtrafieldSeparator=Разделитель (не поле) ExtrafieldPassword=Пароль -ExtrafieldRadio=Radio buttons (one choice only) +ExtrafieldRadio=Радио кнопки (только один выбор) ExtrafieldCheckBox=Флажок ExtrafieldCheckBoxFromList=Флажки из таблицы ExtrafieldLink=Ссылка на объект ComputedFormula=Вычисленное поле -ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' -ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) -ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key -ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... -ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... -ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter -ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter -ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ComputedFormulaDesc=Вы можете ввести здесь формулу, используя другие свойства объекта или любую кодировку PHP, чтобы получить динамически вычисленное значение. Вы можете использовать любые PHP-совместимые формулы, включая "?" оператор условия и следующий глобальный объект: 1$db, $conf, $langs, $mysoc, $user, $object1 . 2 3ВНИМАНИЕ3 : могут быть доступны только некоторые свойства $object. Если нужные вам свойства не загружены, просто извлеките объект в формулу, как во втором примере.
Использование вычисляемого поля означает, что вы не можете ввести себе любое значение из интерфейса. Также, если есть синтаксическая ошибка, формула может ничего не возвращать.

Пример формулы:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Пример для перезагрузки объекта
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Другой пример формулы для принудительной загрузки объекта и его родительского объекта:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Родительский проект не найден' +Computedpersistent=Сохранить вычисленное поле +ComputedpersistentDesc=Вычисленные дополнительные поля будут сохранены в базе данных, однако значение будет пересчитано только при изменении объекта этого поля. Если вычисляемое поле зависит от других объектов или глобальных данных, это значение может быть неправильным!! +ExtrafieldParamHelpPassword=Оставьте это поле пустым, чтобы значение хранилось без шифрования (поле должно быть скрыто только звездочкой на экране).
Установите 'auto', чтобы использовать правило шифрования по умолчанию для сохранения пароля в базе данных (тогда считываемое значение будет только хешем, никакой возможности восстановить исходное значение) +ExtrafieldParamHelpselect=Список значений должен быть строками формата: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
code3, значение3
...

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
1, значение1|options_ parent_list_code : parent_key
2, значение2|options_ parent_list_code : parent_key

Чтобы иметь список в зависимости от другого списка:
1, значение1 | parent_list_code : parent_key
2, значение2 | parent_list_code : parent_key +ExtrafieldParamHelpcheckbox=Список значений должен быть строками с форматом: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
3, значение3
... +ExtrafieldParamHelpradio=Список значений должен быть строками с форматом: ключ, значение (где ключ не может быть равен 0)

например:
1, значение1
2, значение2
3, значение3
... +ExtrafieldParamHelpsellist=Список значений поступает из таблицы
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent:libelle:id:: filter

-idfilter - обязательно первичный ключ int
- фильтр может быть простым тестом (например, active = 1) для отображения только активного значения
Вы также можете использовать $ID$ в фильтре с текущим идентификатором текущего объекта.
Чтобы сделать SELECT в фильтре, используйте $SEL$
если вы хотите фильтровать extrafields, используйте синтаксис extra.fieldcode = ... (где code field - это код extrafields)

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
c_typent:libelle:id:options_ parent_list_code|parent_column:filter

Чтобы иметь список в зависимости от другого списка:
c_typent:libelle:id: parent_list_code|parent_column:filter +ExtrafieldParamHelpchkbxlst=Список значений поступает из таблицы
Синтаксис: table_name:label_field:id_field::filter
Пример: c_typent: libelle:id::filter

Фильтр может быть простым тестом (например, active = 1) для отображения только активного значения
Вы также можете использовать $ID$ в фильтре с текущим идентификатором текущего объекта.
Чтобы сделать SELECT в фильтре, используйте $SEL$
если вы хотите фильтровать extrafield, используйте синтаксис extra.fieldcode = ... (где code field - это код extrafield)

Чтобы иметь список в зависимости от другого списка дополнительных атрибутов:
c_typent:libelle:id: options_ parent_list_code|parent_column: filter

Чтобы иметь список в зависимости от другого списка:
c_typent: ibelle:id:parent_list_code|parent_column:filter +ExtrafieldParamHelplink=Параметры должны быть ObjectName:Classpath
Синтаксис: ObjectName:Classpath
Примеры:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Оставьте пустым для простого разделителя
Установите 1 для сворачивающегося разделителя (открытый по умолчанию)
Установите 2 для сворачивающегося разделителя (свернут по умолчанию) LibraryToBuildPDF=Библиотека используемая для создания PDF-файлов -LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) +LocalTaxDesc=Некоторые страны могут применять два или три налога на каждую позицию счета. Если это так, выберите тип второго и третьего налога и его ставку. Возможные типы:
1: местный налог применяется к продуктам и услугам без НДС (местный налог рассчитывается на сумму без налога)
2: местный налог применяется к продуктам и услугам, включая НДС (местный налог рассчитывается на сумму + основной налог)
3: местный налог применяется к продуктам без НДС (местный налог рассчитывается на сумму без налога)
4: местный налог применяется к продуктам, включая НДС (местный налог рассчитывается на сумму + основной НДС)
5: местный налог применяется к услугам без НДС (местный налог рассчитывается на сумму без налога)
6: местный налог применяется к услугам, включая НДС (местный налог рассчитывается на сумму + налог) SMS=SMS LinkToTestClickToDial=Введите номер телефона для отображения ссылки с целью проверки ClickToDial-адреса пользователя %s RefreshPhoneLink=Обновить ссылку @@ -440,40 +443,40 @@ DefaultLink=Ссылка по умолчанию SetAsDefault=Установить по умолчанию ValueOverwrittenByUserSetup=Предупреждение: это значение может быть перезаписано в настройках пользователя (каждый пользователь может задать свои настройки ссылки ClickToDial) ExternalModule=Внешний модуль - установлен в директорию %s -BarcodeInitForthird-parties=Mass barcode init for third-parties +BarcodeInitForthird-parties=Массовая инициализация штрих-кода для контрагентов BarcodeInitForProductsOrServices=Массовое создание или удаление штрих-кода для Товаров или Услуг CurrentlyNWithoutBarCode=В настоящее время у вас есть %sзапись на %s%s без определенного штрих-кода. InitEmptyBarCode=Начальное значения для следующих %s пустых записей EraseAllCurrentBarCode=Стереть все текущие значения штрих-кодов ConfirmEraseAllCurrentBarCode=Вы действительно хотите удалить все текущие значения штрих-кода? AllBarcodeReset=Все значения штрих-кодов были удалены -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the Barcode module setup. +NoBarcodeNumberingTemplateDefined=В настройках модуля штрих-кода не включен шаблон нумерации. EnableFileCache=Включить кеш файлов -ShowDetailsInPDFPageFoot=Add more details into footer, such as company address or manager names (in addition to professional ids, company capital and VAT number). -NoDetails=No additional details in footer +ShowDetailsInPDFPageFoot=Добавьте дополнительные сведения в нижний колонтитул, такие как адрес компании или имена менеджеров (в дополнение к профессиональным идентификаторам, капиталу компании и номеру НДС). +NoDetails=Никаких дополнительных подробностей в нижнем колонтитуле DisplayCompanyInfo=Показать адрес компании DisplayCompanyManagers=Отображать имена менеджеров DisplayCompanyInfoAndManagers=Отображать имена адресов и менеджеров компаний -EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible. -ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code -ModuleCompanyCodeSupplierAquarium=%s followed by vendor code for a vendor accounting code +EnableAndSetupModuleCron=Если вы хотите, чтобы этот повторяющийся счет генерировался автоматически, модуль * %s * должен быть включен и правильно настроен. В противном случае генерация счетов должна производиться вручную из этого шаблона с помощью кнопки * Создать *. Обратите внимание, что даже если вы включили автоматическую генерацию, вы все равно можете не опасаясь запустить ручную генерацию. Генерация дубликатов за один и тот же период невозможна. +ModuleCompanyCodeCustomerAquarium=%s, за которым следует код клиента для кода учетной записи клиента +ModuleCompanyCodeSupplierAquarium=%s, за которым следует код поставщика для кода учетной записи поставщика ModuleCompanyCodePanicum=Верните пустой учетный код. -ModuleCompanyCodeDigitaria=Accounting code depends on third-party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third-party code. +ModuleCompanyCodeDigitaria=Бухгалтерский код зависит от кода контрагента. Код состоит из символа «C» в первой позиции, за которым следуют первые 5 символов кода контрагента. Use3StepsApproval=По умолчанию заказы на поставку должны быть созданы и одобрены двумя разными пользователями (один шаг/пользователь для создания и один шаг/пользователь для одобрения. Обратите внимание, что если у пользователя есть как разрешение на создание и утверждение, достаточно одного шага/пользователя) , Вы можете задать эту опцию, чтобы ввести утверждение третьего шага/пользователя, если сумма превышает выделенное значение (так что потребуется 3 шага: 1 = валидация, 2 = первое утверждение и 3 = второе одобрение, если суммы достаточно).
Установите это для пустого, если достаточно одного утверждения (2 шага), установите его на очень низкое значение (0,1), если требуется второе утверждение (3 шага). UseDoubleApproval=Используйте одобрение на 3 шага, когда сумма (без налога) выше ... -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not theirs, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).
If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider. +WarningPHPMail=ПРЕДУПРЕЖДЕНИЕ. Часто лучше настроить исходящую электронную почту, чтобы использовать почтовый сервер вашего провайдера вместо настроек по умолчанию. Некоторые провайдеры электронной почты (например, Yahoo) не позволяют отправлять электронную почту с другого сервера, не их собственного сервера. Ваша текущая настройка использует сервер приложения для отправки электронной почты, а не сервер вашего провайдера электронной почты, поэтому некоторые получатели (совместимые с ограничительным протоколом DMARC) спросят вашего провайдера электронной почты, могут ли они принять вашу электронную почту, а некоторые провайдеры электронной почты (например, Yahoo) может ответить «нет», потому что сервер не принадлежит им, поэтому некоторые из отправленных вами писем могут быть не приняты (будьте осторожны и с квотой отправки вашего провайдера электронной почты).
Если у вашего провайдера электронной почты (например, Yahoo) есть это ограничение, вы должны изменить настройки электронной почты, чтобы выбрать другой метод «SMTP-сервер» и ввести SMTP-сервер и учетные данные, предоставленные вашим провайдером электронной почты. WarningPHPMail2=Если вашему SMTP-провайдеру электронной почты необходимо ограничить почтовый клиент некоторыми IP-адресами (это очень редко), это IP-адрес почтового пользователя (MUA) для вашего приложения ERP CRM: %s. ClickToShowDescription=Нажмите, чтобы посмотреть описание -DependsOn=This module needs the module(s) -RequiredBy=Этому модулю требуется модуль (модулями) -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field. -PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, the default values will be effective if all parameters are set to same value. -PageUrlForDefaultValuesCreate=
Example:
For the form to create a new third party, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/", so use path like mymodule/mypage.php and not custom/mymodule/mypage.php.
If you want default value only if url has some parameter, you can use %s -PageUrlForDefaultValuesList=
Example:
For the page that lists third parties, it is %s.
For URL of external modules installed into custom directory, do not include the "custom/" so use a path like mymodule/mypagelist.php and not custom/mymodule/mypagelist.php.
If you want default value only if url has some parameter, you can use %s -AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...) -EnableDefaultValues=Enable customization of default values -EnableOverwriteTranslation=Enable usage of overwritten translation -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation. +DependsOn=Этот модуль нуждается в модуле (модулях) +RequiredBy=Этот модуль требуется для модуля (модулей) +TheKeyIsTheNameOfHtmlField=Это имя поля HTML. Необходимы технические знания, чтобы прочитать содержимое HTML-страницы, чтобы получить ключевое имя поля. +PageUrlForDefaultValues=Вы должны ввести относительный путь URL страницы. Если вы укажете параметры в URL-адресе, значения по умолчанию будут эффективны, если все параметры будут установлены на одно и то же значение. +PageUrlForDefaultValuesCreate=
Пример:
Для формы создания нового контрагента, это %s .
Для URL внешних модулей, установленных в пользовательский каталог, не добавляйте «custom /», поэтому используйте путь mymodule/mypage.php, а не custom/mymodule / mypage.php.
Если вы хотите использовать значение по умолчанию, только если в url есть какой-либо параметр, вы можете использовать %s +PageUrlForDefaultValuesList=
Пример:
Для страницы, на которой перечислены контрагенты, это %s .
Для URL-адресов внешних модулей, установленных в пользовательский каталог, не включайте «custom /», и используйте путь как mymodule/mypagelist.php, а не custom/mymodule/mypagelist.php.
Если вы хотите использовать значение по умолчанию, только если в url есть какой-либо параметр, вы можете использовать %s +AlsoDefaultValuesAreEffectiveForActionCreate=Также обратите внимание, что перезапись значений по умолчанию для создания формы работает только для страниц, которые были правильно созданы (так с параметром action = create или presend ...) +EnableDefaultValues=Включить настройку значений по умолчанию +EnableOverwriteTranslation=Разрешить использование переписанного перевода +GoIntoTranslationMenuToChangeThis=Для ключа с этим кодом найден перевод. Чтобы изменить это значение, вы должны отредактировать его из Главная-Настройки-Перевод. WarningSettingSortOrder=Предупреждение, установка порядка сортировки по умолчанию может привести к технической ошибке при переходе на страницу списка, если поле является неизвестным. Если у вас возникла такая ошибка, вернитесь на эту страницу, чтобы удалить порядок сортировки по умолчанию и восстановить поведение по умолчанию. Field=Поле ProductDocumentTemplates=Шаблоны документов для создания документа продукта @@ -482,55 +485,55 @@ WatermarkOnDraftExpenseReports=Водяной знак по отчетам о р AttachMainDocByDefault=Установите это значение в 1, если вы хотите приложить основной документ к электронной почте по умолчанию (если применимо) FilesAttachedToEmail=Прикрепить файл SendEmailsReminders=Отправить напоминания по электронной почте -davDescription=Setup a WebDAV server +davDescription=Настройте сервер WebDAV DAVSetup=Настройка модуля DAV -DAV_ALLOW_PRIVATE_DIR=Enable the generic private directory (WebDAV dedicated directory named "private" - login required) -DAV_ALLOW_PRIVATE_DIRTooltip=The generic private directory is a WebDAV directory anybody can access with its application login/pass. -DAV_ALLOW_PUBLIC_DIR=Enable the generic public directory (WebDAV dedicated directory named "public" - no login required) -DAV_ALLOW_PUBLIC_DIRTooltip=The generic public directory is a WebDAV directory anybody can access (in read and write mode), with no authorization required (login/password account). -DAV_ALLOW_ECM_DIR=Enable the DMS/ECM private directory (root directory of the DMS/ECM module - login required) -DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Similarly as access from the web interface, you will need a valid login/password with adecuate permissions to access it. +DAV_ALLOW_PRIVATE_DIR=Включить общий частный каталог (выделенный каталог WebDAV с именем «private» - требуется вход в систему) +DAV_ALLOW_PRIVATE_DIRTooltip=Общий частный каталог - это каталог WebDAV, к которому любой может получить доступ с помощью своего логина/пароля. +DAV_ALLOW_PUBLIC_DIR=Включить общий публичный каталог (выделенный каталог WebDAV с именем «public» - вход в систему не требуется) +DAV_ALLOW_PUBLIC_DIRTooltip=Общий публичный каталог - это каталог WebDAV, к которому может получить доступ каждый (в режиме чтения и записи) без авторизации (логин/пароль). +DAV_ALLOW_ECM_DIR=Включить приватный каталог DMS/ECM (корневой каталог модуля DMS/ECM - требуется вход в систему) +DAV_ALLOW_ECM_DIRTooltip=Корневой каталог, куда все файлы загружаются вручную при использовании модуля DMS/ECM. Аналогично доступу через веб-интерфейс, вам потребуется действующий логин/пароль с соответствующими разрешениями для доступа к нему. # Modules Module0Name=Пользователи и Группы Module0Desc=Управление Пользователями / Сотрудниками и Группами -Module1Name=Third Parties -Module1Desc=Companies and contacts management (customers, prospects...) +Module1Name=Контрагенты +Module1Desc=Управление компаниями и контактами (клиенты, потенциальные клиенты ...) Module2Name=Коммерческие Module2Desc=Коммерческое управление -Module10Name=Accounting (simplified) -Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table. +Module10Name=Бухгалтерский учет (упрощенный) +Module10Desc=Простые бухгалтерские отчеты (журналы, обороты) на основе содержимого базы данных. Не использует таблицы гроссбуха. Module20Name=Предложения Module20Desc=Управление коммерческими предложеними -Module22Name=Mass Emailings -Module22Desc=Manage bulk emailing +Module22Name=Массовые рассылки +Module22Desc=Управление массовой рассылкой Module23Name=Энергия Module23Desc=Мониторинг потребления энергии -Module25Name=Sales Orders -Module25Desc=Sales order management +Module25Name=Заказы на продажу +Module25Desc=Управление заказами на продажу Module30Name=Счета-фактуры -Module30Desc=Management of invoices and credit notes for customers. Management of invoices and credit notes for suppliers +Module30Desc=Управление счетами и кредитными авизо для клиентов. Управление счетами и кредитными авизо для поставщиков Module40Name=Поставщики -Module40Desc=Vendors and purchase management (purchase orders and billing) +Module40Desc=Поставщики и управление закупками (заказы на покупку и выставление счетов) Module42Name=Отчет об ошибках Module42Desc=Средства регистрации (file, syslog, ...). Такие журналы предназначены для технических/отладочных целей. Module49Name=Редакторы Module49Desc=Управления редактором Module50Name=Продукция -Module50Desc=Management of Products +Module50Desc=Управление продуктами Module51Name=Массовые рассылки Module51Desc=Управление массовыми бумажными отправлениями Module52Name=Акции -Module52Desc=Stock management (for products only) +Module52Desc=Управление запасами (только для продуктов) Module53Name=Услуги -Module53Desc=Management of Services +Module53Desc=Управление Услугами Module54Name=Контакты/Подписки -Module54Desc=Management of contracts (services or recurring subscriptions) +Module54Desc=Управление контрактами (услуги или периодические подписки) Module55Name=Штрих-коды Module55Desc=Управление штрих-кодами Module56Name=Телефония Module56Desc=Интеграция телефонии -Module57Name=Bank Direct Debit payments -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries. +Module57Name=Прямые банковские платежи +Module57Desc=Управление платежными поручениями с прямым дебитом. Включает создание файла SEPA для европейских стран. Module58Name=ClickToDial Module58Desc=Интеграция с системами НажатьДляЗвонка (Asterisk, ...) Module59Name=Bookmark4u @@ -540,115 +543,115 @@ Module70Desc=Управление мероприятиями Module75Name=Транспортные расходы Module75Desc=Управление транспортными расходами Module80Name=Отгрузки -Module80Desc=Shipments and delivery note management -Module85Name=Banks & Cash +Module80Desc=Управление отгрузками и накладными +Module85Name=Банки и Наличные Module85Desc=Управление банковскими счетами или наличными -Module100Name=External Site -Module100Desc=Add a link to an external website as a main menu icon. Website is shown in a frame under the top menu. +Module100Name=Внешний сайт +Module100Desc=Добавьте ссылку на внешний сайт в виде значка главного меню. Сайт отображается в рамке под верхним меню. Module105Name=Mailman и SPIP Module105Desc=Модуль интерфейса для рассылок Mailman или SPIP Module200Name=LDAP -Module200Desc=LDAP directory synchronization +Module200Desc=Синхронизация каталогов LDAP Module210Name=PostNuke Module210Desc=Интергация с PostNuke Module240Name=Экспорт данных Module240Desc=Инструмент для экспорта данных Dolibarr (с ассистентами) Module250Name=Импорт данных -Module250Desc=Tool to import data into Dolibarr (with assistants) +Module250Desc=Инструмент для импорта данных в Dolibarr (с помощниками) Module310Name=Участники Module310Desc=Управление участниками фонда Module320Name=RSS-канал -Module320Desc=Add a RSS feed to Dolibarr pages -Module330Name=Bookmarks & Shortcuts -Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access -Module400Name=Projects or Leads -Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view. +Module320Desc=Добавить канал RSS на страницы Dolibarr +Module330Name=Закладки и Ярлыки +Module330Desc=Создавайте ярлыки, всегда доступные, для внутренних или внешних страниц, к которым вы часто обращаетесь +Module400Name=Проекты или Сделки +Module400Desc=Управление проектами, сделками/возможностями и/или задачами. Вы также можете назначить любой элемент (счет-фактура, заказ, предложение, мероприятия, ...) проекту и видеть в срезе представление проекта. Module410Name=Веб-календарь Module410Desc=Интеграция веб-календаря -Module500Name=Taxes & Special Expenses -Module500Desc=Управление другими расходами (налоги на продажу, социальные или налоговые налоги, дивиденды, ...) +Module500Name=Налоги и специальные расходы +Module500Desc=Управление другими расходами (НДС, социальные или налоговые расходы, дивиденды, ...) Module510Name=Зарплаты -Module510Desc=Record and track employee payments +Module510Desc=Записывать и отслеживать выплаты сотрудникам Module520Name=Ссуды Module520Desc=Управление ссудами Module600Name=Уведомления -Module600Desc=Send email notifications triggered by a business event: per user (setup defined on each user), per third-party contacts (setup defined on each third party) or by specific emails -Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders for agenda events, go into the setup of module Agenda. +Module600Desc=Отправка уведомлений по электронной почте, инициированных бизнес-событием: для каждого пользователя (настройка, определенная для каждого пользователя), для сторонних контактов (настройка, определенная для каждого контрагента) или для определенных электронных писем +Module600Long=Обратите внимание, что этот модуль отправляет электронные письма в режиме реального времени, когда происходит определенное деловое событие. Если вы ищете функцию для отправки напоминаний по электронной почте для событий в повестке дня, перейдите к настройке модуля Agenda. Module610Name=Варианты продукта -Module610Desc=Creation of product variants (color, size etc.) +Module610Desc=Создание вариантов продукта (цвет, размер и т.д.) Module700Name=Пожертвования Module700Desc=Управление пожертвованиями -Module770Name=Expense Reports -Module770Desc=Manage expense reports claims (transportation, meal, ...) -Module1120Name=Vendor Commercial Proposals -Module1120Desc=Запросить коммерческое предложение и цены продавца +Module770Name=Отчеты о расходах +Module770Desc=Управление и утверждение отчетов о расходах (транспорт, питание, ...) +Module1120Name=Коммерческие предложения поставщика +Module1120Desc=Запросить коммерческое предложение и цены поставщика Module1200Name=Mantis Module1200Desc=Интеграция с Mantis Module1520Name=Создание документов -Module1520Desc=Mass email document generation +Module1520Desc=Массовая генерация документов по электронной почте Module1780Name=Теги/Категории Module1780Desc=Создание тегов/категорий (продукции, клиентов, поставщиков, контактов или участников) Module2000Name=Текстовый редактор WYSIWYG -Module2000Desc=Allow text fields to be edited/formatted using CKEditor (html) +Module2000Desc=Разрешить редактирование/форматирование текстовых полей с помощью CKEditor (html) Module2200Name=Динамическое ценообразование -Module2200Desc=Use maths expressions for auto-generation of prices +Module2200Desc=Используйте математические выражения для автогенерации цен Module2300Name=Запланированные задания -Module2300Desc=Запланированное управление заданиями (псевдоним cron или chrono table) +Module2300Desc=Управление запланированными заданиями (alias cron или chrono table) Module2400Name=События/Повестка дня -Module2400Desc=Track events. Log automatic events for tracking purposes or record manual events or meetings. This is the principal module for good Customer or Vendor Relationship Management. +Module2400Desc=Отслеживать события. Журнал автоматических событий для отслеживания или записи вручную событий или встреч. Это основной модуль для хорошего управления взаимоотношениями с клиентами или поставщиками. Module2500Name=DMS / ECM -Module2500Desc=Система управления документами / Управление электронным контентом. Автоматическая организация ваших сгенерированных или сохраненных документов. Поделитесь им, когда вам нужно. +Module2500Desc=Система управления документами / Управление электронным контентом. Автоматическая организация ваших сгенерированных или сохраненных документов. Поделитесь ими, когда вам нужно. Module2600Name=API/Веб-службы (SOAP-сервер) Module2600Desc=Включение Dolibarr SOAP сервера предоставляющего API-сервис Module2610Name= API/веб-службы (сервер REST) Module2610Desc=Включить сервер REST для Dolibarr, предоставляющий услуги API Module2660Name=Вызовите WebServices (клиент SOAP) -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Purchase orders are currently supported.) +Module2660Desc=Включить клиент веб-служб Dolibarr (может использоваться для передачи данных/запросов на внешние серверы. В настоящее время поддерживаются только заказы на покупку.) Module2700Name=Всемирно распознаваемый аватар -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access +Module2700Desc=Используйте онлайн-сервис Gravatar (www.gravatar.com), чтобы показывать фотографию пользователей/участников (связанную с их электронной почтой). Нужен доступ в интернет Module2800Desc=FTP-клиент Module2900Name=GeoIPMaxmind Module2900Desc=Подключение к службе GeoIP MaxMind для преобразования IP-адреса в название страны Module3200Name=Неограниченные архивы -Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries. -Module4000Name=Менеджер отдела кадров +Module3200Desc=Включите неизменяемый журнал деловых событий. События архивируются в режиме реального времени. Журнал представляет собой доступную только для чтения таблицу связанных событий, которые можно экспортировать. Этот модуль может быть обязательным для некоторых стран. +Module4000Name=Управление персоналом Module4000Desc=Управление персоналом (управление отделом, контракты и чувства сотрудников) Module5000Name=Группы компаний Module5000Desc=Управление группами компаний Module6000Name=Бизнес-Процесс Module6000Desc=Управление рабочим процессом (автоматическое создание объекта и/или автоматическое изменение статуса) Module10000Name=Веб-сайты -Module10000Desc=Create websites (public) with a WYSIWYG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the internet with your own domain name. -Module20000Name=Leave Request Management -Module20000Desc=Define and track employee leave requests -Module39000Name=Product Lots -Module39000Desc=Lots, serial numbers, eat-by/sell-by date management for products -Module40000Name=Multicurrency -Module40000Desc=Use alternative currencies in prices and documents +Module10000Desc=Создавайте веб-сайты (общедоступные) с помощью редактора WYSIWYG. Просто настройте свой веб-сервер (Apache, Nginx, ...), чтобы он указывал на выделенный каталог Dolibarr, чтобы он был онлайн в Интернете с вашим собственным доменным именем. +Module20000Name=Управление запросами на отпуск +Module20000Desc=Определить и отслеживать запросы сотрудников на отпуск +Module39000Name=Товарные партии +Module39000Desc=Управление Партиями, серийными номерами, датой/временем продажи продуктов +Module40000Name=Мульти валюта +Module40000Desc=Используйте альтернативные валюты в ценах и документах Module50000Name=PayBox -Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make ad-hoc payments or payments related to a specific Dolibarr object (invoice, order etc...) +Module50000Desc=Предложите покупателям страницу оплаты через PayBox (кредитные / дебетовые карты). Это может быть использовано, чтобы позволить вашим клиентам осуществлять специальные платежи или платежи, связанные с конкретным объектом Dolibarr (счет, заказ и т. д.) Module50100Name=POS SimplePOS -Module50100Desc=Point of Sale module SimplePOS (simple POS). +Module50100Desc=Модуль торговой точки SimplePOS (простой POS). Module50150Name=POS TakePOS -Module50150Desc=Point of Sale module TakePOS (touchscreen POS). +Module50150Desc=Модуль торговой точки TakePOS (POS с сенсорным экраном). Module50200Name=Paypal -Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make ad-hoc payments or payments related to a specific Dolibarr object (invoice, order etc...) +Module50200Desc=Предложите клиентам страницу онлайн-платежей PayPal (учетная запись PayPal или кредитные / дебетовые карты). Это может быть использовано, чтобы позволить вашим клиентам осуществлять специальные платежи или платежи, связанные с конкретным объектом Dolibarr (счет, заказ и т. д.) Module50300Name=Stripe -Module50300Desc=Offer customers a Stripe online payment page (credit/debit cards). This can be used to allow your customers to make ad-hoc payments or payments related to a specific Dolibarr object (invoice, order etc...) -Module50400Name=Accounting (double entry) -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats. +Module50300Desc=Предложите клиентам страницу онлайн-оплаты Stripe (кредитные / дебетовые карты). Это может быть использовано, чтобы позволить вашим клиентам осуществлять специальные платежи или платежи, связанные с конкретным объектом Dolibarr (счет, заказ и т. д.) +Module50400Name=Бухгалтерский учет (двойная запись) +Module50400Desc=Управление бухгалтерским учетом (двойные записи, поддержка гроссбуха и вспомогательных книг). Экспорт книги в несколько других форматов бухгалтерского программного обеспечения. Module54000Name=Модуль PrintIPP -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server). +Module54000Desc=Прямая печать (без открытия документов) с использованием интерфейса Cups IPP (принтер должен быть виден с сервера, а CUPS должен быть установлен на сервере). Module55000Name=Голосование, обзор или голосование -Module55000Desc=Create online polls, surveys or votes (like Doodle, Studs, RDVz etc...) +Module55000Desc=Создавайте онлайн-опросы, обзоры или голосования (например, Doodle, Studs, RDVz и т. Д.) Module59000Name=Наценки Module59000Desc=Модуль управления наценками Module60000Name=Комиссии Module60000Desc=Модуль управления комиссиями Module62000Name=Обязанности по доставке товаров -Module62000Desc=Add features to manage Incoterms +Module62000Desc=Добавить функции для управления Инкотермс Module63000Name=Ресурсы -Module63000Desc=Manage resources (printers, cars, rooms, ...) for allocating to events +Module63000Desc=Управление ресурсами (принтеры, машины, комнаты, ...) для распределения на события Permission11=Просмотр счетов-фактур клиентов Permission12=Создание/Изменение счета-фактуры Permission13=Аннулирование счетов-фактур @@ -668,9 +671,9 @@ Permission32=Создание / изменение продукции / услу Permission34=Удаленные продукция / услуги Permission36=Просмотр / управление скрытой продукцией / услугами Permission38=Экспорт продукции -Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet) -Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks -Permission44=Delete projects (shared project and projects I'm contact for) +Permission41=Просмотрите проекты и задачи (общий проект и мои проекты). Можно также ввести время, затраченное на вас или ваших подчиненных, на назначенные задачи (расписание) +Permission42=Создание/изменение проектов (общий и мои проекты). Может также создавать задачи и назначать пользователей для проекта и задач +Permission44=Удалить проекты (общие и мои проекты) Permission45=Экспорт проектов Permission61=Смотреть мероприятия Permission62=Создание / измение мероприятий @@ -701,25 +704,25 @@ Permission104=Проверка отправок Permission106=Экспортировать отправки Permission109=Удалить отправки Permission111=Читать финансовую отчетность -Permission112=Создать / изменить / удалить и сравнить сделоки -Permission113=Настройка финансовых учётных записей (создание, изменение категорий) -Permission114=Reconcile transactions +Permission112=Создать / изменить / удалить и сравнить сделки +Permission113=Настройка финансовых счетов (создание, изменение категорий) +Permission114=Сверить транзакции Permission115=Экспорт операций и выписок со счета Permission116=Перераспределение средств между счетами -Permission117=Manage checks dispatching +Permission117=Управление диспетчеризацией чеков Permission121=Просмотр контрагентов, связанных с пользователем Permission122=Создать / изменить контрагентов, связанных с пользователем Permission125=Удалить контрагентов, связанных с пользователем Permission126=Экспорт контрагентов -Permission141=Read all projects and tasks (also private projects for which I am not a contact) -Permission142=Create/modify all projects and tasks (also private projects for which I am not a contact) +Permission141=Просмотреть все проекты и задачи (в том числе частные проекты, в которыми я не контактное лицо) +Permission142=Создать/изменить все проекты и задачи (также частные проекты, для которых я не контактное лицо) Permission144=Удалить все проекты и задачи (так же частные проекты в которых я не контактное лицо) Permission146=Посмотреть провайдеров Permission147=Посмотреть статистику -Permission151=Посмотреть заказанные прямые дебетные платежи -Permission152=Создать / изменить заказанные прямые дебетные платежи -Permission153=Отправка / Передача заказанных прямых дебетовых платежей -Permission154=Record Credits/Rejections of direct debit payment orders +Permission151=Посмотреть платежные поручения с прямым дебетом +Permission152=Создать/Изменить платежные поручения с прямым дебетом +Permission153=Отправка/Передача платежных поручений с прямым дебетом +Permission154=Запись зачетов/отказов платежных поручений с прямым дебетом Permission161=Посмотреть котракты/подписки Permission162=Создать/изменить котракты/подписки Permission163=Активировать услугу/подписку в контракте @@ -732,14 +735,14 @@ Permission173=Удалить транспортные расходы Permission174=Просмотр поездок и расходов Permission178=Экспорт транспортных расходов Permission180=Посмотреть поставщиков -Permission181=Read purchase orders -Permission182=Create/modify purchase orders -Permission183=Validate purchase orders -Permission184=Approve purchase orders -Permission185=Order or cancel purchase orders -Permission186=Receive purchase orders -Permission187=Close purchase orders -Permission188=Cancel purchase orders +Permission181=Просмотреть заказы на покупку +Permission182=Создание/изменение заказов на покупку +Permission183=Проверка заказов на покупку +Permission184=Утвердить заказы на покупку +Permission185=Заказать или отменить заказы на покупку +Permission186=Получать заказы на покупку +Permission187=Закрыть заказы на покупку +Permission188=Отменить заказы на покупку Permission192=Создать строки Permission193=Отмена строк Permission194=Read the bandwidth lines @@ -750,10 +753,10 @@ Permission205=Управление подключениями Permission206=Посмотреть соединения Permission211=Посмотреть Телефонию Permission212=Заказ линий -Permission213=Включить строки +Permission213=Включить линию Permission214=Настройка телефонии Permission215=Настройка провайдеров -Permission221=Посмотреть отправки электронной почты +Permission221=Посмотреть переписку Permission222=Создать / изменить отправки электронной почты (тема, получатели ...) Permission223=Проверка отправки электронной почты (разрешение на отправку) Permission229=Удалить отправки электронной почты @@ -767,12 +770,12 @@ Permission244=Посмотреть содержание скрытых кате Permission251=Посмотреть других пользователей и группы PermissionAdvanced251=Посмотреть других пользователей Permission252=Посмотреть права доступа других пользователей -Permission253=Create/modify other users, groups and permissions +Permission253=Создание/изменение других пользователей, групп и разрешений PermissionAdvanced253=Создать / изменить внутренних / внешних пользователей и права доступа Permission254=Создать / изменить только внешних пользователей Permission255=Изменить пароли других пользователей Permission256=Удалить или отключить других пользователей -Permission262=Extend access to all third parties (not only third parties for which that user is a sale representative).
Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).
Not effective for projects (only rules on project permissions, visibility and assignment matters). +Permission262=Расширить доступ ко всем контрагентам (не только контрагентам, для которых этот пользователь является торговым представителем).
Не действует для внешних пользователей (всегда ограничены предложениями, заказами, счетами, контрактами и т. д.).
Не действует для проектов (только правила разрешений, видимости и назначения). Permission271=Читать CA Permission272=Читать счета Permission273=Выпуск счетов @@ -782,10 +785,10 @@ Permission283=Удалить контакты Permission286=Экспортировать контакты Permission291=Читать тарифы Permission292=Установка разрешений на тарифы -Permission293=Modify customer's tariffs -Permission300=Read barcodes -Permission301=Create/modify barcodes -Permission302=Delete barcodes +Permission293=Изменить тарифы клиента +Permission300=Читать штрих-коды +Permission301=Создание/изменение штрих-кодов +Permission302=Удалить штрих-коды Permission311=Читать услуги Permission312=Назначить услугу/подписку договору Permission331=Читать закладки @@ -804,10 +807,10 @@ Permission401=Читать скидки Permission402=Создать / изменить скидки Permission403=Проверить скидки Permission404=Удалить скидки -Permission430=Use Debug Bar -Permission511=Read payments of salaries -Permission512=Create/modify payments of salaries -Permission514=Delete payments of salaries +Permission430=Использовать панель отладки +Permission511=Просмотр выплаты зарплат +Permission512=Создание/изменение выплат зарплат +Permission514=Удалить выплаты зарплаты Permission517=Экспорт зарплат Permission520=Открыть ссуды Permission522=Создать/изменить ссуды @@ -819,9 +822,9 @@ Permission532=Создать / изменить услуги Permission534=Удаление услуг Permission536=Смотреть / Управлять скрытыми услугами Permission538=Экспорт услуг -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Просмотр ведомости материалов +Permission651=Создание/обновление ведомостей материалов +Permission652=Удалить списки материалов Permission701=Просмотр пожертвований Permission702=Создание / изменение пожертвований Permission703=Удаление пожертвований @@ -841,34 +844,34 @@ Permission1101=Просмотр доставки заказов Permission1102=Создание / изменение доставки заказов Permission1104=Подтверждение доставки заказов Permission1109=Удаление доставки заказов -Permission1121=Read supplier proposals -Permission1122=Create/modify supplier proposals -Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals -Permission1125=Delete supplier proposals -Permission1126=Close supplier price requests +Permission1121=Просмотр предложения поставщиков +Permission1122=Создание/изменение предложений поставщиков +Permission1123=Проверить предложения поставщика +Permission1124=Отправить предложения поставщика +Permission1125=Удалить предложения поставщиков +Permission1126=Закрыть запрос цены поставщика Permission1181=Просмотр поставщиков -Permission1182=Read purchase orders -Permission1183=Create/modify purchase orders -Permission1184=Validate purchase orders -Permission1185=Approve purchase orders -Permission1186=Order purchase orders -Permission1187=Acknowledge receipt of purchase orders -Permission1188=Delete purchase orders -Permission1190=Approve (second approval) purchase orders +Permission1182=Просмотреть заказы на покупку +Permission1183=Создание/изменение заказов на покупку +Permission1184=Проверка заказов на покупку +Permission1185=Утвердить заказы на покупку +Permission1186=Заказать заказы на покупку +Permission1187=Подтвердить получение заказов на покупку +Permission1188=Удалить заказы на покупку +Permission1190=Утвердить (второе утверждение) заказы на покупку Permission1201=Получите результат экспорта Permission1202=Создание / Изменение экспорта -Permission1231=Read vendor invoices -Permission1232=Create/modify vendor invoices -Permission1233=Validate vendor invoices -Permission1234=Delete vendor invoices -Permission1235=Send vendor invoices by email -Permission1236=Export vendor invoices, attributes and payments -Permission1237=Export purchase orders and their details +Permission1231=Просмотреть счета поставщиков +Permission1232=Создание/изменение счетов поставщиков +Permission1233=Проверка счетов поставщиков +Permission1234=Удалить счета поставщиков +Permission1235=Отправить счета поставщика по электронной почте +Permission1236=Экспорт счетов, атрибутов и платежей поставщиков +Permission1237=Экспорт заказов на покупку и их детали Permission1251=Запуск массового импорта внешних данных в базу данных (загрузка данных) Permission1321=Экспорт клиентом счета-фактуры, качества и платежей Permission1322=Повторно открыть оплаченный счет -Permission1421=Export sales orders and attributes +Permission1421=Экспорт заказов на продажу и атрибутов Permission2401=Посмотреть действия (события или задачи), связанные с его учетной записью Permission2402=Создание / изменение / удаление действий (события или задачи), связанные с его учетной записью Permission2403=Удаление действий (задачи, события или) связанных с его учетной записью @@ -882,17 +885,17 @@ Permission2503=Отправить или удалить документы Permission2515=Настройка директорий документов Permission2801=Использовать FTP клиент в режиме только чтения (только просмотр и загрузка файлов) Permission2802=Использовать FTP клиент в режиме записи (удаление или выгрузка файлов) -Permission3200=Read archived events and fingerprints -Permission4001=See employees -Permission4002=Create employees -Permission4003=Delete employees -Permission4004=Export employees -Permission10001=Read website content -Permission10002=Create/modify website content (html and javascript content) -Permission10003=Create/modify website content (dynamic php code). Dangerous, must be reserved to restricted developers. -Permission10005=Delete website content -Permission20001=Read leave requests (your leave and those of your subordinates) -Permission20002=Create/modify your leave requests (your leave and those of your subordinates) +Permission3200=Просмотреть архивированные события +Permission4001=Смотреть сотрудников +Permission4002=Создать сотрудников +Permission4003=Удалить сотрудников +Permission4004=Экспорт сотрудников +Permission10001=Смотреть содержание сайта +Permission10002=Создание/изменение содержимого веб-сайта (HTML и JavaScript) +Permission10003=Создание/изменение содержимого сайта (динамический PHP-код). Опасно, должно быть зарезервировано для разработчиков с ограниченным доступом. +Permission10005=Удалить контент сайта +Permission20001=Просмотр запросов на отпуск (ваш отпуск и ваших подчиненных) +Permission20002=Создайте/измените ваши запросы на отпуск (ваш отпуск и отпуск ваших подчиненных) Permission20003=Удалить заявления на отпуск Permission20004=Читайте все запросы на отпуск (даже пользователь не подчиняется) Permission20005=Создавать/изменять запросы на отпуск для всех (даже для пользователей, не подчиненных) @@ -901,22 +904,22 @@ Permission23001=Просмотр Запланированных задач Permission23002=Создать/обновить Запланированную задачу Permission23003=Удалить Запланированную задачу Permission23004=Выполнить запланированную задачу -Permission50101=Use Point of Sale +Permission50101=Использовать точку продажи Permission50201=Просмотр транзакций Permission50202=Импорт транзакций -Permission50401=Bind products and invoices with accounting accounts -Permission50411=Read operations in ledger -Permission50412=Write/Edit operations in ledger -Permission50414=Delete operations in ledger -Permission50415=Delete all operations by year and journal in ledger -Permission50418=Export operations of the ledger -Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year -Permission50440=Manage chart of accounts, setup of accountancy -Permission51001=Read assets -Permission51002=Create/Update assets -Permission51003=Delete assets -Permission51005=Setup types of asset +Permission50401=Связать продукты и счета с учетными записями +Permission50411=Просмотр операций в бухгалтерской книге +Permission50412=Операции записи/редактирования в бухгалтерской книге +Permission50414=Удалить операции в бухгалтерской книге +Permission50415=Удалить все операции по году и журналу в бухгалтерской книге +Permission50418=Экспортные операций бухгалтерской книги +Permission50420=Отчеты и отчеты об экспорте (оборот, баланс, журналы, бухгалтерская книга) +Permission50430=Определить и закрыть финансовый период +Permission50440=Управление структурой счетов, настройка бухгалтерского учета +Permission51001=Просмотр активов +Permission51002=Создать/обновить активы +Permission51003=Удалить активы +Permission51005=Настройка типов актива Permission54001=Печать Permission55001=Открыть опросы Permission55002=Создать/изменить опросы @@ -927,76 +930,76 @@ Permission63001=Чтение ресурсов Permission63002=Создание/изменение ресурсов Permission63003=Удалить ресурсы Permission63004=Свяжите ресурсы с повесткой дня -DictionaryCompanyType=Third-party types -DictionaryCompanyJuridicalType=Third-party legal entities +DictionaryCompanyType=Типы контрагента +DictionaryCompanyJuridicalType=Правовая форма контрагента DictionaryProspectLevel=Потенциальный клиент -DictionaryCanton=States/Provinces +DictionaryCanton=Штат/Провинция DictionaryRegion=Регионы DictionaryCountry=Страны DictionaryCurrency=Валюты -DictionaryCivility=Title of civility +DictionaryCivility=Обращение DictionaryActions=Тип мероприятия -DictionarySocialContributions=Types of social or fiscal taxes +DictionarySocialContributions=Типы социальных или налоговых сборов DictionaryVAT=Значения НДС или налога с продаж DictionaryRevenueStamp=Количество налоговых марок -DictionaryPaymentConditions=Payment Terms -DictionaryPaymentModes=Payment Modes +DictionaryPaymentConditions=Условия оплаты +DictionaryPaymentModes=Способы оплаты DictionaryTypeContact=Типы Контактов/Адресов -DictionaryTypeOfContainer=Website - Type of website pages/containers +DictionaryTypeOfContainer=Веб-сайт - Тип страниц сайта/контейнеров DictionaryEcotaxe=Экологический налог Ecotax (WEEE) DictionaryPaperFormat=Форматы бумаги -DictionaryFormatCards=Card formats +DictionaryFormatCards=Форматы карт DictionaryFees=Отчет о расходах - Типы строк отчета о расходах DictionarySendingMethods=Способы доставки -DictionaryStaff=Number of Employees +DictionaryStaff=Количество работников DictionaryAvailability=Задержка доставки DictionaryOrderMethods=Методы заказов DictionarySource=Происхождение Коммерческих предложений / Заказов DictionaryAccountancyCategory=Персонализированные группы для отчетов DictionaryAccountancysystem=Модели для диаграммы счетов DictionaryAccountancyJournal=Бухгалтерские журналы -DictionaryEMailTemplates=Email Templates +DictionaryEMailTemplates=Шаблоны электронной почты DictionaryUnits=Единицы -DictionaryMeasuringUnits=Measuring Units +DictionaryMeasuringUnits=Единицы измерения DictionaryProspectStatus=Статус потенциального клиента -DictionaryHolidayTypes=Types of leave -DictionaryOpportunityStatus=Lead status for project/lead +DictionaryHolidayTypes=Типы отпуска +DictionaryOpportunityStatus=Правовой статус проекта/сделки DictionaryExpenseTaxCat=Отчет о расходах - Категории транспорта DictionaryExpenseTaxRange=Отчет о расходах - Диапазон по транспортной категории SetupSaved=Настройки сохранены SetupNotSaved=Установки не сохранены -BackToModuleList=Back to Module list -BackToDictionaryList=Back to Dictionaries list +BackToModuleList=Вернуться к списку модулей +BackToDictionaryList=Вернуться к списку словарей TypeOfRevenueStamp=Тип налоговой печати -VATManagement=Sales Tax Management -VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sales Tax rate follows the active standard rule:
If the seller is not subject to Sales tax, then Sales tax defaults to 0. End of rule.
If the (seller's country = buyer's country), then the Sales tax by default equals the Sales tax of the product in the seller's country. End of rule.
If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default VAT is 0. This rule is dependant on the seller's country - please consult with your accountant. The VAT should be paid by the buyer to the customs office in their country and not to the seller. End of rule.
If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community VAT number) then the VAT defaults to the VAT rate of the seller's country. End of rule.
If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community VAT number), then the VAT is 0 by default. End of rule.
In any other case the proposed default is Sales tax=0. End of rule. -VATIsNotUsedDesc=By default the proposed Sales tax is 0 which can be used for cases like associations, individuals or small companies. -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real). A system in which VAT is declared. -VATIsNotUsedExampleFR=In France, it means associations that are non Sales tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sales tax in franchise) and paid a franchise Sales tax without any Sales tax declaration. This choice will display the reference "Non applicable Sales tax - art-293B of CGI" on invoices. +VATManagement=Управление налогом с продаж +VATIsUsedDesc=По умолчанию при создании потенциальных клиентов, счетов, заказов и т. д. ставка налога с продаж соответствует действующему стандартному правилу:
Если продавец не облагается налогом с продаж, по умолчанию налог с продаж равен 0. Конец правила.
Если (страна продавца = страна покупателя), то налог с продаж по умолчанию равен налогу с продаж продукта в стране продавца. Конец правила.
Если продавец и покупатель находятся в Европейском сообществе, а товары относятся к транспортным товарам (перевозка, доставка, авиакомпания), НДС по умолчанию равен 0. Это правило зависит от страны продавца - пожалуйста, проконсультируйтесь с вашим бухгалтером. НДС должен быть оплачен покупателем на таможне в их стране, а не продавцу. Конец правила.
Если продавец и покупатель находятся в Европейском сообществе, а покупатель не является компанией (с зарегистрированным номером НДС внутри Сообщества), то НДС по умолчанию устанавливается по ставке НДС страны продавца. Конец правила.
Если продавец и покупатель находятся в Европейском сообществе, а покупатель является компанией (с зарегистрированным номером НДС внутри Сообщества), то по умолчанию НДС равен 0. Конец правила.
В любом другом случае предлагаемым значением по умолчанию является налог с продаж = 0. Конец правила. +VATIsNotUsedDesc=По умолчанию предлагаемый налог с продаж равен 0, и его можно использовать в таких случаях, как ассоциации, частные лица или небольшие компании. +VATIsUsedExampleFR=Во Франции это означает компании или организации, имеющие реальную фискальную систему (упрощенная реальная или обычная реальная). Система, в которой декларируется НДС. +VATIsNotUsedExampleFR=Во Франции это означает ассоциации, которые не декларируют НДС, или компании, организации или либеральные профессии, которые выбрали фискальную систему микропредприятий (НДС во франшизе) и уплатили налог на франшизу без какой-либо декларации НДС. При выборе этого варианта в счетах будет отображаться ссылка "Non applicable Sales tax - art-293B of CGI" («НДС не применяется - art-293B CGI»). ##### Local Taxes ##### LTRate=Ставка LocalTax1IsNotUsed=Не использовать второй налог -LocalTax1IsUsedDesc=Use a second type of tax (other than first one) -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one) +LocalTax1IsUsedDesc=Используйте второй тип налога (кроме первого) +LocalTax1IsNotUsedDesc=Не используйте другой вид налога (кроме первого) LocalTax1Management=Второй тип налога LocalTax1IsUsedExample= LocalTax1IsNotUsedExample= LocalTax2IsNotUsed=Не использовать третий налог -LocalTax2IsUsedDesc=Use a third type of tax (other than first one) -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one) +LocalTax2IsUsedDesc=Используйте третий тип налога (кроме первого) +LocalTax2IsNotUsedDesc=Не используйте другой вид налога (кроме первого) LocalTax2Management=Третий тип налога LocalTax2IsUsedExample= LocalTax2IsNotUsedExample= -LocalTax1ManagementES=RE управления -LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:
If the buyer is not subjected to RE, RE by default=0. End of rule.
If the buyer is subjected to RE then the RE by default. End of rule.
+LocalTax1ManagementES=Управление недвижимостью +LocalTax1IsUsedDescES=Ставка RE (real estate - налог на недвижимость) по умолчанию при создании потенциальных клиентов, счетов, заказов и т.д. Следует действующему стандартному правилу:
Если покупатель не подвергается RE, RE по умолчанию = 0. Конец правила.
Если покупатель подвергается RE, то RE по умолчанию. Конец правила.
LocalTax1IsNotUsedDescES=По умолчанию предлагается RE 0. Конец правления. LocalTax1IsUsedExampleES=В Испании они являются профессионалами с учетом некоторых конкретных разделов испанский ИАЭ. LocalTax1IsNotUsedExampleES=В Испании они являются профессиональными и общества и при условии соблюдения определенных слоев испанского ИАЭ. LocalTax2ManagementES=IRPF управления -LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:
If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.
If the seller is subjected to IRPF then the IRPF by default. End of rule.
+LocalTax2IsUsedDescES=Ставка IRPF (подоходный налог для физических лиц) по умолчанию при создании потенциальных клиентов, счетов-фактур, заказов и т.д. Соответствует действующему стандартному правилу:
Если продавец не подвергается IRPF, то IRPF по умолчанию = 0. Конец правила.
Если продавец подвергается IRPF, то IRPF по умолчанию. Конец правила.
LocalTax2IsNotUsedDescES=По умолчанию предлагается IRPF 0. Конец правления. -LocalTax2IsUsedExampleES=В Испании, фрилансеры и независимые специалисты, которые оказывают услуги и компаний, которые выбрали налоговой системы модулей. -LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules. +LocalTax2IsUsedExampleES=В Испании работают фрилансеры и независимые профессионалы, предлагающие услуги, и компании, которые выбрали налоговую систему модулей. +LocalTax2IsNotUsedExampleES=В Испании это предприятия, не подпадающие под налоговую систему модулей. CalcLocaltax=Отчеты о местных налогах CalcLocaltax1=Продажи-Покупки CalcLocaltax1Desc=Отчёты о местных налогах - это разница между местными налогами с продаж и покупок @@ -1006,16 +1009,16 @@ CalcLocaltax3=Продажи CalcLocaltax3Desc=Отчёты о местных налогах - это итог местных налогов с продаж LabelUsedByDefault=Метки, используемые по умолчанию, если нет перевода можно найти код LabelOnDocuments=Этикетка на документах -LabelOrTranslationKey=Label or translation key -ValueOfConstantKey=Value of constant -NbOfDays=No. of days +LabelOrTranslationKey=Метка или ключ перевода +ValueOfConstantKey=Значение константы +NbOfDays=Кол-во дней AtEndOfMonth=На конец месяца CurrentNext=Текущая/Следующая Offset=Сдвиг AlwaysActive=Всегда активный Upgrade=Обновление MenuUpgrade=Обновление / Расширение -AddExtensionThemeModuleOrOther=Развертывание/установить внешний модуль/приложения +AddExtensionThemeModuleOrOther=Развертывание/установка внешнего модуля/приложения WebServer=Веб-сервер DocumentRootServer=Корневой каталог Веб-сервера DataRootServer=Каталог фалов данных @@ -1033,7 +1036,7 @@ DatabaseUser=Пользователь базы данных DatabasePassword=Пароль базы данных Tables=Таблицы TableName=Наименование таблицы -NbOfRecord=No. of records +NbOfRecord=Кол-во записей Host=Сервер DriverType=Тип драйвера SummarySystem=Обзор системной информации @@ -1045,14 +1048,14 @@ Skin=Тема оформления DefaultSkin=Тема по умолчанию MaxSizeList=Максимальная длина списка DefaultMaxSizeList=Максимальная длина по умолчанию для списков -DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card) +DefaultMaxSizeShortList=Максимальная длина по умолчанию для коротких списков (т.е. в карточке клиента) MessageOfDay=Сообщение дня MessageLogin=Сообщение на странице входа LoginPage=Страница авторизации BackgroundImageLogin=Фоновое изображение PermanentLeftSearchForm=Постоянный поиск формы на левом меню -DefaultLanguage=Default language -EnableMultilangInterface=Enable multilanguage support +DefaultLanguage=Язык по умолчанию +EnableMultilangInterface=Включить поддержку мультиязычности EnableShowLogo=Показать логотип на левом меню CompanyInfo=Компания/Организация CompanyIds=Company/Organization identities @@ -1070,28 +1073,28 @@ OwnerOfBankAccount=Владелец банковского счета %s BankModuleNotActive=Модуль Банковских счетов не активирован ShowBugTrackLink=Показать ссылку "%s" Alerts=Предупреждения -DelaysOfToleranceBeforeWarning=Delay before displaying a warning alert for: -DelaysOfToleranceDesc=Set the delay before an alert icon %s is shown onscreen for the late element. -Delays_MAIN_DELAY_ACTIONS_TODO=Planned events (agenda events) not completed -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Project not closed in time -Delays_MAIN_DELAY_TASKS_TODO=Planned task (project tasks) not completed -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Order not processed -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Purchase order not processed -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Proposal not closed -Delays_MAIN_DELAY_PROPALS_TO_BILL=Proposal not billed +DelaysOfToleranceBeforeWarning=Задержка перед отображением предупреждения о: +DelaysOfToleranceDesc=Установите задержку до того, как значок предупреждения %s будет отображаться на экране для последнего элемента. +Delays_MAIN_DELAY_ACTIONS_TODO=Запланированные события (события повестки дня) не завершены +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Проект не закрыт во время +Delays_MAIN_DELAY_TASKS_TODO=Запланированная задача (задачи проекта) не выполнена +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Заказ не обработан +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Заказ на покупку не обработан +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Предложение не закрыто +Delays_MAIN_DELAY_PROPALS_TO_BILL=Предложение не выставлено Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Service to activate -Delays_MAIN_DELAY_RUNNING_SERVICES=Expired service -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Unpaid vendor invoice -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Unpaid customer invoice -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Pending bank reconciliation -Delays_MAIN_DELAY_MEMBERS=Delayed membership fee -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Check deposit not done -Delays_MAIN_DELAY_EXPENSEREPORTS=Expense report to approve -SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured. -SetupDescription2=The following two sections are mandatory (the two first entries in the Setup menu): -SetupDescription3=%s -> %s
Basic parameters used to customize the default behavior of your application (e.g for country-related features). -SetupDescription4=%s -> %s
This software is a suite of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module. -SetupDescription5=Other Setup menu entries manage optional parameters. +Delays_MAIN_DELAY_RUNNING_SERVICES=Просроченная услуга +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Неоплаченный счет поставщика +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Неоплаченный счет клиента +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=В ожидании банковской сверки +Delays_MAIN_DELAY_MEMBERS=Задержка членского взноса +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Чековый депозит не сделан +Delays_MAIN_DELAY_EXPENSEREPORTS=Отчет о расходах для утверждения +SetupDescription1=Перед началом использования Dolibarr необходимо определить параметры и включить/настроить модули. +SetupDescription2=Следующие два раздела являются обязательными (две первые записи в меню настройки): +SetupDescription3=%s -> %s
Основные параметры, используемые для настройки поведения вашего приложения по умолчанию (например, для функций, связанных со страной). +SetupDescription4=%s -> %s
Это программное обеспечение представляет собой набор из множества модулей/приложений, все более или менее независимые. Модули, соответствующие вашим потребностям, должны быть включены и настроены. Новые пункты/опции добавляются в меню при активации модуля. +SetupDescription5=Другие пункты меню настройки управляют дополнительными параметрами. LogEvents=Безопасность ревизии события Audit=Аудит InfoDolibarr=О Dolibarr @@ -1105,83 +1108,83 @@ BrowserName=Имя браузера BrowserOS=Операционная система браузера ListOfSecurityEvents=Список Dolibarr безопасность события SecurityEventsPurged=Безопасность событий очищены -LogEventDesc=Enable logging for specific security events. Administrators the log via menu %s - %s. Warning, this feature can generate a large amount of data in the database. +LogEventDesc=Включите ведение журнала для определенных событий безопасности. Администраторы журнала через меню %s - %s . Предупреждение, эта функция может генерировать большой объем данных в базе данных. AreaForAdminOnly=Параметры настройки могут быть установлены только пользователем администратора . SystemInfoDesc=Система информации разного техническую информацию Вы получите в режиме только для чтения и видимые только для администраторов. -SystemAreaForAdminOnly=This area is available to administrator users only. Dolibarr user permissions cannot change this restriction. -CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page. -AccountantDesc=If you have an external accountant/bookkeeper, you can edit here its information. -AccountantFileNumber=Accountant code -DisplayDesc=Parameters affecting the look and behaviour of Dolibarr can be modified here. +SystemAreaForAdminOnly=Эта область доступна только для администраторов. Пользовательские разрешения Dolibarr не могут изменить это ограничение. +CompanyFundationDesc=Редактировать информацию о компании/организации. Нажмите кнопку «%s» или «%s» внизу страницы. +AccountantDesc=Если у вас есть внешний бухгалтер/бухгалтер, вы можете отредактировать здесь эту информацию. +AccountantFileNumber=Код бухгалтера +DisplayDesc=Параметры, влияющие на внешний вид и поведение Dolibarr, могут быть изменены здесь. AvailableModules=Доступное приложение/модули -ToActivateModule=Чтобы активировать модуль, перейдите на настройку зоны. +ToActivateModule=Чтобы активировать модуль, перейдите в место настройки (Главная-Настройки-Модули/Приложения). SessionTimeOut=Тайм-аут для сессии -SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every %s/%s access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).
Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is. +SessionExplanation=Это число гарантирует, что сеанс никогда не истечет до этой задержки, если очиститель сеанса выполняется внутренним чистильщиком сессии PHP (и ничем иным). Внутренний чистильщик сессии PHP не гарантирует, что сессия истечет после этой задержки. Он истечет после этой задержки и при запуске чистильщика сессии, поэтому каждый доступ %s / %s , но только во время доступа, сделанного другими сеансами (если значение равно 0, это означает, что очистка сеанса выполняется только внешним процессом) ,
Примечание: на некоторых серверах с внешним механизмом очистки сеансов (cron под debian, ubuntu ...) сеансы могут быть уничтожены после периода, определенного внешней установкой, независимо от того, какое значение здесь введено. TriggersAvailable=Доступные триггеры -TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory htdocs/core/triggers. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...). +TriggersDesc=Триггеры - это файлы, которые изменят поведение рабочего процесса Dolibarr после копирования в каталог htdocs/core/triggers . Они реализуют новые действия, активированные в событиях Dolibarr (создание новой компании, проверка счетов, ...). TriggerDisabledByName=Триггеры этого файла отключено NORUN-суффикс в названии. -TriggerDisabledAsModuleDisabled=Триггеры в этом файле будут отключены как модуль %s отключен. -TriggerAlwaysActive=Триггеры в этом файле, всегда активны, независимо являются активированный Dolibarr модули. -TriggerActiveAsModuleActive=Триггеры в этом файле действуют как модуль %s включен. -GeneratedPasswordDesc=Choose the method to be used for auto-generated passwords. +TriggerDisabledAsModuleDisabled=Триггеры в этом файле отключены, так как модуль %s отключен. +TriggerAlwaysActive=Триггеры в этом файле, всегда активны, независимо являются активированными модули Dolibarr . +TriggerActiveAsModuleActive=Триггеры в этом файле активны, так как модуль %s включен. +GeneratedPasswordDesc=Выберите метод, который будет использоваться для автоматически сгенерированных паролей. DictionaryDesc=Вставьте все справочные данные. Вы можете добавить свои значения по умолчанию. -ConstDesc=This page allows you to edit (override) parameters not available in other pages. These are mostly reserved parameters for developers/advanced troubleshooting. For a full list of the parameters available see here. +ConstDesc=Эта страница позволяет редактировать (переопределять) параметры, недоступные на других страницах. Это в основном зарезервированные параметры для разработчиков / расширенного поиска неисправностей. Полный список доступных параметров смотрите здесь. MiscellaneousDesc=Все остальные параметры, связанные с безопасностью, определены здесь. LimitsSetup=Пределы / Точная настройка -LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here -MAIN_MAX_DECIMALS_UNIT=Max. decimals for unit prices -MAIN_MAX_DECIMALS_TOT=Max. decimals for total prices -MAIN_MAX_DECIMALS_SHOWN=Max. decimals for prices shown on screen. Add an ellipsis ... after this parameter (e.g. "2...") if you want to see "..." suffixed to the truncated price. -MAIN_ROUNDING_RULE_TOT=Step of rounding range (for countries where rounding is done on something other than base 10. For example, put 0.05 if rounding is done by 0.05 steps) +LimitsDesc=Вы можете определить пределы, точности и оптимизации, используемые Dolibarr здесь +MAIN_MAX_DECIMALS_UNIT=Максимум. десятичные дроби для цен за единицу +MAIN_MAX_DECIMALS_TOT=Максимум. десятичные дроби для общих цен +MAIN_MAX_DECIMALS_SHOWN=Максимум. десятичные дроби для цен, отображаемых на экране . Добавьте многоточие ... после этого параметра (например,"2 ..."), если вы хотите видеть суффикс " ... " к усеченной цене. +MAIN_ROUNDING_RULE_TOT=Диапазон шага округления (для стран, где округление выполняется не на основе 10. Например, укажите 0,05, если округление выполняется с шагом 0,05) UnitPriceOfProduct=Чистая цена единицы продукта -TotalPriceAfterRounding=Total price (excl/vat/incl tax) after rounding -ParameterActiveForNextInputOnly=Параметр эффективным для следующего ввода только -NoEventOrNoAuditSetup=No security event has been logged. This is normal if Audit has not been enabled in the "Setup - Security - Events" page. -NoEventFoundWithCriteria=No security event has been found for this search criteria. +TotalPriceAfterRounding=Общая стоимость (включая налоги / НДС) с округлением +ParameterActiveForNextInputOnly=Параметр эффективен только для следующего ввода +NoEventOrNoAuditSetup=Событие безопасности не было зарегистрировано. Это нормально, если на странице «Настройка - Безопасность - События» не был включен аудит. +NoEventFoundWithCriteria=Для этого критерия поиска событие безопасности не найдено. SeeLocalSendMailSetup=См. вашей локальной настройки Sendmail -BackupDesc=A complete backup of a Dolibarr installation requires two steps. -BackupDesc2=Backup the contents of the "documents" directory (%s) containing all uploaded and generated files. This will also include all the dump files generated in Step 1. -BackupDesc3=Backup the structure and contents of your database (%s) into a dump file. For this, you can use the following assistant. -BackupDescX=The archived directory should be stored in a secure place. +BackupDesc=Полное резервное копирование установки Dolibarr требует двух шагов. +BackupDesc2=Резервное копирование содержимого каталога «documents» ( %s ), содержащего все загруженные и сгенерированные файлы. Это также будет включать все файлы дампа, сгенерированные на шаге 1. +BackupDesc3=Резервное копирование структуры и содержимого вашей базы данных (%s ) в файл дампа. Для этого вы можете использовать следующий помощник. +BackupDescX=Архивный каталог должен храниться в безопасном месте. BackupDescY=Генерируемый файла дампа следует хранить в надежном месте. -BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended. -RestoreDesc=To restore a Dolibarr backup, two steps are required. -RestoreDesc2=Restore the backup file (zip file for example) of the "documents" directory to a new Dolibarr installation or into this current documents directory (%s). -RestoreDesc3=Restore the database structure and data from a backup dump file into the database of the new Dolibarr installation or into the database of this current installation (%s). Warning, once the restore is complete, you must use a login/password, that existed from the backup time/installation to connect again.
To restore a backup database into this current installation, you can follow this assistant. +BackupPHPWarning=Резервное копирование не может быть гарантировано с помощью этого метода. Предыдущий метод рекомендуется. +RestoreDesc=Чтобы восстановить резервную копию Dolibarr, необходимо выполнить два шага. +RestoreDesc2=Восстановить файл резервной копии (например, zip-файл) каталога «документы» в новую установку Dolibarr или в этот текущий каталог документов ( %s ). +RestoreDesc3=Восстановить структуру базы данных и данные из файла резервной копии в базу данных новой установки Dolibarr или в базу данных текущей установки ( %s ). Предупреждение: после завершения восстановления вы должны использовать логин / пароль, который существовал во время резервного копирования / установки, чтобы снова подключиться.
Чтобы восстановить резервную копию базы данных в этой текущей установке, вы можете следовать этому помощнику. RestoreMySQL=Иvпорт MySQL -ForcedToByAModule= Это правило вынуждены %s на активированный модуль -PreviousDumpFiles=Existing backup files -WeekStartOnDay=First day of the week -RunningUpdateProcessMayBeRequired=Running the upgrade process seems to be required (Program version %s differs from Database version %s) +ForcedToByAModule= Это правило принудительно активируется модулем %s. +PreviousDumpFiles=Существующие файлы резервных копий +WeekStartOnDay=Первый день недели +RunningUpdateProcessMayBeRequired=Похоже требуется запуск процесса обновления (версия программы %s отличается от версии базы данных %s) YouMustRunCommandFromCommandLineAfterLoginToUser=Вы должны запустить эту команду из командной строки после Войти в оболочку с пользователем %s. YourPHPDoesNotHaveSSLSupport=SSL функций, не доступных в PHP DownloadMoreSkins=Дополнительные шкуры для загрузки -SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is sequential with no reset -ShowProfIdInAddress=Show professional id with addresses -ShowVATIntaInAddress=Hide intra-Community VAT number with addresses +SimpleNumRefModelDesc=Возвращать справочный в формате %syymm-nnnn, где yy - год, mm - месяц, а nnnn - последовательность без сброса +ShowProfIdInAddress=Показать профессиональный идентификатор с адресами +ShowVATIntaInAddress=Скрыть номер НДС внутри Сообщества с адресами TranslationUncomplete=Частичный перевод -MAIN_DISABLE_METEO=Disable meteorological view +MAIN_DISABLE_METEO=Отключить просмотр погоды MeteoStdMod=Стандартный режим MeteoStdModEnabled=Стандартный режим включен MeteoPercentageMod=Процентный режим MeteoPercentageModEnabled=Включен режим процента MeteoUseMod=Нажмите, чтобы использовать%s TestLoginToAPI=Испытание Войти в API -ProxyDesc=Some features of Dolibarr require internet access. Define here the internet connection parameters such as access through a proxy server if necessary. -ExternalAccess=External/Internet Access -MAIN_PROXY_USE=Use a proxy server (otherwise access is direct to the internet) -MAIN_PROXY_HOST=Proxy server: Name/Address -MAIN_PROXY_PORT=Proxy server: Port -MAIN_PROXY_USER=Proxy server: Login/User -MAIN_PROXY_PASS=Proxy server: Password -DefineHereComplementaryAttributes=Define here any additional/custom attributes that you want to be included for: %s +ProxyDesc=Некоторые функции Dolibarr требуют доступа в Интернет. Определите здесь параметры интернет-соединения, такие как доступ через прокси-сервер, если это необходимо. +ExternalAccess=Внешний доступ +MAIN_PROXY_USE=Использовать прокси-сервер (в противном случае прямой доступ в интернет) +MAIN_PROXY_HOST=Прокси-сервер: имя / адрес +MAIN_PROXY_PORT=Прокси-сервер: Порт +MAIN_PROXY_USER=Прокси-сервер: Логин +MAIN_PROXY_PASS=Прокси-сервер: пароль +DefineHereComplementaryAttributes=Определите здесь любые дополнительные / пользовательские атрибуты, которые вы хотите включить для: %s ExtraFields=Дополнительные атрибуты ExtraFieldsLines=Дополнительные атрибуты (строки) ExtraFieldsLinesRec=Дополнительные атрибуты (шаблоны счетов-фактур) ExtraFieldsSupplierOrdersLines=Дополнительные атбрибуты (строки заказа) ExtraFieldsSupplierInvoicesLines=Дополнительные атрибуты (строки счёта) -ExtraFieldsThirdParties=Complementary attributes (third party) -ExtraFieldsContacts=Complementary attributes (contacts/address) +ExtraFieldsThirdParties=Дополнительные атрибуты (контрагент) +ExtraFieldsContacts=Дополнительные атрибуты (контакты/адрес) ExtraFieldsMember=Дополнительные атрибуты (Участник) ExtraFieldsMemberType=Дополнительные атрибуты (тип Участника) ExtraFieldsCustomerInvoices=Дополнительные атрибуты (Счета-Фактуры) @@ -1195,13 +1198,13 @@ AlphaNumOnlyLowerCharsAndNoSpace=только латинские строчны SendmailOptionNotComplete=Предупреждение, на некоторых системах Linux, для отправки электронной почты из электронной почты, Sendmail выполнения установки должны conatins опцию-ба (параметр mail.force_extra_parameters в файле php.ini). Если некоторые получатели не получают электронные письма, попытке изменить этот параметр с PHP mail.force_extra_parameters =-ба). PathToDocuments=Путь к документам PathDirectory=Каталог -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages. +SendmailOptionMayHurtBuggedMTA=Функция отправки почты с использованием метода «PHP mail direct» будет генерировать почтовое сообщение, которое может быть неправильно проанализировано некоторыми получающими почтовыми серверами. В результате некоторые письма не могут быть прочитаны людьми, использующие эти платформы с ошибками. Это касается некоторых интернет-провайдеров (например, Orange во Франции). Это не проблема с Dolibarr или PHP, а с принимающим почтовым сервером. Однако вы можете добавить опцию MAIN_FIX_FOR_BUGGED_MTA в 1 в меню «Настройка - Другие настройки», тем самым подправив изменить Dolibarr, чтобы избежать этого. Однако могут возникнуть проблемы с другими серверами, которые строго используют стандарт SMTP. Другое решение (рекомендуется) - использовать метод «Библиотека сокетов SMTP», который не имеет недостатков. TranslationSetup=Настройка перевода TranslationKeySearch=Поиск ключа перевода или строки TranslationOverwriteKey=Перезаписать строку перевода -TranslationDesc=How to set the display language:
* Default/Systemwide: menu Home -> Setup -> Display
* Per user: Click on the username at the top of the screen and modify the User Display Setup tab on the user card. +TranslationDesc=Как установить язык отображения:
* По умолчанию/для всей системы: меню Главная-Настройки-Внешний вид
* Для каждого пользователя: нажмите на имя пользователя в верхней части экрана и измените вкладку « Настройка отображения пользователя » на карточке пользователя. TranslationOverwriteDesc=Вы также можете переопределить строки, заполняющие следующую таблицу. Выберите свой язык из раскрывающегося списка «%s», вставьте строку перевода в «%s» и ваш новый перевод в «%s» -TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use +TranslationOverwriteDesc2=Вы можете использовать другую вкладку, чтобы узнать, какой ключ перевода использовать TranslationString=Строка перевода CurrentTranslationString=Текущая строка перевода WarningAtLeastKeyOrTranslationRequired=Критерии поиска требуются, по крайней мере, для строки ключа или перевода @@ -1212,86 +1215,86 @@ TotalNumberOfActivatedModules=Активированное приложение/ YouMustEnableOneModule=Вы должны включить минимум 1 модуль ClassNotFoundIntoPathWarning=Class %s not found in PHP path YesInSummer=Да летом -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are available to external users (irrespective of the permissions of such users) and only if permissions are granted:
+OnlyFollowingModulesAreOpenedToExternalUsers=Обратите внимание, что только следующие модули доступны для внешних пользователей (независимо от разрешений этих пользователей) и только при наличии разрешений:
SuhosinSessionEncrypt=Хранилище сессий шифровано системой SUHOSIN ConditionIsCurrently=Текущее состояние %s -YouUseBestDriver=You use driver %s which is the best driver currently available. -YouDoNotUseBestDriver=You use driver %s but driver %s is recommended. -NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization. +YouUseBestDriver=Вы используете драйвер %s, который является лучшим драйвером, доступным в настоящее время. +YouDoNotUseBestDriver=Вы используете драйвер %s, но рекомендуется драйвер %s. +NbOfProductIsLowerThanNoPb=У вас есть только %s товаров/услуг в базе данных. Это не требуебует никакой оптимизации. SearchOptim=Поисковая оптимизация -YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response. -BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance. -BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari. +YouHaveXProductUseSearchOptim=У вас есть продукты %s в базе данных. Вы должны добавить константу PRODUCT_DONOTSEARCH_ANYWHERE равную 1 в Главная-Настройки-Другие настройки. Ограничьте поиск началом строк, что позволяет базе данных использовать индексы, и вы будете получать быстрый ответ. +BrowserIsOK=Вы используете веб-браузер %s. Этот браузер подходит в отношении безопасности и производительности. +BrowserIsKO=Вы используете веб-браузер %s. Этот браузер, как известно, является плохим выбором по безопасности, производительности и надежности. Мы рекомендуем использовать Firefox, Chrome, Opera или Safari. XDebugInstalled=XDebug загружен. XCacheInstalled=XCache загружен. AddRefInList=Display Customer/Vendor ref. info list (select list or combobox) and most of hyperlink.
Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp". AddAdressInList=Display Customer/Vendor adress info list (select list or combobox)
Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp". -AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties. +AskForPreferredShippingMethod=Запросить предпочтительный способ доставки для контрагентов. FieldEdition=Редакция поля %s FillThisOnlyIfRequired=Например, +2 (заполняйте это поле только тогда, когда ваш часовой пояс отличается от того, который используется на сервере) GetBarCode=Получить штрих-код ##### Module password generation PasswordGenerationStandard=Возврат пароля, полученных в соответствии с внутренними Dolibarr алгоритма: 8 символов, содержащих общие цифры и символы в нижнем регистре. -PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually. +PasswordGenerationNone=Не предлагать сгенерированный пароль. Пароль должен быть введен вручную. PasswordGenerationPerso=Верните пароль в соответствии с вашей личной конфигурацией. SetupPerso=Согласно вашей конфигурации PasswordPatternDesc=Описание шаблона паролей ##### Users setup ##### -RuleForGeneratedPasswords=Rules to generate and validate passwords -DisableForgetPasswordLinkOnLogonPage=Do not show the "Password Forgotten" link on the Login page -UsersSetup=Пользователь модуля установки -UserMailRequired=Email required to create a new user +RuleForGeneratedPasswords=Правила генерации и проверки паролей +DisableForgetPasswordLinkOnLogonPage=Не показывать ссылку «Забыли пароль» на странице входа +UsersSetup=Настройка модуля пользователя +UserMailRequired=Требуется электронная почта для создания нового пользователя ##### HRM setup ##### -HRMSetup=Настройка модуля HRM +HRMSetup=Настройка модуля HRM (Отдела кадров) ##### Company setup ##### -CompanySetup=Предприятия модуль настройки -CompanyCodeChecker=Options for automatic generation of customer/vendor codes -AccountCodeManager=Options for automatic generation of customer/vendor accounting codes -NotificationsDesc=Email notifications can be sent automatically for some Dolibarr events.
Recipients of notifications can be defined: -NotificationsDescUser=* per user, one user at a time. -NotificationsDescContact=* per third-party contacts (customers or vendors), one contact at a time. -NotificationsDescGlobal=* or by setting global email addresses in this setup page. -ModelModules=Document Templates -DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...) -WatermarkOnDraft=Watermark по проекту документа +CompanySetup=Настройка модуля Компании +CompanyCodeChecker=Опции для автоматической генерации кодов клиентов/поставщиков +AccountCodeManager=Опции для автоматической генерации учетных кодов клиентов/поставщиков +NotificationsDesc=Уведомления по электронной почте могут быть отправлены автоматически для некоторых событий Dolibarr.
Получатели уведомлений могут быть определены: +NotificationsDescUser=* на пользователя, по одному пользователю за раз. +NotificationsDescContact=* на контрагента (клиенты или поставщики), по одному контакту за раз. +NotificationsDescGlobal=* или установив глобальные адреса электронной почты на этой странице настроек. +ModelModules=Шаблоны документов +DocumentModelOdt=Генерация документов из шаблонов OpenDocument (файлы .ODT / .ODS из LibreOffice, OpenOffice, KOffice, TextEdit, ...) +WatermarkOnDraft=Водяной знак в проекте документа JSOnPaimentBill=Активировать фунцию автозаполнения строк платежа в платёжной форме -CompanyIdProfChecker=Rules for Professional IDs +CompanyIdProfChecker=Правила для отраслевой идентификации MustBeUnique=Должно быть уникальным? -MustBeMandatory=Mandatory to create third parties (if VAT number or type of company defined) ? +MustBeMandatory=Обязательно ли создавать контрагентов (если указан номер НДС или тип компании)? MustBeInvoiceMandatory=Обязательно проверять счета-фактуры? TechnicalServicesProvided=Предоставляемые технические услуги #####DAV ##### -WebDAVSetupDesc=This is the link to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that needs an existing login account/password for access. -WebDavServer=Root URL of %s server: %s +WebDAVSetupDesc=Это ссылка для доступа к каталогу WebDAV. Он содержит «общедоступный» каталог, открытый для любого пользователя, знающего URL (если доступ к общедоступному каталогу разрешен), и «личный» каталог, которому для доступа требуется существующая учетная запись / пароль. +WebDavServer=Корневой URL-адрес сервера %s: %s ##### Webcal setup ##### WebCalUrlForVCalExport=Экспорт ссылка на %s формате доступна на следующую ссылку: %s ##### Invoices ##### -BillsSetup=Счета модуль настройки -BillsNumberingModule=Счета и кредитных нот нумерации модуль -BillsPDFModules=Счет документы моделей -BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type +BillsSetup=Настройка модуля Счетов +BillsNumberingModule=Модель нумерации счетов и кредитных нот +BillsPDFModules=Модели счетов-фактур +BillsPDFModulesAccordindToInvoiceType=Модели документов счета в соответствии с типом счета PaymentsPDFModules=Модели платежных документов -ForceInvoiceDate=Силы дата счета-фактуры для подтверждения даты -SuggestedPaymentModesIfNotDefinedInInvoice=Предлагаемые платежи на счета в режиме по умолчанию, если не определено в счете-фактуре -SuggestPaymentByRIBOnAccount=Suggest payment by withdrawal on account -SuggestPaymentByChequeToAddress=Suggest payment by check to -FreeLegalTextOnInvoices=Свободный текст о счетах-фактурах +ForceInvoiceDate=Принудительно приравнять дату выставления счета к дате проверки +SuggestedPaymentModesIfNotDefinedInInvoice=Предложенный способ оплаты по умолчанию, если иной не определен в счете +SuggestPaymentByRIBOnAccount=Предложить оплату выводом средств на счет +SuggestPaymentByChequeToAddress=Предложить оплату чеком на +FreeLegalTextOnInvoices=Свободный текст на счетах-фактурах WatermarkOnDraftInvoices=Водяные знаки на черновиках счетов-фактур ("Нет" если пусто) PaymentsNumberingModule=Модель нумерации платежей -SuppliersPayment=Vendor payments -SupplierPaymentSetup=Vendor payments setup +SuppliersPayment=Платежи поставщику +SupplierPaymentSetup=Настройка платежей поставщику ##### Proposals ##### -PropalSetup=Коммерческие предложения модуль настройки -ProposalsNumberingModules=Коммерческие предложения нумерации модулей -ProposalsPDFModules=Коммерческие предложения документы моделей -SuggestedPaymentModesIfNotDefinedInProposal=Suggested payments mode on proposal by default if not defined for proposal -FreeLegalTextOnProposal=Свободный текст на коммерческие предложения +PropalSetup=Настройка модуля Коммерческих предложений +ProposalsNumberingModules=Модели нумерации Коммерческих предложений +ProposalsPDFModules=Модели документов Коммерческого предложения +SuggestedPaymentModesIfNotDefinedInProposal=Предлагаемый способ оплаты по предложению по умолчанию, если иной не определено предложением +FreeLegalTextOnProposal=Свободный текст на Коммерческих предложениях WatermarkOnDraftProposal=Водяные знаки на черновиках Коммерческих предложений ("Нет" если пусто) BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Запрос банковского счёта для предложения ##### SupplierProposal ##### SupplierProposalSetup=Настройка модуля запросов цен поставщиков -SupplierProposalNumberingModules=Price requests suppliers numbering models -SupplierProposalPDFModules=Price requests suppliers documents models +SupplierProposalNumberingModules=Модели нумерации ценовых запросов поставщиков +SupplierProposalPDFModules=Модели документов ценовых запросов поставщиков FreeLegalTextOnSupplierProposal=Свободный текст на запросе цены у поставщиков WatermarkOnDraftSupplierProposal=Водяной знак на проекте запроса цены у поставщиков (нет знака, если пустое) BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Запросите банковский счет назначения ценового запроса @@ -1299,22 +1302,22 @@ WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Попросите источник скл ##### Suppliers Orders ##### BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Запросить адрес банковского счета для заказа на поставку ##### Orders ##### -OrdersSetup=Sales Orders management setup -OrdersNumberingModules=Приказы нумерации модулей +OrdersSetup=Настройка управления заказами на продажу +OrdersNumberingModules=Модели нумерации заказов OrdersModelModule=Заказ документов моделей -FreeLegalTextOnOrders=Свободный текст распоряжения +FreeLegalTextOnOrders=Свободный текст на Заказах WatermarkOnDraftOrders=Водяные знаки на черновиках Заказов ("Нет" если пусто) ShippableOrderIconInList=Добавьте значок в список заказов, который указывает, может ли заказ быть отправлен -BANK_ASK_PAYMENT_BANK_DURING_ORDER=Запросите адрес банковского счета для заказа +BANK_ASK_PAYMENT_BANK_DURING_ORDER=Запросить счет получателя заказа ##### Interventions ##### -InterventionsSetup=Выступления модуль настройки +InterventionsSetup=Настройка модуля вмешательств FreeLegalTextOnInterventions=Дополнительный текст на документах посредничества FicheinterNumberingModules=Вмешательство нумерации модулей TemplatePDFInterventions=Вмешательство карту документы моделей WatermarkOnDraftInterventionCards=Водяной знак на документах посредничества (нет если не задано) ##### Contracts ##### ContractsSetup=Настройка модуля Договоры/подписки -ContractsNumberingModules=Контракты нумерации модулей +ContractsNumberingModules=Модуль нумерации контрактов TemplatePDFContracts=Модели документов контрактов FreeLegalTextOnContracts=Дополнительный текст к доворам WatermarkOnDraftContractCards=Водяной знак на черновиках контрактов ("Нет" если пусто) @@ -1322,17 +1325,17 @@ WatermarkOnDraftContractCards=Водяной знак на черновиках MembersSetup=Настройка модуля участников MemberMainOptions=Основные настройки AdherentLoginRequired= Управление логином для каждого пользователя -AdherentMailRequired=Email required to create a new member +AdherentMailRequired=Требуется электронная почта для создания нового участника MemberSendInformationByMailByDefault=Чекбокс отправить по почте подтверждение членов по умолчанию -VisitorCanChooseItsPaymentMode=Visitor can choose from available payment modes -MEMBER_REMINDER_EMAIL=Enable automatic reminder by email of expired subscriptions. Note: Module %s must be enabled and correctly setup to send reminders. +VisitorCanChooseItsPaymentMode=Посетитель может выбрать один из доступных способов оплаты +MEMBER_REMINDER_EMAIL=Включить автоматическое напоминание по электронной почте о просроченных подписках. Примечание. Модуль %s должен быть включен и правильно настроен для отправки напоминаний. ##### LDAP setup ##### LDAPSetup=Установка LDAP LDAPGlobalParameters=Глобальные параметры LDAPUsersSynchro=Пользователи LDAPGroupsSynchro=Группы LDAPContactsSynchro=Контакты -LDAPMembersSynchro=Члены +LDAPMembersSynchro=Участники LDAPMembersTypesSynchro=Типы участников LDAPSynchronization=LDAP синхронизация LDAPFunctionsNotAvailableOnPHP=LDAP функции не availbale на PHP @@ -1347,7 +1350,7 @@ LDAPSynchronizeMembersTypes=Organization of foundation's members types in LDAP LDAPPrimaryServer=Первичный сервер LDAPSecondaryServer=Вторичный сервер LDAPServerPort=Порт сервера -LDAPServerPortExample=Default port: 389 +LDAPServerPortExample=Порт по умолчанию: 389 LDAPServerProtocolVersion=Версия протокола LDAPServerUseTLS=Использовать TLS LDAPServerUseTLSExample=Ваш LDAP сервер использования TLS @@ -1394,59 +1397,59 @@ LDAPTestSynchroMemberType=Тестирование синхронизации т LDAPTestSearch= Тестировать поиск LDAP LDAPSynchroOK=Синхронизация успешные испытания LDAPSynchroKO=Сбой синхронизации тест -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates +LDAPSynchroKOMayBePermissions=Неудачный тест синхронизации. Проверьте, правильно ли настроено соединение с сервером и разрешены ли обновления LDAP LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP соединение с сервером LDAP успешного (Server= %s, Порт= %s) LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP соединение с сервером LDAP Failed (Server= %s, Порт= %s) -LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s) -LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s) +LDAPBindOK=Подключение / проверка подлинности при подключении к серверу LDAP прошла успешно (сервер = %s, порт = %s, Admin = %s, пароль = %s) +LDAPBindKO=Ошибка подключения / аутентификации на сервере LDAP (Server = %s, Port = %s, Admin = %s, Password = %s) LDAPSetupForVersion3=LDAP-сервер настроен для версии 3 LDAPSetupForVersion2=LDAP-сервер настроен для версии 2 LDAPDolibarrMapping=Dolibarr Картирование LDAPLdapMapping=LDAP Картирование LDAPFieldLoginUnix=Логин (Unix) -LDAPFieldLoginExample=Example: uid +LDAPFieldLoginExample=Пример: UID LDAPFilterConnection=Фильтр поиска -LDAPFilterConnectionExample=Example: &(objectClass=inetOrgPerson) +LDAPFilterConnectionExample=Пример: &(objectClass=inetOrgPerson) LDAPFieldLoginSamba=Логин (самба, activedirectory) -LDAPFieldLoginSambaExample=Example: samaccountname +LDAPFieldLoginSambaExample=Пример: samaccountname LDAPFieldFullname=Фамилия Имя -LDAPFieldFullnameExample=Example: cn -LDAPFieldPasswordNotCrypted=Password not encrypted -LDAPFieldPasswordCrypted=Password encrypted -LDAPFieldPasswordExample=Example: userPassword -LDAPFieldCommonNameExample=Example: cn +LDAPFieldFullnameExample=Пример: cn +LDAPFieldPasswordNotCrypted=Пароль не зашифрован +LDAPFieldPasswordCrypted=Пароль зашифрован +LDAPFieldPasswordExample=Пример: userPassword +LDAPFieldCommonNameExample=Пример: cn LDAPFieldName=Имя -LDAPFieldNameExample=Example: sn +LDAPFieldNameExample=Пример: sn LDAPFieldFirstName=Имя -LDAPFieldFirstNameExample=Example: givenName +LDAPFieldFirstNameExample=Пример: данноеимя LDAPFieldMail=Адрес электронной почты -LDAPFieldMailExample=Example: mail +LDAPFieldMailExample=Пример: почта LDAPFieldPhone=Профессиональные телефонные номера -LDAPFieldPhoneExample=Example: telephonenumber +LDAPFieldPhoneExample=Пример: телефонныйномер LDAPFieldHomePhone=Личный номер телефона -LDAPFieldHomePhoneExample=Example: homephone +LDAPFieldHomePhoneExample=Пример: домашнийтелефон LDAPFieldMobile=Сотовый телефон -LDAPFieldMobileExample=Example: mobile +LDAPFieldMobileExample=Пример: мобильныйтелефон LDAPFieldFax=Номер факса -LDAPFieldFaxExample=Example: facsimiletelephonenumber +LDAPFieldFaxExample=Пример: факсимильныйномертелефона LDAPFieldAddress=Улица -LDAPFieldAddressExample=Example: street +LDAPFieldAddressExample=Пример: улица LDAPFieldZip=Zip -LDAPFieldZipExample=Example: postalcode +LDAPFieldZipExample=Пример: почтовыйиндекс LDAPFieldTown=Город -LDAPFieldTownExample=Example: l +LDAPFieldTownExample=Пример: л LDAPFieldCountry=Страна LDAPFieldDescription=Описание -LDAPFieldDescriptionExample=Example: description +LDAPFieldDescriptionExample=Пример: описание LDAPFieldNotePublic=Общая записка -LDAPFieldNotePublicExample=Example: publicnote +LDAPFieldNotePublicExample=Пример: публичнаязаметка LDAPFieldGroupMembers= Члены группы -LDAPFieldGroupMembersExample= Example: uniqueMember +LDAPFieldGroupMembersExample= Пример: uniqueMember LDAPFieldBirthdate=Дата рождения LDAPFieldCompany=Компания -LDAPFieldCompanyExample=Example: o +LDAPFieldCompanyExample=Пример: o LDAPFieldSid=SID -LDAPFieldSidExample=Example: objectsid +LDAPFieldSidExample=Пример: objectsid LDAPFieldEndLastSubscription=Дата окончания подписки LDAPFieldTitle=Должность LDAPFieldTitleExample=Например, заголовок @@ -1460,40 +1463,40 @@ LDAPDescMembersTypes=На этой странице вы можете опред LDAPDescValues=Пример значения для OpenLDAP с загружены следующие схемы: core.schema, cosine.schema, inetorgperson.schema). Если вы используете thoose ценности и OpenLDAP, модифицировать LDAP конфигурационный файл slapd.conf, чтобы все thoose схемы загрузки. ForANonAnonymousAccess=Для аутентифицированных доступа (для записи, например) PerfDolibarr=Настройки производительности/отчёты о оптимизации -YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance. -NotInstalled=Not installed, so your server is not slowed down by this. +YouMayFindPerfAdviceHere=Эта страница содержит некоторые проверки или советы, связанные с производительностью. +NotInstalled=Не установлен, поэтому ваш сервер от этого не замедлится. ApplicativeCache=Прикладной кеш -MemcachedNotAvailable=Не найдено аддитивного кэша. Вы можете повысить производительность, установив кэш-сервер Memcached и модуль, способный использовать этот сервер кеша.
Более подробная информация здесь. http: //wiki.dolibarr.org/index.php/Module_MemCached_EN.
. Заметьте, что многие веб-хостинг-провайдеры не предоставляют такой сервер кеша. +MemcachedNotAvailable=Аппликативный кеш не найден. Вы можете повысить производительность, установив кеш-сервер Memcached и модуль, способный использовать этот кеш-сервер.
Более подробная информация здесь http://wiki.dolibarr.org/index.php/Module_MemCached_EN .
Обратите внимание, что многие веб-хостинг-провайдеры не предоставляют такой кеш-сервер. MemcachedModuleAvailableButNotSetup=Модуль memcached для прикладного кэша найден, но настройка модуля не завершена. MemcachedAvailableAndSetup=Включен модуль memcached, предназначенный для использования сервера memcached. OPCodeCache=Кэш OPCode -NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad). +NoOPCodeCacheFound=Кэш OPCode не найден. Возможно, вы используете кэш OPCode, отличный от XCache или eAccelerator (хорошо), или, возможно, у вас нет кэша OPCode (очень плохо). HTTPCacheStaticResources=Кеш HTTP для статичных ресурсов (файлы стилей, изображений, скриптов) FilesOfTypeCached=Файлы типа %s кешируются HTTP сервером FilesOfTypeNotCached=Файлы типа %s не кешируются HTTP сервером FilesOfTypeCompressed=Файлы типа %s сжимаются HTTP сервером FilesOfTypeNotCompressed=Файлы типа %s сжимаются не HTTP сервером CacheByServer=Кэшируется сервером -CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000" +CacheByServerDesc=Например, используя директиву Apache "ExpiresByType image/gif A2592000" CacheByClient=Кэшируется браузером CompressionOfResources=Сжатие HTTP заголовков -CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE" +CompressionOfResourcesDesc=Например, используя директиву Apache "AddOutputFilterByType DEFLATE" TestNotPossibleWithCurrentBrowsers=Такое автоматическое обнаружение невозможно с текущими браузерами -DefaultValuesDesc=Here you may define the default value you wish to use when creating a new record, and/or default filters or the sort order when you list records. -DefaultCreateForm=Default values (to use on forms) +DefaultValuesDesc=Здесь вы можете определить значение по умолчанию, которое вы хотите использовать при создании новой записи, и/или фильтры по умолчанию или порядок сортировки при перечислении записей. +DefaultCreateForm=Значения по умолчанию (для использования в формах) DefaultSearchFilters=Фильтры поиска по умолчанию DefaultSortOrder=Заказы сортировки по умолчанию DefaultFocus=Поля фокусировки по умолчанию -DefaultMandatory=Mandatory form fields +DefaultMandatory=Обязательные поля формы ##### Products ##### -ProductSetup=Продукты модуль настройки -ServiceSetup=Услуги установки модуля -ProductServiceSetup=Продукты и услуги установки модулей -NumberOfProductShowInSelect=Maximum number of products to show in combo select lists (0=no limit) -ViewProductDescInFormAbility=Display product descriptions in forms (otherwise shown in a tooltip popup) +ProductSetup=Настройка модуля Продуктов +ServiceSetup=Настройка модуля Услуг +ProductServiceSetup=Настройка модулей Продуктов и Услуг +NumberOfProductShowInSelect=Максимальное количество товаров для отображения в комбинированных списках выбора (0 = без ограничений) +ViewProductDescInFormAbility=Отображать описания продуктов в формах (в противном случае отображается во всплывающей подсказке) MergePropalProductCard=Активировать в продукте/услуге Вложенные файлы вставить опцию объединить PDF-документ продукта в предложение PDF azur, если продукт/услуга находится в предложении -ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party -UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string. +ViewProductDescInThirdpartyLanguageAbility=Отображать описания продуктов на языке контрагентов +UseSearchToSelectProductTooltip=Также, если у вас есть большое количество продуктов (> 100 000), вы можете увеличить скорость, установив постоянное значение PRODUCT_DONOTSEARCH_ANYWHERE равное 1 в меню «Настройка» - «Другие настройки». Поиск будет ограничен началом строки. UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient) SetDefaultBarcodeTypeProducts=Стандартный вид штрих-кода, используемого для продуктов SetDefaultBarcodeTypeThirdParties=Стандартный вид штрих-кода, используемого для третьих сторон @@ -1502,7 +1505,7 @@ ProductCodeChecker= Модуль для генерации кода продук ProductOtherConf= Конфигурация Товаров / Услуг IsNotADir=Не является каталогом! ##### Syslog ##### -SyslogSetup=Настройка модуля системного журнала +SyslogSetup=Настройка модуля Системного журнала SyslogOutput=Вход выходных SyslogFacility=Фонд SyslogLevel=Уровень @@ -1514,14 +1517,14 @@ CompressSyslogs=Сжатие и резервное копирование фай SyslogFileNumberOfSaves=Журнал резервных копий ConfigureCleaningCronjobToSetFrequencyOfSaves=Настроить очистку запланированного задания для установки частоты резервного копирования журнала ##### Donations ##### -DonationsSetup=Пожертвования модуль настройки +DonationsSetup=Настройка модуля Пожертвования DonationsReceiptModel=Шаблон дарения получения ##### Barcode ##### -BarcodeSetup=Штрих-код установки -PaperFormatModule=Версия для печати формата модуля -BarcodeEncodeModule=Штрих-кодирование типа -CodeBarGenerator=Штрих-код генератор -ChooseABarCode=Нет генератором определена +BarcodeSetup=Настройка штрих-кода +PaperFormatModule=Модуль Формата печати +BarcodeEncodeModule=Тип кодировки штрих-кода +CodeBarGenerator=Генератор штрих-кода +ChooseABarCode=Генератор не определен FormatNotSupportedByGenerator=Формат не поддерживается этим генератором BarcodeDescEAN8=Штрих-код типа EAN8 BarcodeDescEAN13=Штрих-код типа EAN13 @@ -1535,31 +1538,31 @@ GenbarcodeLocation=Путь для запуска к утилите генера BarcodeInternalEngine=Внутренние средства управления BarCodeNumberManager=Менеджер для автоматического определения номеров штрих-кода ##### Prelevements ##### -WithdrawalsSetup=Setup of module Direct Debit payments +WithdrawalsSetup=Настройка модуля платежей с прямым дебетированием ##### ExternalRSS ##### -ExternalRSSSetup=Внешние RSS импорт установки +ExternalRSSSetup=Настройка внешнего импорта RSS NewRSS=Новые RSS Feed RSSUrl=Ссылка RSS RSSUrlExample=Интересные RSS-ленты ##### Mailing ##### -MailingSetup=Отправка модуля настройки -MailingEMailFrom=Sender email (From) for emails sent by emailing module +MailingSetup=Настройка почтового модуля +MailingEMailFrom=Модуль Адресанта (от кого) для отправки писем по электронной почте MailingEMailError=Return Email (Errors-to) for emails with errors MailingDelay=Время ожидания в секундах перед отправкой следующего сообщения ##### Notification ##### -NotificationSetup=Email Notification module setup -NotificationEMailFrom=Sender email (From) for emails sent by the Notifications module +NotificationSetup=Настройка модуля Уведомления по электронной почте +NotificationEMailFrom=Электронная почта отправителя (От кого) для писем, отправленных модулем Уведомлений FixedEmailTarget=Получатель ##### Sendings ##### -SendingsSetup=Shipping module setup -SendingsReceiptModel=Отправка получения модели -SendingsNumberingModules=Отправки нумерации модулей -SendingsAbility=Поддержка листов доставки для доставки клиентов +SendingsSetup=Настройка модуля доставки +SendingsReceiptModel=Модель отправки квитанции +SendingsNumberingModules=Модули нумерации отправлений +SendingsAbility=Поддержка накладных для доставки клиенту NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated. FreeLegalTextOnShippings=Дополнительный текст для поставок ##### Deliveries ##### -DeliveryOrderNumberingModules=Продукция Поставки получения нумерации модуль -DeliveryOrderModel=Продукция Поставки получения модели +DeliveryOrderNumberingModules=Модуль нумерации чеков поставки продукции +DeliveryOrderModel=Шаблон бланка товарного чека DeliveriesOrderAbility=Поддержка продуктов, поставки квитанции FreeLegalTextOnDeliveryReceipts=Бесплатная доставка по тексту квитанции ##### FCKeditor ##### @@ -1573,27 +1576,27 @@ FCKeditorForUserSignature=Редактор WYSIWIG для создания/из FCKeditorForMail=WYSIWIG создание/издание для всей почты (кроме Tools-> eMailing) ##### Stock ##### StockSetup=Настройка модуля запаса -IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup. +IfYouUsePointOfSaleCheckModule=Если вы используете модуль торговой точки (POS), предоставленный по умолчанию, или внешний модуль, эта установка может быть проигнорирована вашим модулем POS. Большинство POS-модулей по умолчанию предназначены для немедленного создания счета-фактуры и уменьшения складских запасов независимо от имеющихся здесь опций. Поэтому, если вам нужно или не нужно уменьшать запас при регистрации продажи в вашем POS, проверьте также настройку вашего POS-модуля. ##### Menu ##### MenuDeleted=Удаленное Меню Menus=Меню TreeMenuPersonalized=Персонализированная меню -NotTopTreeMenuPersonalized=Персонализированные меню, не связанные с верхним меню ввода +NotTopTreeMenuPersonalized=Персонализированные меню, не связанные с пунктом верхнего меню NewMenu=Новое меню Menu=Выбор меню MenuHandler=Меню обработчик -MenuModule=Источник модуль +MenuModule=Исходный модуль HideUnauthorizedMenu= Скрыть несанкционированного меню (серый) DetailId=Идентификатор меню -DetailMenuHandler=Меню обработчик где показывать новое меню -DetailMenuModule=Имя модуля, если меня из модуля +DetailMenuHandler=Обработчик меню, где показывать новое меню +DetailMenuModule=Имя модуля, если пункт меню взят из модуля DetailType=Тип меню (вверху или слева) DetailTitre=Меню ярлык или этикетку код для перевода -DetailUrl=URL, где меня отправить вам (абсолютный URL ссылку или внешние ссылки с http://) -DetailEnabled=Условие, чтобы показать или не вступления +DetailUrl=URL-адрес, по которому вам отправляется меню (абсолютная ссылка или внешняя ссылка с http: //) +DetailEnabled=Условие показать или нет запись DetailRight=Условие для отображения несанкционированным серого меню -DetailLangs=Ланг имя ярлыка код перевода -DetailUser=Стажер / Extern / Все +DetailLangs=Имя файла Lang для перевода кода метки +DetailUser=Стажер / Внештатный / Все Target=Цель DetailTarget=Target for links (_blank top opens a new window) DetailLevel=Уровень (-1: верхнее меню, 0: заголовок меню> 0 меню и подменю) @@ -1602,7 +1605,7 @@ DeleteMenu=Удалить меню ConfirmDeleteMenu=Вы действительно хотите удалить запись меню %s? FailedToInitializeMenu=Не удалось инициализировать меню ##### Tax ##### -TaxSetup=Налоги, социальные или налоговые налоги и установка модулей дивидендов +TaxSetup=Настройка модуля НДС, социальные или налоговые сборов и дивидендов OptionVatMode=НДС к оплате OptionVATDefault=Стандартная основа OptionVATDebitOption=Принцип начисления @@ -1619,12 +1622,12 @@ SupposedToBeInvoiceDate=Счет дата, используемая Buy=Покупать Sell=Продавать InvoiceDateUsed=Счет дата, используемая -YourCompanyDoesNotUseVAT=В вашей компании определено, что вы не используете НДС (Home - Setup - Company / Organization), поэтому для настройки нет параметров НДС. -AccountancyCode=Учетный код +YourCompanyDoesNotUseVAT=В вашей компании определено, что вы не используете НДС (Главная - Настройки - Компания/Организация), поэтому для настройки нет параметров НДС. +AccountancyCode=Бухгалтерский код AccountancyCodeSell=Бух. код продаж AccountancyCodeBuy=Бух. код покупок ##### Agenda ##### -AgendaSetup=Акции и повестки модуль настройки +AgendaSetup=Настройка модуля событий и повестки дня PasswordTogetVCalExport=Ключевые разрешить экспорт ссылке PastDelayVCalExport=Не экспортировать события старше AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events) @@ -1637,26 +1640,26 @@ AGENDA_REMINDER_BROWSER=Enable event reminder on user's browser (when eve AGENDA_REMINDER_BROWSER_SOUND=Включить звуковое оповещение AGENDA_SHOW_LINKED_OBJECT=Показывать связанный объект в представлении повестки дня ##### Clicktodial ##### -ClickToDialSetup=Нажмите для набора модуля настройки +ClickToDialSetup=Настройка модуля Click To Dial ClickToDialUrlDesc=Url звонившего, когда клик по пиктограмме телефона сделан. В URL-адресе вы можете использовать теги
__PHONETO__, которые будут заменены на номер телефона человека для вызова
__PHONEFROM__, который будет заменен номером телефона вызывающего абонента (вашего)
__LOGIN__, который будет заменен на clicktodial login (определенном на карточке пользователя)
__PASS__, который будет заменен кликтодиальным паролем (определяется на карточке пользователя). -ClickToDialDesc=This module makea phone numbers clickable links. A click on the icon will make your phone call the number. This can be used to call a call-center system from Dolibarr that can call the phone number on a SIP system for example. +ClickToDialDesc=Этот модуль делает номера телефонов кликабельными ссылками. Нажатие на значок заставит ваш телефонный номер позвонить. Это можно использовать для вызова системы call-центра из Dolibarr, которая может, например, позвонить по номеру телефона в системе SIP. ClickToDialUseTelLink=Используйте только ссылку «tel:» на номера телефонов 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. ##### Point Of Sale (CashDesk) ##### CashDesk=Point of Sale -CashDeskSetup=Point of Sales module setup +CashDeskSetup=Настройка модуля «Точка продаж» CashDeskThirdPartyForSell=Default generic third party to use for sales CashDeskBankAccountForSell=Денежные счета, используемого для продает CashDeskBankAccountForCheque= Default account to use to receive payments by check CashDeskBankAccountForCB= Учетной записи для использования на получение денежных выплат по кредитным картам -CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock). +CashDeskDoNotDecreaseStock=Отключить уменьшение запаса, когда продажа осуществляется из торговой точки (если «нет», уменьшение запаса производится для каждой продажи, совершаемой из POS, независимо от опции, установленной в модуле Запас). CashDeskIdWareHouse=Ускорить и ограничить склад для уменьшения запасов StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled -StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with module Serial/Lot management (currently active) so stock decrease is disabled. +StockDecreaseForPointOfSaleDisabledbyBatch=Уменьшение запаса в POS не совместимо с модулем Управление сериями/партиями (в настоящее время активно), поэтому уменьшение запаса отключено CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required. ##### Bookmark ##### -BookmarkSetup=Закладка Настройка модуля -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu. +BookmarkSetup=Настройка модуля Закладки +BookmarkDesc=Этот модуль позволяет вам управлять закладками. Вы также можете добавить ярлыки на любые страницы Dolibarr или внешние веб-сайты в левом меню. NbOfBoomarkToShow=Максимальное количество закладок, отображаемых в меню слева ##### WebServices ##### WebServicesSetup=Webservices модуль настройки @@ -1670,42 +1673,42 @@ ApiProductionMode=Включить режим производства (это ApiExporerIs=Вы можете исследовать и тестировать API по URL-адресу OnlyActiveElementsAreExposed=Выделяются только элементы из разрешенных модулей ApiKey=Ключ для API -WarningAPIExplorerDisabled=Исследователь API отключен. API-интерфейс API не требуется для предоставления услуг API. Это инструмент для разработчика для поиска/тестирования API REST. Если вам нужен этот инструмент, перейдите в настройку модуля API REST, чтобы активировать его. +WarningAPIExplorerDisabled=Проводник API отключен. Обозреватель API не обязан предоставлять службы API. Это инструмент для разработчика, чтобы найти / протестировать REST API. Если вам нужен этот инструмент, зайдите в настройку модуля API REST, чтобы активировать его. ##### Bank ##### -BankSetupModule=Банк модуль настройки +BankSetupModule=Настройка Банковского модуля FreeLegalTextOnChequeReceipts=Free text on check receipts -BankOrderShow=Порядок отображения банковских счетов для стран, использующих "подробную номер банковского" +BankOrderShow=Порядок отображения банковских счетов для стран, использующих «подробный номер банка» BankOrderGlobal=Общий BankOrderGlobalDesc=Генеральный порядок отображения BankOrderES=Испанский BankOrderESDesc=Испанская порядок отображения -ChequeReceiptsNumberingModule=Check Receipts Numbering Module +ChequeReceiptsNumberingModule=Модуль Проверки чеков ##### Multicompany ##### -MultiCompanySetup=Компания Multi-модуль настройки +MultiCompanySetup=Настройка модуля Корпорация ##### Suppliers ##### -SuppliersSetup=Vendor module setup +SuppliersSetup=Настройка модуля Поставщика SuppliersCommandModel=Complete template of purchase order (logo...) SuppliersInvoiceModel=Полный шаблон счета-фактуры поставщика (логотип ...) SuppliersInvoiceNumberingModel=Vendor invoices numbering models IfSetToYesDontForgetPermission=Если установлено "Да", не забудьте дать доступ группам или пользователям, разрешённым для повторного утверждения ##### GeoIPMaxmind ##### -GeoIPMaxmindSetup=GeoIP MaxMind модуля установки +GeoIPMaxmindSetup=Настройка модуля GeoIP Maxmind PathToGeoIPMaxmindCountryDataFile=Путь к файлу Maxmind, который требуется для геолокации.
Например,
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat NoteOnPathLocation=Обратите внимание, что Ваш IP, чтобы страны файл данных должен быть в директории вашего PHP может читать (Проверьте ваши установки PHP open_basedir и файловой системы разрешений). YouCanDownloadFreeDatFileTo=Вы можете скачать бесплатную демонстрационную версию страны GeoIP MaxMind файл на %s. YouCanDownloadAdvancedDatFileTo=Вы также можете скачать более полную версию, с обновлениями, в стране GeoIP MaxMind файл на %s. TestGeoIPResult=Испытание преобразование IP -> страны ##### Projects ##### -ProjectsNumberingModules=Проекты нумерации модуль -ProjectsSetup=Проект модуля установки -ProjectsModelModule=доклад документ проекта модели +ProjectsNumberingModules=Модуль нумерации проектов +ProjectsSetup=Настройка модуля проекта +ProjectsModelModule=Модель отчета по проекту TasksNumberingModules=Модуль нумерации Задач TaskModelModule=Документы с отчетами о задачах UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.
This may improve performance if you have a large number of projects, but it is less convenient. ##### ECM (GED) ##### ##### Fiscal Year ##### -AccountingPeriods=Сроки учета -AccountingPeriodCard=Период учета +AccountingPeriods=Учетные периоды +AccountingPeriodCard=Отчетный период NewFiscalYear=Новый отчетный период OpenFiscalYear=Открытый отчетный период CloseFiscalYear=Закрытый отчетный период @@ -1719,7 +1722,7 @@ NbNumMin=Минимальное количество цифр NbSpeMin=Минимальное количество специальных символов NbIteConsecutive=Максимальное количество повторяющихся повторяющихся одинаковых символов NoAmbiCaracAutoGeneration=Не используйте похожие символы ("1","l","i","|","0","O") для автоматической генерации -SalariesSetup=Настройка зарплатного модуля +SalariesSetup=Настройка модуля Зарплаты SortOrder=Порядок сортировки Format=Формат TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and suppliers payment type @@ -1730,7 +1733,7 @@ ExpenseReportsIkSetup=Настройка модуля Отчеты о расхо ExpenseReportsRulesSetup=Настройка модуля Отчеты о расходах - Правила ExpenseReportNumberingModules=Модуль нумерации отчетов о расходах NoModueToManageStockIncrease=Был активирован модуль, способный управлять автоматическим увеличением запасов. Увеличение запасов будет производиться только вручную. -YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for email notifications by enabling and configuring the module "Notification". +YouMayFindNotificationsFeaturesIntoModuleNotification=Вы можете найти опции для уведомлений по электронной почте, включив и настроив модуль «Уведомления». ListOfNotificationsPerUser=Список уведомлений на пользователя * ListOfNotificationsPerUserOrContact=List of notifications (events) available per user* or per contact** ListOfFixedNotifications=List of Fixed Notifications @@ -1778,7 +1781,7 @@ ExpectedChecksum=Ожидаемая контрольная сумма CurrentChecksum=Текущая контрольная сумма ForcedConstants=Требуемые постоянные значения MailToSendProposal=Предложения клиенту -MailToSendOrder=Sales orders +MailToSendOrder=Заказы на продажу MailToSendInvoice=Счета клиента MailToSendShipment=Отгрузки MailToSendIntervention=Проектные работы @@ -1821,22 +1824,22 @@ AddSubstitutions=Добавить замены клавиш DetectionNotPossible=Обнаружение невозможно UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call) ListOfAvailableAPIs=Список доступных API -activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise +activateModuleDependNotSatisfied=Модуль "%s" зависит от модуля "%s", который отсутствует, поэтому модуль "%1$s" может работать неправильно. Пожалуйста, установите модуль "%2$s" или отключите модуль "%1$s", если вы хотите быть в безопасности от неожиданностей CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter $dolibarr_main_restrict_os_commands in the conf.php file. LandingPage=Целевая страница -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments +SamePriceAlsoForSharedCompanies=Если вы используете модуль мультикомпания с выбором «Единая цена», цена также будет одинаковой для всех компаний, если продукты распределены между окружениями. ModuleEnabledAdminMustCheckRights=Модуль активирован. Разрешения для активированного модуля (модулей) были предоставлены только администраторам. Возможно, вам потребуется предоставить разрешения другим пользователям или группам вручную, если это необходимо. UserHasNoPermissions=This user has no permissions defined TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")
Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)
Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s") BaseCurrency=Справочная валюта компании (перейдите в настройку компании, чтобы изменить это) -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016). -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated. -WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software. +WarningNoteModuleInvoiceForFrenchLaw=Этот модуль %s соответствует французским законам (Loi Finance 2016). +WarningNoteModulePOSForFrenchLaw=Этот модуль %s соответствует французским законам (Loi Finance 2016), поскольку модуль необратимых журналов активируется автоматически. +WarningInstallationMayBecomeNotCompliantWithLaw=Вы пытаетесь установить модуль %s, который является внешним модулем. Активация внешнего модуля означает, что вы доверяете издателю этого модуля и уверены, что этот модуль не оказывает негативного влияния на поведение вашего приложения и соответствует законодательству вашей страны (%s). Если модуль вводит незаконную функцию, вы несете ответственность за использование нелегального программного обеспечения. MAIN_PDF_MARGIN_LEFT=Левый отступ в PDF MAIN_PDF_MARGIN_RIGHT=Правый отступ PDF MAIN_PDF_MARGIN_TOP=Верхний отступ PDF MAIN_PDF_MARGIN_BOTTOM=Нижний отступ PDF -NothingToSetup=There is no specific setup required for this module. +NothingToSetup=Для этого модуля не требуется никаких специальных настроек. SetToYesIfGroupIsComputationOfOtherGroups=Установите для этого значение yes, если эта группа является вычислением других групп EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2') SeveralLangugeVariatFound=Было найдено несколько вариантов языка @@ -1848,9 +1851,9 @@ HelpOnTooltip=Help text to show on tooltip HelpOnTooltipDesc=Put text or a translation key here for the text to show in a tooltip when this field appears in a form YouCanDeleteFileOnServerWith=You can delete this file on the server with Command Line:
%s ChartLoaded=Chart of account loaded -SocialNetworkSetup=Setup of module Social Networks +SocialNetworkSetup=Настройка модуля Социальные сети EnableFeatureFor=Enable features for %s -VATIsUsedIsOff=Note: The option to use Sales Tax or VAT has been set to Off in the menu %s - %s, so Sales tax or Vat used will always be 0 for sales. +VATIsUsedIsOff=Примечание: В меню %s - %s для параметра «Использовать налог с продаж или НДС» было установлено значение Выкл. , поэтому для продаж всегда используется 0 налога с продаж или НДС. SwapSenderAndRecipientOnPDF=Swap sender and recipient address position on PDF documents FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only. Also an URL parameter action=create or action=edit must be set OR page name must end with 'new.php' to trigger this feature. EmailCollector=Email collector @@ -1886,7 +1889,7 @@ ECMAutoTree=Show automatic ECM tree OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. OpeningHours=Opening hours OpeningHoursDesc=Enter here the regular opening hours of your company. -ResourceSetup=Configuration of Resource module +ResourceSetup=Конфигурация модуля Ресурсов UseSearchToSelectResource=Используйте форму поиска, чтобы выбрать ресурс (а не раскрывающийся список). DisabledResourceLinkUser=Отключить функцию привязки ресурса к пользователям DisabledResourceLinkContact=Отключить функцию привязки ресурса к контактам @@ -1897,7 +1900,7 @@ MAIN_OPTIMIZEFORTEXTBROWSER=Simplify interface for blind person MAIN_OPTIMIZEFORTEXTBROWSERDesc=Enable this option if you are a blind person, or if you use the application from a text browser like Lynx or Links. ThisValueCanOverwrittenOnUserLevel=This value can be overwritten by each user from its user page - tab '%s' DefaultCustomerType=Default thirdparty type for "New customer" creation form -ABankAccountMustBeDefinedOnPaymentModeSetup=Note: The bank account must be defined on the module of each payment mode (Paypal, Stripe, ...) to have this feature working. +ABankAccountMustBeDefinedOnPaymentModeSetup=Примечание. Банковский счет должен быть указан в модуле каждого способа оплаты (Paypal, Stripe, ...), чтобы эта функция работала. RootCategoryForProductsToSell=Root category of products to sell RootCategoryForProductsToSellDesc=If defined, only products inside this category or childs of this category will be available in the Point Of Sale DebugBar=Debug Bar @@ -1908,7 +1911,7 @@ LogsLinesNumber=Number of lines to show on logs tab UseDebugBar=Use the debug bar DEBUGBAR_LOGS_LINES_NUMBER=Number of last log lines to keep in console WarningValueHigherSlowsDramaticalyOutput=Warning, higher values slows dramaticaly output -DebugBarModuleActivated=Module debugbar is activated and slows dramaticaly the interface +DebugBarModuleActivated=Модуль отладки активируется и резко замедляет интерфейс EXPORTS_SHARE_MODELS=Export models are share with everybody ExportSetup=Setup of module Export InstanceUniqueID=Unique ID of the instance @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/ru_RU/bills.lang b/htdocs/langs/ru_RU/bills.lang index 9d8cac3c0a1..eedacc9143d 100644 --- a/htdocs/langs/ru_RU/bills.lang +++ b/htdocs/langs/ru_RU/bills.lang @@ -20,12 +20,12 @@ InvoiceStandardDesc=Такой вид счёта является общим. InvoiceDeposit=Down payment invoice InvoiceDepositAsk=Down payment invoice InvoiceDepositDesc=This kind of invoice is done when a down payment has been received. -InvoiceProForma=Формальный счёт +InvoiceProForma=Предварительный счет InvoiceProFormaAsk=Формальный счёт InvoiceProFormaDesc=Формальный счёт является образом оригинального счёта, но не имеет бухгалтерской учетной записи. InvoiceReplacement=Замена счета-фактуры InvoiceReplacementAsk=Замена счета-фактуры на другой -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Кредитовое авизо InvoiceAvoirAsk=Кредитовое авизо для исправления счета-фактуры InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -70,7 +70,7 @@ ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount? ConfirmConvertToReduc2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer. ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount? ConfirmConvertToReducSupplier2=The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this vendor. -SupplierPayments=Vendor payments +SupplierPayments=Платежи поставщику ReceivedPayments=Полученные платежи ReceivedCustomersPayments=Платежи, полученные от покупателей PayedSuppliersPayments=Payments paid to vendors @@ -88,8 +88,8 @@ CodePaymentMode=Payment Type (code) LabelPaymentMode=Payment Type (label) PaymentModeShort=Payment Type PaymentTerm=Payment Term -PaymentConditions=Payment Terms -PaymentConditionsShort=Payment Terms +PaymentConditions=Условия оплаты +PaymentConditionsShort=Условия оплаты PaymentAmount=Сумма платежа PaymentHigherThanReminderToPay=Платеж больше, чем в напоминании об оплате HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay.
Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice. diff --git a/htdocs/langs/ru_RU/blockedlog.lang b/htdocs/langs/ru_RU/blockedlog.lang index 22383133f41..25d4540bff2 100644 --- a/htdocs/langs/ru_RU/blockedlog.lang +++ b/htdocs/langs/ru_RU/blockedlog.lang @@ -1,36 +1,36 @@ -BlockedLog=Unalterable Logs +BlockedLog=Неизменяемые логи Field=Поле BlockedLogDesc=This module tracks some events into an unalterable log (that you can't modify once recorded) into a block chain, in real time. This module provides compatibility with requirements of laws of some countries (like France with the law Finance 2016 - Norme NF525). Fingerprints=Archived events and fingerprints FingerprintsDesc=This is the tool to browse or extract the unalterable logs. Unalterable logs are generated and archived locally into a dedicated table, in real time when you record a business event. You can use this tool to export this archive and save it into an external support (some countries, like France, ask that you do it every year). Note that, there is no feature to purge this log and every change tried to be done directly into this log (by a hacker for example) will be reported with a non-valid fingerprint. If you really need to purge this table because you used your application for a demo/test purpose and want to clean your data to start your production, you can ask your reseller or integrator to reset your database (all your data will be removed). CompanyInitialKey=Company initial key (hash of genesis block) BrowseBlockedLog=Unalterable logs -ShowAllFingerPrintsMightBeTooLong=Show all archived logs (might be long) -ShowAllFingerPrintsErrorsMightBeTooLong=Show all non-valid archive logs (might be long) +ShowAllFingerPrintsMightBeTooLong=Показать все архивные логи (может быть долго) +ShowAllFingerPrintsErrorsMightBeTooLong=Показать все недействительные архивные логи (может быть долго) DownloadBlockChain=Download fingerprints -KoCheckFingerprintValidity=Archived log entry is not valid. It means someone (a hacker?) has modified some data of this re after it was recorded, or has erased the previous archived record (check that line with previous # exists). -OkCheckFingerprintValidity=Archived log record is valid. The data on this line was not modified and the entry follows the previous one. +KoCheckFingerprintValidity=Архивные записи недействительна. Это значит, что кто-то (хакер?) изменил некоторые данные этого после того, как они были записаны, или удалил предыдущую архивную запись (проверьте, что строка с предыдущим # существует). +OkCheckFingerprintValidity=Архивная запись в журнале действительна. Данные в этой строке не были изменены, и запись следует за предыдущей. OkCheckFingerprintValidityButChainIsKo=Archived log seems valid compared to previous one but the chain was corrupted previously. AddedByAuthority=Stored into remote authority NotAddedByAuthorityYet=Not yet stored into remote authority -ShowDetails=Show stored details +ShowDetails=Показать сохраненные данные logPAYMENT_VARIOUS_CREATE=Payment (not assigned to an invoice) created logPAYMENT_VARIOUS_MODIFY=Payment (not assigned to an invoice) modified logPAYMENT_VARIOUS_DELETE=Payment (not assigned to an invoice) logical deletion logPAYMENT_ADD_TO_BANK=Payment added to bank -logPAYMENT_CUSTOMER_CREATE=Customer payment created +logPAYMENT_CUSTOMER_CREATE=Платеж клиента создан logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion -logDONATION_PAYMENT_CREATE=Donation payment created +logDONATION_PAYMENT_CREATE=Платеж пожертвования создан logDONATION_PAYMENT_DELETE=Donation payment logical deletion -logBILL_PAYED=Customer invoice paid -logBILL_UNPAYED=Customer invoice set unpaid +logBILL_PAYED=Счет клиента оплачен +logBILL_UNPAYED=Неоплаченный счет клиента logBILL_VALIDATE=Проверка векселя logBILL_SENTBYMAIL=Customer invoice send by mail logBILL_DELETE=Customer invoice logically deleted logMODULE_RESET=Module BlockedLog was disabled logMODULE_SET=Module BlockedLog was enabled -logDON_VALIDATE=Donation validated -logDON_MODIFY=Donation modified +logDON_VALIDATE=Пожертвование подтверждено +logDON_MODIFY=Пожертвование изменено logDON_DELETE=Donation logical deletion logMEMBER_SUBSCRIPTION_CREATE=Member subscription created logMEMBER_SUBSCRIPTION_MODIFY=Member subscription modified diff --git a/htdocs/langs/ru_RU/bookmarks.lang b/htdocs/langs/ru_RU/bookmarks.lang index c6009dfc922..701f235600f 100644 --- a/htdocs/langs/ru_RU/bookmarks.lang +++ b/htdocs/langs/ru_RU/bookmarks.lang @@ -6,15 +6,15 @@ ListOfBookmarks=Список закладок EditBookmarks=Список/редактирование закладок NewBookmark=Новая закладка ShowBookmark=Показать закладку -OpenANewWindow=Открыть новое окно -ReplaceWindow=Заменить текущее окно -BookmarkTargetNewWindowShort=Новое окно -BookmarkTargetReplaceWindowShort=Текущее окно -BookmarkTitle=Название закладки +OpenANewWindow=Открыть новую вкладку +ReplaceWindow=Заменить текущую вкладку +BookmarkTargetNewWindowShort=Новая вкладка +BookmarkTargetReplaceWindowShort=Текущая вкладка +BookmarkTitle=Имя закладки UrlOrLink=URL BehaviourOnClick=Поведение когда выбран URL закладки CreateBookmark=Создать закладку -SetHereATitleForLink=Установите название для закладки -UseAnExternalHttpLinkOrRelativeDolibarrLink=Используйте внешний HTTP URL или относительный Dolibarr URL -ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Выберите если связанную страницу необходимо открыть в новом окне +SetHereATitleForLink=Задать имя закладки +UseAnExternalHttpLinkOrRelativeDolibarrLink=Использовать внешнюю/абсолютную ссылку (https://URL) или внутреннюю/относительную ссылку (/DOLIBARR_ROOT/ htdocs /...) +ChooseIfANewWindowMustBeOpenedOnClickOnBookmark=Выберите, должна ли связанная страница открываться в текущей вкладке или в новой вкладке BookmarksManagement=Управление закладками diff --git a/htdocs/langs/ru_RU/boxes.lang b/htdocs/langs/ru_RU/boxes.lang index d79c6632395..3f1f3835168 100644 --- a/htdocs/langs/ru_RU/boxes.lang +++ b/htdocs/langs/ru_RU/boxes.lang @@ -1,29 +1,29 @@ # Dolibarr language file - Source file is en_US - boxes -BoxLoginInformation=Login Information -BoxLastRssInfos=RSS Information -BoxLastProducts=Latest %s Products/Services -BoxProductsAlertStock=Stock alerts for products -BoxLastProductsInContract=Latest %s contracted products/services -BoxLastSupplierBills=Latest Vendor invoices -BoxLastCustomerBills=Latest Customer invoices -BoxOldestUnpaidCustomerBills=Oldest unpaid customer invoices -BoxOldestUnpaidSupplierBills=Oldest unpaid vendor invoices -BoxLastProposals=Latest commercial proposals -BoxLastProspects=Latest modified prospects -BoxLastCustomers=Latest modified customers -BoxLastSuppliers=Latest modified suppliers -BoxLastCustomerOrders=Latest sales orders -BoxLastActions=Latest actions -BoxLastContracts=Latest contracts -BoxLastContacts=Latest contacts/addresses -BoxLastMembers=Latest members -BoxFicheInter=Latest interventions +BoxLoginInformation=Информация для входа +BoxLastRssInfos=RSS информация +BoxLastProducts=Последние %s Продукты/ Услуги +BoxProductsAlertStock=Имеющиеся оповещения для продуктов +BoxLastProductsInContract=Последние %s контрактные продукты/услуги +BoxLastSupplierBills=Последние счета поставщиков +BoxLastCustomerBills=Последние счета клиентов +BoxOldestUnpaidCustomerBills=Старые неоплаченные счета клиентов +BoxOldestUnpaidSupplierBills=Старые неоплаченные счета поставщиков +BoxLastProposals=Последние коммерческие предложения +BoxLastProspects=Последние изменения потенциальных клиентов +BoxLastCustomers=Последние изменения клиентов +BoxLastSuppliers=Последние изменения поставщиков +BoxLastCustomerOrders=Последние заказы +BoxLastActions=Последние действия +BoxLastContracts=Последние контракты +BoxLastContacts=Последние контакты/адреса +BoxLastMembers=Последние участники +BoxFicheInter=Последние вмешательства BoxCurrentAccounts=Open accounts balance -BoxTitleLastRssInfos=Latest %s news from %s -BoxTitleLastProducts=Products/Services: last %s modified -BoxTitleProductsAlertStock=Products: stock alert -BoxTitleLastSuppliers=Latest %s recorded suppliers -BoxTitleLastModifiedSuppliers=Vendors: last %s modified +BoxTitleLastRssInfos=Последние %s новостей от %s +BoxTitleLastProducts=Продукты/Услуги: последних %s изменений +BoxTitleProductsAlertStock=Продукты: имеющиеся оповещения +BoxTitleLastSuppliers=Последние %s зарегистрированные поставщики +BoxTitleLastModifiedSuppliers=Продавцы: последнее %s изменений BoxTitleLastModifiedCustomers=Customers: last %s modified BoxTitleLastCustomersOrProspects=Latest %s customers or prospects BoxTitleLastCustomerBills=Latest %s Customer invoices @@ -35,53 +35,53 @@ BoxTitleOldestUnpaidCustomerBills=Customer Invoices: oldest %s unpaid BoxTitleOldestUnpaidSupplierBills=Vendor Invoices: oldest %s unpaid BoxTitleCurrentAccounts=Open Accounts: balances BoxTitleLastModifiedContacts=Contacts/Addresses: last %s modified -BoxMyLastBookmarks=Bookmarks: latest %s +BoxMyLastBookmarks=Закладки: последние %s BoxOldestExpiredServices=Старейшие активных истек услуги BoxLastExpiredServices=Latest %s oldest contacts with active expired services BoxTitleLastActionsToDo=Latest %s actions to do BoxTitleLastContracts=Latest %s modified contracts -BoxTitleLastModifiedDonations=Latest %s modified donations +BoxTitleLastModifiedDonations=Последние %sизмененные пожертвования BoxTitleLastModifiedExpenses=Latest %s modified expense reports BoxGlobalActivity=Глобальная активность (фактуры, предложения, заказы) -BoxGoodCustomers=Good customers +BoxGoodCustomers=Хорошие клиенты BoxTitleGoodCustomers=%s Good customers FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successful refresh date: %s -LastRefreshDate=Latest refresh date +LastRefreshDate=Дата последнего обновления NoRecordedBookmarks=Закладки не созданы. ClickToAdd=Нажмите здесь, чтобы добавить. NoRecordedCustomers=Нет зарегистрированных клиентов NoRecordedContacts=Нет введенных контактов NoActionsToDo=Нет действий для выполнения -NoRecordedOrders=No recorded sales orders +NoRecordedOrders=Нет зарегистрированных заказов на продажу NoRecordedProposals=Нет зарегистрированных предложений -NoRecordedInvoices=No recorded customer invoices -NoUnpaidCustomerBills=No unpaid customer invoices -NoUnpaidSupplierBills=No unpaid vendor invoices -NoModifiedSupplierBills=No recorded vendor invoices +NoRecordedInvoices=Нет зарегистрированных счетов клиентов +NoUnpaidCustomerBills=Нет неоплаченных счетов клиентов +NoUnpaidSupplierBills=Нет неоплаченных счетов поставщиков +NoModifiedSupplierBills=Нет зарегистрированных счетов поставщиков NoRecordedProducts=Нет зарегистрированных товаров / услуг NoRecordedProspects=Нет зарегистрированных потенциальных клиентов NoContractedProducts=Нет законтрактованных товаров / услуг NoRecordedContracts=Нет введенных договоров NoRecordedInterventions=Нет записанных мероприятий -BoxLatestSupplierOrders=Latest purchase orders -NoSupplierOrder=No recorded purchase order -BoxCustomersInvoicesPerMonth=Customer Invoices per month +BoxLatestSupplierOrders=Последние заказы на покупку +NoSupplierOrder=Нет зарегистрированного заказа на покупку +BoxCustomersInvoicesPerMonth=Счета клиентов в месяц BoxSuppliersInvoicesPerMonth=Vendor Invoices per month -BoxCustomersOrdersPerMonth=Sales Orders per month +BoxCustomersOrdersPerMonth=Заказы на продажу в месяц BoxSuppliersOrdersPerMonth=Vendor Orders per month BoxProposalsPerMonth=Предложений в месяц -NoTooLowStockProducts=No products are under the low stock limit -BoxProductDistribution=Products/Services Distribution +NoTooLowStockProducts=Нет товаров на складе с запасом ниже установленного +BoxProductDistribution=Дистрибуция Продуктов/Услуг ForObject=On %s -BoxTitleLastModifiedSupplierBills=Vendor Invoices: last %s modified -BoxTitleLatestModifiedSupplierOrders=Vendor Orders: last %s modified -BoxTitleLastModifiedCustomerBills=Customer Invoices: last %s modified +BoxTitleLastModifiedSupplierBills=Счета поставщиков: последнее %s изменений +BoxTitleLatestModifiedSupplierOrders=Заказы поставщиков: последнее %s изменений +BoxTitleLastModifiedCustomerBills=Счета клиентов: последнее %s изменений BoxTitleLastModifiedCustomerOrders=Sales Orders: last %s modified BoxTitleLastModifiedPropals=Latest %s modified proposals ForCustomersInvoices=Счета-фактуры Покупателей ForCustomersOrders=Заказы клиентов ForProposals=Предложения LastXMonthRolling=The latest %s month rolling -ChooseBoxToAdd=Add widget to your dashboard -BoxAdded=Widget was added in your dashboard -BoxTitleUserBirthdaysOfMonth=Birthdays of this month +ChooseBoxToAdd=Добавить виджет на вашу панель +BoxAdded=Виджет был добавлен на вашу панель +BoxTitleUserBirthdaysOfMonth=Дни рождения в этом месяце diff --git a/htdocs/langs/ru_RU/cashdesk.lang b/htdocs/langs/ru_RU/cashdesk.lang index 2a83680e420..b6ea72c8f0c 100644 --- a/htdocs/langs/ru_RU/cashdesk.lang +++ b/htdocs/langs/ru_RU/cashdesk.lang @@ -14,7 +14,7 @@ ShoppingCart=Корзина NewSell=Новые продать AddThisArticle=Добавить эту статью RestartSelling=Вернитесь на продажу -SellFinished=Sale complete +SellFinished=Продажа завершена PrintTicket=Печать билетов NoProductFound=Ни одна статья найдены ProductFound=продукт найден @@ -37,17 +37,17 @@ PointOfSaleShort=POS CloseBill=Close Bill Floors=Floors Floor=Floor -AddTable=Add table +AddTable=Добавить таблицу Place=Place TakeposConnectorNecesary='TakePOS Connector' required OrderPrinters=Order printers -SearchProduct=Search product +SearchProduct=Поиск товара Receipt=Квитанция -Header=Header -Footer=Footer -AmountAtEndOfPeriod=Amount at end of period (day, month or year) -TheoricalAmount=Theorical amount -RealAmount=Real amount +Header=Заголовок +Footer=Нижний колонтитул +AmountAtEndOfPeriod=Сумма на конец периода (день, месяц или год) +TheoricalAmount=Теоретическая сумма +RealAmount=Действительная сумма CashFenceDone=Cash fence done for the period NbOfInvoices=Кол-во счетов-фактур Paymentnumpad=Type of Pad to enter payment @@ -61,11 +61,11 @@ NoPaimementModesDefined=No paiment mode defined in TakePOS configuration TicketVatGrouped=Group VAT by rate in tickets AutoPrintTickets=Automatically print tickets EnableBarOrRestaurantFeatures=Enable features for Bar or Restaurant -ConfirmDeletionOfThisPOSSale=Do your confirm the deletion of this current sale ? +ConfirmDeletionOfThisPOSSale=Подтверждаете ли вы удаление этой продажи? History=История -ValidateAndClose=Validate and close -Terminal=Terminal -NumberOfTerminals=Number of Terminals -TerminalSelect=Select terminal you want to use: +ValidateAndClose=Подтвердить и закрыть +Terminal=Терминал +NumberOfTerminals=Количество терминалов +TerminalSelect=Выберите терминал, который хотите использовать: POSTicket=POS Ticket BasicPhoneLayout=Use basic layout for phones diff --git a/htdocs/langs/ru_RU/categories.lang b/htdocs/langs/ru_RU/categories.lang index 0166ec07b6c..1b29f114966 100644 --- a/htdocs/langs/ru_RU/categories.lang +++ b/htdocs/langs/ru_RU/categories.lang @@ -1,23 +1,23 @@ # Dolibarr language file - Source file is en_US - categories Rubrique=Тег/Категория Rubriques=Теги/Категории -RubriquesTransactions=Tags/Categories of transactions +RubriquesTransactions=Теги/Категории транзакций categories=теги/категории NoCategoryYet=Нет созданных тегов/категорий данного типа In=В AddIn=Добавить в modify=изменить -Classify=Добавить +Classify=Классифицировать CategoriesArea=Раздел тегов/категорий ProductsCategoriesArea=Раздел тегов/категорий товаров/услуг -SuppliersCategoriesArea=Vendors tags/categories area +SuppliersCategoriesArea=Раздел тегов/категорий поставщиков CustomersCategoriesArea=Раздел тегов/категорий клиентов MembersCategoriesArea=Раздел тегов/категорий участников ContactsCategoriesArea=Раздел тегов/категорий контактов AccountsCategoriesArea=Accounts tags/categories area -ProjectsCategoriesArea=Projects tags/categories area -UsersCategoriesArea=Users tags/categories area -SubCats=Sub-categories +ProjectsCategoriesArea=Раздел тегов/категорий проектов +UsersCategoriesArea=Раздел тегов/категорий пользователей +SubCats=Подкатегории CatList=Список тегов/категорий NewCategory=Новый тег/категория ModifCat=Изменить тег/категорию @@ -27,64 +27,64 @@ CreateThisCat=Создать этот (эту) тег/категорию NoSubCat=Нет подкатегории. SubCatOf=Подкатегория FoundCats=Найденные теги/категории -ImpossibleAddCat=Impossible to add the tag/category %s +ImpossibleAddCat=Невозможно добавить тег/категорию %s WasAddedSuccessfully=%s успешно добавлена. ObjectAlreadyLinkedToCategory=Элемент уже связан с этим тегом/категорией -ProductIsInCategories=Product/service is linked to following tags/categories -CompanyIsInCustomersCategories=This third party is linked to following customers/prospects tags/categories -CompanyIsInSuppliersCategories=This third party is linked to following vendors tags/categories -MemberIsInCategories=This member is linked to following members tags/categories -ContactIsInCategories=This contact is linked to following contacts tags/categories +ProductIsInCategories=Продукт/услуга связаны со следующими тегами/категориями +CompanyIsInCustomersCategories=Данное третье лицо связано со следующими тегами/категориями клиентов/потенциальных клиентов +CompanyIsInSuppliersCategories=Данное третье лицо связано со следующими тегами/категориями поставщиков +MemberIsInCategories=Данный участник связан со следующими тегами/категориями участников +ContactIsInCategories=Этот контакт связан со следующими тэгами/категориями контактов ProductHasNoCategory=У этого продукта/услуги нет тегов/категорий -CompanyHasNoCategory=This third party is not in any tags/categories +CompanyHasNoCategory=У этой третьей стороны нет тэгов/категорий MemberHasNoCategory=У этого участника нет тегов/категорий ContactHasNoCategory=Это контакт не имеет тега или не принадлежит категории -ProjectHasNoCategory=This project is not in any tags/categories -ClassifyInCategory=Add to tag/category +ProjectHasNoCategory=У этого проекта нет тегов/категорий +ClassifyInCategory=Добавить в тег/категорию NotCategorized=Без тега/категории CategoryExistsAtSameLevel=Категория к таким кодом уже существует ContentsVisibleByAllShort=Содержимое доступно всем ContentsNotVisibleByAllShort=Содержание не доступно всем DeleteCategory=Удалить тег/категорию -ConfirmDeleteCategory=Are you sure you want to delete this tag/category? +ConfirmDeleteCategory=Вы уверены, что хотите удалить этот тег/категорию? NoCategoriesDefined=Не задан тег/категория -SuppliersCategoryShort=Vendors tag/category -CustomersCategoryShort=Customers tag/category -ProductsCategoryShort=Products tag/category -MembersCategoryShort=Members tag/category -SuppliersCategoriesShort=Vendors tags/categories +SuppliersCategoryShort=Тег/категория поставщиков +CustomersCategoryShort=Тег/категория клиентов +ProductsCategoryShort=Тег/категория продуктов +MembersCategoryShort=Тег/категория участников +SuppliersCategoriesShort=Теги/категории производителей CustomersCategoriesShort=Теги/категории клиентов -ProspectsCategoriesShort=Prospects tags/categories -CustomersProspectsCategoriesShort=Cust./Prosp. tags/categories +ProspectsCategoriesShort=Теги/категории проектов +CustomersProspectsCategoriesShort=Теги/категории Клиентов/Потенциальных клиентов ProductsCategoriesShort=Теги/категории товаров MembersCategoriesShort=Теги/категории участников ContactCategoriesShort=Теги/категории контактов AccountsCategoriesShort=Accounts tags/categories -ProjectsCategoriesShort=Projects tags/categories -UsersCategoriesShort=Users tags/categories +ProjectsCategoriesShort=Теги/категории Проектов +UsersCategoriesShort=Теги/категории пользователей ThisCategoryHasNoProduct=В этой категории нет товаров. -ThisCategoryHasNoSupplier=This category does not contain any vendor. +ThisCategoryHasNoSupplier=В этой категории нет ни одного поставщика. ThisCategoryHasNoCustomer=В этой категории нет покупателей. ThisCategoryHasNoMember=В этой категории нет участников. ThisCategoryHasNoContact=Эта категория не содержит ни одного контакта ThisCategoryHasNoAccount=This category does not contain any account. -ThisCategoryHasNoProject=This category does not contain any project. +ThisCategoryHasNoProject=В этой категории нет ни одного проекта CategId=ID тега/категории CatSupList=List of vendor tags/categories CatCusList=Список тегов/категорий клиента/потенциального клиента CatProdList=Список тегов/категорий товаров CatMemberList=Список тегов/категорий участников -CatContactList=List of contact tags/categories +CatContactList=Список тегов/категорий контактов CatSupLinks=Связи между поставщиками и тегами/категориями CatCusLinks=Связи между клиентами/потенц. клиентами и тегами/категориями CatProdLinks=Связи между продуктами/услугами и тегами/категориями -CatProJectLinks=Links between projects and tags/categories +CatProJectLinks=Связи между проектами и тегами/категориями DeleteFromCat=Удалить из тега/категории ExtraFieldsCategories=Дополнительные атрибуты CategoriesSetup=Настройка тегов/категорий CategorieRecursiv=Автоматическая ссылка на родительский тег/категорию -CategorieRecursivHelp=If option is on, when you add a product into a subcategory, product will also be added into the parent category. +CategorieRecursivHelp=Если опция включена, то при добавлении товара в подкатегорию товар также будет добавлен в родительскую категорию. AddProductServiceIntoCategory=Добавить следующий товар/услугу ShowCategory=Показать тег/категорию ByDefaultInList=By default in list -ChooseCategory=Choose category +ChooseCategory=Выберите категорию diff --git a/htdocs/langs/ru_RU/commercial.lang b/htdocs/langs/ru_RU/commercial.lang index 0016a1c5b31..aeaf2e67936 100644 --- a/htdocs/langs/ru_RU/commercial.lang +++ b/htdocs/langs/ru_RU/commercial.lang @@ -1,19 +1,19 @@ # Dolibarr language file - Source file is en_US - commercial -Commercial=Коммерция +Commercial=Управление запасами CommercialArea=Раздел коммерции Customer=Клиент Customers=Клиенты Prospect=Потенциальный клиент Prospects=Потенциальные клиенты -DeleteAction=Delete an event -NewAction=New event +DeleteAction=Удалить событие +NewAction=Новое событие AddAction=Создать событие -AddAnAction=Create an event +AddAnAction=Создать событие AddActionRendezVous=Создать назначенное событие -ConfirmDeleteAction=Are you sure you want to delete this event? +ConfirmDeleteAction=Вы уверены, что хотите удалить это событие? CardAction=Карточка события -ActionOnCompany=Related company -ActionOnContact=Related contact +ActionOnCompany=Связанная компания +ActionOnContact=Связанный контакт TaskRDVWith=Встреча с %s ShowTask=Показать задачу ShowAction=Показать действий @@ -52,17 +52,17 @@ ActionAC_TEL=Телефонный звонок ActionAC_FAX=Отправить факс ActionAC_PROP=Отправить предложение по Email ActionAC_EMAIL=Отправить электронное письмо -ActionAC_EMAIL_IN=Reception of Email +ActionAC_EMAIL_IN=Прием электронной почты ActionAC_RDV=Встречи ActionAC_INT=Вмешательство на сайте ActionAC_FAC=Отправить платежную ActionAC_REL=Отправить платежную (напоминание) ActionAC_CLO=Закрыть ActionAC_EMAILING=Отправить по электронной почте масса -ActionAC_COM=Отправить заказ по почте +ActionAC_COM=Отправить заказ на продажу по почте ActionAC_SHIP=Отправить доставку по почте -ActionAC_SUP_ORD=Send purchase order by mail -ActionAC_SUP_INV=Send vendor invoice by mail +ActionAC_SUP_ORD=Отправить заказ на покупку по почте +ActionAC_SUP_INV=Отправить счет поставщика по почте ActionAC_OTH=Другой ActionAC_OTH_AUTO=Мероприятия созданные автоматически ActionAC_MANUAL=Мероприятия, созданные вручную @@ -71,10 +71,10 @@ ActionAC_OTH_AUTOShort=Auto Stats=Статистика продаж StatusProsp=Проспект статус DraftPropals=Проект коммерческих предложений -NoLimit=No limit +NoLimit=Нет ограничений ToOfferALinkForOnlineSignature=Link for online signature WelcomeOnOnlineSignaturePage=Welcome to the page to accept commercial proposals from %s -ThisScreenAllowsYouToSignDocFrom=This screen allow you to accept and sign, or refuse, a quote/commercial proposal +ThisScreenAllowsYouToSignDocFrom=Этот экран позволяет вам принять и подписать или отклонить предложение или коммерческое предложение ThisIsInformationOnDocumentToSign=This is information on document to accept or refuse SignatureProposalRef=Signature of quote/commercial proposal %s FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled diff --git a/htdocs/langs/ru_RU/companies.lang b/htdocs/langs/ru_RU/companies.lang index 2973b8cc419..75936a1639c 100644 --- a/htdocs/langs/ru_RU/companies.lang +++ b/htdocs/langs/ru_RU/companies.lang @@ -5,14 +5,14 @@ SelectThirdParty=Выберите контрагента ConfirmDeleteCompany=Вы хотите удалить компанию и всю связанную с ней информацию? DeleteContact=Удалить контакт ConfirmDeleteContact=Удалить этот контакт и всю связанную с ним информацию? -MenuNewThirdParty=New Third Party -MenuNewCustomer=New Customer -MenuNewProspect=New Prospect -MenuNewSupplier=New Vendor +MenuNewThirdParty=Новый контрагент +MenuNewCustomer=Новый Клиент +MenuNewProspect=Новый Потенциальный клиент +MenuNewSupplier=Новый Продавец MenuNewPrivateIndividual=Новое физическое лицо NewCompany=Новая компания (перспектива, клиент, поставщик) -NewThirdParty=New Third Party (prospect, customer, vendor) -CreateDolibarrThirdPartySupplier=Создайте стороннего поставщика (поставщика) +NewThirdParty=Новый контрагент (потенциальный клиент, клиент, поставщик) +CreateDolibarrThirdPartySupplier=Создать контрагента (поставщика) CreateThirdPartyOnly=Создать контрагента CreateThirdPartyAndContact=Создать контрагента и связанный контакт ProspectionArea=Область потенциальных клиентов @@ -20,28 +20,28 @@ IdThirdParty=Код контрагента IdCompany=Код компании IdContact=Код контакта Contacts=Контакты -ThirdPartyContacts=Third-party contacts -ThirdPartyContact=Third-party contact/address +ThirdPartyContacts=Контакты контрагента +ThirdPartyContact=Контакт/адрес контрагента Company=Компания CompanyName=Название компании AliasNames=Название псевдонима (коммерческий, торговая марка, ...) -AliasNameShort=Alias Name +AliasNameShort=Псевдоним Companies=Компании -CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language -ThirdPartyName=Third-party name -ThirdPartyEmail=Third-party email -ThirdParty=Third-party -ThirdParties=Third-parties +CountryIsInEEC=Страна внутри Европейского Экономического Сообщества +PriceFormatInCurrentLanguage=Формат отображения цены в текущем языке и валюте +ThirdPartyName=Имя контрагента +ThirdPartyEmail= E-mail контрагента +ThirdParty=Контрагент +ThirdParties=Контрагенты ThirdPartyProspects=Потенциальные клиенты ThirdPartyProspectsStats=Потенциальные клиенты ThirdPartyCustomers=Покупатели ThirdPartyCustomersStats=Заказчики ThirdPartyCustomersWithIdProf12=Покупатели с %s или %s ThirdPartySuppliers=Вендоры -ThirdPartyType=Third-party type +ThirdPartyType=Тип контрагента Individual=Физическое лицо -ToCreateContactWithSameName=Will automatically create a contact/address with same information as the third party under the third party. In most cases, even if your third party is a physical person, creating a third party alone is enough. +ToCreateContactWithSameName=Будет автоматически создан контакт/адрес с той информацией которая связывает контрагента с контрагентом. В большинстве случаев, даже если контрагент является физическим лицом, достаточно создать одного контрагента. ParentCompany=Материнская компания Subsidiaries=Филиалы ReportByMonth=Отчет за месяц @@ -53,7 +53,7 @@ Lastname=Фамилия Firstname=Имя PostOrFunction=Должность UserTitle=Название -NatureOfThirdParty=Природа третьей стороны +NatureOfThirdParty=Свойство контрагента Address=Адрес State=Штат/Провинция StateShort=Штат @@ -70,19 +70,19 @@ Chat=Чат PhonePro=Раб. телефон PhonePerso=Личн. телефон PhoneMobile=Мобильный -No_Email=Refuse bulk emailings +No_Email=Отказаться от массовых рассылок Fax=Факс Zip=Почтовый индекс Town=Город Web=Web Poste= Должность -DefaultLang=Language default -VATIsUsed=Sales tax used -VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers +DefaultLang=Язык по умолчанию +VATIsUsed=Используется налог с продаж +VATIsUsedWhenSelling=Это определяет, включает ли этот контрагент налог с продаж или нет, когда выставляет счет своим клиентам VATIsNotUsed=Налог с продаж не используется -CopyAddressFromSoc=Copy address from third-party details -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor vendor, discounts are not available +CopyAddressFromSoc=Копировать адрес из данных контрагента +ThirdpartyNotCustomerNotSupplierSoNoRef=Контрагент не является ни клиентом, ни поставщиком, нет справочных объектов +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Контрагент не является ни клиентом, ни поставщиком, скидки не предоставляются PaymentBankAccount=Банковские реквизиты OverAllProposals=Предложения OverAllOrders=Заказы @@ -257,8 +257,8 @@ ProfId1DZ=RC ProfId2DZ=Art. ProfId3DZ=NIF ProfId4DZ=NIS -VATIntra=VAT ID -VATIntraShort=VAT ID +VATIntra=Код плательщика НДС +VATIntraShort=Код плательщика НДС VATIntraSyntaxIsValid=Синтаксис корректен VATReturn=Возврат НДС ProspectCustomer=Потенц. клиент / Покупатель @@ -271,22 +271,23 @@ CustomerRelativeDiscountShort=Относительная скидка CustomerAbsoluteDiscountShort=Абсолютная скидка CompanyHasRelativeDiscount=Этот покупатель имеет скидку по умолчанию %s%% CompanyHasNoRelativeDiscount=Этот клиент не имеет относительной скидки по умолчанию -HasRelativeDiscountFromSupplier=You have a default discount of %s%% from this vendor -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this vendor -CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for %s %s -CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for %s %s +HasRelativeDiscountFromSupplier=У вас есть скидка по умолчанию %s%% от этого поставщика +HasNoRelativeDiscountFromSupplier=У вас нет скидки по умолчанию от этого поставщика +CompanyHasAbsoluteDiscount=У этого клиента есть скидки (кредиты или авансовые платежи) на %s %s +CompanyHasDownPaymentOrCommercialDiscount=У этого клиента есть скидки (коммерческая, авансовые платежи) на %s %s CompanyHasCreditNote=Этот клиент все еще имеет кредитный лимит или авансовый платеж за %s %s -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this vendor -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for %s %s from this vendor -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for %s %s from this vendor -HasCreditNoteFromSupplier=You have credit notes for %s %s from this vendor +HasNoAbsoluteDiscountFromSupplier=У вас нет скидки на кредит от этого поставщика +HasAbsoluteDiscountFromSupplier=У вас есть скидки (кредиты или авансовые платежи) на %s %s от этого поставщика +HasDownPaymentOrCommercialDiscountFromSupplier=У вас есть скидки (коммерческие, авансовые платежи) на %s %s от этого поставщика +HasCreditNoteFromSupplier=У вас есть кредиты на %s %s от этого поставщика CompanyHasNoAbsoluteDiscount=Этот клиент не имеет дисконтный кредит CustomerAbsoluteDiscountAllUsers=Абсолютные скидки клиентов (предоставляются всеми пользователями) CustomerAbsoluteDiscountMy=Абсолютные скидки клиентов (предоставляются сами) SupplierAbsoluteDiscountAllUsers=Абсолютные скидки продавца (введенные всеми пользователями) SupplierAbsoluteDiscountMy=Абсолютные скидки продавца (введены самим) DiscountNone=Нет -Vendor=Vendor +Vendor=Поставщик +Supplier=Поставщик AddContact=Создать контакт AddContactAddress=Создать контакт/адрес EditContact=Изменить контакт / адреса @@ -302,22 +303,22 @@ AddThirdParty=Создать контрагента DeleteACompany=Удалить компанию PersonalInformations=Личные данные AccountancyCode=Бухгалтерский счёт -CustomerCode=Customer Code -SupplierCode=Vendor Code -CustomerCodeShort=Customer Code -SupplierCodeShort=Vendor Code -CustomerCodeDesc=Customer Code, unique for all customers -SupplierCodeDesc=Vendor Code, unique for all vendors +CustomerCode=Код Клиента +SupplierCode=Код Поставщика +CustomerCodeShort=Код клиента +SupplierCodeShort=Код Поставщика +CustomerCodeDesc=Код Клиента, уникальный для каждого клиента +SupplierCodeDesc=Код Поставщика, уникальный для каждого поставщика RequiredIfCustomer=Требуется, если контрагент является покупателем или потенциальным клиентом -RequiredIfSupplier=Требуется, если сторонняя сторона является поставщиком -ValidityControledByModule=Validity controlled by module -ThisIsModuleRules=Rules for this module +RequiredIfSupplier=Требуется, если контрагент является поставщиком +ValidityControledByModule=Актуальность контролируется модулем +ThisIsModuleRules=Правила для этого модуля ProspectToContact=Потенциальный клиент для связи CompanyDeleted=Компания " %s" удалена из базы данных. ListOfContacts=Список контактов/адресов ListOfContactsAddresses=Список контактов/адресов -ListOfThirdParties=List of Third Parties -ShowCompany=Show Third Party +ListOfThirdParties=Список контрагентов +ShowCompany=Показать контрагента ShowContact=Показать контакт ContactsAllShort=Все (без фильтра) ContactType=Вид контакт @@ -332,21 +333,21 @@ NoContactForAnyProposal=Этот контакт не является конта NoContactForAnyContract=Этот контакт не является контактом договора NoContactForAnyInvoice=Этот контакт не является контактом счета-фактуры NewContact=Новый контакт/адрес -NewContactAddress=New Contact/Address +NewContactAddress=Новый контакт/адрес MyContacts=Мои контакты Capital=Капитал CapitalOf=Столица %s EditCompany=Изменить компанию ThisUserIsNot=Этот пользователь не является перспективой, клиентом и поставщиком VATIntraCheck=Проверить -VATIntraCheckDesc=The VAT ID must include the country prefix. The link %s uses the European VAT checker service (VIES) which requires internet access from the Dolibarr server. +VATIntraCheckDesc=Идентификатор НДС должен включать префикс страны. Ссылка %s использует европейскую службу проверки НДС (VIES), для которой требуется доступ в Интернет с сервера Dolibarr. VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do -VATIntraCheckableOnEUSite=Check the intra-Community VAT ID on the European Commission website -VATIntraManualCheck=You can also check manually on the European Commission website %s +VATIntraCheckableOnEUSite=Проверьте идентификатора НДС на веб-сайте Европейской комиссии +VATIntraManualCheck=Вы также можете проверить его вручную на сайте Европейской Комиссии %s ErrorVATCheckMS_UNAVAILABLE=Проверка невозможна. Сервис проверки не предоставляется государством-членом ЕС (%s). -NorProspectNorCustomer=Not prospect, nor customer -JuridicalStatus=Legal Entity Type -Staff=Employees +NorProspectNorCustomer=Не потенциальный клиент, не клиент +JuridicalStatus=Тип юридического лица +Staff=Сотрудники ProspectLevelShort=Потенциальный ProspectLevel=Потенциальный клиент ContactPrivate=Личный @@ -367,7 +368,7 @@ TE_MEDIUM=Средняя компания TE_ADMIN=Гос. орган TE_SMALL=Малая компания TE_RETAIL=Розничная торговля -TE_WHOLE=Wholesaler +TE_WHOLE=Оптовик TE_PRIVATE=Физическое лицо TE_OTHER=Другое StatusProspect-1=Не контактировать @@ -386,14 +387,14 @@ ExportCardToFormat=Экспорт карточки в формате ContactNotLinkedToCompany=Контакт не связан с каким-либо контрагентом DolibarrLogin=Имя пользователя Dolibarr NoDolibarrAccess=Нет доступа к Dolibarr -ExportDataset_company_1=Third-parties (companies/foundations/physical people) and their properties -ExportDataset_company_2=Contacts and their properties -ImportDataset_company_1=Third-parties and their properties -ImportDataset_company_2=Third-parties additional contacts/addresses and attributes -ImportDataset_company_3=Third-parties Bank accounts -ImportDataset_company_4=Third-parties Sales representatives (assign sales representatives/users to companies) -PriceLevel=Price Level -PriceLevelLabels=Price Level Labels +ExportDataset_company_1=Контрагенты (компании/фонды/ физические лица) и их свойства +ExportDataset_company_2=Контакты и их свойства +ImportDataset_company_1=Контрагенты и их свойства +ImportDataset_company_2=Дополнительные контакты/адреса и атрибуты контрагентов +ImportDataset_company_3=Банковские счета контрагентов +ImportDataset_company_4=Торговые представители контрагентов (назначить торговых представителей/пользователей для компаний) +PriceLevel=Уровень цены +PriceLevelLabels=Метки уровня цены DeliveryAddress=Адрес доставки AddAddress=Добавить адрес SupplierCategory=Категория поставщика @@ -402,16 +403,16 @@ DeleteFile=Удалить файл ConfirmDeleteFile=Вы уверены, что хотите удалить этот файл? AllocateCommercial=Назначить торгового представителя Organization=Организация -FiscalYearInformation=Fiscal Year +FiscalYearInformation=Финансовый год FiscalMonthStart=Первый месяц финансового года -YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification. +YouMustAssignUserMailFirst=Вы должны создать адрес электронной почты для этого пользователя, прежде чем сможете добавить уведомление по электронной почте. YouMustCreateContactFirst=Для добавления электронных уведомлений вы должны сначала указать действующий email контрагента -ListSuppliersShort=List of Vendors -ListProspectsShort=List of Prospects -ListCustomersShort=List of Customers -ThirdPartiesArea=Third Parties/Contacts -LastModifiedThirdParties=Last %s modified Third Parties -UniqueThirdParties=Total of Third Parties +ListSuppliersShort=Список Поставщиков +ListProspectsShort=Список Потенциальных клиентов +ListCustomersShort=Список Клиентов +ThirdPartiesArea=Контрагенты/Контакты +LastModifiedThirdParties=Последнее %s изменение контрагентов +UniqueThirdParties=Всего контрагентов InActivity=Открытые ActivityCeased=Закрыто ThirdPartyIsClosed=Закрывшиеся контрагенты @@ -420,22 +421,22 @@ CurrentOutstandingBill=Валюта неуплаченного счёта OutstandingBill=Максимальный неуплаченный счёт OutstandingBillReached=Достигнут максимум не оплаченных счетов OrderMinAmount=Минимальная сумма заказа -MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0. +MonkeyNumRefModelDesc=Возвращает число в формате %syymm-nnnn для кода клиента и %syymm-nnnn для кода поставщика, где yy - год, mm - месяц, а nnnn - последовательность без разрыва и без сброса. LeopardNumRefModelDesc=Код покупателю/поставщику не присваивается. Он может быть изменен в любое время. ManagingDirectors=Имя управляющего или управляющих (Коммерческого директора, директора, президента...) MergeOriginThirdparty=Копия контрагента (контрагент которого вы хотите удалить) MergeThirdparties=Объединить контрагентов -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted. +ConfirmMergeThirdparties=Вы уверены, что хотите объединить этого контрагента с текущим? Все связанные объекты (счета, заказы, ...) будут перемещены в текущего контрагента, а этот контрагент будет удален. ThirdpartiesMergeSuccess=Третьи стороны были объединены SaleRepresentativeLogin=Логин торгового представителя SaleRepresentativeFirstname=Имя торгового представителя SaleRepresentativeLastname=Фамилия торгового представителя ErrorThirdpartiesMerge=При удалении третьих сторон произошла ошибка. Проверьте журнал. Изменения были отменены. -NewCustomerSupplierCodeProposed=Customer or Vendor code already used, a new code is suggested +NewCustomerSupplierCodeProposed=Код Клиента или Поставщика уже используется, предлагается новый код #Imports -PaymentTypeCustomer=Payment Type - Customer -PaymentTermsCustomer=Payment Terms - Customer -PaymentTypeSupplier=Payment Type - Vendor -PaymentTermsSupplier=Payment Term - Vendor -MulticurrencyUsed=Use Multicurrency +PaymentTypeCustomer=Тип оплаты - Клиент +PaymentTermsCustomer=Условия оплаты - Клиент +PaymentTypeSupplier=Тип оплаты - Поставщик +PaymentTermsSupplier=Условия оплаты - Поставщик +MulticurrencyUsed=Использовать Мультивалютность MulticurrencyCurrency=Валюта diff --git a/htdocs/langs/ru_RU/compta.lang b/htdocs/langs/ru_RU/compta.lang index 8c7cd9b904e..bb264b10e93 100644 --- a/htdocs/langs/ru_RU/compta.lang +++ b/htdocs/langs/ru_RU/compta.lang @@ -25,7 +25,7 @@ PaymentsNotLinkedToInvoice=Платежи, не связанные с какой PaymentsNotLinkedToUser=Платежи, не связанные с какой-либо пользователь Profit=Прибыль AccountingResult=Accounting result -BalanceBefore=Balance (before) +BalanceBefore=Баланс (до) Balance=Баланс Debit=Дебет Credit=Кредит @@ -232,7 +232,7 @@ ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party 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 vendor accounting account on third party is not defined. ConfirmCloneTax=Confirm the clone of a social/fiscal tax CloneTaxForNextMonth=Клонировать для следующего месяца -SimpleReport=Simple report +SimpleReport=Простой отчет AddExtraReport=Extra reports (add foreign and national customer report) OtherCountriesCustomersReport=Foreign customers report BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code diff --git a/htdocs/langs/ru_RU/contracts.lang b/htdocs/langs/ru_RU/contracts.lang index 0801db8362a..ae376c0ebc6 100644 --- a/htdocs/langs/ru_RU/contracts.lang +++ b/htdocs/langs/ru_RU/contracts.lang @@ -64,7 +64,8 @@ DateStartRealShort=Реальная дата начала DateEndReal=Реальная дата окончания DateEndRealShort=Реальная дата окончания CloseService=Закрыть услугу -BoardRunningServices=Истекшие запущенные услуги +BoardRunningServices=Services running +BoardExpiredServices=Просроченные услуги ServiceStatus=Статус услуги DraftContracts=Проекты договоров CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it @@ -86,9 +87,9 @@ StandardContractsTemplate=Стандартный шаблон контракта ContactNameAndSignature=Для %s, имя и подпись OnlyLinesWithTypeServiceAreUsed=Только строки с типом "Услуга" могут быть клонированы. ConfirmCloneContract=Are you sure you want to clone the contract %s? -LowerDateEndPlannedShort=Lower planned end date of active services +LowerDateEndPlannedShort=Нижняя запланированная дата завершения активных услуг SendContractRef=Contract information __REF__ -OtherContracts=Other contracts +OtherContracts=Другие контракты ##### Types de contacts ##### TypeContact_contrat_internal_SALESREPSIGN=Торговый представитель подписания контракта TypeContact_contrat_internal_SALESREPFOLL=Торговый представитель последующего договора diff --git a/htdocs/langs/ru_RU/cron.lang b/htdocs/langs/ru_RU/cron.lang index b61a771f133..c21b1597510 100644 --- a/htdocs/langs/ru_RU/cron.lang +++ b/htdocs/langs/ru_RU/cron.lang @@ -6,26 +6,26 @@ Permission23102 = Создать/обновить Запланированную Permission23103 = Удалить Запланированную задачу Permission23104 = Выполнить запланированную задачу # Admin -CronSetup= Настройки запланированных заданий +CronSetup=Настройки запланированных заданий URLToLaunchCronJobs=URL to check and launch qualified cron jobs OrToLaunchASpecificJob=Или проверить и запустить специальную задачу KeyForCronAccess=Ключ безопасности для запуска запланированных заданий FileToLaunchCronJobs=Command line to check and launch qualified cron jobs CronExplainHowToRunUnix=В системах Unix-like вы должны задать crontab для выполнения команды каждые 5 минут. -CronExplainHowToRunWin=В Майкрософт Windows © вы должны использовать Планировщик для запуска команды каждые 5 минут. +CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes CronMethodDoesNotExists=Class %s does not contains any method %s CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s. CronJobProfiles=List of predefined cron job profiles # Menu -EnabledAndDisabled=Enabled and disabled +EnabledAndDisabled=Включено и отключено # Page list CronLastOutput=Latest run output CronLastResult=Latest result code CronCommand=Команда CronList=Запланированные задания CronDelete=Удалить запланированные задания -CronConfirmDelete=Are you sure you want to delete these scheduled jobs? -CronExecute=Launch scheduled job +CronConfirmDelete=Вы уверены, что хотите удалить эти запланированные задания? +CronExecute=Запустить запланированное задание CronConfirmExecute=Are you sure you want to execute these scheduled jobs now? CronInfo=Scheduled job module allows to schedule jobs to execute them automatically. Jobs can also be started manually. CronTask=Задание @@ -42,8 +42,8 @@ CronModule=Модуль CronNoJobs=Нет зарегистрированных заданий CronPriority=Приоритет CronLabel=Наименование -CronNbRun=Кол-во запусков -CronMaxRun=Max number launch +CronNbRun=Number of launches +CronMaxRun=Maximum number of launches CronEach=Каждый JobFinished=Задание запущено и завершено #Page card @@ -61,11 +61,11 @@ CronStatusInactiveBtn=Выключать CronTaskInactive=Задание отключено CronId=ID CronClassFile=Filename with class -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For exemple to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php -CronObjectHelp=The object name to load.
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product -CronMethodHelp=The object method to launch.
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch -CronArgsHelp=The method arguments.
For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module).
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for module is
product +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory).
For example to call the fetch method of Dolibarr Product object htdocs/product/class/product.class.php, the value for class file name is
product/class/product.class.php +CronObjectHelp=The object name to load.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is
Product +CronMethodHelp=The object method to launch.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is
fetch +CronArgsHelp=The method arguments.
For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be
0, ProductRef CronCommandHelp=Команда для выполнения CronCreateJob=Создать новое запланированное задание CronFrom=От @@ -79,5 +79,5 @@ CronCannotLoadObject=Class file %s was loaded, but object %s was not found into UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. JobDisabled=Job disabled MakeLocalDatabaseDumpShort=Local database backup -MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql' or 'pgsql'), 1, 'auto' or filename to build, number of backup files to keep +MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. diff --git a/htdocs/langs/ru_RU/dict.lang b/htdocs/langs/ru_RU/dict.lang index 3ef17a8324b..867b14f2fde 100644 --- a/htdocs/langs/ru_RU/dict.lang +++ b/htdocs/langs/ru_RU/dict.lang @@ -116,7 +116,7 @@ CountryHM=Остров Херд и Макдональд CountryVA=Папский Престол (Государство-город Ватикан) CountryHN=Гондурас CountryHK=Гонконг -CountryIS=Iceland +CountryIS=Исландия CountryIN=Индия CountryID=Индонезия CountryIR=Иран @@ -131,7 +131,7 @@ CountryKI=Кирибати CountryKP=Северная Корея CountryKR=Южная Корея CountryKW=Кувейт -CountryKG=Kyrgyzstan +CountryKG=Киргизия CountryLA=Лаосский CountryLV=Латвия CountryLB=Ливан @@ -139,7 +139,7 @@ CountryLS=Лесото CountryLR=Либерия CountryLY=Ливийская CountryLI=Лихтенштейн -CountryLT=Lithuania +CountryLT=Литва CountryLU=Люксембург CountryMO=Макао CountryMK=Македонии, бывшей югославской Республики @@ -290,10 +290,10 @@ CurrencyXOF=Франков КФА ЦБЗАГ CurrencySingXOF=Франк КФА ЦБЗАГ CurrencyXPF=CFP франков CurrencySingXPF=Франк КФП -CurrencyCentEUR=cents +CurrencyCentEUR=центы CurrencyCentSingEUR=цент -CurrencyCentINR=paisa -CurrencyCentSingINR=paise +CurrencyCentINR=пайсы +CurrencyCentSingINR=пайса CurrencyThousandthSingTND=тысячный #### Input reasons ##### DemandReasonTypeSRC_INTE=Интернет @@ -307,7 +307,7 @@ DemandReasonTypeSRC_WOM=Из уст в уста DemandReasonTypeSRC_PARTNER=Партнер DemandReasonTypeSRC_EMPLOYEE=Сотрудник DemandReasonTypeSRC_SPONSORING=Спонсорство -DemandReasonTypeSRC_SRC_CUSTOMER=Incoming contact of a customer +DemandReasonTypeSRC_SRC_CUSTOMER=Входящая связь с клиентом #### Paper formats #### PaperFormatEU4A0=Формат 4A0 PaperFormatEU2A0=Формат 2A0 diff --git a/htdocs/langs/ru_RU/donations.lang b/htdocs/langs/ru_RU/donations.lang index 002b3d1b7b7..108a50827bf 100644 --- a/htdocs/langs/ru_RU/donations.lang +++ b/htdocs/langs/ru_RU/donations.lang @@ -6,7 +6,7 @@ Donor=Донор AddDonation=Создать пожертование NewDonation=Новое пожертвование DeleteADonation=Удалить пожертование -ConfirmDeleteADonation=Are you sure you want to delete this donation? +ConfirmDeleteADonation=Вы уверены, что хотите удалить это пожертвование? ShowDonation=Показать пожертование PublicDonation=Общественное пожертвование DonationsArea=Пожертвования @@ -21,7 +21,7 @@ DonationDatePayment=Дата платежа ValidPromess=Подтвердить обещание DonationReceipt=Получатель пожертования DonationsModels=Модели документов для подтверждение получения пожертвования -LastModifiedDonations=Latest %s modified donations +LastModifiedDonations=Последние %sизмененные пожертвования DonationRecipient=Получатель пожертования IConfirmDonationReception=Получатель объявляет приём, как пожертвование, в следующем размере MinimumAmount=Минимальное пожертвование %s @@ -31,4 +31,4 @@ DONATION_ART200=Если вы обеспокоены, показывать вы DONATION_ART238=Если вы обеспокоены, показывать выдержку статьи 238 из CGI DONATION_ART885=Если вы обеспокоены, показывать выдержку статьи 885 из CGI DonationPayment=Платёж пожертвования -DonationValidated=Donation %s validated +DonationValidated= Пожертвование %s подтверждено diff --git a/htdocs/langs/ru_RU/ecm.lang b/htdocs/langs/ru_RU/ecm.lang index 75f3092ad49..2f3e3377b45 100644 --- a/htdocs/langs/ru_RU/ecm.lang +++ b/htdocs/langs/ru_RU/ecm.lang @@ -1,5 +1,5 @@ # Dolibarr language file - Source file is en_US - ecm -ECMNbOfDocs=No. of documents in directory +ECMNbOfDocs=Количество документов в каталоге ECMSection=Директория ECMSectionManual=Директория в ручном режиме ECMSectionAuto=Директория в автоматическом режиме @@ -33,9 +33,9 @@ ECMDocsByProducts=Документы, связанные с продуктами ECMDocsByProjects=Документы, связанные с проектрами ECMDocsByUsers=Документы, связанные с пользователями ECMDocsByInterventions=Документы, связанные с меропрятиями -ECMDocsByExpenseReports=Documents linked to expense reports -ECMDocsByHolidays=Documents linked to holidays -ECMDocsBySupplierProposals=Documents linked to supplier proposals +ECMDocsByExpenseReports=Документы, связанные с отчетами о расходах +ECMDocsByHolidays=Документы, связанные с отпусками +ECMDocsBySupplierProposals=Documents linked to vendor proposals ECMNoDirectoryYet=Директория не создана ShowECMSection=Показать директорию DeleteSection=Удаление директории diff --git a/htdocs/langs/ru_RU/help.lang b/htdocs/langs/ru_RU/help.lang index e28a5f74611..6e0f564a311 100644 --- a/htdocs/langs/ru_RU/help.lang +++ b/htdocs/langs/ru_RU/help.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - help CommunitySupport=Поддержка через Форум/Wiki EMailSupport=Поддержка по email -RemoteControlSupport=Поддержка через Интернет в реальном времени/удаленно +RemoteControlSupport=Online real-time / remote support OtherSupport=Другие виды поддержки ToSeeListOfAvailableRessources=Связаться/Смотреть имеющиеся ресурсы: HelpCenter=Справочный центр diff --git a/htdocs/langs/ru_RU/holiday.lang b/htdocs/langs/ru_RU/holiday.lang index f9c08748017..0288ac3768f 100644 --- a/htdocs/langs/ru_RU/holiday.lang +++ b/htdocs/langs/ru_RU/holiday.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - holiday HRM=Отдел кадров -Holidays=Leave -CPTitreMenu=Leave +Holidays=Отпуск +CPTitreMenu=Отпуск MenuReportMonth=Ежемесячная выписка MenuAddCP=New leave request NotActiveModCP=You must enable the module Leave to view this page. diff --git a/htdocs/langs/ru_RU/hrm.lang b/htdocs/langs/ru_RU/hrm.lang index ead8b8c54d2..ba41b26f209 100644 --- a/htdocs/langs/ru_RU/hrm.lang +++ b/htdocs/langs/ru_RU/hrm.lang @@ -5,13 +5,13 @@ Establishments=Establishments Establishment=Establishment NewEstablishment=New establishment DeleteEstablishment=Delete establishment -ConfirmDeleteEstablishment=Are-you sure to delete this establishment? +ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? OpenEtablishment=Open establishment CloseEtablishment=Close establishment # Dictionary DictionaryDepartment=HRM - Department list DictionaryFunction=HRM - Function list # Module -Employees=Employees +Employees=Сотрудники Employee=Сотрудник NewEmployee=New employee diff --git a/htdocs/langs/ru_RU/main.lang b/htdocs/langs/ru_RU/main.lang index 2358fc8d01d..16888bfd4c2 100644 --- a/htdocs/langs/ru_RU/main.lang +++ b/htdocs/langs/ru_RU/main.lang @@ -40,7 +40,7 @@ ErrorFileDoesNotExists=Файл %s не существует ErrorFailedToOpenFile=Не удалось открыть файл %s ErrorCanNotCreateDir=Не удалось создать папку %s ErrorCanNotReadDir=Не удалось прочитать папку %s -ErrorConstantNotDefined=Параметр s% не определен +ErrorConstantNotDefined=Параметр %s не определен ErrorUnknown=Неизвестная ошибка ErrorSQL=Ошибка SQL ErrorLogoFileNotFound=Файл логотипа '%s' не найден @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Не удалось отправить почту (отп ErrorFileNotUploaded=Файл не был загружен. Убедитесь, что его размер не превышает максимально допустимое значение, свободное место имеется на диске, и файл с таким же именем не существует в этом каталоге. ErrorInternalErrorDetected=Обнаружена ошибка ErrorWrongHostParameter=Неверный параметр хоста -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again. -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record. +ErrorYourCountryIsNotDefined=Ваша страна не определена. Перейдите Главная-Настройки-Редактировать и снова отправьте форму. +ErrorRecordIsUsedByChild=Не удалось удалить эту запись. Эта запись используется, по крайней мере, одной дочерней записью. ErrorWrongValue=Неправильное значение ErrorWrongValueForParameterX=Неправильное значение параметра %s ErrorNoRequestInError=В ошибке нет никаких запросов -ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later. +ErrorServiceUnavailableTryLater=Служба недоступна. Попробуйте позже. ErrorDuplicateField=Повторяющееся значение в уникальном поле -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back. -ErrorConfigParameterNotDefined=Parameter %s is not defined in the Dolibarr config file conf.php. +ErrorSomeErrorWereFoundRollbackIsDone=Были обнаружены некоторые ошибки. Изменения были отменены. +ErrorConfigParameterNotDefined=Параметр %s не определен в конфигурационном файле Dolibarr conf.php . ErrorCantLoadUserFromDolibarrDatabase=Не удалось найти пользователя %s в базе данных Dolibarr. ErrorNoVATRateDefinedForSellerCountry=Ошибка, ставки НДС не установлены для страны '%s'. ErrorNoSocialContributionForSellerCountry=Ошибка, не определен тип социальных/налоговых взносов для страны %s. ErrorFailedToSaveFile=Ошибка, не удалось сохранить файл. -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a existing warehouse -MaxNbOfRecordPerPage=Max. number of records per page +ErrorCannotAddThisParentWarehouse=Вы пытаетесь добавить родительский склад, который уже является дочерним по отношению к существующему складу +MaxNbOfRecordPerPage=Макс. количество записей на странице NotAuthorized=Вы не авторизованы чтобы сделать это. SetDate=Установить дату SelectDate=Выбрать дату @@ -78,15 +78,15 @@ FileRenamed=Файл успешно переименован FileGenerated=Файл успешно создан FileSaved=Файл сохранен FileUploaded=Файл успешно загружен -FileTransferComplete=File(s) uploaded successfully +FileTransferComplete=Файл(ы) успешно загружены FilesDeleted=Файл(ы) успешно удалены FileWasNotUploaded=Файл выбран как вложение, но пока не загружен. Для этого нажмите "Вложить файл". -NbOfEntries=No. of entries +NbOfEntries=Кол-во записей GoToWikiHelpPage=Читать интернет-справку (необходим доступ к Интернету) GoToHelpPage=Читать помощь RecordSaved=Запись сохранена RecordDeleted=Запись удалена -RecordGenerated=Record generated +RecordGenerated=Запись сгенерирована LevelOfFeature=Уровень возможностей NotDefined=Неопределено DolibarrInHttpAuthenticationSoPasswordUseless=Режим аутентификации Dolibarr установлен в %s в файле конфигурации conf.php.
Это означает, что Dolibarr хранит пароли во внешней базе, поэтому изменение этого поля может не помочь. @@ -96,13 +96,13 @@ PasswordForgotten=Забыли пароль? NoAccount=Нет аккаунта? SeeAbove=См. выше HomeArea=Главная -LastConnexion=Last login -PreviousConnexion=Previous login +LastConnexion=Последний вход +PreviousConnexion=Предыдущий вход PreviousValue=Предыдущее значение ConnectedOnMultiCompany=Подключено к объекту ConnectedSince=Подключено с AuthenticationMode=Режим аутентификации -RequestedUrl=Запрашиваемый Url +RequestedUrl=Запрашиваемый URL DatabaseTypeManager=Менеджер типов баз данных RequestLastAccessInError=Ошибка при последнем запросе доступа к базе данных ReturnCodeLastAccessInError=Код ошибки при последнем запросе доступа к базе данных @@ -119,7 +119,7 @@ PrecisionUnitIsLimitedToXDecimals=Dolibarr был настроен на огра DoTest=Проверка ToFilter=Фильтр NoFilter=Нет фильтра -WarningYouHaveAtLeastOneTaskLate=Warning, you have at least one element that has exceeded the tolerance time. +WarningYouHaveAtLeastOneTaskLate=Внимание, у вас есть хотя бы один элемент, который превысил допустимое время. yes=да Yes=Да no=нет @@ -153,9 +153,9 @@ RemoveLink=Удалить ссылку AddToDraft=Добавить к черновику Update=Обновить Close=Закрыть -CloseBox=Удалить виджет с главного экрана +CloseBox=Удалить виджет с Информ-панели Confirm=Подтвердить -ConfirmSendCardByMail=Do you really want to send the content of this card by mail to %s? +ConfirmSendCardByMail=Отправить содержимое этой карты по почте на %s ? Delete=Удалить Remove=Удалить Resiliate=Завершить @@ -170,7 +170,7 @@ Save=Сохранить SaveAs=Сохранить как TestConnection=Проверка подключения ToClone=Дублировать -ConfirmClone=Choose data you want to clone: +ConfirmClone=Выберите данные для клонирования: NoCloneOptionsSpecified=Данные для дублирования не определены. Of=из Go=Выполнить @@ -182,10 +182,10 @@ ShowCardHere=Показать карточку Search=Поиск SearchOf=Поиск Valid=Действительный -Approve=Одобрить +Approve=Утвердить Disapprove=Не утверждать ReOpen=Переоткрыть -Upload=Upload +Upload=Загрузить ToLink=Ссылка Select=Выбор Choose=Выберите @@ -200,9 +200,9 @@ Groups=Группы NoUserGroupDefined=Не задана группа для пользователя Password=Пароль PasswordRetype=Повторите ваш пароль -NoteSomeFeaturesAreDisabled=Обратите внимание, что многие возможности/модули отключены в этой демонстрации. +NoteSomeFeaturesAreDisabled=Обратите внимание, что многие функции/модули отключены в этой демонстрации. Name=Имя -NameSlashCompany=Name / Company +NameSlashCompany=Имя / Компания Person=Персона Parameter=Параметр Parameters=Параметры @@ -224,8 +224,8 @@ Family=Семья Description=Описание Designation=Описание DescriptionOfLine=Описание строки -DateOfLine=Date of line -DurationOfLine=Duration of line +DateOfLine=Дата строки +DurationOfLine=Продолжительность строки Model=Шаблон документа DefaultModel=Шаблон документа по-умолчанию Action=Действие @@ -237,7 +237,7 @@ Numero=Номер Limit=Лимит Limits=Лимиты Logout=Выход -NoLogoutProcessWithAuthMode=Нет возможности разрыва соединения с этим режимим аунтетификации %s +NoLogoutProcessWithAuthMode=Нет возможности разрыва соединения с этим режимом аунтетификации %s Connection=Логин Setup=Настройка Alert=Оповещение @@ -309,12 +309,12 @@ Yesterday=Вчера Tomorrow=Завтра Morning=Утро Afternoon=После полудня -Quadri=Квадри +Quadri=Квартал MonthOfDay=Месяц дня HourShort=ч MinuteShort=мин. Rate=Курс -CurrencyRate=Текущий уровень конверсии +CurrencyRate=Курс обмена валют UseLocalTax=Включить налог Bytes=Байт KiloBytes=Килобайт @@ -333,49 +333,49 @@ Copy=Копировать Paste=Вставить Default=По умолчанию DefaultValue=Значение по умолчанию -DefaultValues=Default values/filters/sorting +DefaultValues=Значения/фильтры/сортировка по умолчанию Price=Цена PriceCurrency=Цена (валюта) UnitPrice=Цена за единицу -UnitPriceHT=Unit price (excl.) -UnitPriceHTCurrency=Unit price (excl.) (currency) +UnitPriceHT=Цена за единицу (без учета налога) +UnitPriceHTCurrency=Цена за единицу (без налога) (валюта) UnitPriceTTC=Цена за единицу PriceU=Цена ед. PriceUHT=Цена ед. (нетто) -PriceUHTCurrency=цена (текущая) -PriceUTTC=Цена ед. (с тарой) +PriceUHTCurrency=Цена (валюта) +PriceUTTC=Цена ед. (с налогом) Amount=Сумма AmountInvoice=Сумма счета-фактуры AmountInvoiced=Сумма выставленного счета AmountPayment=Сумма платежа -AmountHTShort=Amount (excl.) +AmountHTShort=Сумма (без налога) AmountTTCShort=Сумма (вкл-я налог) -AmountHT=Amount (excl. tax) +AmountHT=Сумма (без налога) AmountTTC=Сумма (вкл-я налог) AmountVAT=Сумма НДС -MulticurrencyAlreadyPaid=Already paid, original currency +MulticurrencyAlreadyPaid=Уже оплачено, в исходной валюте MulticurrencyRemainderToPay=Осталось оплатить, в оригинальной валюте MulticurrencyPaymentAmount=Сумма платежа, в оригинальной валюте -MulticurrencyAmountHT=Amount (excl. tax), original currency -MulticurrencyAmountTTC=Сумма (брутто), в исходной валюте +MulticurrencyAmountHT=Сумма (без налога), исходная валюта +MulticurrencyAmountTTC=Сумма (с налогом), в исходной валюте MulticurrencyAmountVAT=Сумма налога, в исходной валюте AmountLT1=Сумма налога 2 AmountLT2=Сумма налога 3 AmountLT1ES=Сумма RE -AmountLT2ES=Сумма IRPF +AmountLT2ES=Сумма НДФЛ AmountTotal=Общая сумма AmountAverage=Средняя сумма -PriceQtyMinHT=Price quantity min. (excl. tax) -PriceQtyMinHTCurrency=Price quantity min. (excl. tax) (currency) +PriceQtyMinHT=Цена за мин. количество (без налога) +PriceQtyMinHTCurrency=Цена за мин. количество (без налога) (валюта) Percentage=Процент Total=Всего SubTotal=Подитог -TotalHTShort=Total (excl.) -TotalHT100Short=Total 100%% (excl.) -TotalHTShortCurrency=Total (excl. in currency) +TotalHTShort=Всего (без налога) +TotalHT100Short=Всего 100%% (без налога) +TotalHTShortCurrency=Всего (без налога в \nоригинальной валюте) TotalTTCShort=Всего (вкл-я налог) -TotalHT=Total (excl. tax) -TotalHTforthispage=Total (excl. tax) for this page +TotalHT=Всего (без налога) +TotalHTforthispage=Всего (без налога) для этой страницы Totalforthispage=Итого для этой страницы TotalTTC=Всего (вкл-я налог) TotalTTCToYourCredit=Всего (вкл-я налог) с Вашей кредитной @@ -387,9 +387,9 @@ TotalLT1ES=Всего RE TotalLT2ES=Всего IRPF TotalLT1IN=Всего CGST TotalLT2IN=Всего SGST -HT=Excl. tax +HT=Без налога TTC=Вкл-я налог -INCVATONLY=Inc. НДС +INCVATONLY=вкл. НДС INCT=включая все налоги VAT=НДС VATIN=IGST @@ -403,7 +403,7 @@ LT1ES=RE LT2ES=IRPF LT1IN=CGST LT2IN=SGST -LT1GC=Additionnal cents +LT1GC=Дополнительные центы VATRate=Ставка НДС VATCode=Код ставки налога VATNPR=Налоговая ставка NPR @@ -411,7 +411,7 @@ DefaultTaxRate=Ставка налога по умолчанию Average=Среднее Sum=Сумма Delta=Разница -RemainToPay=Оставаться в оплате +RemainToPay=Осталось заплатить Module=Модуль/Приложение Modules=Модули/Приложения Option=Опция @@ -424,7 +424,7 @@ Favorite=Избранное ShortInfo=Инфо Ref=Ссылка ExternalRef=Внешний источник -RefSupplier=Ссылка продавец +RefSupplier=Ссылка поставщика RefPayment=Ссылка на оплату CommercialProposalsShort=Коммерческие предложения Comment=Комментарий @@ -436,15 +436,15 @@ ActionNotApplicable=Не применяется ActionRunningNotStarted=Не начато ActionRunningShort=Выполняется ActionDoneShort=Завершено -ActionUncomplete=Incomplete +ActionUncomplete=Не завершено LatestLinkedEvents=Последние связанные события %s -CompanyFoundation=Компания / организация +CompanyFoundation=Компания/Организация Accountant=Бухгалтер -ContactsForCompany=Контакты для этого контрагента контрагента +ContactsForCompany=Контакты для этого контрагента ContactsAddressesForCompany=Контакты/Адреса для этого контрагента AddressesForCompany=Адреса для этого контарагента -ActionsOnCompany=Events for this third party -ActionsOnContact=Events for this contact/address +ActionsOnCompany=События для этого контрагента +ActionsOnContact=Событие для этого контакта/адреса ActionsOnMember=События этого участника ActionsOnProduct=События об этом продукте NActionsLate=% с опозданием @@ -462,8 +462,8 @@ Generate=Создать Duration=Продолжительность TotalDuration=Общая продолжительность Summary=Общее -DolibarrStateBoard=Database Statistics -DolibarrWorkBoard=Open Items +DolibarrStateBoard=Статистика базы данных +DolibarrWorkBoard=Открытые позиции NoOpenedElementToProcess=Нет открытого элемента для обработки Available=Доступно NotYetAvailable=Пока не доступно @@ -477,7 +477,7 @@ and=и or=или Other=Другой Others=Другие -OtherInformations=Other information +OtherInformations=Дополнительная информация Quantity=Количество Qty=Кол-во ChangedBy=Изменен @@ -491,11 +491,11 @@ Reporting=Отчет Reportings=Отчеты Draft=Черновик Drafts=Черновики -StatusInterInvoiced=Invoiced +StatusInterInvoiced=Выставлен счет Validated=Подтверждено Opened=Открытые -OpenAll=Open (All) -ClosedAll=Closed (All) +OpenAll=Открыто (Все) +ClosedAll=Закрыто (все) New=Новый Discount=Скидка Unknown=Неизвестно @@ -505,7 +505,7 @@ OriginalSize=Оригинальный размер Received=Получено Paid=Оплачено Topic=Тема -ByCompanies=По компаниям +ByCompanies=По контрагентам ByUsers=Пользователь Links=Ссылки Link=Ссылка @@ -517,7 +517,7 @@ None=Никакой NoneF=Никакой NoneOrSeveral=Нет или несколько Late=Поздно -LateDesc=An item is defined as Delayed as per the system configuration in menu Home - Setup - Alerts. +LateDesc=Элемент определяется как «Задержанный» согласно конфигурации системы в меню «Домой» - «Настройка» - «Оповещения». NoItemLate=Нет позднего пункта Photo=Изображение Photos=Изображения @@ -565,29 +565,29 @@ MonthShort09=сен MonthShort10=окт MonthShort11=ноя MonthShort12=дек -MonthVeryShort01=J -MonthVeryShort02=Пт -MonthVeryShort03=Пн +MonthVeryShort01=Я +MonthVeryShort02=Ф +MonthVeryShort03=М MonthVeryShort04=A -MonthVeryShort05=Пн -MonthVeryShort06=J -MonthVeryShort07=J +MonthVeryShort05=М +MonthVeryShort06=И +MonthVeryShort07=И MonthVeryShort08=A -MonthVeryShort09=Вс +MonthVeryShort09=С MonthVeryShort10=O -MonthVeryShort11=N -MonthVeryShort12=D +MonthVeryShort11=Н +MonthVeryShort12=Д AttachedFiles=Присоединенные файлы и документы JoinMainDoc=Присоединить основной документ DateFormatYYYYMM=ГГГГ-ММ DateFormatYYYYMMDD=ГГГГ-ММ-ДД DateFormatYYYYMMDDHHMM=ГГГГ-ММ-ДД ЧЧ:СС ReportName=Имя отчета -ReportPeriod=Отчетный период +ReportPeriod=Период отчета ReportDescription=Описание Report=Отчет Keyword=Ключевое слово -Origin=Оригинальный +Origin=Происхождение Legend=Легенда Fill=Заполнить Reset=Сбросить @@ -595,7 +595,7 @@ File=Файл Files=Файлы NotAllowed=Недопустимо ReadPermissionNotAllowed=Разрешение на чтение не предоставлено -AmountInCurrency=Сумма в валюте %s +AmountInCurrency=Сумма в %s валюте Example=Пример Examples=Примеры NoExample=Нет примеров @@ -637,15 +637,15 @@ FeatureNotYetSupported=Функция не поддерживается CloseWindow=Закрыть окно Response=Ответ Priority=Приоритет -SendByMail=Send by email +SendByMail=Послать по электронной почте MailSentBy=Email отправлен TextUsedInTheMessageBody=Текст Email SendAcknowledgementByMail=Отправить подтверждение на электронную почту SendMail=Отправить письмо Email=Адрес электронной почты NoEMail=Нет Email -AlreadyRead=Already read -NotRead=Not read +AlreadyRead=Прочитано +NotRead=Не прочитано NoMobilePhone=Нет мобильного телефона Owner=Владелец FollowingConstantsWillBeSubstituted=Следующие константы будут подменять соответствующие значения. @@ -658,9 +658,9 @@ ValueIsValid=Значение корректено ValueIsNotValid=Значение не действительно RecordCreatedSuccessfully=Запись успешно создана RecordModifiedSuccessfully=Запись успешно изменена -RecordsModified=%s record(s) modified -RecordsDeleted=%s record(s) deleted -RecordsGenerated=%s record(s) generated +RecordsModified=%s запись(ей) изменено +RecordsDeleted=%s запись(ей) удалено +RecordsGenerated=%s запись(ей) создано AutomaticCode=Автоматический код FeatureDisabled=Функция отключена MoveBox=Переместить виджет @@ -673,11 +673,11 @@ CompleteOrNoMoreReceptionExpected=Завершено или ничего бол ExpectedValue=Ожидаемое значение PartialWoman=Частичное TotalWoman=Всего -NeverReceived=Никогда не получено +NeverReceived=Не было получено Canceled=Отменено YouCanChangeValuesForThisListFromDictionarySetup=Можно изменить содержание этого списка в Главная - Настройка - Словари YouCanChangeValuesForThisListFrom=Можно изменить значения этого списка из меню %s -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup +YouCanSetDefaultValueInModuleSetup=Вы можете установить значение по умолчанию, используемое при создании новой записи в настройках модуля Color=Цвет Documents=Связанные файлы Documents2=Документы @@ -685,7 +685,7 @@ UploadDisabled=Загрузка отключена MenuAccountancy=Бухгалтерия MenuECM=Документы MenuAWStats=AWStats -MenuMembers=Члены +MenuMembers=Участники MenuAgendaGoogle=Google agenda ThisLimitIsDefinedInSetup=Лимит Dolibarr (Меню Главная-Настройки-Безопасность): %s Кб, лимит PHP: %s Кб NoFileFound=Нет документов, сохраненных в этом каталоге @@ -709,23 +709,23 @@ Notes=Примечания AddNewLine=Добавить новую строку AddFile=Добавить файл FreeZone=Не предопределенный продукт/услуга -FreeLineOfType=Free-text item, type: +FreeLineOfType=Элемент произвольного текста, набрать: CloneMainAttributes=Клонирование объекта с его основными атрибутами -ReGeneratePDF=Re-generate PDF +ReGeneratePDF=Повторно сгенерировать PDF PDFMerge=Слияние PDF Merge=Слияние DocumentModelStandardPDF=Стандартные PDF-шаблоны PrintContentArea=Показать страницу для печати области основного содержимого MenuManager=Менеджер меню -WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode: only login %s is allowed to use the application in this mode. +WarningYouAreInMaintenanceMode=Внимание, вы находитесь в режиме обслуживания: только пользователь %s может использовать приложение в этом режиме. CoreErrorTitle=Системная ошибка CoreErrorMessage=Извините, произошла ошибка. Для получения большей информации свяжитесь с системным администратором для проверки технических событий или отключения $dolibarr_main_prod=1. CreditCard=Кредитная карта ValidatePayment=Подтвердть платёж CreditOrDebitCard=Кредитная или дебетовая карта FieldsWithAreMandatory=Поля с %s являются обязательными -FieldsWithIsForPublic=Fields with %s are shown in public list of members. If you don't want this, uncheck the "public" box. -AccordingToGeoIPDatabase=(according to GeoIP conversion) +FieldsWithIsForPublic=Поля с %s отображаются в общедоступном списке участников. Если вы не хотите этого, снимите флажок «публичный». +AccordingToGeoIPDatabase=(согласно преобразования GeoIP) Line=Строка NotSupported=Не поддерживается RequiredField=Обязательное поле @@ -733,8 +733,8 @@ Result=Результат ToTest=Тест ValidateBefore=Карточка должна быть проверена, прежде чем использовать эту функцию Visibility=Видимость -Totalizable=Totalizable -TotalizableDesc=This field is totalizable in list +Totalizable=Суммирование +TotalizableDesc=Это поле суммируемо в списке Private=Частный Hidden=Скрытый Resources=Ресурсы @@ -748,43 +748,43 @@ IM=Мгновенный обмен сообщениями NewAttribute=Новый атрибут AttributeCode=Код атрибута URLPhoto=Адрес фотографии/логотипа -SetLinkToAnotherThirdParty=Ссылка на другой третьей стороне +SetLinkToAnotherThirdParty=Ссылка на другого контрагента LinkTo=Ссылка к LinkToProposal=Ссылка для предложения LinkToOrder=Ссылка для заказа LinkToInvoice=Ссылка для счета -LinkToTemplateInvoice=Link to template invoice -LinkToSupplierOrder=Link to purchase order -LinkToSupplierProposal=Link to vendor proposal -LinkToSupplierInvoice=Link to vendor invoice +LinkToTemplateInvoice=Ссылка на шаблон счета +LinkToSupplierOrder=Ссылка на заказ на покупку +LinkToSupplierProposal=Ссылка на предложение поставщика +LinkToSupplierInvoice=Ссылка на счет поставщика LinkToContract=Ссылка на контакт LinkToIntervention=Ссылка на мероприятие -CreateDraft=Создать проект +CreateDraft=Создать черновик SetToDraft=Назад к черновику ClickToEdit=Нажмите, чтобы изменить -ClickToRefresh=Click to refresh +ClickToRefresh=Нажмите для обновления EditWithEditor=Изменить с помощью CKEditor EditWithTextEditor=Редактировать с помощью текстового редактора EditHTMLSource=Редактировать HTML-источник -ObjectDeleted=Объект удален %s +ObjectDeleted=Объект %s удален ByCountry=По стране -ByTown=В городе +ByTown=по городу ByDate=По дате -ByMonthYear=В месяц / год +ByMonthYear=по месяцу/году ByYear=По годам ByMonth=по месяцам -ByDay=Днем -BySalesRepresentative=По торговым представителем +ByDay=по дням +BySalesRepresentative=По торговым представителям LinkedToSpecificUsers=Связан с особым контактом пользователя NoResults=Нет результатов -AdminTools=Admin Tools +AdminTools=Инструменты администратора SystemTools=Системные инструменты ModulesSystemTools=Настройки модулей Test=Тест Element=Элемент -NoPhotoYet=Пока недо доступных изображений -Dashboard=Начальная страница -MyDashboard=My Dashboard +NoPhotoYet=Пока нет доступных изображений +Dashboard=Информ-панель +MyDashboard=Моя Информ-панель Deductible=Подлежащий вычету from=от toward=к @@ -807,7 +807,7 @@ PrintFile=Печать файл %s ShowTransaction=Показать транзакцию на банковском счете ShowIntervention=Показать посредничества ShowContract=Показать договор -GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide. +GoIntoSetupToChangeLogo=Перейдите в раздел «Главная» - «Настройка» - «Компания», чтобы изменить логотип, или выберите «Главная» - «Настройка» - «Внешний вид», чтобы скрыть. Deny=Запретить Denied=Запрещено ListOf=Список %s @@ -820,77 +820,77 @@ Mandatory=Обязательно Hello=Здравствуйте GoodBye=До свидания Sincerely=С уважением, -DeleteLine=Удалить строки +DeleteLine=Удалить строку ConfirmDeleteLine=Вы точно хотите удалить эту строку? NoPDFAvailableForDocGenAmongChecked=PDF не доступен для документов созданных из выбранных записей -TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records. +TooManyRecordForMassAction=Слишком много записей выбрано для пакетного действия. Действие ограничено списком из %s записей. NoRecordSelected=Нет выделенных записей -MassFilesArea=Пространство для массовых действий с файлами -ShowTempMassFilesArea=Показать область для массовых действий с файлами -ConfirmMassDeletion=Bulk Delete confirmation -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record(s)? +MassFilesArea=Пространство для пакетных действий с файлами +ShowTempMassFilesArea=Показать область для пакетных действий с файлами +ConfirmMassDeletion=Подтверждение пакетного удаления +ConfirmMassDeletionQuestion=Вы уверены, что хотите удалить %s выбранных записей? RelatedObjects=Связанные объекты -ClassifyBilled=Классифицировать счета -ClassifyUnbilled=Классифицировать невыполненные +ClassifyBilled=Классифицировать выставленные счета +ClassifyUnbilled=Классифицировать невыполненные счета Progress=Прогресс -ProgressShort=Progr. +ProgressShort=Прогресс FrontOffice=Дирекция BackOffice=Бэк-офис View=Вид Export=Экспорт Exports=Экспорт -ExportFilteredList=Экспорт списка фильтров +ExportFilteredList=Экспорт отфильтрованного списка ExportList=Экспорт списка ExportOptions=Настройки экспорта -IncludeDocsAlreadyExported=Include docs already exported -ExportOfPiecesAlreadyExportedIsEnable=Export of pieces already exported is enable -ExportOfPiecesAlreadyExportedIsDisable=Export of pieces already exported is disable -AllExportedMovementsWereRecordedAsExported=All exported movements were recorded as exported -NotAllExportedMovementsCouldBeRecordedAsExported=Not all exported movements could be recorded as exported +IncludeDocsAlreadyExported=Включенные документы уже экспортированы +ExportOfPiecesAlreadyExportedIsEnable=Экспорт уже экспортированных частей включен +ExportOfPiecesAlreadyExportedIsDisable=Экспорт уже экспортированных частей отключен +AllExportedMovementsWereRecordedAsExported=Все экспортированные движения были зарегистрированы как экспортировано +NotAllExportedMovementsCouldBeRecordedAsExported=Не все экспортированные движения могут быть зарегистрированы как экспортировано Miscellaneous=Разное Calendar=Календарь GroupBy=Группировка по... ViewFlatList=Вид плоским списком RemoveString=Удалить строку '%s' -SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at https://transifex.com/projects/p/dolibarr/ to add your improvements. +SomeTranslationAreUncomplete=Некоторые из предлагаемых языков пакетов могут быть переведены только частично или могут содержать ошибки. Пожалуйста, помогите исправить ваш язык, зарегистрировавшись по адресу https://transifex.com/projects/p/dolibarr/, чтобы добавить свои улучшения. DirectDownloadLink=Прямая ссылка для скачивания (общедоступная/внешняя) DirectDownloadInternalLink=Прямая ссылка для скачивания (требуется регистрация и необходимые разрешения) Download=Загрузка DownloadDocument=Скачать документ ActualizeCurrency=Обновить текущий курс Fiscalyear=Финансовый год -ModuleBuilder=Module and Application Builder +ModuleBuilder=Конструктор Модулей и Приложений SetMultiCurrencyCode=Настройка валюты BulkActions=Массовые действия ClickToShowHelp=Нажмите для отображения подсказок -WebSite=Website +WebSite=Веб-сайт WebSites=Веб-сайты -WebSiteAccounts=Website accounts +WebSiteAccounts=Аккаунты сайта ExpenseReport=Отчёт о затратах ExpenseReports=Отчёты о затратах HR=Кадры HRAndBank=Кадры и Банк AutomaticallyCalculated=Автоматический подсчет TitleSetToDraft=Вернуться к черновику -ConfirmSetToDraft=Are you sure you want to go back to Draft status? +ConfirmSetToDraft=Вы уверены, что хотите вернуть статус Черновик? ImportId=Импорт идентификатора Events=События -EMailTemplates=Email templates -FileNotShared=File not shared to external public +EMailTemplates=Шаблоны электронной почты +FileNotShared=Файл не доступен для внешних пользователей Project=Проект Projects=Проекты -LeadOrProject=Lead | Project -LeadsOrProjects=Leads | Projects -Lead=Lead -Leads=Leads -ListOpenLeads=List open leads -ListOpenProjects=List open projects -NewLeadOrProject=New lead or project +LeadOrProject=Сделка | Проект +LeadsOrProjects=Сделки | Проекты +Lead=Сделка +Leads=Сделки +ListOpenLeads=Список открытых сделок +ListOpenProjects=Список открытых проектов +NewLeadOrProject=Новая сделка или проект Rights=Права доступа LineNb=Номер строки IncotermLabel=Обязанности по доставке товаров -TabLetteringCustomer=Customer lettering -TabLetteringSupplier=Vendor lettering +TabLetteringCustomer=Обозначение клиента +TabLetteringSupplier=Обозначение поставщика Monday=Понедельник Tuesday=Вторник Wednesday=Среда @@ -938,7 +938,7 @@ SearchIntoProjects=Проекты SearchIntoTasks=Задание SearchIntoCustomerInvoices=Счета клиента SearchIntoSupplierInvoices=Счета-фактуры поставщика -SearchIntoCustomerOrders=Sales orders +SearchIntoCustomerOrders=Заказы на продажу SearchIntoSupplierOrders=Заказы SearchIntoCustomerProposals=Предложения клиенту SearchIntoSupplierProposals=Предложения поставщиков @@ -946,16 +946,16 @@ SearchIntoInterventions=Мероприятия SearchIntoContracts=Договоры SearchIntoCustomerShipments=Отгрузки клиентам SearchIntoExpenseReports=Отчёты о затратах -SearchIntoLeaves=Leave -SearchIntoTickets=Tickets +SearchIntoLeaves=Отпуск +SearchIntoTickets=Заявки CommentLink=Комментарии NbComments=Количество комментариев CommentPage=Комментарии CommentAdded=Комментарий добавлен CommentDeleted=Комментарий удален Everybody=Общий проект -PayedBy=Paid by -PayedTo=Paid to +PayedBy=Оплачивается +PayedTo=Оплатить до Monthly=ежемесячно Quarterly=Ежеквартальный Annual=годовой @@ -964,18 +964,18 @@ Remote=Удаленный LocalAndRemote=Локальные и удаленные KeyboardShortcut=Сочетание клавиш AssignedTo=Ответств. -Deletedraft=Удалить проект -ConfirmMassDraftDeletion=Draft mass delete confirmation +Deletedraft=Удалить черновик +ConfirmMassDraftDeletion=Подтверждение пакетного удаления Черновиков FileSharedViaALink=Файл, общий доступ по ссылке -SelectAThirdPartyFirst=Select a third party first... -YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode -Inventory=Inventory -AnalyticCode=Analytic code -TMenuMRP=MRP -ShowMoreInfos=Show More Infos -NoFilesUploadedYet=Please upload a document first -SeePrivateNote=See private note -PaymentInformation=Payment information -ValidFrom=Valid from -ValidUntil=Valid until -NoRecordedUsers=No users +SelectAThirdPartyFirst=Сначала выберите контрагента ... +YouAreCurrentlyInSandboxMode=В настоящее время вы в %s режиме "песочницы" +Inventory=Инвентаризация +AnalyticCode=Аналитический код +TMenuMRP=ППМ +ShowMoreInfos=Показать больше информации +NoFilesUploadedYet=Пожалуйста, загрузите сначала документ +SeePrivateNote=Смотреть личную заметку +PaymentInformation=Платежная информация +ValidFrom=Действительно с +ValidUntil=Действительно до +NoRecordedUsers=Нет пользователей diff --git a/htdocs/langs/ru_RU/orders.lang b/htdocs/langs/ru_RU/orders.lang index 78bbbe496b1..d8e19ddf9e1 100644 --- a/htdocs/langs/ru_RU/orders.lang +++ b/htdocs/langs/ru_RU/orders.lang @@ -17,7 +17,7 @@ SupplierOrder=Purchase order SuppliersOrders=Заказы SuppliersOrdersRunning=Current purchase orders CustomerOrder=Sales Order -CustomersOrders=Sales Orders +CustomersOrders=Заказы на продажу CustomersOrdersRunning=Current sales orders CustomersOrdersAndOrdersLines=Sales orders and order details OrdersDeliveredToBill=Sales orders delivered to bill diff --git a/htdocs/langs/ru_RU/other.lang b/htdocs/langs/ru_RU/other.lang index 93c750185ee..dec0f019432 100644 --- a/htdocs/langs/ru_RU/other.lang +++ b/htdocs/langs/ru_RU/other.lang @@ -48,7 +48,7 @@ Notify_COMPANY_CREATE=Третья партия, созданная Notify_COMPANY_SENTBYMAIL=Mails sent from third party card Notify_BILL_VALIDATE=Проверка векселя Notify_BILL_UNVALIDATE=Счёт клиента не подтверждён -Notify_BILL_PAYED=Customer invoice paid +Notify_BILL_PAYED=Счет клиента оплачен Notify_BILL_CANCEL=Счёт клиента отменён Notify_BILL_SENTBYMAIL=Клиенту счет-фактура высылается по почте Notify_BILL_SUPPLIER_VALIDATE=Vendor invoice validated @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Посредничество %s проверено. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/ru_RU/resource.lang b/htdocs/langs/ru_RU/resource.lang index 8f778006f60..11ab6d3ba69 100644 --- a/htdocs/langs/ru_RU/resource.lang +++ b/htdocs/langs/ru_RU/resource.lang @@ -5,7 +5,7 @@ DeleteResource=Удалить ресурс ConfirmDeleteResourceElement=Подтвердите удаление ресурса для этого элемента NoResourceInDatabase=Нет ресурсов в базе данных NoResourceLinked=Нет связанных ресурсов - +ActionsOnResource=События из этого ресурсе ResourcePageIndex=Список ресурсов ResourceSingular=Ресурс ResourceCard=Карточка ресурса diff --git a/htdocs/langs/ru_RU/salaries.lang b/htdocs/langs/ru_RU/salaries.lang index b8079813a21..a9ed4d4a6f7 100644 --- a/htdocs/langs/ru_RU/salaries.lang +++ b/htdocs/langs/ru_RU/salaries.lang @@ -1,21 +1,21 @@ # Dolibarr language file - Source file is en_US - salaries -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 +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Учет используется для пользователей контрагентов +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Выделенный бухгалтерский счет, указанный в карточке пользователя, будет использоваться только для учета во вспомогательной книги. Этот будет использоваться для Главной книги и в качестве значения по умолчанию для учета вспомогательной книги, если выделенная пользовательский бухгалтерский счет для пользователя не определен. +SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Бухгалтерский счет по умолчанию для выплат заработной платы Salary=Зарплата Salaries=Зарплаты NewSalaryPayment=Новая выплата зарплаты -AddSalaryPayment=Add salary payment +AddSalaryPayment=Добавить выплату зарплаты SalaryPayment=Выплата зарплаты SalariesPayments=Выплата зарплат ShowSalaryPayment=Показать выплату зарплаты -THM=Average hourly rate -TJM=Average daily rate +THM=Средняя почасовая ставка +TJM=Среднесуточная ставка 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 -SalariesStatistics=Salary statistics +THMDescription=Это значение может использоваться для расчета затрат времени, затраченного на проект, введенный пользователями, если используется модуль Проектов +TJMDescription=Это значение в настоящее время только для информации и не используется для каких-либо расчетов +LastSalaries=Последние%s выплат зарплаты +AllSalaries=Все выплаты зарплаты +SalariesStatistics=Статистика зарплаты # Export -SalariesAndPayments=Salaries and payments +SalariesAndPayments=Заработная плата и выплаты diff --git a/htdocs/langs/ru_RU/stocks.lang b/htdocs/langs/ru_RU/stocks.lang index ca909e13642..8e06ef743fb 100644 --- a/htdocs/langs/ru_RU/stocks.lang +++ b/htdocs/langs/ru_RU/stocks.lang @@ -165,7 +165,7 @@ inventoryCreatePermission=Create new inventory inventoryReadPermission=View inventories inventoryWritePermission=Update inventories inventoryValidatePermission=Validate inventory -inventoryTitle=Inventory +inventoryTitle=Инвентарная ведомость inventoryListTitle=Inventories inventoryListEmpty=No inventory in progress inventoryCreateDelete=Create/Delete inventory @@ -181,7 +181,7 @@ inventoryMvtStock=By inventory inventoryWarningProductAlreadyExists=This product is already into list SelectCategory=Категория фильтр SelectFournisseur=Vendor filter -inventoryOnDate=Inventory +inventoryOnDate=Инвентарная ведомость INVENTORY_DISABLE_VIRTUAL=Virtual product (kit): do not decrement stock of a child product INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement has date of inventory diff --git a/htdocs/langs/ru_RU/suppliers.lang b/htdocs/langs/ru_RU/suppliers.lang index d9cea9beb00..d3fb1c16512 100644 --- a/htdocs/langs/ru_RU/suppliers.lang +++ b/htdocs/langs/ru_RU/suppliers.lang @@ -1,4 +1,4 @@ -# Dolibarr language file - Source file is en_US - suppliers +# Dolibarr language file - Source file is en_US - vendors Suppliers=Поставщики SuppliersInvoice=Vendor invoice ShowSupplierInvoice=Show Vendor Invoice @@ -15,15 +15,15 @@ SomeSubProductHaveNoPrices=Для некоторых подтоваров не AddSupplierPrice=Add buying price ChangeSupplierPrice=Change buying price SupplierPrices=Vendor prices -ReferenceSupplierIsAlreadyAssociatedWithAProduct=Этот поставщик ссылок уже связан со ссылкой: %s +ReferenceSupplierIsAlreadyAssociatedWithAProduct=This vendor reference is already associated with a product: %s NoRecordedSuppliers=No vendor recorded SupplierPayment=Vendor payment SuppliersArea=Vendor area RefSupplierShort=Ref. поставщик Availability=Доступность -ExportDataset_fournisseur_1=Vendor invoices list and invoice lines +ExportDataset_fournisseur_1=Vendor invoices and invoice details ExportDataset_fournisseur_2=Vendor invoices and payments -ExportDataset_fournisseur_3=Purchase orders and order lines +ExportDataset_fournisseur_3=Purchase orders and order details ApproveThisOrder=Утвердить этот заказ ConfirmApproveThisOrder=Are you sure you want to approve order %s? DenyingThisOrder=Отменить этот заказ @@ -35,13 +35,13 @@ ListOfSupplierProductForSupplier=List of products and prices for vendor %s%s
? -ConfirmDeleteUser=Are you sure you want to delete user %s? -ConfirmDeleteGroup=Are you sure you want to delete group %s? -ConfirmEnableUser=Are you sure you want to enable user %s? -ConfirmReinitPassword=Are you sure you want to generate a new password for user %s? -ConfirmSendNewPassword=Are you sure you want to generate and send new password for user %s? +ConfirmDisableUser=Вы уверены, что хотите отключить пользователя %s ? +ConfirmDeleteUser=Вы уверены, что хотите удалить пользователя %s ? +ConfirmDeleteGroup=Вы уверены, что хотите удалить группу %s ? +ConfirmEnableUser=Вы уверены, что хотите включить пользователя %s ? +ConfirmReinitPassword=Вы уверены, что хотите сгенерировать новый пароль для пользователя %s ? +ConfirmSendNewPassword=Вы уверены, что хотите сгенерировать и отправить новый пароль для пользователя %s ? NewUser=Новый пользователь CreateUser=Создать пользователя LoginNotDefined=Логин не определен. @@ -34,8 +34,8 @@ ListOfUsers=Список пользователей SuperAdministrator=Супер Администратор SuperAdministratorDesc=Администратор со всеми правами AdministratorDesc=Администратор -DefaultRights=Default Permissions -DefaultRightsDesc=Define here the default permissions that are automatically granted to a new user (to modify permissions for existing users, go to the user card). +DefaultRights=Разрешения по умолчанию +DefaultRightsDesc=Определите здесь разрешения по умолчанию , которые автоматически предоставляются новому пользователю (чтобы изменить разрешения для существующих пользователей, перейдите в карточку пользователя). DolibarrUsers=Пользователи Dolibarr LastName=Фамилия FirstName=Имя @@ -44,12 +44,12 @@ NewGroup=Новая группа CreateGroup=Создать группу RemoveFromGroup=Удалить из группы PasswordChangedAndSentTo=Пароль изменен и направил в %s. -PasswordChangeRequest=Request to change password for %s +PasswordChangeRequest=Запрос на изменение пароля для %s PasswordChangeRequestSent=Запрос на изменение пароля для %s направлено %s. -ConfirmPasswordReset=Confirm password reset +ConfirmPasswordReset=Подтвердите сброс пароля MenuUsersAndGroups=Пользователи и Группы -LastGroupsCreated=Latest %s groups created -LastUsersCreated=Latest %s users created +LastGroupsCreated=Последние %s созданные группы +LastUsersCreated=Последние %s созданных пользователя ShowGroup=Показать группы ShowUser=Показать пользователей NonAffectedUsers=Расходы пользователей @@ -64,13 +64,13 @@ LinkedToDolibarrThirdParty=Ссылка на Dolibarr третья сторон CreateDolibarrLogin=Создать аккаунт Dolibarr CreateDolibarrThirdParty=Создание третьей стороной LoginAccountDisableInDolibarr=Счет-инвалидов в Dolibarr. -UsePersonalValue=Использование личных ценностей +UsePersonalValue=Использовать личные предпочтения InternalUser=Внутренний пользователь -ExportDataset_user_1=Users and their properties +ExportDataset_user_1=Пользователи и их свойства DomainUser=Домен пользователя %s Reactivate=Возобновить -CreateInternalUserDesc=This form allows you to create an internal user in your company/organization. To create an external user (customer, vendor etc. ..), use the button 'Create Dolibarr User' from that third-party's contact card. -InternalExternalDesc=An internal user is a user that is part of your company/organization.
An external user is a customer, vendor or other.

In both cases, permissions defines rights on Dolibarr, also external user can have a different menu manager than internal user (See Home - Setup - Display) +CreateInternalUserDesc=Эта форма позволяет вам создать внутреннего пользователя в вашей компании. Чтобы создать внешнего пользователя (клиента, поставщика и т.д.), используйте кнопку «Создать пользователя Dolibarr» из карточки контакта этого контрагента. +InternalExternalDesc=Внутренний пользователь - это пользователь, который является частью вашей компании.
Внешний пользователь - это клиент, продавец или кто-то другой.

В обоих случаях права доступа определяют права в Dolibarr, также внешний пользователь может иметь менеджер меню, отличный от внутреннего пользователя (см. Главная - Настройка - Внешний вид). PermissionInheritedFromAGroup=Разрешение предоставляется, поскольку унаследовал от одного из пользователей в группы. Inherited=Унаследованный UserWillBeInternalUser=Созданный пользователь будет внутреннего пользователя (потому что не связаны с определенным третьим лицам) @@ -85,28 +85,28 @@ UserDeleted=Пользователь %s удален NewGroupCreated=Создана группа %s GroupModified=Группа %s изменена GroupDeleted=Удалена группа %s -ConfirmCreateContact=Are you sure you want to create a Dolibarr account for this contact? -ConfirmCreateLogin=Are you sure you want to create a Dolibarr account for this member? -ConfirmCreateThirdParty=Are you sure you want to create a third party for this member? +ConfirmCreateContact=Вы уверены, что хотите создать учетную запись Dolibarr для этого контакта? +ConfirmCreateLogin=Вы уверены, что хотите создать учетную запись Dolibarr для этого участника? +ConfirmCreateThirdParty=Вы уверены, что хотите создать контрагента для этого участника? LoginToCreate=Логин для создания NameToCreate=Имя третьей стороной для создания YourRole=Ваша роль YourQuotaOfUsersIsReached=Квота активных пользователей будет достигнута! -NbOfUsers=No. of users -NbOfPermissions=No. of permissions +NbOfUsers=Кол-во пользователей +NbOfPermissions=Кол-во разрешений DontDowngradeSuperAdmin=Только суперамин может понизить суперамин HierarchicalResponsible=Руководитель HierarchicView=Иерархический вид UseTypeFieldToChange=Использьзуйте поле Тип для изменения OpenIDURL=OpenID URL LoginUsingOpenID=Использовать OpenID для входа -WeeklyHours=Hours worked (per week) -ExpectedWorkedHours=Expected worked hours per week +WeeklyHours=Отработанные часы (в неделю) +ExpectedWorkedHours=Ожидаемое отработанное время за неделю ColorUser=Цвет пользователя -DisabledInMonoUserMode=Disabled in maintenance mode -UserAccountancyCode=User accounting code -UserLogoff=User logout -UserLogged=User logged -DateEmployment=Employment Start Date -DateEmploymentEnd=Employment End Date -CantDisableYourself=You can't disable your own user record +DisabledInMonoUserMode=Отключено в режиме обслуживания +UserAccountancyCode=Код учета пользователя +UserLogoff=Выход пользователя +UserLogged=Пользователь вошел +DateEmployment=Дата начала трудоустройства +DateEmploymentEnd=Дата окончания занятости +CantDisableYourself=Вы не можете отключить свою собственную запись пользователя diff --git a/htdocs/langs/ru_RU/website.lang b/htdocs/langs/ru_RU/website.lang index 42bffa2f68c..619b8022065 100644 --- a/htdocs/langs/ru_RU/website.lang +++ b/htdocs/langs/ru_RU/website.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - website Shortname=Код WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them. -DeleteWebsite=Delete website +DeleteWebsite=Удалить сайт ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. WEBSITE_TYPE_CONTAINER=Type of page/container WEBSITE_PAGE_EXAMPLE=Web page to use as example @@ -70,7 +70,7 @@ IDOfPage=Id of page Banner=Banner BlogPost=Blog post WebsiteAccount=Website account -WebsiteAccounts=Website accounts +WebsiteAccounts=Аккаунты сайта AddWebsiteAccount=Create web site account BackToListOfThirdParty=Back to list for Third Party DisableSiteFirst=Disable website first @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/ru_RU/workflow.lang b/htdocs/langs/ru_RU/workflow.lang index 98227e18291..bfacde3683f 100644 --- a/htdocs/langs/ru_RU/workflow.lang +++ b/htdocs/langs/ru_RU/workflow.lang @@ -1,20 +1,20 @@ # Dolibarr language file - Source file is en_US - workflow WorkflowSetup=Установка модуля Рабочих процессов -WorkflowDesc=Данный модуль предназначен для изменения поведения автоматических действий в приложении. По умолчанию рабочий процесс открыт (вы можете делать вещи в произвольном порядке). Вы можете включить автоматические действия, которые вам необходимы. +WorkflowDesc=Этот модуль предусматривает автоматические действия. По умолчанию рабочий процесс открыт (вы можете делать все в нужном вам порядке), но здесь вы можете включить какие-либо автоматические действия. ThereIsNoWorkflowToModify=Для активированных модулей нет доступных изменений рабочего процесса. # Autocreate -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a customer order after a commercial proposal is signed (new order will have same amount than proposal) -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (new invoice will have same amount than proposal) +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a sales order after a commercial proposal is signed (the new order will have same amount as the proposal) +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal) descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Автоматически создавать счет клиента после проверки договора -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a customer order is closed (new invoice will have same amount than order) +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a sales order is closed (the new invoice will have same amount as the order) # Autoclassify customer proposal or order -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer order is set to billed (and if amount of the order is same than total amount of signed linked proposals) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of signed linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of linked orders) -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is set to paid (and if amount of the invoice is same than total amount of linked orders) -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order to shipped when a shipment is validated (and if quantity shipped by all shipments is the same as in the order to update) -# Autoclassify supplier order -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked proposals) -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked orders) -AutomaticCreation=Automatic creation -AutomaticClassification=Automatic classification +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when sales order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source sales order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order) +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source sales order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update) +# Autoclassify purchase order +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal) +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order) +AutomaticCreation=Автоматическое создание +AutomaticClassification=Автоматическая классификация diff --git a/htdocs/langs/sk_SK/accountancy.lang b/htdocs/langs/sk_SK/accountancy.lang index e7127eb165b..ec2439d5d71 100644 --- a/htdocs/langs/sk_SK/accountancy.lang +++ b/htdocs/langs/sk_SK/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Účtovný účet čakania DONATION_ACCOUNTINGACCOUNT=Účtovný účet na registráciu darov diff --git a/htdocs/langs/sk_SK/admin.lang b/htdocs/langs/sk_SK/admin.lang index 45c31a47e0d..a4156dc9f84 100644 --- a/htdocs/langs/sk_SK/admin.lang +++ b/htdocs/langs/sk_SK/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Odkaz na objekt ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Knižnica používaná pre generovanie PDF LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Vytvoriť / upraviť služby Permission534=Odstrániť služby Permission536=Pozri / správa skryté služby Permission538=Export služieb -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Prečítajte si dary Permission702=Vytvoriť / upraviť dary Permission703=Odstrániť dary @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sk_SK/bills.lang b/htdocs/langs/sk_SK/bills.lang index 0a0e51aa0bb..e59e132e721 100644 --- a/htdocs/langs/sk_SK/bills.lang +++ b/htdocs/langs/sk_SK/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktúra InvoiceProFormaDesc=Proforma faktúra je obraz skutočnej faktúry, ale nemá evidencia hodnotu. InvoiceReplacement=Náhradné faktúra InvoiceReplacementAsk=Náhradné faktúra faktúry -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Dobropis InvoiceAvoirAsk=Dobropis opraviť faktúru InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sk_SK/companies.lang b/htdocs/langs/sk_SK/companies.lang index 50b6a7b65c6..30d71912379 100644 --- a/htdocs/langs/sk_SK/companies.lang +++ b/htdocs/langs/sk_SK/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Firmy CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nikto Vendor=Vendor +Supplier=Vendor AddContact=Vytvoriť kontakt AddContactAddress=Vytvoriť kontakt/adresu EditContact=Upraviť kontakt diff --git a/htdocs/langs/sk_SK/other.lang b/htdocs/langs/sk_SK/other.lang index 8a2735cfc58..1978f4eabcf 100644 --- a/htdocs/langs/sk_SK/other.lang +++ b/htdocs/langs/sk_SK/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Zásah %s bol overený. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sk_SK/website.lang b/htdocs/langs/sk_SK/website.lang index 9678b6fd948..00ccd033492 100644 --- a/htdocs/langs/sk_SK/website.lang +++ b/htdocs/langs/sk_SK/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sl_SI/accountancy.lang b/htdocs/langs/sl_SI/accountancy.lang index ad54ed949cf..9ece7db19d0 100644 --- a/htdocs/langs/sl_SI/accountancy.lang +++ b/htdocs/langs/sl_SI/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sl_SI/admin.lang b/htdocs/langs/sl_SI/admin.lang index 2991502b826..025ffcef4df 100644 --- a/htdocs/langs/sl_SI/admin.lang +++ b/htdocs/langs/sl_SI/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Poveži z objektom ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Kreiranje/spreminjanje storitev Permission534=Brisanje storitev Permission536=Pregled/upravljanje skritih storitev Permission538=Izvoz storitev -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Branje donacij Permission702=Kreiranje/spreminjanje donacij Permission703=Delete donacij @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sl_SI/bills.lang b/htdocs/langs/sl_SI/bills.lang index f818dd4b127..199397eed37 100644 --- a/htdocs/langs/sl_SI/bills.lang +++ b/htdocs/langs/sl_SI/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Predračun InvoiceProFormaDesc=Predračun izgleda enako kot račun, vendar nima računovodske vrednosti. InvoiceReplacement=Nadomestni račun InvoiceReplacementAsk=Nadomestni račun za račun -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Dobropis InvoiceAvoirAsk=Dobropis za korekcijo računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sl_SI/companies.lang b/htdocs/langs/sl_SI/companies.lang index 8d52f86f18f..ab68d02ed39 100644 --- a/htdocs/langs/sl_SI/companies.lang +++ b/htdocs/langs/sl_SI/companies.lang @@ -28,7 +28,7 @@ AliasNames=Drugo ime (komercialno, blagovna znamka, ...) AliasNameShort=Alias Name Companies=Podjetja CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Brez popusta Vendor=Vendor +Supplier=Vendor AddContact=Ustvari kntakt AddContactAddress=Ustvari naslov EditContact=Uredi osebo / naslov diff --git a/htdocs/langs/sl_SI/other.lang b/htdocs/langs/sl_SI/other.lang index e413a5da13f..aebd453a307 100644 --- a/htdocs/langs/sl_SI/other.lang +++ b/htdocs/langs/sl_SI/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Potrjena intervencija %s EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sl_SI/website.lang b/htdocs/langs/sl_SI/website.lang index 4a37a3efb93..3244952145a 100644 --- a/htdocs/langs/sl_SI/website.lang +++ b/htdocs/langs/sl_SI/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sq_AL/accountancy.lang b/htdocs/langs/sq_AL/accountancy.lang index 076a59f3bea..8e1a61cb5bd 100644 --- a/htdocs/langs/sq_AL/accountancy.lang +++ b/htdocs/langs/sq_AL/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sq_AL/admin.lang b/htdocs/langs/sq_AL/admin.lang index 1704e1b7cb0..c7a844db4d2 100644 --- a/htdocs/langs/sq_AL/admin.lang +++ b/htdocs/langs/sq_AL/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sq_AL/bills.lang b/htdocs/langs/sq_AL/bills.lang index 3000a7ae4c6..6d410dc879e 100644 --- a/htdocs/langs/sq_AL/bills.lang +++ b/htdocs/langs/sq_AL/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sq_AL/companies.lang b/htdocs/langs/sq_AL/companies.lang index 27a292f7fbb..c4d7ea97a06 100644 --- a/htdocs/langs/sq_AL/companies.lang +++ b/htdocs/langs/sq_AL/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Kompanitë CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/sq_AL/other.lang b/htdocs/langs/sq_AL/other.lang index dd2fa132429..84e2ff12857 100644 --- a/htdocs/langs/sq_AL/other.lang +++ b/htdocs/langs/sq_AL/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sq_AL/website.lang b/htdocs/langs/sq_AL/website.lang index 534756ac932..0ee00aff7c0 100644 --- a/htdocs/langs/sq_AL/website.lang +++ b/htdocs/langs/sq_AL/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sr_RS/accountancy.lang b/htdocs/langs/sr_RS/accountancy.lang index c567bb5ba78..02d455a8817 100644 --- a/htdocs/langs/sr_RS/accountancy.lang +++ b/htdocs/langs/sr_RS/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sr_RS/admin.lang b/htdocs/langs/sr_RS/admin.lang index c4d811485cb..1ac61447847 100644 --- a/htdocs/langs/sr_RS/admin.lang +++ b/htdocs/langs/sr_RS/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sr_RS/bills.lang b/htdocs/langs/sr_RS/bills.lang index 14b1c76b888..41751c9406f 100644 --- a/htdocs/langs/sr_RS/bills.lang +++ b/htdocs/langs/sr_RS/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Predračun InvoiceProFormaDesc=Predračun je neobavezujući dokument koji ima sve karakteristike računa. InvoiceReplacement=Zamenski račun InvoiceReplacementAsk=Zamenski račun za račun -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Knjižno odobrenje (kredit nota) InvoiceAvoirAsk=Knjižno odobrenje za korekciju računa InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sr_RS/companies.lang b/htdocs/langs/sr_RS/companies.lang index 91a8d7d6a6b..039365081a4 100644 --- a/htdocs/langs/sr_RS/companies.lang +++ b/htdocs/langs/sr_RS/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias (komercijalni) AliasNameShort=Alias Name Companies=Kompanije CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Nema Vendor=Vendor +Supplier=Vendor AddContact=kreiraj kontakt AddContactAddress=Kreiraj kontakt/adresuz EditContact=Izmeni kontakt diff --git a/htdocs/langs/sr_RS/other.lang b/htdocs/langs/sr_RS/other.lang index 706ad39a5be..34e997d52f1 100644 --- a/htdocs/langs/sr_RS/other.lang +++ b/htdocs/langs/sr_RS/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Intervencija %s je potvrđena. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/sv_SE/accountancy.lang b/htdocs/langs/sv_SE/accountancy.lang index 1e46c6e213c..a97e82d5dfe 100644 --- a/htdocs/langs/sv_SE/accountancy.lang +++ b/htdocs/langs/sv_SE/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Resultaträkningskonto (förlust) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Loggbok för stängning ACCOUNTING_ACCOUNT_TRANSFER_CASH=Redovisningskonto övergångsöverföring +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Redovisningskonto för väntan DONATION_ACCOUNTINGACCOUNT=Redovisningskonto för att registrera donationer diff --git a/htdocs/langs/sv_SE/admin.lang b/htdocs/langs/sv_SE/admin.lang index b967f1948a8..1118f400fe0 100644 --- a/htdocs/langs/sv_SE/admin.lang +++ b/htdocs/langs/sv_SE/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Kryssrutor från bordet ExtrafieldLink=Länk till ett objekt ComputedFormula=Beräknat fält ComputedFormulaDesc=Du kan ange här en formel med andra objektegenskaper eller någon PHP-kodning för att få ett dynamiskt beräknat värde. Du kan använda alla PHP-kompatibla formler inklusive "?" tillståndsoperatör och följande globala objekt: $ db, $ conf, $ längd, $ mysoc, $ user, $ object .
VARNING : Endast vissa egenskaper på $ -objekt kan vara tillgängliga. Om du behöver en egenskap inte laddad, hämta bara objektet i din formel som i det andra exemplet.
Med ett beräknat fält kan du inte ange något värde från gränssnittet själv. Om det också finns ett syntaxfel kan inte formeln returnera någonting.

Exempel på formel:
$ objekt-> id < 10 ? round($object-> id / 2, 2): ($ objekt-> id + 2 * $ användar-> id) * (int) substr ($ mysoc-> zip, 1, 2 )

Exempel på att ladda objektet
(($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> hämta ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj- > rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> kapital / 5: '-1'

Ett annat exempel på formel för att tvinga belastning av objekt och dess moderobjekt:
(($ reloadedobj = new Task ($ db )) && ($ reloadedobj-> hämta ($ object-> id)> 0) && ($ secondloadedobj = nytt projekt ($ db)) && ($ secondloadedobj-> hämta ($ reloadedobj-> fk_project)> 0))? $ secondloadedobj-> ref: 'Föräldraprojekt hittades inte' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Om du lämnar fältet tomt betyder det att detta värde kommer att sparas utan kryptering (fältet måste bara döljas med stjärnan på skärmen).
Ange 'auto' för att använda standardkrypteringsregeln för att spara lösenord i databasen (då är läsningsvärde endast ett hash, inget sätt att hämta originalvärdet) ExtrafieldParamHelpselect=Förteckning över värden måste vara linjer med formatnyckel, värde (där nyckel inte kan vara '0')

till exempel:
1, värde1
2, värde2
code3, värde3
...

För att få lista beroende på en annan komplementär attributlista:
1, värde1 | options_ parent_list_code : parent_key
2, value2 | options_ parent_list_code : parent_key

För att få listan beroende på en annan lista:
1, värde1 | parent_list_code : parent_key
2, värde2 | parent_list_code : parent_key ExtrafieldParamHelpcheckbox=Lista över värden måste vara rader med formatnyckel, värde (där nyckel inte kan vara '0')

till exempel:
1, värde1
2, värde2
3, värde3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=Lista över värden måste vara rader med formatnyckel, ExtrafieldParamHelpsellist=Lista över värden kommer från en tabell
Syntax: tabellnamn: label_field: id_field :: filter
Exempel: c_typent: libelle: id :: filter

- idfilter är nödvändigtvis en primär int nyckel
- filtret kan vara ett enkelt test = 1) för att visa endast aktivt värde
Du kan också använda $ ID $ i filterhäxa är det aktuella idet av nuvarande objekt
För att göra ett SELECT i filter använder du $ SEL $
om du vill filtrera på extrafält använder du syntax extra.fieldcode = ... (där fältkoden är koden för extrafältet)

För att få listan beroende på en annan komplementär attributlista:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

För att ha listan beror på en annan lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelpchkbxlst=Lista över värden kommer från en tabell
Syntax: tabellnamn: label_field: id_field :: filter
Exempel: c_typent: libelle: id :: filter

filtret kan vara ett enkelt test (t.ex. aktiv = 1) för att visa endast aktivt värde
Du kan också använda $ ID $ i filterhäxa är nuvarande ID för nuvarande objekt
För att göra ett SELECT i filter använd $ SEL $
om du vill filtrera på extrafält använder syntax extra.fieldcode = ... (där fältkoden är kod för extrafält)

För att få listan beroende på en annan komplementär attributlista:
c_typent: libelle: id: options_ parent_list_code | parent_column: filter

För att få listan beroende på en annan lista:
c_typent: libelle: id: parent_list_code | parent_column: filter ExtrafieldParamHelplink=Parametrar måste vara ObjectName: Classpath
Syntax: ObjectName: Classpath
Exempel:
Societe: societe / class / societe.class.php
Kontakt: kontakt / class / contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Bibliotek som används för PDF-generering LocalTaxDesc=Vissa länder kan ansöka om två eller tre skatter på varje faktura. Om så är fallet, välj typ för andra och tredje skatt och dess skattesats. Möjlig typ är:
1: Lokal skatt gäller för produkter och tjänster utan moms (localtax beräknas på belopp utan skatt)
2: Lokal skatt gäller för produkter och tjänster inklusive moms (lokal skatt beräknas på belopp + huvudskatt)
3: lokal skatt tillämpas på varor utan moms (lokal skatt beräknas på belopp utan skatt)
4: Lokal skatt gäller för produkter inklusive moms (lokal skatt beräknas på belopp + huvudskatt)
5: Lokal skatt gäller för tjänster utan moms (lokal skatt beräknas på belopp utan skatt)
6: Lokal skatt gäller för tjänster inklusive moms (lokal skatt beräknas på belopp + skatt) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Skapa / modifiera tjänster Permission534=Ta bort tjänster Permission536=Se / Hantera dolda tjänster Permission538=Exportera tjänster -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Läs donationer Permission702=Skapa / ändra donationer Permission703=Ta bort donationer @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sv_SE/bills.lang b/htdocs/langs/sv_SE/bills.lang index 87ba06c3f74..738c2068c9d 100644 --- a/htdocs/langs/sv_SE/bills.lang +++ b/htdocs/langs/sv_SE/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma faktura InvoiceProFormaDesc=Proforma faktura är en bild av en sann faktura men har ingen bokföring värde. InvoiceReplacement=Ersättnings faktura InvoiceReplacementAsk=Ersättnings faktura för faktura -InvoiceReplacementDesc=  Ersättningsfaktura används för att avbryta och helt ersätta en faktura utan betalning som redan tagits emot.

Obs! Endast fakturor utan betalning på den kan bytas ut. Om fakturan du byter inte är avslutad stängs den automatiskt för att "överge". +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Kreditnota InvoiceAvoirAsk=Kreditnota att korrigera fakturan InvoiceAvoirDesc= kreditnota är en negativ faktura som används för att korrigera det faktum att en faktura visar ett belopp som skiljer sig från det belopp som faktiskt betalats (t.ex. kunden betalade för mycket av misstag eller betalar inte hela beloppet eftersom vissa produkter returnerades) . diff --git a/htdocs/langs/sv_SE/companies.lang b/htdocs/langs/sv_SE/companies.lang index c4a75a1afaa..098c3c073b4 100644 --- a/htdocs/langs/sv_SE/companies.lang +++ b/htdocs/langs/sv_SE/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias namn (kommersiellt, varumärke, ...) AliasNameShort=Alias namn Companies=Företag CountryIsInEEC=Landet ligger inom Europeiska ekonomiska gemenskapen -PriceFormatInCurrentLanguage=Prisformat i nuvarande språk +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Namn på tredjepart ThirdPartyEmail=Tredjeparts e-post ThirdParty=Tredjepart @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absoluta leverantörsrabatter (angivna av alla SupplierAbsoluteDiscountMy=Absoluta leverantörsrabatter (angivna av dig själv) DiscountNone=Ingen Vendor=Säljare +Supplier=Vendor AddContact=Skapa kontakt AddContactAddress=Skapa kontakt / adress EditContact=Redigera kontakt / adress diff --git a/htdocs/langs/sv_SE/other.lang b/htdocs/langs/sv_SE/other.lang index 93d2115b9be..71012c57976 100644 --- a/htdocs/langs/sv_SE/other.lang +++ b/htdocs/langs/sv_SE/other.lang @@ -20,7 +20,7 @@ ZipFileGeneratedInto=Zip-fil genererad till %s . DocFileGeneratedInto=Doc-filen genereras till %s . JumpToLogin=Förbindelse förlorad. Gå till inloggningssidan ... MessageForm=Meddelande på onlinebetalningsformulär -MessageOK=Meddelande på retursidan för en validerad betalning +MessageOK=Meddelande på retursidan för en bekräftat betalning MessageKO=Meddelande på retursidan för en avbokad betalning ContentOfDirectoryIsNotEmpty=Innehållet i den här katalogen är inte tomt. DeleteAlsoContentRecursively=Kontrollera att allt innehåll rekursivt raderas @@ -31,13 +31,13 @@ NextYearOfInvoice=Följande år med fakturadatum DateNextInvoiceBeforeGen=Datum för nästa faktura (före generationen) DateNextInvoiceAfterGen=Datum för nästa faktura (efter generation) -Notify_ORDER_VALIDATE=Försäljningsorder validerad +Notify_ORDER_VALIDATE=Försäljningsorder bekräftat Notify_ORDER_SENTBYMAIL=Försäljningsorder skickad via post Notify_ORDER_SUPPLIER_SENTBYMAIL=Beställningsorder skickad via e-post Notify_ORDER_SUPPLIER_VALIDATE=Beställningsorder registrerad Notify_ORDER_SUPPLIER_APPROVE=Köporder godkänd Notify_ORDER_SUPPLIER_REFUSE=Inköpsorder nekades -Notify_PROPAL_VALIDATE=Kunden förslag validerade +Notify_PROPAL_VALIDATE=Kunden förslag bekräftades Notify_PROPAL_CLOSE_SIGNED=Kundförslaget är undertecknat Notify_PROPAL_CLOSE_REFUSED=Kundförslaget stängdes vägrade Notify_PROPAL_SENTBYMAIL=Kommersiell förslag skickas per post @@ -46,22 +46,22 @@ Notify_WITHDRAW_CREDIT=Credit tillbakadragande Notify_WITHDRAW_EMIT=Isue tillbakadragande Notify_COMPANY_CREATE=Tredje part som skapats Notify_COMPANY_SENTBYMAIL=Post som skickas från tredjepartskort -Notify_BILL_VALIDATE=Kundfaktura validerade +Notify_BILL_VALIDATE=Kundfaktura bekräftades Notify_BILL_UNVALIDATE=Kundfakturan Fraktpris saknas Notify_BILL_PAYED=Kundfaktura betalad Notify_BILL_CANCEL=Kundfaktura avbryts Notify_BILL_SENTBYMAIL=Kundfaktura skickas per post -Notify_BILL_SUPPLIER_VALIDATE=Leverantörsfaktura validerad +Notify_BILL_SUPPLIER_VALIDATE=Leverantörsfaktura bekräftat Notify_BILL_SUPPLIER_PAYED=Leverantörsfaktura betalad Notify_BILL_SUPPLIER_SENTBYMAIL=Leverantörsfaktura skickad via post Notify_BILL_SUPPLIER_CANCELED=Leverantörsfaktura inställd -Notify_CONTRACT_VALIDATE=Kontrakt validerade -Notify_FICHEINTER_VALIDATE=Intervention validerade +Notify_CONTRACT_VALIDATE=Kontrakt bekräftades +Notify_FICHEINTER_VALIDATE=Intervention bekräftades Notify_FICHINTER_ADD_CONTACT=Tillagd kontakt till insats Notify_FICHINTER_SENTBYMAIL=Ingripande skickas per post -Notify_SHIPPING_VALIDATE=Frakt validerade +Notify_SHIPPING_VALIDATE=Frakt bekräftades Notify_SHIPPING_SENTBYMAIL=Leverans skickas per post -Notify_MEMBER_VALIDATE=Medlem validerade +Notify_MEMBER_VALIDATE=Medlem bekräftades Notify_MEMBER_MODIFY=Medlem modifierad Notify_MEMBER_SUBSCRIPTION=Medlem tecknat Notify_MEMBER_RESILIATE=Medlem avslutad @@ -70,9 +70,9 @@ Notify_PROJECT_CREATE=Projekt skapande Notify_TASK_CREATE=Task skapade Notify_TASK_MODIFY=Task modifierad Notify_TASK_DELETE=Uppgift utgår -Notify_EXPENSE_REPORT_VALIDATE=Expense rapport validerad (godkännande krävs) +Notify_EXPENSE_REPORT_VALIDATE=Utläggsrapport bekräftat (godkännande krävs) Notify_EXPENSE_REPORT_APPROVE=Kostnadsrapport godkänd -Notify_HOLIDAY_VALIDATE=Lämna förfrågan validerad (godkännande krävs) +Notify_HOLIDAY_VALIDATE=Lämna förfrågan bekräftat (godkännande krävs) Notify_HOLIDAY_APPROVE=Lämna förfrågan godkänd SeeModuleSetup=Se inställning av modul %s NbOfAttachedFiles=Antal bifogade filer / dokument @@ -112,12 +112,12 @@ ValidatedBy=Bekräftad av %s ClosedBy=Stängt av %s CreatedById=Användarkod som skapade ModifiedById=Användar-ID som gjorde senaste ändringen -ValidatedById=Användarkod som validerats +ValidatedById=Användarkod som bekräftats CanceledById=Användar-ID som annulleras ClosedById=Användar-ID som stängd CreatedByLogin=Användarinloggning som skapade ModifiedByLogin=Användarinloggning som gjorde senaste ändringen -ValidatedByLogin=Användarinloggning som validerats +ValidatedByLogin=Användarinloggning som bekräftats CanceledByLogin=Användarinloggning som annullerats ClosedByLogin=Användarinloggning som stängde FileWasRemoved=Arkiv %s togs bort @@ -184,28 +184,30 @@ NumberOfCustomerInvoices=Antal kundfakturor NumberOfSupplierProposals=Antal leverantörsförslag NumberOfSupplierOrders=Antal inköpsorder NumberOfSupplierInvoices=Antal leverantörsfakturor +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Antal enheter på förslag NumberOfUnitsCustomerOrders=Antal enheter på försäljningsorder NumberOfUnitsCustomerInvoices=Antal enheter på kundfakturor NumberOfUnitsSupplierProposals=Antal enheter på leverantörsförslag NumberOfUnitsSupplierOrders=Antal enheter på inköpsorder NumberOfUnitsSupplierInvoices=Antal enheter på leverantörsfakturor +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Ett nytt ingripande %s har tilldelats dig. -EMailTextInterventionValidated=Interventionen %s har validerats. -EMailTextInvoiceValidated=Faktura %s har validerats. +EMailTextInterventionValidated=Interventionen %s har bekräftats. +EMailTextInvoiceValidated=Faktura %s har bekräftats. EMailTextInvoicePayed=Faktura %s har betalats. -EMailTextProposalValidated=Förslag %s har validerats. +EMailTextProposalValidated=Förslag %s har bekräftats. EMailTextProposalClosedSigned=Förslag %s har avslutats undertecknat. -EMailTextOrderValidated=Order %s har validerats. +EMailTextOrderValidated=Order %s har bekräftats. EMailTextOrderApproved=Beställningen %s har godkänts. EMailTextOrderValidatedBy=Order %s har spelats in av %s. EMailTextOrderApprovedBy=Beställningen %s har godkänts av %s. EMailTextOrderRefused=Beställningen %s har vägrats. EMailTextOrderRefusedBy=Beställningen %s har blivit nekad av %s. -EMailTextExpeditionValidated=Frakt %s har validerats. -EMailTextExpenseReportValidated=Kostnadsrapport %s har validerats. +EMailTextExpeditionValidated=Frakt %s har bekräftats. +EMailTextExpenseReportValidated=Kostnadsrapport %s har bekräftats. EMailTextExpenseReportApproved=Kostnadsrapport %s har godkänts. -EMailTextHolidayValidated=Lämna förfrågan %s har validerats. +EMailTextHolidayValidated=Lämna förfrågan %s har bekräftats. EMailTextHolidayApproved=Förfrågan %s har godkänts. ImportedWithSet=Import dataunderlaget DolibarrNotification=Automatisk anmälan @@ -246,10 +248,10 @@ YourPasswordHasBeenReset=Ditt lösenord har återställts framgångsrikt ApplicantIpAddress=Sökandens IP-adress SMSSentTo=SMS skickat till %s MissingIds=Saknande ID -ThirdPartyCreatedByEmailCollector=Third party created by email collector from email MSGID %s -ContactCreatedByEmailCollector=Contact/address created by email collector from email MSGID %s -ProjectCreatedByEmailCollector=Project created by email collector from email MSGID %s -TicketCreatedByEmailCollector=Ticket created by email collector from email MSGID %s +ThirdPartyCreatedByEmailCollector=Tredje part skapad av e-post samlare från e-post MSGID %s +ContactCreatedByEmailCollector=Kontakt / adress skapad via e-post samlare från email MSGID %s +ProjectCreatedByEmailCollector=Projekt skapat av e-post samlare från email MSGID %s +TicketCreatedByEmailCollector=Biljett skapad av e-post samlare från email MSGID %s ##### Export ##### ExportsArea=Export område @@ -268,5 +270,5 @@ WEBSITE_IMAGEDesc=Relativ sökväg i bildmediet. Du kan hålla det tomt eftersom WEBSITE_KEYWORDS=Nyckelord LinesToImport=Rader att importera -MemoryUsage=Memory usage -RequestDuration=Duration of request +MemoryUsage=Minnesanvändning +RequestDuration=Varaktighet för förfrågan diff --git a/htdocs/langs/sv_SE/website.lang b/htdocs/langs/sv_SE/website.lang index bdecce66d17..cc934e66abc 100644 --- a/htdocs/langs/sv_SE/website.lang +++ b/htdocs/langs/sv_SE/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Ingen hemsida har skapats än. Skapa en första. GoTo=Gå till DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/sw_SW/accountancy.lang b/htdocs/langs/sw_SW/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/sw_SW/accountancy.lang +++ b/htdocs/langs/sw_SW/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/sw_SW/admin.lang b/htdocs/langs/sw_SW/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/sw_SW/admin.lang +++ b/htdocs/langs/sw_SW/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/sw_SW/bills.lang b/htdocs/langs/sw_SW/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/sw_SW/bills.lang +++ b/htdocs/langs/sw_SW/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/sw_SW/companies.lang b/htdocs/langs/sw_SW/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/sw_SW/companies.lang +++ b/htdocs/langs/sw_SW/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/sw_SW/other.lang b/htdocs/langs/sw_SW/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/sw_SW/other.lang +++ b/htdocs/langs/sw_SW/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/th_TH/accountancy.lang b/htdocs/langs/th_TH/accountancy.lang index b895dec5004..32ea494ec01 100644 --- a/htdocs/langs/th_TH/accountancy.lang +++ b/htdocs/langs/th_TH/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/th_TH/admin.lang b/htdocs/langs/th_TH/admin.lang index 1dc638b8ef8..bd4dd75398a 100644 --- a/htdocs/langs/th_TH/admin.lang +++ b/htdocs/langs/th_TH/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=เชื่อมโยงไปยังวัตถุ ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=สร้าง / แก้ไขบริการ Permission534=ลบบริการ Permission536=ดู / จัดการบริการซ่อน Permission538=บริการส่งออก -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=อ่านบริจาค Permission702=สร้าง / แก้ไขการบริจาค Permission703=ลบบริจาค @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/th_TH/bills.lang b/htdocs/langs/th_TH/bills.lang index b1eaa9aec89..17b76759851 100644 --- a/htdocs/langs/th_TH/bills.lang +++ b/htdocs/langs/th_TH/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=ใบแจ้งหนี้ Proforma InvoiceProFormaDesc=ใบแจ้งหนี้ Proforma คือภาพของใบแจ้งหนี้ที่แท้จริง แต่มีค่าไม่มีบัญชี InvoiceReplacement=เปลี่ยนใบแจ้งหนี้ InvoiceReplacementAsk=ใบแจ้งหนี้แทนใบแจ้งหนี้ -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=ใบลดหนี้ InvoiceAvoirAsk=ใบลดหนี้ใบแจ้งหนี้ที่ถูกต้อง InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/th_TH/companies.lang b/htdocs/langs/th_TH/companies.lang index 9e6f8e210b1..c51b7af54ee 100644 --- a/htdocs/langs/th_TH/companies.lang +++ b/htdocs/langs/th_TH/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=บริษัท CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=ไม่ Vendor=Vendor +Supplier=Vendor AddContact=สร้างรายชื่อผู้ติดต่อ AddContactAddress=สร้างการติดต่อ / ที่อยู่ EditContact=ติดต่อแก้ไข diff --git a/htdocs/langs/th_TH/other.lang b/htdocs/langs/th_TH/other.lang index 8d6d1865935..f1c06d24a6d 100644 --- a/htdocs/langs/th_TH/other.lang +++ b/htdocs/langs/th_TH/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=การแทรกแซง% s ได้รับการตรวจสอบ EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/th_TH/website.lang b/htdocs/langs/th_TH/website.lang index 5b59ac7627d..9b9de86aa07 100644 --- a/htdocs/langs/th_TH/website.lang +++ b/htdocs/langs/th_TH/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/tr_TR/accountancy.lang b/htdocs/langs/tr_TR/accountancy.lang index 109fb69160e..abce087b09e 100644 --- a/htdocs/langs/tr_TR/accountancy.lang +++ b/htdocs/langs/tr_TR/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Muhasebe hesabının bekletilmesi DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/tr_TR/admin.lang b/htdocs/langs/tr_TR/admin.lang index 29901665231..4ec639898e0 100644 --- a/htdocs/langs/tr_TR/admin.lang +++ b/htdocs/langs/tr_TR/admin.lang @@ -105,7 +105,7 @@ AntiVirusParamExample= ClamWin için örnek: --database="C:\\Program Files (x86) ComptaSetup=Muhasebe modülü ayarları UserSetup=Kullanıcı yönetimi ayarları MultiCurrencySetup=Çoklu para birimi ayarları -MenuLimits=Sınırlar ve doğruluk +MenuLimits=Sınırlar ve Doğruluk MenuIdParent=Ana menü Kimliği DetailMenuIdParent=Ana menü Kimliği (bir üst menü için boş) DetailPosition=Menü konumunu tanımlamak için sıralamanumarası @@ -149,7 +149,7 @@ SystemToolsAreaDesc=Bu alan yönetim işlevlerini sunar. İstenilen özelliği s Purge=Temizleme PurgeAreaDesc=Bu sayfa Dolibarr tarafından oluşturulan veya depolanan tüm dosyaları silmenizi sağlar (%s dizinindeki geçici veya tüm dosyalar). Bu özelliğin kullanılması normalde gerekli değildir. Bu araç, Dolibarr yazılımı web sunucusu tarafından oluşturulan dosyaların silinmesine izin vermeyen bir sağlayıcı tarafından barındırılan kullanıcılar için geçici bir çözüm olarak sunulur. PurgeDeleteLogFile=Syslog modülü için tanımlı %s dosyası da dahil olmak üzere günlük dosyalarını sil (veri kaybetme riskiniz yoktur) -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data). Note: Deletion is done only if the temp directory was created 24 hours ago. +PurgeDeleteTemporaryFiles=Tüm geçici dosyaları sil (veri kaybetme riskiniz yoktur). Not: Geçici dizin eğer 24 saat önce oluşturulmuşsa silme işlemi tamamlanır. PurgeDeleteTemporaryFilesShort=Geçici dosyaları sil PurgeDeleteAllFilesInDocumentsDir=%s dizinindeki bütün dosyaları sil.
Bu işlem, öğelerle (üçüncü partiler, faturalar, v.s.) ilgili oluşturulan tüm dosyaları, ECM modülüne yüklenen dosyaları, veritabanı yedekleme dökümlerini ve geçici dosyaları silecektir. PurgeRunNow=Şimdi temizle @@ -160,7 +160,7 @@ PurgeAuditEvents=Tüm güvenlik etkinliklerini temizle ConfirmPurgeAuditEvents=Tüm güvenlik etkinliklerini temizlemek istediğinizden emin misiniz? Tüm güvenlik günlükleri silinecek olup, başka veriler silinmeyecektir. GenerateBackup=Yedekleme oluştur Backup=Yedekleme -Restore=Geri yükleme +Restore=Geri Yükleme RunCommandSummary=Yedekleme aşağıdaki komut ile başlatılmıştır BackupResult=Yedekleme sonucu BackupFileSuccessfullyCreated=Yedekleme dosyası başarıyla oluşturuldu @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Tablodan onay kutuları ExtrafieldLink=Bir nesneye bağlantı ComputedFormula=Hesaplanmış alan ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=PDF oluşturmada kullanılan kütüphane LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -482,7 +485,7 @@ WatermarkOnDraftExpenseReports=Taslak gider raporlarındaki filigran AttachMainDocByDefault=Ana belgeyi varsayılan olarak e-postaya eklemek istiyorsanız bunu 1 olarak ayarlayın (uygunsa) FilesAttachedToEmail=Dosya ekle SendEmailsReminders=Gündem hatırlatıcılarını e-posta ile gönder -davDescription=Setup a WebDAV server +davDescription=Bir WebDAV sunucusu kurun DAVSetup=DAV modülü kurulumu DAV_ALLOW_PRIVATE_DIR=Enable the generic private directory (WebDAV dedicated directory named "private" - login required) DAV_ALLOW_PRIVATE_DIRTooltip=The generic private directory is a WebDAV directory anybody can access with its application login/pass. @@ -592,7 +595,7 @@ Module2000Name=WYSIWYG düzenleyici Module2000Desc=CKEditor (html) kullanarak metin alanlarının düzenlenmesine/biçimlendirilmesine olanak sağlayın Module2200Name=Dinamik Fiyatlar Module2200Desc=Otomatik fiyat üretimi için matematiksel ifadeler kullanın -Module2300Name=Planlı işler +Module2300Name=Planlı İşler Module2300Desc=Scheduled jobs management (alias cron or chrono table) Module2400Name=Etkinlik/Gündem Module2400Desc=Etkinlikleri takip edin. İzleme amacıyla otomatik etkinlikleri günlüğe geçirin veya manuel etkinlikleri ya da toplantıları kaydedin. Bu, iyi bir Müşteri veya Tedarikçi İlişkileri Yönetimi için temel modüldür. @@ -819,9 +822,9 @@ Permission532=Hizmet oluştur/değiştir Permission534=Hizmet sil Permission536=Gizli hizmetleri gör/yönet Permission538=Hizmet dışaaktar -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Bağış oluştur/değiştir Permission702=Bağış sil Permission703=Bağış sil @@ -844,7 +847,7 @@ Permission1109=Teslim emri sil Permission1121=Read supplier proposals Permission1122=Create/modify supplier proposals Permission1123=Validate supplier proposals -Permission1124=Send supplier proposals +Permission1124=Tedarikçi tekliflerini gönder Permission1125=Delete supplier proposals Permission1126=Close supplier price requests Permission1181=Tedarikçi oku @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1096,8 +1099,8 @@ LogEvents=Güvenlik denetimi etkinlikleri Audit=Denetim InfoDolibarr=Dolibarr Bilgileri InfoBrowser=Tarayıcı Bilgileri -InfoOS=OS Bilgileri -InfoWebServer=Web Sunucusu Hakkında +InfoOS=İşletim Sistemi Bilgileri +InfoWebServer=Web Sunucusu Bilgileri InfoDatabase=Veritabanı Bilgileri InfoPHP=PHP Bilgileri InfoPerf=Performans Bilgileri @@ -1238,7 +1241,7 @@ SetupPerso=Yapılandırmanıza göre PasswordPatternDesc=Parola modeli açıklaması ##### Users setup ##### RuleForGeneratedPasswords=Parola oluşturma ve doğrulama kuralları -DisableForgetPasswordLinkOnLogonPage=Oturum açma sayfasında “Parola mı unutuldu?” bağlantısını gösterme +DisableForgetPasswordLinkOnLogonPage=Oturum açma sayfasında “Parolanızı mı unuttunuz?” bağlantısını gösterme UsersSetup=Kullanıcılar modülü kurulumu UserMailRequired=Yeni bir kullanıcı oluşturmak için e-posta gerekli ##### HRM setup ##### @@ -1924,4 +1927,4 @@ UrlForIFTTT=IFTTT için URL bitiş noktası YouWillFindItOnYourIFTTTAccount=Onu IFTTT hesabınızda bulacaksınız EndPointFor=%s için bitiş noktası: %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/tr_TR/agenda.lang b/htdocs/langs/tr_TR/agenda.lang index b6741221ac2..698842f32e7 100644 --- a/htdocs/langs/tr_TR/agenda.lang +++ b/htdocs/langs/tr_TR/agenda.lang @@ -129,7 +129,7 @@ AddEvent=Etkinlik oluştur MyAvailability=Uygunluğum ActionType=Etkinlik türü DateActionBegin=Etkinlik başlangıç tarihi -ConfirmCloneEvent=%s etkinliğini çoğaltmak istediğinizden emin misiniz? +ConfirmCloneEvent=%s etkinliğinin kopyasını oluşturmak istediğinizden emin misiniz? RepeatEvent=Etkinliği tekrarla EveryWeek=Her hafta EveryMonth=Her ay diff --git a/htdocs/langs/tr_TR/assets.lang b/htdocs/langs/tr_TR/assets.lang index c27d995824a..4c5f9631093 100644 --- a/htdocs/langs/tr_TR/assets.lang +++ b/htdocs/langs/tr_TR/assets.lang @@ -22,13 +22,13 @@ AccountancyCodeAsset = Muhasebe kodu (varlık) AccountancyCodeDepreciationAsset = Muhasebe kodu (amortisman varlık hesabı) AccountancyCodeDepreciationExpense = Muhasebe kodu (amortisman gideri hesabı) NewAssetType=Yeni varlık türü -AssetsTypeSetup=Asset type setup -AssetTypeModified=Asset type modified +AssetsTypeSetup=Varlık türü ayarları +AssetTypeModified=Varlık türü değiştirildi AssetType=Varlık türü AssetsLines=Varlıklar DeleteType=Sil -DeleteAnAssetType=Delete an asset type -ConfirmDeleteAssetType=Are you sure you want to delete this asset type? +DeleteAnAssetType=Bir varlık türü sil +ConfirmDeleteAssetType=Bu varlık türünü silmek istediğinizden emin misiniz? ShowTypeCard='%s' türünü göster # Module label 'ModuleAssetsName' @@ -42,7 +42,7 @@ ModuleAssetsDesc = Varlık açıklaması AssetsSetup = Varlık kurulumu Settings = Ayarlar AssetsSetupPage = Varlık kurulum sayfası -ExtraFieldsAssetsType = Complementary attributes (Asset type) +ExtraFieldsAssetsType = Tamamlayıcı öznitelikler (Varlık türü) AssetsType=Varlık türü AssetsTypeId=Varlık türü ID'si AssetsTypeLabel=Varlık türü etiketi @@ -53,7 +53,7 @@ AssetsTypes=Varlık türleri # MenuAssets = Varlıklar MenuNewAsset = Yeni varlık -MenuTypeAssets = Yeni varlıklar +MenuTypeAssets = Varlık türleri MenuListAssets = Liste MenuNewTypeAssets = Yeni MenuListTypeAssets = Liste diff --git a/htdocs/langs/tr_TR/banks.lang b/htdocs/langs/tr_TR/banks.lang index e3bbbb68146..b2bebf41130 100644 --- a/htdocs/langs/tr_TR/banks.lang +++ b/htdocs/langs/tr_TR/banks.lang @@ -9,13 +9,13 @@ BankAccount=Banka hesabı BankAccounts=Banka hesapları BankAccountsAndGateways=Banka hesapları | Ağ geçitleri ShowAccount=Hesabı Göster -AccountRef=Ticari hesap ref -AccountLabel=Ticari hesap adı +AccountRef=Ticari hesap referansı +AccountLabel=Ticari hesap etiketi CashAccount=Kasa hesabı CashAccounts=Kasa hesapları CurrentAccounts=Cari hesaplar SavingAccounts=Mevduat hesapları -ErrorBankLabelAlreadyExists=Ticari hesap adı zaten var +ErrorBankLabelAlreadyExists=Ticari hesap etiketi zaten var BankBalance=Bakiye BankBalanceBefore=Önceki bakiye BankBalanceAfter=Sonraki bakiye @@ -26,8 +26,8 @@ EndBankBalance=Kapanış bakiyesi CurrentBalance=Güncel bakiye FutureBalance=Gelecek bakiye ShowAllTimeBalance=Bakiyeyi başlangıçtan göster -AllTime=Başlangıç -Reconciliation=Uzlaşma +AllTime=Başlangıçtan +Reconciliation=Uzlaştırma RIB=Banka Hesap Numarası IBAN=IBAN numarası BIC=BIC/SWIFT kodu @@ -37,22 +37,22 @@ IbanValid=BAN geçerli IbanNotValid=BAN geçerli değil StandingOrders=Otomatik Ödeme talimatları StandingOrder=Otomatik ödeme talimatı -AccountStatement=Hesap özeti -AccountStatementShort=Özet -AccountStatements=Hesap özetleri -LastAccountStatements=Son hesap özetleri +AccountStatement=Hesap ekstresi +AccountStatementShort=Ekstre +AccountStatements=Hesap ekstresi +LastAccountStatements=Son hesap ekstreleri IOMonthlyReporting=Aylık raporlama BankAccountDomiciliation=Banka adresi BankAccountCountry=Hesap ülkesi BankAccountOwner=Hesap sahibi adı BankAccountOwnerAddress=Hesap sahibi adresi -RIBControlError=Integrity check of values failed. This means the information for this account number is not complete or is incorrect (check country, numbers and IBAN). +RIBControlError=Değerlerin bütünlük kontrolü başarısız oldu. Bu da, bu hesap numarası bilgilerinin tamamlanmamış veya yanlış olduğu anlamına gelir (ülkeyi, numaraları ve IBAN'ı kontrol edin). CreateAccount=Hesap oluştur NewBankAccount=Yeni hesap NewFinancialAccount=Yeni ticari hesap MenuNewFinancialAccount=Yeni ticari hesap EditFinancialAccount=Hesap düzenle -LabelBankCashAccount=Banka veya kasa adı +LabelBankCashAccount=Banka veya kasa etiketi AccountType=Hesap türü BankType0=Mevduat hesabı BankType1=Vadesiz banka ya da kredi kartı hesabı @@ -65,36 +65,36 @@ Account=Hesap BankTransactionByCategories=Kategorilere göre banka kayıtları BankTransactionForCategory=%s kategorisi için banka kayıtları RemoveFromRubrique=Kategori bağlantısını kaldır -RemoveFromRubriqueConfirm=Giriş ve kategori arasındaki bağlantıyı kaldırmak istediğinizden emin misiniz? +RemoveFromRubriqueConfirm=Kayıt ve kategori arasındaki bağlantıyı kaldırmak istediğinizden emin misiniz? ListBankTransactions=Banka kayıtlarının listesi IdTransaction=İşlem Kimliği BankTransactions=Banka kayıtları -BankTransaction=Banka girişi +BankTransaction=Banka kaydı ListTransactions=Kayıtları listele ListTransactionsByCategory=Kayıtları/Kategorileri listele -TransactionsToConciliate=Uzlaştırılacak girişler +TransactionsToConciliate=Uzlaştırılacak kayıtlar Conciliable=Uzlaştırılabilir Conciliate=Uzlaştır -Conciliation=Uzlaşma -SaveStatementOnly=Yalnızca bildirimi kaydet +Conciliation=Uzlaştırma +SaveStatementOnly=Yalnızca ekstreyi kaydet ReconciliationLate=Uzlaştırma gecikmiş -IncludeClosedAccount=Kapalı hesapları içer +IncludeClosedAccount=Kapalı hesapları dahil et OnlyOpenedAccount=Yalnızca açık hesaplar AccountToCredit=Alacak hesabı AccountToDebit=Borç hesabı -DisableConciliation=Bu hesap için uzlaşma özelliğini engelle -ConciliationDisabled=Uzlaşma özelliği engelli -LinkedToAConciliatedTransaction=Uzlaştırılmış bir girişe bağlı +DisableConciliation=Bu hesap için uzlaşma özelliğini devre dışı bırak +ConciliationDisabled=Uzlaşma özelliği devre dışı +LinkedToAConciliatedTransaction=Uzlaştırılmış bir kayda bağlı StatusAccountOpened=Açık StatusAccountClosed=Kapalı -AccountIdShort=Numarası +AccountIdShort=Numara LineRecord=İşlem -AddBankRecord=Giriş ekle -AddBankRecordLong=El ile giriş ekle +AddBankRecord=Kayıt ekle +AddBankRecordLong=Kaydı manuel olarak ekle Conciliated=Uzlaştırıldı ConciliatedBy=Uzlaştıran DateConciliating=Uzlaştırma tarihi -BankLineConciliated=Giriş uzlaştırıldı +BankLineConciliated=Kayıt uzlaştırıldı Reconciled=Uzlaştırıldı NotReconciled=Uzlaştırılmadı CustomerInvoicePayment=Müşteri ödemesi @@ -104,8 +104,8 @@ WithdrawalPayment=Borç ödeme talimatı SocialContributionPayment=Sosyal/mali vergi ödemesi BankTransfer=Banka havalesi BankTransfers=Banka havaleleri -MenuBankInternalTransfer=İç aktarım -TransferDesc=Transfer from one account to another, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction) +MenuBankInternalTransfer=İç transfer +TransferDesc=Bir hesaptan başka bir hesaba transfer sırasında Dolibarr iki kayıt yazacaktır (kaynak hesaba borç ve hedef hesaba kredi). Bu işlem için aynı tutar (işaret hariç), etiket ve tarih kullanılacaktır. TransferFrom=Kimden TransferTo=Kime TransferFromToDone=%s den %s nin %s %s ne bir transfer kaydedildi. @@ -118,9 +118,9 @@ BankChecks=Banka çekleri BankChecksToReceipt=Ödeme için bekleyen çekler ShowCheckReceipt=Çek tahsilat makbuzunu göster NumberOfCheques=Çek sayısı -DeleteTransaction=Girişi sil -ConfirmDeleteTransaction=Bu girişi silmek istediğinizden emin misiniz? -ThisWillAlsoDeleteBankRecord=Bu, oluşturulan banka girişini de silecektir +DeleteTransaction=Kaydı sil +ConfirmDeleteTransaction=Bu kaydı silmek istediğinizden emin misiniz? +ThisWillAlsoDeleteBankRecord=Bu, oluşturulan banka kaydını da silecektir BankMovements=Hareketler PlannedTransactions=Planlanmış girişler Graph=Grafikler @@ -132,16 +132,16 @@ PaymentNumberUpdateFailed=Ödeme numarası güncellenemedi PaymentDateUpdateSucceeded=Ödeme tarihi güncellemesi başarılı PaymentDateUpdateFailed=Ödeme tarihi güncellenemedi Transactions=İşlemler -BankTransactionLine=Banka girişi +BankTransactionLine=Banka kaydı AllAccounts=Tüm banka ve kasa hesapları BackToAccount=Hesaba geri dön ShowAllAccounts=Tüm hesaplar için göster -FutureTransaction=Future transaction. Unable to reconcile. +FutureTransaction=Gelecekteki işlem. Uzlaştırılamıyor. SelectChequeTransactionAndGenerate=Çek mevduat makbuzuna dahil etmek için çekleri seç/filtrele ve "Oluştur" butonuna tıkla. -InputReceiptNumber=Uzlaştırma ile ilişkili banka hesap özetini seç. Sıralanabilir bir sayısal değer kullan: YYYYMM ya da YYYYMMDD +InputReceiptNumber=Uzlaştırma ile ilişkili banka ekstresini seç. Sıralanabilir bir sayısal değer kullan: YYYYMM ya da YYYYMMDD EventualyAddCategory=Sonunda, kayıtları sınıflandırmak için bir kategori belirtin ToConciliate=Uzlaştırılsın mı? -ThenCheckLinesAndConciliate=Sonra, banka hesap özetindeki kalemleri işaretleyin ve tıklayın +ThenCheckLinesAndConciliate=Sonra, banka hesap özetindeki satırları işaretleyin ve tıklayın DefaultRIB=Varsayılan BAN AllRIB=Tüm BAN LabelRIB=BAN Etiketi @@ -152,18 +152,18 @@ RejectCheck=Çek döndü ConfirmRejectCheck=Bu çeki reddedildi olarak işaretlemek istediğinizden emin misiniz? RejectCheckDate=Dönen çekin tarihi CheckRejected=Çek döndü -CheckRejectedAndInvoicesReopened=Çek döndü ve fatura yeniden açık yapıldı +CheckRejectedAndInvoicesReopened=Çek döndü ve faturalar yeniden açıldı BankAccountModelModule=Banka hesapları için belge şablonları -DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries in EEC only. +DocumentModelSepaMandate=SEPA yetkisi şablonu. Sadece EEC’deki Avrupa ülkeleri için kullanışlıdır. DocumentModelBan=BAN bilgisini içeren bir sayfayı yazdırmak için şablon -NewVariousPayment=New miscellaneous payment -VariousPayment=Miscellaneous payment +NewVariousPayment=Yeni çeşitli ödeme +VariousPayment=Çeşitli ödeme VariousPayments=Çeşitli ödemeler -ShowVariousPayment=Show miscellaneous payment +ShowVariousPayment=Çeşitli ödemeyi göster AddVariousPayment=Çeşitli ödeme ekle -SEPAMandate=SEPA mandate -YourSEPAMandate=Your SEPA mandate -FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to -AutoReportLastAccountStatement=Automatically fill the field 'number of bank statement' with last statement number when making reconciliation +SEPAMandate=SEPA yetkisi +YourSEPAMandate=SEPA yetkiniz +FindYourSEPAMandate=Bu, şirketimizin bankanıza otomatik ödeme talimatı verebilme yetkisi için SEPA yetkinizdir. İmzalayarak iade edin (imzalı belgeyi tarayarak) veya e-mail ile gönderin +AutoReportLastAccountStatement=Uzlaşma yaparken 'banka hesap özeti numarasını' en son hesap özeti numarası ile otomatik olarak doldur CashControl=POS cash fence NewCashFence=New cash fence diff --git a/htdocs/langs/tr_TR/bills.lang b/htdocs/langs/tr_TR/bills.lang index c7ea5eba0b8..53d372c93fd 100644 --- a/htdocs/langs/tr_TR/bills.lang +++ b/htdocs/langs/tr_TR/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma fatura InvoiceProFormaDesc=Proforma fatura gerçek faturanın bir görüntüsüdür ancak muhasebe değeri yoktur. InvoiceReplacement=Fatura değiştirme InvoiceReplacementAsk=Fatura değiştirme yapılacak fatura -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=İade faturası InvoiceAvoirAsk=Fatura düzeltmek için iade faturası InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). @@ -323,7 +323,7 @@ PaymentNumber=Ödeme numarası RemoveDiscount=İndirimi kaldır WatermarkOnDraftBill=Taslak faturaların üzerinde filigran (eğer boşsa hiçbirşey yok) InvoiceNotChecked=Seçilen yok fatura -ConfirmCloneInvoice=%s faturasını kopyalamak istediğinizden emin misiniz? +ConfirmCloneInvoice=%s faturasının kopyasını oluşturmak istediğinizden emin misiniz? DisabledBecauseReplacedInvoice=Eylem engellendi, çünkü fatura değiştirilmiştir DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only records with payments during the fixed year are included here. NbOfPayments=Ödeme sayısı diff --git a/htdocs/langs/tr_TR/categories.lang b/htdocs/langs/tr_TR/categories.lang index f2b04bf28ab..9b784c6cb1e 100644 --- a/htdocs/langs/tr_TR/categories.lang +++ b/htdocs/langs/tr_TR/categories.lang @@ -16,7 +16,7 @@ MembersCategoriesArea=Üyeler etiketleri/kategorileri alanı ContactsCategoriesArea=Kişi etiketleri/kategorileri alanı AccountsCategoriesArea=Hesap etiketleri/kategorileri alanı ProjectsCategoriesArea=Proje etiket/kategori alanı -UsersCategoriesArea=Kullanıcı etiketleri/kategorileri alanı +UsersCategoriesArea=Kullanıcı Etiketleri/Kategorileri Alanı SubCats=Alt kategoriler CatList= Etiketler/kategoriler listesi NewCategory=Yeni etiket/kategori diff --git a/htdocs/langs/tr_TR/companies.lang b/htdocs/langs/tr_TR/companies.lang index 52b78fbb0c1..d86609361ce 100644 --- a/htdocs/langs/tr_TR/companies.lang +++ b/htdocs/langs/tr_TR/companies.lang @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Mutlak satıcı indirimleri (tüm kullanıcıla SupplierAbsoluteDiscountMy=Mutlak satıcı indirimleri (tarafınızdan girilen) DiscountNone=Hiçbiri Vendor=Tedarikçi +Supplier=Tedarikçi AddContact=Kişi oluştur AddContactAddress=Kişi/adres oluştur EditContact=Kişi düzenle diff --git a/htdocs/langs/tr_TR/compta.lang b/htdocs/langs/tr_TR/compta.lang index 43d301f2742..b25063d0875 100644 --- a/htdocs/langs/tr_TR/compta.lang +++ b/htdocs/langs/tr_TR/compta.lang @@ -230,8 +230,8 @@ ACCOUNTING_ACCOUNT_CUSTOMER=Müşteri üçüncü partileri için kullanılan muh ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party 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 customer accounting account on third party is not defined. ACCOUNTING_ACCOUNT_SUPPLIER=Tedarikçi üçüncü partileri için kullanılan muhasebe hesabı ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party 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 vendor accounting account on third party is not defined. -ConfirmCloneTax=Confirm the clone of a social/fiscal tax -CloneTaxForNextMonth=Sonraki aya kopyala +ConfirmCloneTax=Sosyal/mali vergi kopyasının oluşturulmasını onayla +CloneTaxForNextMonth=Sonraki ay için kopyasını oluştur SimpleReport=Basit rapor AddExtraReport=Extra reports (add foreign and national customer report) OtherCountriesCustomersReport=Yabancı müşteri raporu diff --git a/htdocs/langs/tr_TR/contracts.lang b/htdocs/langs/tr_TR/contracts.lang index 7e77ee65d6d..89a94bed22c 100644 --- a/htdocs/langs/tr_TR/contracts.lang +++ b/htdocs/langs/tr_TR/contracts.lang @@ -85,8 +85,8 @@ ListOfServicesToExpire=Süresi dolacak Hizmetler Listesi NoteListOfYourExpiredServices=Bu listede yalnızca satış temsilcisi olarak atandığınız üçüncü partilere ait hizmet sözleşmeleri bulunur. StandardContractsTemplate=Standart sözleşme kalıbı ContactNameAndSignature=%s için, ad ve imza -OnlyLinesWithTypeServiceAreUsed=Yalnızca "Hizmet" türündeki satırlar klonlanacaktır. -ConfirmCloneContract=%s sözleşmesini kopyalamak istediğinizden emin misiniz? +OnlyLinesWithTypeServiceAreUsed=Yalnızca "Hizmet" türündeki satırların kopyası oluşturulacaktır. +ConfirmCloneContract=%s sözleşmesinin kopyasını oluşturmak istediğinizden emin misiniz? LowerDateEndPlannedShort=Aktif hizmetlerin planlı alt bitiş tarihi SendContractRef=Sözleşme bilgileri __REF__ OtherContracts=Diğer sözleşmeler diff --git a/htdocs/langs/tr_TR/cron.lang b/htdocs/langs/tr_TR/cron.lang index edb5df20f91..34939dd94f3 100644 --- a/htdocs/langs/tr_TR/cron.lang +++ b/htdocs/langs/tr_TR/cron.lang @@ -22,10 +22,10 @@ EnabledAndDisabled=Etkin ve engelli CronLastOutput=En son çalıştırma çıktısı CronLastResult=En son sonuç kodu CronCommand=Komut -CronList=Planlı işler +CronList=Planlı İşler CronDelete=Planlı işleri sil CronConfirmDelete=Bu zamanlanmış işleri silmek istediğinizden emin misiniz? -CronExecute=Planlı işleri yükle +CronExecute=Planlı işi başlat CronConfirmExecute=Bu zamanlanmış işleri şimdi yürütmek istediğinizden emin misiniz? CronInfo=Zamanlanmış iş modülü, işlerin otomatik olarak yürütülmesi için planlanmasına izin verir. İşler manuel olarak da başlatılabilir. CronTask=İş @@ -76,7 +76,7 @@ CronType_method=Call method of a PHP Class CronType_command=Kabuk komutu CronCannotLoadClass=Cannot load class file %s (to use class %s) CronCannotLoadObject=Class file %s was loaded, but object %s was not found into it -UseMenuModuleToolsToAddCronJobs=Planlı işleri görmek ve düzenlemek için "Giriş - Yönetici Ayarları - Planlı işler" menüsüne git. +UseMenuModuleToolsToAddCronJobs=Planlı işleri görmek ve düzenlemek için "Giriş - Yönetici Araçları - Planlı İşler" menüsüne git. JobDisabled=İş engellendi MakeLocalDatabaseDumpShort=Yerel veritabanı yedeklemesi MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep diff --git a/htdocs/langs/tr_TR/errors.lang b/htdocs/langs/tr_TR/errors.lang index 37125f78940..714b9d6c9ac 100644 --- a/htdocs/langs/tr_TR/errors.lang +++ b/htdocs/langs/tr_TR/errors.lang @@ -228,8 +228,8 @@ WarningPassIsEmpty=Uyarı, veritabanı parolası boş. Bu bir güvenlik açığ WarningConfFileMustBeReadOnly=Uyarı, web sunucusu tarafından yapılandırma dosyanızın (htdocs/conf/conf.php) üzerine üzerine yazılabilir.Bu ciddi bir güvenlik açığıdır. Web sunucusun kullandığı sistem kullanıcısının çalışması için dosyadaki izinleri sadece okumaya değiştirin. Windows ve disk için FAT biçimini kullanıyorsanız, bu dosya sisteminin dosya izinleri eklemek izin vermediğini bilmelisiniz, bu nedenle tamamen güvenli olamaz. WarningsOnXLines=%s kaynak satırlarındaki uyarılar WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup. -WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable the installation/migration tools by adding a file install.lock into directory %s. Omitting the creation of this file is a grave security risk. -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup). +WarningLockFileDoesNotExists=Uyarı: Kurulum tamamlandıktan sonra install.lock dosyasını %s dizinine ekleyerek yükleme/taşıma araçlarını devre dışı bırakmanız gerekir. Bu dosyanın oluşturulmasını ihmal etmek büyük bir güvenlik riskidir. +WarningUntilDirRemoved=Güvenlik açığı bulunduğu sürece tüm güvenlik uyarıları (sadece yönetici olan kullanıcılar tarafından görülür) aktif olarak kalacaktır (Ayarlar->Diğer Ayarlar bölümüne MAIN_REMOVE_INSTALL_WARNING sabitini ekleyerek uyarıları engelleyebilirsiniz). WarningCloseAlways=Uyarı, kaynak ve hedef öğeleri arasında tutar farklı da olsa kapanış yapılır. Bu özelliği dikkatlice etkinleştirin. WarningUsingThisBoxSlowDown=Uyarı, bu kutuyu kullanmak kutuyu gösteren tüm sayfaları ciddi olarak yavaşlatır. WarningClickToDialUserSetupNotComplete=Kullanıcınızın ClickToDial bilgileri ayarı tamamlanmamış (kullanıcı kartınızdaki ClickToDial tabına bakın) diff --git a/htdocs/langs/tr_TR/install.lang b/htdocs/langs/tr_TR/install.lang index 72d3d7dce74..e8c02440978 100644 --- a/htdocs/langs/tr_TR/install.lang +++ b/htdocs/langs/tr_TR/install.lang @@ -11,7 +11,7 @@ ConfFileReload=Yapılandırma dosyasındaki parametreleri yeniden yükleme. PHPSupportSessions=Bu PHP oturumları destekliyor. PHPSupportPOSTGETOk=Bu PHP GÖNDER ve AL değişkenlerini destekliyor. PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter variables_order in php.ini. -PHPSupportGD=This PHP supports GD graphical functions. +PHPSupportGD=Bu PHP, GD grafiksel işlevleri destekliyor. PHPSupportCurl=Bu PHP, Curl'u destekliyor. PHPSupportUTF8=Bu PHP, UTF8 işlevlerini destekliyor. PHPSupportIntl=Bu PHP, Intl fonksiyonlarını destekliyor. diff --git a/htdocs/langs/tr_TR/interventions.lang b/htdocs/langs/tr_TR/interventions.lang index f725f6553f2..0a7ffb30836 100644 --- a/htdocs/langs/tr_TR/interventions.lang +++ b/htdocs/langs/tr_TR/interventions.lang @@ -19,7 +19,7 @@ ConfirmDeleteIntervention=Bu müdahaleyi silmek istediğinizden emin misiniz? ConfirmValidateIntervention=Bu müdahaleyi %s adıyla doğrulamak istediğinizden emin misiniz? ConfirmModifyIntervention=Bu müdahaleyi değiştirmek istediğinizden emin misiniz? ConfirmDeleteInterventionLine=Bu müdahale satırını silmek istediğinizden emin misiniz? -ConfirmCloneIntervention=Bu müdahaleyi kopyalamak istediğinizden emin misiniz? +ConfirmCloneIntervention=Bu müdahalenin kopyasını oluşturmak istediğinizden emin misiniz? NameAndSignatureOfInternalContact=Müdahalenin adı ve imzası: NameAndSignatureOfExternalContact=Müşterinin adı ve imzası: DocumentModelStandard=Müdahaleler için standart belge modeli diff --git a/htdocs/langs/tr_TR/mails.lang b/htdocs/langs/tr_TR/mails.lang index dbdba7c025d..4ae97915eae 100644 --- a/htdocs/langs/tr_TR/mails.lang +++ b/htdocs/langs/tr_TR/mails.lang @@ -60,9 +60,9 @@ EMailTestSubstitutionReplacedByGenericValues=Test modunu kullanırken, yedek de MailingAddFile=Bu dosyayı ekle NoAttachedFiles=Ekli dosya yok BadEMail=E-posta için hatalı değer -ConfirmCloneEMailing=Bu e-postayı kopyalamak istediğinizden emin misiniz? -CloneContent=Mesajı klonla -CloneReceivers=Alıcıları klonla +ConfirmCloneEMailing=Bu e-postanın kopyasını oluşturmak istediğinizden emin misiniz? +CloneContent=Mesajın kopyasını oluştur +CloneReceivers=Alıcıların kopyasını oluştur DateLastSend=Son gönderim tarihi DateSending=Gönderme tarihi SentTo=%s ye gönderilen @@ -105,10 +105,10 @@ MailNoChangePossible=Doğrulanmış e-postaların alıcıları değiştirilemez SearchAMailing=Eposta ara SendMailing=E-posta gönder SentBy=Gönderen -MailingNeedCommand=Sending an emailing can be performed from command line. Ask your server administrator to launch the following command to send the emailing to all recipients: +MailingNeedCommand=Bir e-posta gönderimi komut satırından gerçekleştirilebilir. E-postayı tüm alıcılara göndermek için sunucu yöneticinizden aşağıdaki komutu başlatmasını isteyin: MailingNeedCommand2=Bunula birlikte, oturum tarafından gönderilecek ençok e-posta sayılı MAILING_LIMIT_SENDBYWEB parametresini ekleyerek çevrim içi olarak gönderebilirsiniz. Bunu için Giriş-Kurulum-Diğer menüsüne gidin. ConfirmSendingEmailing=Direkt olarak bu ekrandan e-posta göndermek istiyorsanız, lütfen e-postayı tarayıcınızdan şimdi göndermek istediğinizden emin olduğunuzu onaylayın. -LimitSendingEmailing=Not: Web arayüzünden e-posta gönderimi güvenlik ve süre aşımı yüzünden birçok kez yapılmıştır, her gönderme oturumu başına %s alıcıya +LimitSendingEmailing=Not: Web arayüzünden e-posta gönderimi, güvenlik ve süre aşımı nedenlerinden dolayı birkaç defada gerçekleştirilir, her gönderim girişiminde tek seferde %s alıcıya gönderim yapılır. TargetsReset=Listeyi temizle ToClearAllRecipientsClickHere=Bu e-posta alıcı listesini temizlemek için burayı tıkla ToAddRecipientsChooseHere=Listeden seçerek alıcıları ekle diff --git a/htdocs/langs/tr_TR/main.lang b/htdocs/langs/tr_TR/main.lang index 115ca6ceeb0..4edc9cbc7a4 100644 --- a/htdocs/langs/tr_TR/main.lang +++ b/htdocs/langs/tr_TR/main.lang @@ -92,7 +92,7 @@ NotDefined=Tanımlanmamış DolibarrInHttpAuthenticationSoPasswordUseless=conf.php yapılandırma dosyasındaki Dolibarr kimlik doğrulama modu %s olarak ayarlanmış.
Bu demektir ki; veritabanı parolası Dolibarr dışıdır, yani bu alanı değiştirmek hiçbir etki yaratmaz. Administrator=Yönetici Undefined=Tanımlanmamış -PasswordForgotten=Parola mı unutuldu? +PasswordForgotten=Parolanızı mı unuttunuz? NoAccount=Hesap yok mu? SeeAbove=Yukarı bak HomeArea=Giriş @@ -169,9 +169,9 @@ NotValidated=Doğrulanmadı Save=Kaydet SaveAs=Farklı kaydet TestConnection=Deneme bağlantısı -ToClone=Klonla -ConfirmClone=Çoğaltmak istediğiniz verileri seçin: -NoCloneOptionsSpecified=Klonlanacak hiçbir veri tanımlanmamış. +ToClone=Kopyasını oluştur +ConfirmClone=Kopyasını oluşturmak istediğiniz verileri seçin: +NoCloneOptionsSpecified=Kopyası oluşturulacak hiçbir veri tanımlanmamış. Of=ile ilgili Go=Git Run=Yürüt @@ -333,7 +333,7 @@ Copy=Kopyala Paste=Yapıştır Default=Varsayılan DefaultValue=Varsayılan değer -DefaultValues=Varsayılan değerler/filtreler/sıralama +DefaultValues=Varsayılan Değerler/Filtreler/Sıralama Price=Fiyat PriceCurrency=Fiyat (para birimi) UnitPrice=Birim fiyat @@ -648,7 +648,7 @@ AlreadyRead=Zaten okundu NotRead=Okunmayan NoMobilePhone=Cep telefonu yok Owner=Sahibi -FollowingConstantsWillBeSubstituted=Aşağıdaki değişmezler uygun değerlerin yerine konacaktır. +FollowingConstantsWillBeSubstituted=Aşağıdaki değişmezler uygun değerlerin yerine konacaktır Refresh=Yenile BackToList=Listeye dön GoBack=Geri dön @@ -710,7 +710,7 @@ AddNewLine=Yeni satır ekle AddFile=Dosya ekle FreeZone=Önceden tanımlanmış bir ürün/hizmet değil FreeLineOfType=Serbest metin öğesi, tür: -CloneMainAttributes=Nesneyi ana öznitelikleri ile klonla +CloneMainAttributes=Ana öznitelikleri ile birlikte nesnenin kopyasını oluştur. ReGeneratePDF=PDF'yi yeniden oluştur PDFMerge=PDF Birleştir Merge=Birleştir @@ -875,7 +875,7 @@ TitleSetToDraft=Taslağa geri dön ConfirmSetToDraft=Taslak durumuna geri dönmek istediğinizden emin misiniz? ImportId=İçe aktarma ID'si Events=Etkinlikler -EMailTemplates=E-posta şablonları +EMailTemplates=E-posta Şablonları FileNotShared=File not shared to external public Project=Proje Projects=Projeler diff --git a/htdocs/langs/tr_TR/orders.lang b/htdocs/langs/tr_TR/orders.lang index dbe2d77cbf0..eb87dc59bf9 100644 --- a/htdocs/langs/tr_TR/orders.lang +++ b/htdocs/langs/tr_TR/orders.lang @@ -110,7 +110,7 @@ OrderMode=Sipariş yöntemi AuthorRequest=Siparişi yazan UserWithApproveOrderGrant=Kullanıcılara "sipariş onaylama" izin hakkı verilmiştir.. PaymentOrderRef=Sipariş %s ödemesi -ConfirmCloneOrder=Bu siparişi kopyalamak istediğinizden emin misiniz %s? +ConfirmCloneOrder=%s siparişinin kopyasını oluşturmak istediğinizden emin misiniz? DispatchSupplierOrder=Receiving purchase order %s FirstApprovalAlreadyDone=İlk onay zaten yapılmış SecondApprovalAlreadyDone=İkinci onaylama zaten yapılmış diff --git a/htdocs/langs/tr_TR/other.lang b/htdocs/langs/tr_TR/other.lang index 89e49e2cdfe..913cef5ab06 100644 --- a/htdocs/langs/tr_TR/other.lang +++ b/htdocs/langs/tr_TR/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Müşteri faturalarının sayısı NumberOfSupplierProposals=Tedarikçi tekliflerinin sayısı NumberOfSupplierOrders=Tedarikçi siparişi sayısı NumberOfSupplierInvoices=Tedarikçi siparişlerinin sayısı +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Tekliflerdeki birim sayısı NumberOfUnitsCustomerOrders=Müşteri siparişlerindeki birim sayısı NumberOfUnitsCustomerInvoices=Müşteri faturalarındaki birim sayısı NumberOfUnitsSupplierProposals=Tedarikçi tekliflerinde yer alan birim sayısı NumberOfUnitsSupplierOrders=Tedarikçi siparişlerindeki birim sayısı NumberOfUnitsSupplierInvoices=Tedarikçi faturalarındaki birim sayısı +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=Yeni bir müdahale %s size atandı. EMailTextInterventionValidated=Müdahele %s doğrulanmıştır. EMailTextInvoiceValidated=Fatura %s doğrulandı. diff --git a/htdocs/langs/tr_TR/products.lang b/htdocs/langs/tr_TR/products.lang index 5266a52fe58..46b15d67da5 100644 --- a/htdocs/langs/tr_TR/products.lang +++ b/htdocs/langs/tr_TR/products.lang @@ -77,7 +77,7 @@ CantBeLessThanMinPrice=Satış fiyatı bu ürün için izin verilen en düşük ContractStatusClosed=Kapalı ErrorProductAlreadyExists=%s Referanslı bir ürün zaten var var. ErrorProductBadRefOrLabel=Referans veya etiket için yanlış değer. -ErrorProductClone=Ürün ya da hizmetin klonlanmasına çalışılırken bir sorun oluştu. +ErrorProductClone=Ürün ya da hizmetin kopyasını oluşturmaya çalışırken bir sorun oluştu. ErrorPriceCantBeLowerThanMinPrice=Hata, fiyat en düşük fiyattan daha düşük olamaz. Suppliers=Tedarikçiler SupplierRef=Tedarikçi Ürün Kodu @@ -145,11 +145,11 @@ ListProductByPopularity=Popülerliğine göre ürün listesi ListServiceByPopularity=Popülerliğine göre hizmetler listesi Finished=Bitmiş ürün RowMaterial=Ham madde -ConfirmCloneProduct=%s ürünü ve siparişi klonlamak istediğinizden emin misiniz? -CloneContentProduct=Ürün/hizmet ile ilgili tüm temel bilgileri kopyalayın -ClonePricesProduct=Fiyatları çoğalt -CloneCompositionProduct=Sanal ürünü/hizmeti çoğalt (kopyala) -CloneCombinationsProduct=Ürün varyantlarını kopyala +ConfirmCloneProduct=%s ürünü ve siparişinin kopyasını oluşturmak istediğinizden emin misiniz? +CloneContentProduct=Ürün/hizmet ile ilgili tüm temel bilgilerin kopyasını oluştur +ClonePricesProduct=Fiyatların kopyasını oluştur +CloneCompositionProduct=Sanal ürünü/hizmetin kopyasını oluştur +CloneCombinationsProduct=Ürün değişkenlerinin kopyasını oluştur ProductIsUsed=Bu ürün kullanılır. NewRefForClone=Yeni ürün/hizmet ref. SellingPrices=Satış fiyatları diff --git a/htdocs/langs/tr_TR/projects.lang b/htdocs/langs/tr_TR/projects.lang index d0aeae12e7d..76bf661efa6 100644 --- a/htdocs/langs/tr_TR/projects.lang +++ b/htdocs/langs/tr_TR/projects.lang @@ -134,13 +134,13 @@ TaskIsNotAssignedToUser=Görev kullanıcıya atanmadı. Görevi şimdi atamak i ErrorTimeSpentIsEmpty=Harcanan süre boş ThisWillAlsoRemoveTasks=Bu eylem aynı zamanda projenin tüm görevlerini (şu andaki %s görevleri) ve tüm harcanan süre girişlernii siler . IfNeedToUseOtherObjectKeepEmpty=Eğer bazı nesneler başka bir üçüncü partiye aitse (fatura, sipariş, ...), oluşturulması için bu projeye bağlanmalıdır, projenin birden çok üçüncü partiye bağlı olması için bunu boş bırakın. -CloneTasks=Görev klonla -CloneContacts=Kişi klonla -CloneNotes=Not klonla -CloneProjectFiles=Birleşik proje dosyalarını kopyala +CloneTasks=Görevlerin kopyasını oluştur +CloneContacts=Kişilerin kopyasını oluştur +CloneNotes=Notların kopyasını oluştur +CloneProjectFiles=Dosyalara eklenen projenin kopyasını oluştur CloneTaskFiles=Birleşik görev(ler) dosyalarını kopyala (görev(ler) kopyalanmışsa) CloneMoveDate=Proje/görev tarihleri şu andan itibaren güncellensin mi? -ConfirmCloneProject=Bu projeyi kopyalamak istediğinizden emin misiniz? +ConfirmCloneProject=Bu projenin kopyasını oluşturmak istediğinizden emin misiniz? ProjectReportDate=Change task dates according to new project start date ErrorShiftTaskDate=Görev tarihini yeni proje başlama tarihine göre kaydırmak olası değil ProjectsAndTasksLines=Projeler ve görevler diff --git a/htdocs/langs/tr_TR/propal.lang b/htdocs/langs/tr_TR/propal.lang index ea4962de9ab..360c19f714d 100644 --- a/htdocs/langs/tr_TR/propal.lang +++ b/htdocs/langs/tr_TR/propal.lang @@ -56,7 +56,7 @@ CopyPropalFrom=Varolan teklifi kopyalayarak teklif oluştur CreateEmptyPropal=Boş veya Ürünler/Hizmetler listesinden ticari teklif oluştur DefaultProposalDurationValidity=Varsayılan teklif geçerlilik süresi (gün olarak) UseCustomerContactAsPropalRecipientIfExist=Use contact/address with type 'Contact following-up proposal' if defined instead of third party address as proposal recipient address -ConfirmClonePropal=Ticari teklifi çoğaltmak istediğinizden emin misiniz? %s? +ConfirmClonePropal=%s teklifinin kopyasını oluşturmak istediğinizden emin misiniz? ConfirmReOpenProp=Ticari teklifi geri açmak istediğinizden emin misiniz %s? ProposalsAndProposalsLines=Teklif ve satırları ProposalLine=Teklif satırı diff --git a/htdocs/langs/tr_TR/resource.lang b/htdocs/langs/tr_TR/resource.lang index 25e8cbd1af6..16d96685df4 100644 --- a/htdocs/langs/tr_TR/resource.lang +++ b/htdocs/langs/tr_TR/resource.lang @@ -1,11 +1,11 @@ # Dolibarr language file - Source file is en_US - resource MenuResourceIndex=Kaynaklar -MenuResourceAdd=Yeni kaynaklar +MenuResourceAdd=Yeni Kaynaklar DeleteResource=Kaynak sil ConfirmDeleteResourceElement=Bu öğe için kaynağı silmeyi onayla NoResourceInDatabase=Veritabanında kaynak yok NoResourceLinked=Bağlantılı kaynak yok - +ActionsOnResource=Bu kaynakla ilgili etkinlikler ResourcePageIndex=Kaynak listesi ResourceSingular=Kaynak ResourceCard=Kaynak kartı diff --git a/htdocs/langs/tr_TR/supplier_proposal.lang b/htdocs/langs/tr_TR/supplier_proposal.lang index 9e120f15ccb..f623341419c 100644 --- a/htdocs/langs/tr_TR/supplier_proposal.lang +++ b/htdocs/langs/tr_TR/supplier_proposal.lang @@ -34,7 +34,7 @@ SupplierProposalStatusSignedShort=Kabul edildi SupplierProposalStatusNotSignedShort=Reddedildi CopyAskFrom=Varolan bir isteği kopyalayarak fiyat isteği oluştur CreateEmptyAsk=Boş istek oluştur -ConfirmCloneAsk=Fiyat talebini çoğaltmak istediğinizden emin misiniz %s? +ConfirmCloneAsk=%s fiyat talebinin kopyasını oluşturmak istediğinizden emin misiniz? ConfirmReOpenAsk=Fiyat talebini geri açmak istediğinizden emin misiniz %s? SendAskByMail=Fiyat isteğini e-posta ile gönder SendAskRef=Fiyat isteği %s gönderiliyor diff --git a/htdocs/langs/tr_TR/ticket.lang b/htdocs/langs/tr_TR/ticket.lang index 0f9c9ce4fde..5d03c756d59 100644 --- a/htdocs/langs/tr_TR/ticket.lang +++ b/htdocs/langs/tr_TR/ticket.lang @@ -268,7 +268,7 @@ SeeThisTicketIntomanagementInterface=Yönetim arayüzünde destek bildirimini g TicketPublicInterfaceForbidden=Destek bildirimi için genel arayüz etkin değil ErrorEmailOrTrackingInvalid=Takip numarası veya e-posta için hatalı değer OldUser=Eski kullanıcı -NewUser=Yeni kullanıcı +NewUser=Yeni Kullanıcı NumberOfTicketsByMonth=Aylık destek bildirim sayısı NbOfTickets=Destek bildirim sayısı # notifications diff --git a/htdocs/langs/tr_TR/trips.lang b/htdocs/langs/tr_TR/trips.lang index 03783401b6c..dfb2ee21b93 100644 --- a/htdocs/langs/tr_TR/trips.lang +++ b/htdocs/langs/tr_TR/trips.lang @@ -109,7 +109,7 @@ NoTripsToExportCSV=Bu dönem için dışaaktarılacak gider raporu yok. ExpenseReportPayment=Gider raporu ödemesi ExpenseReportsToApprove=Onaylanacak gider raporları ExpenseReportsToPay=Ödenecek gider raporları -ConfirmCloneExpenseReport=Bu gider raporunu kopyalamak istediğinizden emin misiniz? +ConfirmCloneExpenseReport=Bu gider raporunun kopyasını oluşturmak istediğinizden emin misiniz? ExpenseReportsIk=Expense report milles index ExpenseReportsRules=Gider raporu kuralları ExpenseReportIkDesc=You can modify the calculation of kilometers expense by category and range who they are previously defined. d is the distance in kilometers diff --git a/htdocs/langs/tr_TR/users.lang b/htdocs/langs/tr_TR/users.lang index 21feef75fa1..50b800b2d52 100644 --- a/htdocs/langs/tr_TR/users.lang +++ b/htdocs/langs/tr_TR/users.lang @@ -26,11 +26,11 @@ ConfirmDeleteGroup=%s grubunu silmek istediğinizden emin misiniz? ConfirmEnableUser=%s kullanıcısını etkinleştirmek istediğinizden emin misiniz? ConfirmReinitPassword=%skullanıcısı için yeni bir şifre oluşturmak istediğinizden emin misiniz? ConfirmSendNewPassword=%s kullanıcısı için yeni şifre oluşturmak ve göndermek istediğinizden emin misiniz? -NewUser=Yeni kullanıcı +NewUser=Yeni Kullanıcı CreateUser=Kullanıcı oluştur LoginNotDefined=Kullanıcı adı tanımlı değil. NameNotDefined=Ad tanımlı değil. -ListOfUsers=Kullanıcı listesi +ListOfUsers=Kullanıcı Listesi SuperAdministrator=Süper Yönetici SuperAdministratorDesc=Yöneticinin tüm hakları AdministratorDesc=Yönetici @@ -39,8 +39,8 @@ DefaultRightsDesc=Burada, yeni bir kullanıcıya otomatik olarak verilen DolibarrUsers=Dolibarr kullanıcıları LastName=Soyadı FirstName=Adı -ListOfGroups=Grupların listesi -NewGroup=Yeni grup +ListOfGroups=Grupların Listesi +NewGroup=Yeni Grup CreateGroup=Grup oluştur RemoveFromGroup=Gruptan kaldır PasswordChangedAndSentTo=Parola değiştirildi ve %s e gönderildi. @@ -96,7 +96,7 @@ NbOfUsers=Kullanıcı sayısı NbOfPermissions=İzinlerin sayısı DontDowngradeSuperAdmin=Yalnızca bir SuperAdmin, bir SuperAdmin’inin derecesini düşürebilir HierarchicalResponsible=Yönetici -HierarchicView=Sıradüzeni görünümü +HierarchicView=Sıradüzeni Görünümü UseTypeFieldToChange=Değiştirmek için Alan türünü kullan OpenIDURL=OpenID URL LoginUsingOpenID=Oturum açmak için OpenID kullan diff --git a/htdocs/langs/tr_TR/website.lang b/htdocs/langs/tr_TR/website.lang index 85648d7cc51..9914ef2475d 100644 --- a/htdocs/langs/tr_TR/website.lang +++ b/htdocs/langs/tr_TR/website.lang @@ -53,8 +53,8 @@ YouCanCreatePageOrImportTemplate=Yeni bir sayfa oluşturabilir veya tam bir web SyntaxHelp=Belirli sözdizimi ipuçları hakkında yardım YouCanEditHtmlSourceckeditor=Düzenleyicideki "Kaynak" düğmesini kullanarak HTML kaynak kodunu düzenleyebilirsiniz YouCanEditHtmlSource=
You can include PHP code into this source using tags <?php ?>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs.

You can also include content of another Page/Container with the following syntax:
<?php includeContainer('alias_of_container_to_include'); ?>

You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):
<?php redirectToContainer('alias_of_container_to_redirect_to'); ?>

To add a link to another page, use the syntax:
<a href="alias_of_page_to_link_to.php">mylink<a>

To include a link to download a file stored into the documents directory, use the document.php wrapper:
Example, for a file into documents/ecm (need to be logged), syntax is:
<a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext">
For a file into documents/medias (open directory for public access), syntax is:
<a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext">
For a file shared with a share link (open access using the sharing hash key of file), syntax is:
<a href="/document.php?hashp=publicsharekeyoffile">

To include an image stored into the documents directory, use the viewimage.php wrapper:
Example, for an image into documents/medias (open directory for public access), syntax is:
<img src="/viewimage.php?modulepart=medias&file=[relative_dir/]filename.ext">
-ClonePage=Sayfa/kapsayıcı kopyala -CloneSite=Siteyi kopyala +ClonePage=Sayfa/kapsayıcı kopyasını oluştur +CloneSite=Sitenin kopyasını oluştur SiteAdded=Web sitesi eklendi ConfirmClonePage=Please enter code/alias of new page and if it is a translation of the cloned page. PageIsANewTranslation=Yeni sayfa mevcut sayfanın çevirisi mi? @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=Henüz bir web sitesi oluşturulmadı. Önce bir tane ol GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Web sitesi içeriğini değiştir +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Bu web sitesine özgü tüm javascript dosyaları da silinsin mi? DeleteAlsoMedias=Bu web sitesine özgü tüm medya dosyaları da silinsin mi? # Export diff --git a/htdocs/langs/uk_UA/accountancy.lang b/htdocs/langs/uk_UA/accountancy.lang index 2f8b14ad135..2c0c96bb664 100644 --- a/htdocs/langs/uk_UA/accountancy.lang +++ b/htdocs/langs/uk_UA/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/uk_UA/admin.lang b/htdocs/langs/uk_UA/admin.lang index fe7d48b8ac7..2aa26a32a3b 100644 --- a/htdocs/langs/uk_UA/admin.lang +++ b/htdocs/langs/uk_UA/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/uk_UA/bills.lang b/htdocs/langs/uk_UA/bills.lang index 3c30ae87f85..667a89a60fe 100644 --- a/htdocs/langs/uk_UA/bills.lang +++ b/htdocs/langs/uk_UA/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Рахунок проформа InvoiceProFormaDesc=Рахунок проформа є образом оригінального рахунку, але не має бухгалтерського облікового запису. InvoiceReplacement=Заміна рахунка-фактури InvoiceReplacementAsk=Заміна рахунка-фактури на інший -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Кредитове авізо InvoiceAvoirAsk=Кредитове авізо для коригування рахунка-фактури InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/uk_UA/companies.lang b/htdocs/langs/uk_UA/companies.lang index 499828f5eac..96ef561910b 100644 --- a/htdocs/langs/uk_UA/companies.lang +++ b/htdocs/langs/uk_UA/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/uk_UA/other.lang b/htdocs/langs/uk_UA/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/uk_UA/other.lang +++ b/htdocs/langs/uk_UA/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/uk_UA/website.lang b/htdocs/langs/uk_UA/website.lang index 2f387580ebc..55d7800c55c 100644 --- a/htdocs/langs/uk_UA/website.lang +++ b/htdocs/langs/uk_UA/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/uz_UZ/accountancy.lang b/htdocs/langs/uz_UZ/accountancy.lang index bb141cb9eb0..758d9c340a5 100644 --- a/htdocs/langs/uz_UZ/accountancy.lang +++ b/htdocs/langs/uz_UZ/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/uz_UZ/admin.lang b/htdocs/langs/uz_UZ/admin.lang index 9eaa12ec9be..f30d6edd9f7 100644 --- a/htdocs/langs/uz_UZ/admin.lang +++ b/htdocs/langs/uz_UZ/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Checkboxes from table ExtrafieldLink=Link to an object ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Create/modify services Permission534=Delete services Permission536=See/manage hidden services Permission538=Export services -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/uz_UZ/bills.lang b/htdocs/langs/uz_UZ/bills.lang index c9d46e4ffff..4f114d4df1c 100644 --- a/htdocs/langs/uz_UZ/bills.lang +++ b/htdocs/langs/uz_UZ/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Proforma invoice InvoiceProFormaDesc=Proforma invoice is an image of a true invoice but has no accountancy value. InvoiceReplacement=Replacement invoice InvoiceReplacementAsk=Replacement invoice for invoice -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Credit note InvoiceAvoirAsk=Credit note to correct invoice InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/uz_UZ/companies.lang b/htdocs/langs/uz_UZ/companies.lang index 77bd4f8a445..578f5cb8920 100644 --- a/htdocs/langs/uz_UZ/companies.lang +++ b/htdocs/langs/uz_UZ/companies.lang @@ -28,7 +28,7 @@ AliasNames=Alias name (commercial, trademark, ...) AliasNameShort=Alias Name Companies=Companies CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=None Vendor=Vendor +Supplier=Vendor AddContact=Create contact AddContactAddress=Create contact/address EditContact=Edit contact diff --git a/htdocs/langs/uz_UZ/other.lang b/htdocs/langs/uz_UZ/other.lang index a6802140be3..8a5ccdbab5c 100644 --- a/htdocs/langs/uz_UZ/other.lang +++ b/htdocs/langs/uz_UZ/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=The intervention %s has been validated. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/vi_VN/accountancy.lang b/htdocs/langs/vi_VN/accountancy.lang index f5d169e2819..68b3358d211 100644 --- a/htdocs/langs/vi_VN/accountancy.lang +++ b/htdocs/langs/vi_VN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations diff --git a/htdocs/langs/vi_VN/admin.lang b/htdocs/langs/vi_VN/admin.lang index 788eb246e10..634eb06628e 100644 --- a/htdocs/langs/vi_VN/admin.lang +++ b/htdocs/langs/vi_VN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=Hộp đánh dấu từ bảng ExtrafieldLink=Liên kết với một đối tượng ComputedFormula=Computed field ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=Library used for PDF generation LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=SMS @@ -819,9 +822,9 @@ Permission532=Tạo/chỉnh sửa dịch vụ Permission534=Xóa dịch vụ Permission536=Xem/quản lý dịch vụ ẩn Permission538=Xuất dữ liệu Dịch vụ -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=Đọc thông tin Tài trợ Permission702=Tạo/sửa đổi Tài trợ Permission703=Xóa tài trợ @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1038,24 +1041,24 @@ Host=Máy chủ DriverType=Driver type SummarySystem=Tóm tắt thông tin hệ thống SummaryConst=Danh sách của tất cả các thông số cài đặt Dolibarr -MenuCompanySetup=Company/Organization +MenuCompanySetup=Thông Tin Công ty/Tổ chức DefaultMenuManager= Quản lý menu chuẩn DefaultMenuSmartphoneManager=Quản lý menu smartphone Skin=Chủ đề giao diện DefaultSkin=Chủ đề giao diện mặc định MaxSizeList=Chiều dài tối đa cho danh sách DefaultMaxSizeList=Default max length for lists -DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card) +DefaultMaxSizeShortList=Độ dài tối đa mặc định cho danh sách ngắn (ví dụ: trong thẻ khách hàng) MessageOfDay=Tin trong ngày MessageLogin=Tin trang đăng nhập -LoginPage=Login page -BackgroundImageLogin=Background image +LoginPage=Trang đăng nhập +BackgroundImageLogin=Hình nền PermanentLeftSearchForm=Forrm tìm kiếm cố định trên menu bên trái -DefaultLanguage=Default language +DefaultLanguage=Ngôn ngữ mặc định EnableMultilangInterface=Enable multilanguage support EnableShowLogo=Hiển thị logo trên menu bên trái -CompanyInfo=Company/Organization -CompanyIds=Company/Organization identities +CompanyInfo=Thông Tin Công ty/Tổ chức +CompanyIds=Danh tính công ty / tổ chức CompanyName=Tên CompanyAddress=Địa chỉ CompanyZip=Zip @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/vi_VN/bills.lang b/htdocs/langs/vi_VN/bills.lang index 81329694431..d04d4324fcd 100644 --- a/htdocs/langs/vi_VN/bills.lang +++ b/htdocs/langs/vi_VN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=Hóa đơn hình thức InvoiceProFormaDesc=Hóa đơn hình thức là một hình ảnh của một hóa đơn thực, nhưng không có giá trị kế toán. InvoiceReplacement=Hóa đơn thay thế InvoiceReplacementAsk=Hóa đơn thay thế cho hóa đơn -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=Giấy báo có InvoiceAvoirAsk=Giấy báo có để chỉnh sửa hóa đơn InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/vi_VN/companies.lang b/htdocs/langs/vi_VN/companies.lang index 9b4d372c507..521bc7dd9a4 100644 --- a/htdocs/langs/vi_VN/companies.lang +++ b/htdocs/langs/vi_VN/companies.lang @@ -28,7 +28,7 @@ AliasNames=Tên viết tắt (tài chính, thương hiệu) AliasNameShort=Alias Name Companies=Các công ty CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself) DiscountNone=Không Vendor=Vendor +Supplier=Vendor AddContact=Tạo liên lạc AddContactAddress=Tạo liên lạc/địa chỉ EditContact=Sửa liên lạc diff --git a/htdocs/langs/vi_VN/main.lang b/htdocs/langs/vi_VN/main.lang index 773fafc037d..145e971080c 100644 --- a/htdocs/langs/vi_VN/main.lang +++ b/htdocs/langs/vi_VN/main.lang @@ -438,7 +438,7 @@ ActionRunningShort=In progress ActionDoneShort=Đã hoàn tất ActionUncomplete=Incomplete LatestLinkedEvents=Latest %s linked events -CompanyFoundation=Company/Organization +CompanyFoundation=Thông Tin Công ty/Tổ chức Accountant=Accountant ContactsForCompany=Liên lạc cho bên thứ ba này ContactsAddressesForCompany=Liên lạc/địa chỉ cho bên thứ ba này diff --git a/htdocs/langs/vi_VN/other.lang b/htdocs/langs/vi_VN/other.lang index 85181e6ae01..b972dccd38f 100644 --- a/htdocs/langs/vi_VN/other.lang +++ b/htdocs/langs/vi_VN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=Number of units on proposals NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=Sự can thiệp% s đã được xác nhận. EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/vi_VN/website.lang b/htdocs/langs/vi_VN/website.lang index 3bc8b32f9f0..becbd99d3ac 100644 --- a/htdocs/langs/vi_VN/website.lang +++ b/htdocs/langs/vi_VN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/zh_CN/accountancy.lang b/htdocs/langs/zh_CN/accountancy.lang index 402922e3079..1d3e23e0f66 100644 --- a/htdocs/langs/zh_CN/accountancy.lang +++ b/htdocs/langs/zh_CN/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=会计科目-等待 DONATION_ACCOUNTINGACCOUNT=会计科目-登记捐款 diff --git a/htdocs/langs/zh_CN/admin.lang b/htdocs/langs/zh_CN/admin.lang index 6373129e03e..93299ace4fa 100644 --- a/htdocs/langs/zh_CN/admin.lang +++ b/htdocs/langs/zh_CN/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=表格中的复选框 ExtrafieldLink=连接到对象 ComputedFormula=计算字段 ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=已使用资料库以支持生成PDF文件 LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=短信 @@ -819,9 +822,9 @@ Permission532=创建/变更服务 Permission534=删除服务 Permission536=查看/隐藏服务管理 Permission538=导出服务 -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=读取捐款资料 Permission702=创建/变更捐款资料 Permission703=删除捐款资料 @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/zh_CN/bills.lang b/htdocs/langs/zh_CN/bills.lang index 050f8cca90a..f4dd4ef5c4e 100644 --- a/htdocs/langs/zh_CN/bills.lang +++ b/htdocs/langs/zh_CN/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=形式发票 InvoiceProFormaDesc=形式发票是发票的形式,但其没有真正的会计价值。 InvoiceReplacement=更换发票 InvoiceReplacementAsk=为发票更换发票 -InvoiceReplacementDesc=Replacement invoice is used to cancel and completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=信用记录 InvoiceAvoirAsk=更正发票的信用记录 InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/zh_CN/companies.lang b/htdocs/langs/zh_CN/companies.lang index eed56f75f47..75d57bf28d8 100644 --- a/htdocs/langs/zh_CN/companies.lang +++ b/htdocs/langs/zh_CN/companies.lang @@ -28,7 +28,7 @@ AliasNames=别名(商号,商标,...) AliasNameShort=别名 Companies=公司 CountryIsInEEC=Country is inside the European Economic Community -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=绝对供应商折扣(由所有用户输入 SupplierAbsoluteDiscountMy=绝对供应商折扣(由您自己输入) DiscountNone=无 Vendor=Vendor +Supplier=Vendor AddContact=创建联系人 AddContactAddress=创建联系人/地址 EditContact=编辑联系人/地址 diff --git a/htdocs/langs/zh_CN/other.lang b/htdocs/langs/zh_CN/other.lang index 81364a5ce11..b493c21cea8 100644 --- a/htdocs/langs/zh_CN/other.lang +++ b/htdocs/langs/zh_CN/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=客户发票数量 NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=提案上的单位数量 NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=客户发票上的单位数量 NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=干预%s已被验证。 EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/zh_CN/website.lang b/htdocs/langs/zh_CN/website.lang index a92bfcf66ad..377f56e059b 100644 --- a/htdocs/langs/zh_CN/website.lang +++ b/htdocs/langs/zh_CN/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export diff --git a/htdocs/langs/zh_TW/accountancy.lang b/htdocs/langs/zh_TW/accountancy.lang index be9027cf959..97893293e5c 100644 --- a/htdocs/langs/zh_TW/accountancy.lang +++ b/htdocs/langs/zh_TW/accountancy.lang @@ -158,6 +158,7 @@ ACCOUNTING_RESULT_LOSS=Result accounting account (Loss) ACCOUNTING_CLOSURE_DEFAULT_JOURNAL=Journal of closure ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transitional bank transfer +TransitionalAccount=Transitional bank transfer account ACCOUNTING_ACCOUNT_SUSPENSE=等待的會計項目 DONATION_ACCOUNTINGACCOUNT=註冊捐款的會計項目 diff --git a/htdocs/langs/zh_TW/admin.lang b/htdocs/langs/zh_TW/admin.lang index e139e03077d..107124b2198 100644 --- a/htdocs/langs/zh_TW/admin.lang +++ b/htdocs/langs/zh_TW/admin.lang @@ -422,6 +422,8 @@ ExtrafieldCheckBoxFromList=從表格來的確認框 ExtrafieldLink=連線到物件 ComputedFormula=計算欄位 ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: $db, $conf, $langs, $mysoc, $user, $object.
WARNING: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.
Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.

Example of formula:
$object->id < 10 ? round($object->id / 2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)

Example to reload object
(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id: ($obj->rowid ? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'

Other example of formula to force load of object and its parent object:
(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref: 'Parent project not found' +Computedpersistent=Store computed field +ComputedpersistentDesc=Computed extra fields will be stored in the database, however, the value will only be recalculated when the object of this field is changed. If the computed field depends on other objects or global data this value might be wrong!! ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).
Set 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value) ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
code3,value3
...

In order to have the list depending on another complementary attribute list:
1,value1|options_parent_list_code:parent_key
2,value2|options_parent_list_code:parent_key

In order to have the list depending on another list:
1,value1|parent_list_code:parent_key
2,value2|parent_list_code:parent_key ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')

for example:
1,value1
2,value2
3,value3
... @@ -429,6 +431,7 @@ ExtrafieldParamHelpradio=List of values must be lines with format key,value (whe ExtrafieldParamHelpsellist=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

- idfilter is necessarly a primary int key
- filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelpchkbxlst=List of values comes from a table
Syntax: table_name:label_field:id_field::filter
Example: c_typent:libelle:id::filter

filter can be a simple test (eg active=1) to display only active value
You can also use $ID$ in filter witch is the current id of current object
To do a SELECT in filter use $SEL$
if you want to filter on extrafields use syntax extra.fieldcode=... (where field code is the code of extrafield)

In order to have the list depending on another complementary attribute list:
c_typent:libelle:id:options_parent_list_code|parent_column:filter

In order to have the list depending on another list:
c_typent:libelle:id:parent_list_code|parent_column:filter ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath
Syntax: ObjectName:Classpath
Examples:
Societe:societe/class/societe.class.php
Contact:contact/class/contact.class.php +ExtrafieldParamHelpSeparator=Keep empty for a simple separator
Set this to 1 for a collapsing separator (open by default)
Set this to 2 for a collapsing separator (collapsed by default) LibraryToBuildPDF=PDF產生器使用程式庫 LocalTaxDesc=Some countries may apply two or three taxes on each invoice line. If this is the case, choose the type for the second and third tax and its rate. Possible type are:
1: local tax apply on products and services without vat (localtax is calculated on amount without tax)
2: local tax apply on products and services including vat (localtax is calculated on amount + main tax)
3: local tax apply on products without vat (localtax is calculated on amount without tax)
4: local tax apply on products including vat (localtax is calculated on amount + main vat)
5: local tax apply on services without vat (localtax is calculated on amount without tax)
6: local tax apply on services including vat (localtax is calculated on amount + tax) SMS=簡訊 @@ -819,9 +822,9 @@ Permission532=建立/修改服務 Permission534=刪除服務 Permission536=查看/管理隱藏服務 Permission538=匯出服務 -Permission650=Read bom of Bom -Permission651=Create/Update bom of Bom -Permission652=Delete bom of Bom +Permission650=Read Bills of Materials +Permission651=Create/Update Bills of Materials +Permission652=Delete Bills of Materials Permission701=讀取捐款 Permission702=建立/修改捐款 Permission703=刪除捐款 @@ -911,7 +914,7 @@ Permission50414=Delete operations in ledger Permission50415=Delete all operations by year and journal in ledger Permission50418=Export operations of the ledger Permission50420=Report and export reports (turnover, balance, journals, ledger) -Permission50430=Define and close a fiscal year +Permission50430=Define and close a fiscal period Permission50440=Manage chart of accounts, setup of accountancy Permission51001=Read assets Permission51002=Create/Update assets @@ -1924,4 +1927,4 @@ UrlForIFTTT=URL endpoint for IFTTT YouWillFindItOnYourIFTTTAccount=You will find it on your IFTTT account EndPointFor=End point for %s : %s DeleteEmailCollector=Delete email collector -ConfirmDeleteEmailCollector=Are you sure you want to delete this email collectore? +ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? diff --git a/htdocs/langs/zh_TW/bills.lang b/htdocs/langs/zh_TW/bills.lang index 9733329db6b..c4f511537f2 100644 --- a/htdocs/langs/zh_TW/bills.lang +++ b/htdocs/langs/zh_TW/bills.lang @@ -25,7 +25,7 @@ InvoiceProFormaAsk=形式發票 InvoiceProFormaDesc=形式發票是發票的形象,但沒有真實的會計價值。 InvoiceReplacement=更換發票 InvoiceReplacementAsk=更換發票的發票 -InvoiceReplacementDesc=更換發票僅用於取消或代替未付款項但已收貨的發票。

注意:僅有未付款發票才可被更換。若被更換發票尚未被關閉,系統將自動'放棄'此發票。 +InvoiceReplacementDesc=Replacement invoice is used to completely replace an invoice with no payment already received.

Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'. InvoiceAvoir=貸方通知單 InvoiceAvoirAsk=貸方通知單到正確發票 InvoiceAvoirDesc=The credit note is a negative invoice used to correct the fact that an invoice shows an amount that differs from the amount actually paid (eg the customer paid too much by mistake, or will not pay the complete amount since some products were returned). diff --git a/htdocs/langs/zh_TW/companies.lang b/htdocs/langs/zh_TW/companies.lang index f8750f08d2e..af9bea70e1e 100644 --- a/htdocs/langs/zh_TW/companies.lang +++ b/htdocs/langs/zh_TW/companies.lang @@ -28,7 +28,7 @@ AliasNames=別名(商業的,商標,...) AliasNameShort=別名 Companies=公司 CountryIsInEEC=在歐盟區的國家 -PriceFormatInCurrentLanguage=Price format in current language +PriceFormatInCurrentLanguage=Price display format in the current language and currency ThirdPartyName=Third-party name ThirdPartyEmail=Third-party email ThirdParty=Third-party @@ -287,6 +287,7 @@ SupplierAbsoluteDiscountAllUsers=完整的供應商折扣(由全體用戶授 SupplierAbsoluteDiscountMy=完整的供應商折扣(由您授權) DiscountNone=無 Vendor=供應商 +Supplier=供應商 AddContact=建立聯絡人資訊 AddContactAddress=建立聯絡資訊及地址 EditContact=編輯聯絡人/地址 diff --git a/htdocs/langs/zh_TW/other.lang b/htdocs/langs/zh_TW/other.lang index 36361e8dcef..d894069ac8b 100644 --- a/htdocs/langs/zh_TW/other.lang +++ b/htdocs/langs/zh_TW/other.lang @@ -184,12 +184,14 @@ NumberOfCustomerInvoices=Number of customer invoices NumberOfSupplierProposals=Number of vendor proposals NumberOfSupplierOrders=Number of purchase orders NumberOfSupplierInvoices=Number of vendor invoices +NumberOfContracts=Number of contracts NumberOfUnitsProposals=提案/建議書的單位數量 NumberOfUnitsCustomerOrders=Number of units on sales orders NumberOfUnitsCustomerInvoices=Number of units on customer invoices NumberOfUnitsSupplierProposals=Number of units on vendor proposals NumberOfUnitsSupplierOrders=Number of units on purchase orders NumberOfUnitsSupplierInvoices=Number of units on vendor invoices +NumberOfUnitsContracts=Number of units on contracts EMailTextInterventionAddedContact=A new intervention %s has been assigned to you. EMailTextInterventionValidated=幹預%s已被驗證。 EMailTextInvoiceValidated=Invoice %s has been validated. diff --git a/htdocs/langs/zh_TW/website.lang b/htdocs/langs/zh_TW/website.lang index 82a20e8535b..5b9f2881147 100644 --- a/htdocs/langs/zh_TW/website.lang +++ b/htdocs/langs/zh_TW/website.lang @@ -98,7 +98,7 @@ NoWebSiteCreateOneFirst=No website has been created yet. Create one first. GoTo=Go to DynamicPHPCodeContainsAForbiddenInstruction=You add dynamic PHP code that contains the PHP instruction '%s' that is forbidden by default as dynamic content (see hidden options WEBSITE_PHP_ALLOW_xxx to increase list of allowed commands). NotAllowedToAddDynamicContent=You don't have permission to add or edit PHP dynamic content in websites. Ask permission or just keep code into php tags unmodified. -ReplaceWebsiteContent=Replace website content +ReplaceWebsiteContent=Search or Replace website content DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? # Export From 389976699c335420671ccd031593eca5be8844e9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 24 Jul 2019 16:29:50 +0200 Subject: [PATCH 0321/1148] Fix responsive --- htdocs/core/class/html.form.class.php | 2 +- htdocs/core/class/html.formprojet.class.php | 2 +- htdocs/projet/tasks/time.php | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 6c5ed3c23f0..713b18582eb 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1679,7 +1679,7 @@ class Form $out .= ajax_combobox($htmlname); // do not use maxwidthonsmartphone by default. Set it by caller so auto size to 100% will work when not defined - $out.= ''; if ($show_empty && !$multiple) $out.= ''."\n"; if ($show_every) $out.= ''."\n"; diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php index 057f977fadb..8e01e93b66e 100644 --- a/htdocs/core/class/html.formprojet.class.php +++ b/htdocs/core/class/html.formprojet.class.php @@ -367,7 +367,7 @@ class FormProjets include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php'; $comboenhancement = ajax_combobox($htmlname, '', 0, $forcefocus); $out.=$comboenhancement; - $morecss='minwidth200 maxwidth500'; + $morecss='minwidth200imp maxwidth500'; } if (empty($option_only)) { diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 766c2b38e2d..8501ae3c88c 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -959,6 +959,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print ''."\n"; if (! empty($id)) print ''; + print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print ''; print ''; @@ -1002,7 +1003,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) else $userid = $contactsofproject[0]; if ($projectstatic->public) $contactsofproject = array(); - print $form->select_dolusers((GETPOST('userid')?GETPOST('userid'):$userid), 'userid', 0, '', 0, '', $contactsofproject, 0, 0, 0, '', 0, $langs->trans("ResourceNotAssignedToProject"), 'maxwidth200'); + print $form->select_dolusers((GETPOST('userid', 'int')?GETPOST('userid', 'int'):$userid), 'userid', 0, '', 0, '', $contactsofproject, 0, 0, 0, '', 0, $langs->trans("ResourceNotAssignedToProject"), 'maxwidth200'); } else { @@ -1044,6 +1045,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0) print ''; print '
'; + print '
'; print '
'; } From 151075402fa62023570461e2e0423578e97acd38 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 24 Jul 2019 17:15:25 +0200 Subject: [PATCH 0322/1148] css --- htdocs/core/lib/project.lib.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index efcfeca61dd..a164c03a2d8 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -371,7 +371,7 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t $numlines=count($lines); // We declare counter as global because we want to edit them into recursive call - global $total_projectlinesa_spent,$total_projectlinesa_planned,$total_projectlinesa_spent_if_planned,$total_projectlinesa_tobill,$total_projectlinesa_billed; + global $total_projectlinesa_spent, $total_projectlinesa_planned, $total_projectlinesa_spent_if_planned, $total_projectlinesa_tobill, $total_projectlinesa_billed; if ($level == 0) { $total_projectlinesa_spent=0; @@ -491,9 +491,13 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t //else print ''; for ($k = 0 ; $k < $level ; $k++) { - print "     "; + print '
'; } print $lines[$i]->label; + for ($k = 0 ; $k < $level ; $k++) + { + print '
'; + } if ($showlineingray) print ''; //else print '
'; print "
'.$langs->trans("GlobalSearchOnExtrafield").''; print $form->selectyesno("activate_globalSearchOnExtrafield", (! empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD)?$conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD:0), 1); print '
 
'.$obj->lib.''.$obj->lib.''.price($obj->total).''; if ($obj->periode) { - print 'jdate($obj->periode)).'">'.dol_print_date($db->jdate($obj->periode),'day').''; + print 'jdate($obj->periode)).'">'.dol_print_date($db->jdate($obj->periode),'day').''; } else { diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php index 936c2c9c0f2..4025f86ff01 100644 --- a/htdocs/compta/sociales/payments.php +++ b/htdocs/compta/sociales/payments.php @@ -90,7 +90,7 @@ print ''; if ($mode != 'sconly') { - $center=($year?''.img_previous($langs->trans("Previous"), 'class="valignbottom"')." ".$langs->trans("Year").' '.$year.' '.img_next($langs->trans("Next"), 'class="valignbottom"')."":""); + $center=($year?''.img_previous($langs->trans("Previous"), 'class="valignbottom"')." ".$langs->trans("Year").' '.$year.' '.img_next($langs->trans("Next"), 'class="valignbottom"')."":""); print_barre_liste($title,$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,$center,$num,$totalnboflines, 'title_accountancy', 0, '', '', $limit, 1); } else @@ -181,7 +181,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) print $socialcontrib->getNomUrl(1,'20'); print ''.$obj->lib.''.$obj->lib.'' . $langs->trans("QtyDispatchedShort") . '' . $langs->trans("QtyToDispatchShort") . '' . $langs->trans("Price") . '' . $langs->trans("ReductionShort") . ' (%)' . $langs->trans("UpdatePrice") . '' . $langs->trans("Warehouse") . ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; if (count($listwarehouses) > 1) { From f67f99099caf793c96a835d0790c1d17193723a2 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 26 Jul 2019 12:45:46 +0200 Subject: [PATCH 0344/1148] NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order --- .../class/bonprelevement.class.php | 51 ++++++------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 52b9ac8ac27..1a98c33ab02 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1,7 +1,7 @@ - * Copyright (C) 2005-2012 Regis Houssin - * Copyright (C) 2010-2018 Juanjo Menent + * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2010-2015 Juanjo Menent * Copyright (C) 2010-2014 Laurent Destailleur * Copyright (C) 2014-2016 Ferran Marcet * Copyright (C) 2018 Nicolas ZABOURI @@ -473,44 +473,20 @@ class BonPrelevement extends CommonObject } } - if (empty($conf->global->WITHDRAWAL_DISABLE_PAYMENT_PER_CUSTOMER)) { - - // Make one payment per customer - foreach ($amountsperthirdparty as $thirdpartyid => $cursoramounts) { - $paiement = new Paiement($this->db); - $paiement->datepaye = $date; - $paiement->amounts = $cursoramounts; // Array with detail of dispatching of payments for each invoice - $paiement->paiementid = 3; // - $paiement->num_paiement = $this->ref; // Set ref of direct debit note - $paiement->id_prelevement = $this->id; - - $paiement_id = $paiement->create($user); - if ($paiement_id < 0) { - dol_syslog(get_class($this) . "::set_infocredit AddPayment Error"); - $error++; - } else { - $result = $paiement->addPaymentToBank($user, 'payment', '(WithdrawalPayment)', $bankaccount, '', ''); - if ($result < 0) { - dol_syslog(get_class($this) . "::set_infocredit AddPaymentToBank Error"); - $error++; - } - } - //var_dump($paiement->amounts); - //var_dump($thirdpartyid); - //var_dump($cursoramounts); - } - } else { + // Make one payment per customer + foreach ($amountsperthirdparty as $thirdpartyid => $cursoramounts) + { $paiement = new Paiement($this->db); - $paiement->datepaye = $date ; - $paiement->amounts = $amounts; - $paiement->paiementid = 3; // - $paiement->num_paiement = $this->ref ; + $paiement->datepaye = $date; + $paiement->amounts = $cursoramounts; // Array with detail of dispatching of payments for each invoice + $paiement->paiementid = 3; // + $paiement->num_paiement = $this->ref; // Set ref of direct debit note $paiement->id_prelevement = $this->id; $paiement_id = $paiement->create($user); if ($paiement_id < 0) { - dol_syslog("BonPrelevement::set_credite AddPayment Error"); + dol_syslog(get_class($this)."::set_infocredit AddPayment Error"); $error++; } else @@ -518,12 +494,15 @@ class BonPrelevement extends CommonObject $result=$paiement->addPaymentToBank($user, 'payment', '(WithdrawalPayment)', $bankaccount, '', ''); if ($result < 0) { - dol_syslog("BonPrelevement::set_credite AddPaymentToBank Error"); + dol_syslog(get_class($this)."::set_infocredit AddPaymentToBank Error"); $error++; } } - + //var_dump($paiement->amounts); + //var_dump($thirdpartyid); + //var_dump($cursoramounts); } + // Update withdrawal line // TODO: Translate to ligneprelevement.class.php $sql = " UPDATE ".MAIN_DB_PREFIX."prelevement_lignes"; From e92c6c87a0f20fda7690480d465c968fc469abf0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 13:16:49 +0200 Subject: [PATCH 0345/1148] FIX API return 404 sometimes even if API exists --- htdocs/api/index.php | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index e55a30304a4..6788b208a2e 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -88,17 +88,22 @@ if (preg_match('/api\/index\.php\/explorer/', $_SERVER["PHP_SELF"]) && ! empty($ // index.php/xxx called by any REST client to run API +$reg=array(); preg_match('/index\.php\/([^\/]+)(.*)$/', $_SERVER["PHP_SELF"], $reg); // .../index.php/categories?sortfield=t.rowid&sortorder=ASC // Set the flag to say to refresh (when we reload the explorer, production must be for API call only) -$refreshcache=false; +/*$refreshcache=false; if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) { $refreshcache=true; -} - +}*/ +// When in production mode, a file api/temp/routes.php is created with the API available of current call. +// But, if we set $refreshcache to false, so it may have only one API in the routes.php file if we make a call for one API without +// using the explorer. And when we make another call for another API, the API is not into the api/temp/routes.php and a 404 is returned. +// So we force refresh to each call. +$refreshcache=true; $api = new DolibarrApi($db, '', $refreshcache); //var_dump($api->r->apiVersionMap); @@ -115,7 +120,7 @@ UploadFormat::$allowedMimeTypes = array('image/jpeg', 'image/png', 'text/plain', -// Call Explorer file for all APIs definitions +// Call Explorer file for all APIs definitions (this part is slow) if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) { // Scan all API files to load them @@ -253,5 +258,6 @@ if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && //var_dump($api->r->apiVersionMap); //exit; -// Call API (we suppose we found it) +// Call API (we suppose we found it). +// The handle will use the file api/temp/routes.php to get data to run the API. If the file exists and the entry for API is not found, it will return 404. $api->r->handle(); From 8b81702dd7805d31a46f3a55ac6942de41bc5161 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 26 Jul 2019 13:23:42 +0200 Subject: [PATCH 0346/1148] Fix API 404 errors --- htdocs/api/index.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 6788b208a2e..38050592a37 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -93,17 +93,15 @@ preg_match('/index\.php\/([^\/]+)(.*)$/', $_SERVER["PHP_SELF"], $reg); // .../index.php/categories?sortfield=t.rowid&sortorder=ASC -// Set the flag to say to refresh (when we reload the explorer, production must be for API call only) -/*$refreshcache=false; +// When in production mode, a file api/temp/routes.php is created with the API available of current call. +// But, if we set $refreshcache to false, so it may have only one API in the routes.php file if we make a call for one API without +// using the explorer. And when we make another call for another API, the API is not into the api/temp/routes.php and a 404 is returned. +// So we force refresh to each call. +$refreshcache=(empty($conf->global->API_PRODUCTION_DO_NOT_ALWAYS_REFRESH_CACHE) ? true : false); if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) { $refreshcache=true; -}*/ -// When in production mode, a file api/temp/routes.php is created with the API available of current call. -// But, if we set $refreshcache to false, so it may have only one API in the routes.php file if we make a call for one API without -// using the explorer. And when we make another call for another API, the API is not into the api/temp/routes.php and a 404 is returned. -// So we force refresh to each call. -$refreshcache=true; +} $api = new DolibarrApi($db, '', $refreshcache); //var_dump($api->r->apiVersionMap); From e464e2e1b8c0cce40e37b29cb2199adc7e3824b6 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Fri, 26 Jul 2019 14:16:28 +0200 Subject: [PATCH 0347/1148] Fix application_fee name stripe.class.php stripe changes name without change API :/ application_fee_amount for amount application_fee for % --- htdocs/stripe/class/stripe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 92c6335cd29..14265a9b5db 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -404,7 +404,7 @@ class Stripe extends CommonObject if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { - $dataforintent["application_fee"] = $stripefee; + $dataforintent["application_fee_amount"] = $stripefee; } if ($usethirdpartyemailforreceiptemail && is_object($object) && $object->thirdparty->email) { @@ -731,7 +731,7 @@ class Stripe extends CommonObject ); if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $stripefee > 0) { - $paymentarray["application_fee"] = $stripefee; + $paymentarray["application_fee_amount"] = $stripefee; } if ($societe->email && $usethirdpartyemailforreceiptemail) { From bd2f5ba037ff02c713a560f229696110fcd7257c Mon Sep 17 00:00:00 2001 From: atm-quentin Date: Fri, 26 Jul 2019 14:16:54 +0200 Subject: [PATCH 0348/1148] FIX Replace conf by hidden conf editable by user --- htdocs/product/admin/product.php | 9 --------- htdocs/product/list.php | 23 ++--------------------- 2 files changed, 2 insertions(+), 30 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 464ab169456..279265b8e96 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -147,9 +147,6 @@ if ($action == 'other') $value = GETPOST('activate_useProdFournDesc', 'alpha'); $res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value, 'chaine', 0, '', $conf->entity); - //$value = GETPOST('activate_globalSearchOnExtrafield', 'alpha'); - //$res = dolibarr_set_const($db, "PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD", $value,'chaine',0,'',$conf->entity); - if ($value) { $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1"; $resql = $db->query($sql_test); @@ -679,12 +676,6 @@ if (! empty($conf->fournisseur->enabled)) print '
'.$langs->trans("GlobalSearchOnExtrafield").''; -print $form->selectyesno("activate_globalSearchOnExtrafield", (! empty($conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD)?$conf->global->PRODUIT_GLOBAL_SEARCH_ON_EXTRAFIELD:0), 1); -print '
'; + print '
'; print ''; print '
'; @@ -779,7 +779,7 @@ if ($object->id > 0) $db->free($resql2); print '
'; - print '
'.$langs->trans("LastPropals", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllPropals").' '.$num.'
'; + print '
'; print ''; print ''; print ''; print "\n"; +$arrayofmodules = array(); + foreach ($dirsociete as $dirroot) { $dir = dol_buildpath($dirroot, 0); @@ -464,33 +474,41 @@ foreach ($dirsociete as $dirroot) $modCodeCompta = new $file; - print ''; - print ''; - print '\n"; - - if ($conf->global->SOCIETE_CODECOMPTA_ADDON == "$file") - { - print ''; - } - else - { - print ''; - } - print ''; - print "\n"; + $arrayofmodules[$file] = $modCodeCompta; } } - closedir($handle); } + closedir($handle); +} + +$arrayofmodules = dol_sort_array($arrayofmodules, 'position'); + + +foreach($arrayofmodules as $file => $modCodeCompta) +{ + print ''; + print ''; + print '\n"; + + if ($conf->global->SOCIETE_CODECOMPTA_ADDON == "$file") + { + print ''; + } + else + { + print ''; + } + print ''; + print "\n"; } print "
'; @@ -855,7 +855,7 @@ if ($object->id > 0) $num = $db->num_rows($resql); if ($num > 0) { print '
'; - print '
'.$langs->trans("LastCustomerOrders", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllOrders").' '.$num.'
'; + print '
'; print ''; print ''; print ' '; print "\n"; +$arrayofmodules = array(); + foreach ($dirsociete as $dirroot) { $dir = dol_buildpath($dirroot, 0); @@ -388,39 +390,45 @@ foreach ($dirsociete as $dirroot) if ($modCodeTiers->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) continue; if ($modCodeTiers->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - - if ($conf->global->SOCIETE_CODECLIENT_ADDON == "$file") - { - print '\n"; - } - else - { - $disabled = false; - if (! empty($conf->multicompany->enabled) && (is_object($mc) && ! empty($mc->sharings['referent']) && $mc->sharings['referent'] == $conf->entity) ? false : true); - print ''; - } - - print ''; - - print ''; + $arrayofmodules[$file] = $modCodeTiers; } } closedir($handle); } } + +$arrayofmodules = dol_sort_array($arrayofmodules, 'position'); + +foreach($arrayofmodules as $file => $modCodeTiers) +{ + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + + if ($conf->global->SOCIETE_CODECLIENT_ADDON == "$file") + { + print '\n"; + } + else + { + $disabled = (! empty($conf->multicompany->enabled) && (is_object($mc) && ! empty($mc->sharings['referent']) && $mc->sharings['referent'] == $conf->entity) ? false : true); + print ''; + } + + print ''; + + print ''; +} print '
'; @@ -919,7 +919,7 @@ if ($object->id > 0) if ($num >0) { print '
'; - print '
'.$langs->trans("LastSendings", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllSendings").' '.$num.'
'; + print '
'; print ''; print ''; } From fd3f890f7b2b8b06d27820210ad016e079add6f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 14:15:04 +0200 Subject: [PATCH 0726/1148] NEW Can restrict access using DAV module to some host IPs only --- htdocs/admin/dav.php | 9 +++++++-- htdocs/api/admin/index.php | 2 +- htdocs/dav/fileserver.php | 16 ++++++++++++++++ htdocs/langs/en_US/admin.lang | 3 ++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index 005394739f0..f4fbcbbdd59 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -35,7 +35,10 @@ if (!$user->admin) $action = GETPOST('action', 'alpha'); $backtopage = GETPOST('backtopage', 'alpha'); + + $arrayofparameters=array( + 'DAV_RESTICT_ON_IP'=>array('css'=>'minwidth200', 'enabled'=>1), 'DAV_ALLOW_PRIVATE_DIR'=>array('css'=>'minwidth200', 'enabled'=>2), 'DAV_ALLOW_PUBLIC_DIR'=>array('css'=>'minwidth200', 'enabled'=>1), 'DAV_ALLOW_ECM_DIR'=>array('css'=>'minwidth200', 'enabled'=>$conf->ecm->enabled) @@ -82,7 +85,8 @@ if ($action == 'edit') if (isset($val['enabled']) && empty($val['enabled'])) continue; print ''; print ''; print ''; -print ''; +print ''; print ''; print ''; diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index b056ac9730c..4a38511305e 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -55,6 +55,22 @@ if (empty($conf->dav->enabled)) accessforbidden(); +// Restrict API to some IPs +if (! empty($conf->global->DAV_RESTICT_ON_IP)) +{ + $allowedip=explode(' ', $conf->global->DAV_RESTICT_ON_IP); + $ipremote = getUserRemoteIP(); + if (! in_array($ipremote, $allowedip)) + { + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->DAV_RESTICT_ON_IP); + print 'DAV not allowed from the IP '.$ipremote; + header('HTTP/1.1 503 DAV not allowed from your IP '.$ipremote); + //print $conf->global->DAV_RESTICT_ON_IP; + exit(0); + } +} + + $entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : (!empty($conf->entity) ? $conf->entity : 1)); // settings diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index ee3da865377..726ba624434 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,5 +1932,6 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined -RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +RESTICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +RESTICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. BaseOnSabeDavVersion=Based on the library SabreDAV version \ No newline at end of file From ae87b33e818e6933edff19d3a1aa5dc26dfe3a3b Mon Sep 17 00:00:00 2001 From: VESSILLER Date: Tue, 20 Aug 2019 17:04:41 +0200 Subject: [PATCH 0727/1148] NEW add entity in fetch method for contract --- htdocs/contrat/class/contrat.class.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0a2c59ece2c..125352d8004 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -96,6 +96,12 @@ class Contrat extends CommonObject */ public $ref_supplier; + /** + * Entity of the contract + * @var int + */ + public $entity; + /** * Client id linked to the contract * @var int @@ -624,6 +630,7 @@ class Contrat extends CommonObject $sql = "SELECT rowid, statut, ref, fk_soc, mise_en_service as datemise,"; $sql.= " ref_supplier, ref_customer,"; $sql.= " ref_ext,"; + $sql.= " entity,"; $sql.= " fk_user_mise_en_service, date_contrat as datecontrat,"; $sql.= " fk_user_author, fin_validite, date_cloture,"; $sql.= " fk_projet as fk_project,"; @@ -658,6 +665,7 @@ class Contrat extends CommonObject $this->ref_customer = $obj->ref_customer; $this->ref_supplier = $obj->ref_supplier; $this->ref_ext = $obj->ref_ext; + $this->entity = $obj->entity; $this->statut = $obj->statut; $this->mise_en_service = $this->db->jdate($obj->datemise); From d82e60adb7e661174ffee1a9bcd40f0e69caa7c5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 20:31:46 +0200 Subject: [PATCH 0728/1148] Work on namespaces test --- dev/namespacemig/README.md | 4 ++++ dev/namespacemig/aaa.class.php | 23 +++++++++++++++++++++++ dev/namespacemig/bbb.class.php | 25 +++++++++++++++++++++++++ dev/namespacemig/bbb.php | 31 +++++++++++++++++++++++++++++++ dev/namespacemig/main.inc.php | 7 +++++++ 5 files changed, 90 insertions(+) create mode 100644 dev/namespacemig/README.md create mode 100644 dev/namespacemig/aaa.class.php create mode 100644 dev/namespacemig/bbb.class.php create mode 100755 dev/namespacemig/bbb.php create mode 100644 dev/namespacemig/main.inc.php diff --git a/dev/namespacemig/README.md b/dev/namespacemig/README.md new file mode 100644 index 00000000000..981292355ab --- /dev/null +++ b/dev/namespacemig/README.md @@ -0,0 +1,4 @@ +Test to migrate Dolibarr to namespace "Dolibarr". + +Script bbb.php is a script of an external module with current code writing. +It must works after migration. \ No newline at end of file diff --git a/dev/namespacemig/aaa.class.php b/dev/namespacemig/aaa.class.php new file mode 100644 index 00000000000..1070e96f875 --- /dev/null +++ b/dev/namespacemig/aaa.class.php @@ -0,0 +1,23 @@ +do(); + +$aaa = new Aaa(); +$aaa->do(); + +echo $aaa::AAA."\n"; +echo $bbb::BBB."\n"; + +echo Aaa::AAA."\n"; +echo Bbb::BBB."\n"; + +echo faaa()."\n"; +echo fbbb()."\n"; + +echo "globalaaa=$globalaaa\n"; +echo "globalbbb=$globalbbb\n"; diff --git a/dev/namespacemig/main.inc.php b/dev/namespacemig/main.inc.php new file mode 100644 index 00000000000..5709a31f733 --- /dev/null +++ b/dev/namespacemig/main.inc.php @@ -0,0 +1,7 @@ + Date: Tue, 20 Aug 2019 20:32:17 +0200 Subject: [PATCH 0729/1148] Fix RESTRICT_ON_API --- htdocs/admin/dav.php | 4 +++- htdocs/api/admin/index.php | 6 +++--- htdocs/api/index.php | 8 ++++---- htdocs/dav/fileserver.php | 8 ++++---- htdocs/langs/en_US/admin.lang | 4 ++-- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index f4fbcbbdd59..032c4f07e56 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -86,7 +86,9 @@ if ($action == 'edit') print ''; print ''; print ''; -print ''; -print ''; +print ''; +print ''; print ''; print ''; diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 1f1235571cc..c63a376e806 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -207,16 +207,16 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $reg[2] != '/resources.json' && preg_match('/^\/(swagger|resources)\.json\/(.+)$/', $reg[2], $regbis) && $regbis[2] != 'root'))) { // Restrict API to some IPs - if (! empty($conf->global->API_RESTICT_ON_IP)) + if (! empty($conf->global->API_RESTRICT_ON_IP)) { - $allowedip=explode(' ', $conf->global->API_RESTICT_ON_IP); + $allowedip=explode(' ', $conf->global->API_RESTRICT_ON_IP); $ipremote = getUserRemoteIP(); if (! in_array($ipremote, $allowedip)) { - dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTICT_ON_IP); + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP); print 'API not allowed from the IP '.$ipremote; header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); - //print $conf->global->API_RESTICT_ON_IP; + //print $conf->global->API_RESTRICT_ON_IP; exit(0); } } diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index 4a38511305e..dae6565bc93 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -56,16 +56,16 @@ if (empty($conf->dav->enabled)) // Restrict API to some IPs -if (! empty($conf->global->DAV_RESTICT_ON_IP)) +if (! empty($conf->global->DAV_RESTRICT_ON_IP)) { - $allowedip=explode(' ', $conf->global->DAV_RESTICT_ON_IP); + $allowedip=explode(' ', $conf->global->DAV_RESTRICT_ON_IP); $ipremote = getUserRemoteIP(); if (! in_array($ipremote, $allowedip)) { - dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->DAV_RESTICT_ON_IP); + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->DAV_RESTRICT_ON_IP); print 'DAV not allowed from the IP '.$ipremote; header('HTTP/1.1 503 DAV not allowed from your IP '.$ipremote); - //print $conf->global->DAV_RESTICT_ON_IP; + //print $conf->global->DAV_RESTRICT_ON_IP; exit(0); } } diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 726ba624434..ef5d6388f6e 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,6 +1932,6 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined -RESTICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. -RESTICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. +RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. BaseOnSabeDavVersion=Based on the library SabreDAV version \ No newline at end of file From f1b80fc19a1f01cc9457bef9eff2768af787bc68 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Tue, 20 Aug 2019 23:44:30 +0200 Subject: [PATCH 0730/1148] Add 'Direct Cash Payment' button in TakePOS --- htdocs/langs/en_US/cashdesk.lang | 2 ++ htdocs/takepos/admin/setup.php | 8 ++++++++ htdocs/takepos/takepos.php | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 012b6b4c804..628de17efcc 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -70,3 +70,5 @@ TerminalSelect=Select terminal you want to use: POSTicket=POS Ticket BasicPhoneLayout=Use basic layout for phones SetupOfTerminalNotComplete=Setup of terminal %s is not complete +DirectPayment=Direct payment +DirectPaymentButton=Direct cash payment button diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index 3fb9d869cd0..6d33b8a19c2 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -79,6 +79,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_FOOTER", GETPOST('TAKEPOS_FOOTER', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_NUMPAD", GETPOST('TAKEPOS_NUMPAD', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_NUM_TERMINALS", GETPOST('TAKEPOS_NUM_TERMINALS', 'alpha'), 'chaine', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity); if ($conf->global->TAKEPOS_ORDER_NOTES==1) { @@ -223,6 +224,13 @@ $array=array(0=>$langs->trans("Numberspad"), 1=>$langs->trans("BillsCoinsPad")); print $form->selectarray('TAKEPOS_NUMPAD', $array, (empty($conf->global->TAKEPOS_NUMPAD)?'0':$conf->global->TAKEPOS_NUMPAD), 0); print "\n"; +// Direct Payment +print '\n"; + $substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $htmltext = ''.$langs->trans("AvailableVariables").':
'; diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 7260bc81a58..4dc481a98cf 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -575,6 +575,12 @@ function TerminalsDialog() }); } +function DirectPayment(){ + console.log("DirectPayment"); + $("#poslines").load("invoice.php?place"+place+"&action=valid&pay=trans("cash");?>", function() { + }); +} + $( document ).ready(function() { PrintCategories(0); LoadProducts(0); @@ -666,6 +672,10 @@ $menus[$r++]=array('title'=>''
'.$langs->trans("FreeZone").'
', 'action'=>'FreeZone();'); $menus[$r++]=array('title'=>'
'.$langs->trans("Payment").'
', 'action'=>'CloseBill();'); +if ($conf->global->TAKEPOS_DIRECT_PAYMENT){ + $menus[$r++]=array('title'=>'
'.$langs->trans("DirectPayment").'
', 'action'=>'DirectPayment();'); +} + // BAR RESTAURANT specific menu if ($conf->global->TAKEPOS_BAR_RESTAURANT) { From d2d7fb4b04e21f6b6a2025f57c6ef8fc7206a5a1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 21 Aug 2019 03:38:57 +0200 Subject: [PATCH 0731/1148] Fix management of collapsing of extrafields separators. --- htdocs/core/class/extrafields.class.php | 29 ++++++++++++++---------- htdocs/core/tpl/extrafields_view.tpl.php | 8 ++++--- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 09130bb130a..c92ae311141 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1628,7 +1628,7 @@ class ExtraFields if ($hidden) return ''; // This is a protection. If field is hidden, we should just not call this method. //if ($computed) $value = // $value is already calculated into $value before calling this method - + $showsize=0; if ($type == 'date') { @@ -1972,24 +1972,29 @@ class ExtraFields if (count($extrafield_param_list) > 0) { $extrafield_collapse_display_value = intval($extrafield_param_list[0]); if ($extrafield_collapse_display_value == 1 || $extrafield_collapse_display_value == 2) { - $collapse_display = ($extrafield_collapse_display_value == 2 ? false : true); + // Set the collapse_display status to cookie in priority or if ignorecollapsesetup is 1, if cookie and ignorecollapsesetup not defined, use the setup. + $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]; + $out .= ''; $out .= ''; + +print $out; + pFooter($ok?0:1, $setuplang); if (isset($db) && is_object($db)) $db->close(); diff --git a/htdocs/install/step4.php b/htdocs/install/step4.php index 734d63fade9..342ec82d0fd 100644 --- a/htdocs/install/step4.php +++ b/htdocs/install/step4.php @@ -80,7 +80,7 @@ $db=getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf-> if ($db->ok) { print '
'; + print ''; print ''; print '\n"; +// Email template for send invoice +print '\n"; + $substitutionarray=pdf_getSubstitutionArray($langs, null, null, 2); $substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); $htmltext = ''.$langs->trans("AvailableVariables").':
'; From c4b18890d952a2e1611d08b419ebf295c1db6c4c Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:12:56 +0200 Subject: [PATCH 0792/1148] Update invoice.php --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 4737ecbde27..1e11161e8a1 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -511,7 +511,7 @@ print '
'.$sectionwithinvoicelink; print ''; print '
'; print ''; -print ''; +print ''; print "\n"; if ($placeid > 0) From 2be125e647daa8680559a7900cacac959b8a89c1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:47:17 +0200 Subject: [PATCH 0793/1148] Fix display context for takepos in invoice list fix for thirdparty name and create button --- htdocs/compta/facture/list.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 284b747465d..f0c10598f82 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -605,7 +605,7 @@ if ($resql) $massactionbutton=$form->selectMassAction('', $arrayofmassactions); $newcardbutton=''; - if($user->rights->facture->creer) + if($user->rights->facture->creer && $contextpage != 'poslist') { $newcardbutton.= dolGetButtonTitle($langs->trans('NewBill'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/compta/facture/card.php?action=create'); } @@ -1068,7 +1068,14 @@ if ($resql) if (! empty($arrayfields['s.nom']['checked'])) { print ''; if (! $i) $totalarray['nbfield']++; } From 7112fcee9a6031a93294f235f132f55a3ac65906 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:54:14 +0200 Subject: [PATCH 0794/1148] Update list.php --- htdocs/compta/facture/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index f0c10598f82..653f1182d78 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -687,7 +687,7 @@ if ($resql) $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields - if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); + if ($massactionbutton && $contextpage != 'poslist') $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); print '
'; print '
'; @@ -989,7 +989,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'.$langs->trans("LastContracts", ($num<=$MAXLIST?"":$MAXLIST)).'
'; + print '
'; print ''; print '\n"; if (! $i) $totalarray['nbfield']++; From 783e01588c1179eb65afd26ea4c1ff93b9ebcef9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:47:40 +0200 Subject: [PATCH 0705/1148] FIX It was possible to create cashfence without entering data. --- htdocs/compta/cashcontrol/cashcontrol_card.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 1fa95eb0b46..4f67f02d7f5 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -132,7 +132,16 @@ elseif ($action=="add") $error=0; foreach($arrayofpaymentmode as $key=>$val) { - $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); + if (GETPOST($key.'_amount', 'alpha') == '') + { + setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val)), null, 'errors'); + $action='start'; + $error++; + } + else + { + $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); + } } if (! $error) From cef88283b3dc96f12bb6e74a99c1e69e32187225 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:52:18 +0200 Subject: [PATCH 0706/1148] Fix missing error message --- htdocs/langs/en_US/cashdesk.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 8ba3bda053f..749c749293c 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -67,4 +67,5 @@ ValidateAndClose=Validate and close Terminal=Terminal NumberOfTerminals=Number of Terminals TerminalSelect=Select terminal you want to use: -POSTicket=POS Ticket \ No newline at end of file +POSTicket=POS Ticket +SetupOfTerminalNotComplete=Setup of terminal %s is not complete \ No newline at end of file From 71be9f5b3f81c6c1de439ae6144095d3bd1a2532 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 21:01:17 +0200 Subject: [PATCH 0707/1148] Fix test on terminal for 'cashdesk' module --- htdocs/compta/cashcontrol/cashcontrol_card.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 4f67f02d7f5..fed2182e236 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -235,8 +235,15 @@ if ($action=="create" || $action=="start") $posmodule = GETPOST('posmodule', 'alpha'); $terminalid = GETPOST('posnumber', 'alpha'); $terminaltouse = $terminalid; + if ($terminaltouse == '1' && $posmodule=='cashdesk') $terminaltouse = ''; + if ($posmodule=='cashdesk' && $terminaltouse != '' && $terminaltouse != '1') { + $terminaltouse = ''; + setEventMessages($langs->trans("OnlyTerminal1IsAvailableForCashDeskModule"), null, 'errors'); + $error++; + } + // Calculate $initialbalanceforterminal for terminal 0 foreach($arrayofpaymentmode as $key => $val) { @@ -271,7 +278,7 @@ if ($action=="create" || $action=="start") } else { - setEventMessages($langs->trans("SetupOfTerminalNotComplete", $terminalid), null, 'errors'); + setEventMessages($langs->trans("SetupOfTerminalNotComplete", $terminaltouse), null, 'errors'); $error++; } } From 3a0057f6a30b9e0c62dfaf75e94f30ad91e8edf5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 23:59:24 +0200 Subject: [PATCH 0708/1148] FIX too many record in sql request. Whena criteria is a filter, we must use an inner join. --- htdocs/core/lib/company.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 3f1efad3bce..6230f2a545f 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -1317,7 +1317,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= if (! empty($conf->agenda->enabled)) { // Recherche histo sur actioncomm - if (is_object($objcon) && $objcon->id) { + if (is_object($objcon) && $objcon->id > 0) { $sql = "SELECT DISTINCT a.id, a.label,"; } else @@ -1340,7 +1340,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint= $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id"; if (is_object($objcon) && $objcon->id) { - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."actioncomm_resources as r ON a.id = r.fk_actioncomm"; + $sql.= " INNER JOIN ".MAIN_DB_PREFIX."actioncomm_resources as r ON a.id = r.fk_actioncomm"; $sql.= " AND r.element_type = '" . $db->escape($objcon->table_element) . "' AND r.fk_element = " . $objcon->id; } From 2587dc041f947200b225b0b7ebb426496e1b34de Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 09:46:22 +0200 Subject: [PATCH 0709/1148] Minor CSS fix --- htdocs/theme/eldy/info-box.inc.php | 4 +++- htdocs/theme/md/info-box.inc.php | 4 +++- htdocs/theme/md/style.css.php | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index cff05f2b6a6..42a296e9a63 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -93,11 +93,13 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> overflow: hidden; text-overflow: ellipsis; } - .info-box-title{ text-transform: uppercase; font-weight: bold; } +.info-box-text{ + font-size: 0.92em; +} .info-box-text:first-letter{text-transform: uppercase} a.info-box-text{ text-decoration: none;} diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index df9b5c60d8e..de431a06310 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -73,11 +73,13 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> overflow: hidden; text-overflow: ellipsis; } - .info-box-title{ text-transform: uppercase; font-weight: bold; } +.info-box-text{ + font-size: 0.92em; +} .info-box-text:first-letter{text-transform: uppercase} a.info-box-text{ text-decoration: none;} diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 4787166e482..a160773d14b 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -1746,6 +1746,9 @@ div.mainmenu { /* Do not load menu img if hidden to save bandwidth */ + global->MAIN_DISABLE_FONT_AWESOME_5)) { ?> + + div.mainmenu.home{ background-image: url(); From 6abfd8b145483ac448fa84c55fbcd31d9da487dc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 10:01:42 +0200 Subject: [PATCH 0710/1148] Fix use short labels for workboard --- htdocs/compta/bank/class/account.class.php | 2 +- .../paiement/cheque/class/remisecheque.class.php | 1 + htdocs/index.php | 15 --------------- htdocs/langs/en_US/banks.lang | 2 ++ htdocs/theme/eldy/info-box.inc.php | 8 ++++---- htdocs/theme/md/info-box.inc.php | 2 +- 6 files changed, 9 insertions(+), 21 deletions(-) diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index da136313393..282a296a5f1 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -1224,6 +1224,7 @@ class Account extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->bank->rappro->warning_delay/60/60/24; $response->label=$langs->trans("TransactionsToConciliate"); + $response->labelShort = $langs->trans("TransactionsToConciliateShort"); $response->url=DOL_URL_ROOT.'/compta/bank/list.php?leftmenu=bank&mainmenu=bank'; $response->img=img_object('', "payment"); @@ -1275,7 +1276,6 @@ class Account extends CommonObject $this->nb["banklines"]=$obj->nb; } $this->db->free($resql); - return 1; } else { diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index 26e3f2792d6..316215a5caf 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -527,6 +527,7 @@ class RemiseCheque extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->bank->cheque->warning_delay/60/60/24; $response->label=$langs->trans("BankChecksToReceipt"); + $response->labelShort=$langs->trans("BankChecksToReceiptShort"); $response->url=DOL_URL_ROOT.'/compta/paiement/cheque/index.php?leftmenu=checks&mainmenu=bank'; $response->img=img_object('', "payment"); diff --git a/htdocs/index.php b/htdocs/index.php index 28c26965815..bf99db80d21 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -659,21 +659,6 @@ if ($showweather) $boxwork.=''; $boxwork.=''."\n"; -/*if ($showweather) -{ - $boxwork.=''; - $boxwork.=''; - $boxwork.=''; -}*/ - // Show dashboard $nbworkboardempty=0; $isIntopOpenedDashBoard = array(); diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang index c77158e07b7..47295ec7e31 100644 --- a/htdocs/langs/en_US/banks.lang +++ b/htdocs/langs/en_US/banks.lang @@ -73,6 +73,7 @@ BankTransaction=Bank entry ListTransactions=List entries ListTransactionsByCategory=List entries/category TransactionsToConciliate=Entries to reconcile +TransactionsToConciliateShort=To reconcile Conciliable=Can be reconciled Conciliate=Reconcile Conciliation=Reconciliation @@ -116,6 +117,7 @@ DeleteCheckReceipt=Delete this check receipt? ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt? BankChecks=Bank checks BankChecksToReceipt=Checks awaiting deposit +BankChecksToReceiptShort=Checks awaiting deposit ShowCheckReceipt=Show check deposit receipt NumberOfCheques=No. of check DeleteTransaction=Delete entry diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 42a296e9a63..c5bd978144c 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -16,7 +16,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> margin-bottom: 15px; } .info-box.info-box-sm{ - min-height: 70px; + min-height: 80px; margin-bottom: 10px; } @@ -63,8 +63,8 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> background: rgba(0, 0, 0, 0.2); } .info-box-sm .info-box-icon{ - height: 70px; - width: 70px; + height: 80px; + width: 80px; font-size: 25px; line-height: 70px; } @@ -77,7 +77,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> } .info-box-sm .info-box-content{ - margin-left: 70px; + margin-left: 80px; } .info-box-number { display: block; diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index de431a06310..c58079b9b65 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -78,7 +78,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> font-weight: bold; } .info-box-text{ - font-size: 0.92em; + font-size: 12px; } .info-box-text:first-letter{text-transform: uppercase} a.info-box-text{ text-decoration: none;} From 21fc089f585c9ce48e70fcdf08db8c62e2d63e88 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 10:18:38 +0200 Subject: [PATCH 0711/1148] FIX Translation of month --- .../bookkeeping/balancebymonth.php | 18 ++++---------- htdocs/compta/resultat/clientfourn.php | 15 ------------ htdocs/compta/resultat/result.php | 24 +++++++++---------- htdocs/projet/jsgantt_language.js.php | 4 ++-- 4 files changed, 19 insertions(+), 42 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php index b9568228a36..1141accd476 100644 --- a/htdocs/accountancy/bookkeeping/balancebymonth.php +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php @@ -73,19 +73,11 @@ $y = $year_current; print '
'; @@ -1062,7 +1062,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'.$langs->trans("LastInterventions", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllInterventions").' '.$num.'
'; + print '
'; print ''; print ''; print ''; print ''; print ''; @@ -1772,7 +1772,7 @@ class FormFile print ''."\n"; print ''; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 9a39518dfb4..072d7f287a3 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -318,12 +318,12 @@ if (empty($reshook)) { { $error = 0; - if (!$_POST["lastname"]) { + if (! GETPOST("lastname", 'alpha')) { setEventMessages($langs->trans("NameNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; } - if (!$_POST["login"]) { + if (! GETPOST("login", 'alpha')) { setEventMessages($langs->trans("LoginNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; From 18eb2a83fe7c2d01bdb34cceec389a6f9541e1f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:41:53 +0200 Subject: [PATCH 0684/1148] FIX #11671 CVE-2019-15062 --- htdocs/core/actions_linkedfiles.inc.php | 8 +++----- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/user/card.php | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 297f7821599..16ba1669337 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -118,8 +118,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $link = new Link($db); - $link->id = $linkid; - $link->fetch(); + $link->fetch($linkid); $res = $link->delete($user); $langs->load('link'); @@ -153,8 +152,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $langs->load('link'); $link = new Link($db); - $link->id = GETPOST('linkid', 'int'); - $f = $link->fetch(); + $f = $link->fetch(GETPOST('linkid', 'int')); if ($f) { $link->url = GETPOST('link', 'alpha'); @@ -162,7 +160,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l { $link->url = 'http://' . $link->url; } - $link->label = GETPOST('label', 'alpha'); + $link->label = GETPOST('label', 'alphanohtml'); $res = $link->update($user); if (!$res) { diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 2b02ada6b47..a198fba4f98 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1757,7 +1757,7 @@ class FormFile print $langs->trans('Link') . ': '; print ''; print ''; print ''; print ''; @@ -1771,7 +1771,7 @@ class FormFile print ''."\n"; print ''; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index adcf094e7a4..460e345131c 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -309,12 +309,12 @@ if (empty($reshook)) { { $error = 0; - if (!$_POST["lastname"]) { + if (! GETPOST("lastname", 'alpha')) { setEventMessages($langs->trans("NameNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; } - if (!$_POST["login"]) { + if (! GETPOST("login", 'alpha')) { setEventMessages($langs->trans("LoginNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; From dd6007781a994de93d6338d5de4a63e8ae482d0d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 23:35:05 +0200 Subject: [PATCH 0685/1148] Update SECURITY.md --- SECURITY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 63620cf4bf4..a519fdd0fc6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,8 @@ | Version | Supported | | -------- | ------------------ | -| >= 9.0.* | :white_check_mark: | +| <= 8.0.* | :redwhite_check_mark: | +| >= 9.0.* | :x: | ## Reporting a Vulnerability From 789de97b4c9ff58db2f39a60e7060147d8b4ff4f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 23:35:27 +0200 Subject: [PATCH 0686/1148] Update SECURITY.md --- SECURITY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index a519fdd0fc6..d1d34f866bb 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,8 +4,8 @@ | Version | Supported | | -------- | ------------------ | -| <= 8.0.* | :redwhite_check_mark: | -| >= 9.0.* | :x: | +| <= 8.0.* | :x: | +| >= 9.0.* | :green_check_mark: | ## Reporting a Vulnerability From 334e2759a248711426f078f1b81ba6f45f9406b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 23:35:48 +0200 Subject: [PATCH 0687/1148] Update SECURITY.md --- SECURITY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index d1d34f866bb..e5493805733 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,7 +5,7 @@ | Version | Supported | | -------- | ------------------ | | <= 8.0.* | :x: | -| >= 9.0.* | :green_check_mark: | +| >= 9.0.* | :white_check_mark: | ## Reporting a Vulnerability From b1be6bf4f237089f34264568782a7406670cfae4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 01:24:54 +0200 Subject: [PATCH 0688/1148] FIX #11422 Can't edit his own events with standard rights --- htdocs/comm/action/class/actioncomm.class.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index fd91864af04..392cd9255d9 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1262,10 +1262,12 @@ class ActionComm extends CommonObject if (! empty($conf->dol_no_mouse_hover)) $notooltip=1; // Force disable tooltips - if ((!$user->rights->agenda->allactions->read && $this->author->id != $user->id) || (!$user->rights->agenda->myactions->read && $this->author->id == $user->id)) - $option = 'nolink'; + if ((!$user->rights->agenda->allactions->read && $this->authorid != $user->id) || (!$user->rights->agenda->myactions->read && $this->authorid == $user->id)) + { + $option = 'nolink'; + } - $label = $this->label; + $label = $this->label; if (empty($label)) $label=$this->libelle; // For backward compatibility $result=''; From 2285e0d78037703338024ebe967ec2176bd97f04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 02:07:40 +0200 Subject: [PATCH 0689/1148] Make colors less aggressive --- htdocs/index.php | 6 +++++- htdocs/theme/eldy/global.inc.php | 5 ++++- htdocs/theme/eldy/info-box.inc.php | 14 +++++++------- htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- htdocs/theme/md/style.css.php | 4 ++++ 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index b7eebe24063..4cd58ea6495 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -768,7 +768,11 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard= '
'."\n"; $weatherDashBoard.= '
'."\n"; - $weatherDashBoard.= ' '."\n"; + $weatherDashBoard.= ' '; + + $weatherDashBoard.= ' '; + + $weatherDashBoard.= ' '."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 1c49ab1053c..b065fb26937 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3414,6 +3414,10 @@ a.impayee:hover { font-weight: bold; color: #550000; } * Other */ +.opened-dash-board-wrap { + margin-bottom: 25px; +} + div.boximport { min-height: unset; } @@ -5250,7 +5254,6 @@ div.tabsElem a.tab { } - /* ============================================================================== */ /* Public */ /* ============================================================================== */ diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 7aa00c2fade..3159428ce0a 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -120,32 +120,32 @@ a.info-box-text{ text-decoration: none;} background-color: #605ca8 !important; } .bg-infoxbox-action{ - background-color: #d81b60 !important; + background-color: #d84b80 !important; } .bg-infoxbox-propal, .bg-infoxbox-facture, .bg-infoxbox-commande{ - background-color: #dd4b39 !important; + background-color: #abb87b !important; } .bg-infoxbox-supplier_proposal, .bg-infoxbox-invoice_supplier, .bg-infoxbox-order_supplier{ - background-color: #00c0ef !important; + background-color: #40b0cf !important; } .bg-infoxbox-contrat{ - background-color: #00a65a !important; + background-color: #20a68a !important; } .bg-infoxbox-bank_account{ - background-color: #f39c12 !important; + background-color: #e39c42 !important; } .bg-infoxbox-adherent{ //background-color: #f39c12 !important; } .bg-infoxbox-expensereport{ - background-color: #a55114 !important; + background-color: #755114 !important; } .bg-infoxbox-holiday{ - background-color: #cbd81b !important; + background-color: #755114 !important; } diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index cbf1ab000be..05417b11bc7 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -78,9 +78,9 @@ $toolTipFontColor='#333'; $badgePrimary ='#007bff'; $badgeSecondary ='#999999'; $badgeSuccess ='#28a745'; -$badgeDanger ='#dc3545'; +$badgeDanger ='#9f4705'; $badgeWarning ='#ffc107'; -$badgeInfo ='#17a2b8'; +$badgeInfo ='#aaaabb'; $badgeDark ='#343a40'; $badgeLight ='#f8f9fa'; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index c63c38af33a..4329bedde81 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3449,6 +3449,10 @@ a.impayee:hover { font-weight: bold; color: #550000; } * Other */ +.opened-dash-board-wrap { + margin-bottom: 25px; +} + div.boximport { min-height: unset; } From b8e1cc8d163b783b240270c4d0f96ce01e86e285 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 03:42:38 +0200 Subject: [PATCH 0690/1148] Enhance #11643 --- htdocs/admin/delais.php | 38 +++++++++++----------- htdocs/core/lib/functions.lib.php | 10 ++++-- htdocs/core/lib/functions2.lib.php | 50 ++++++++++++++++++++++++++-- htdocs/index.php | 4 +-- htdocs/main.inc.php | 11 ++++--- htdocs/theme/eldy/info-box.inc.php | 23 +++++++------ htdocs/theme/md/info-box.inc.php | 52 ++++++++++++++++-------------- 7 files changed, 122 insertions(+), 66 deletions(-) diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php index 6b46468b916..91e34e66d94 100644 --- a/htdocs/admin/delais.php +++ b/htdocs/admin/delais.php @@ -195,7 +195,6 @@ if ($action == 'edit') { foreach($delays as $delay) { - $value=(! empty($conf->global->{$delay['code']})?$conf->global->{$delay['code']}:0); print '
'; print ''; @@ -235,7 +234,6 @@ else { foreach($delays as $delay) { - $value=(! empty($conf->global->{$delay['code']})?$conf->global->{$delay['code']}:0); print ''; print ''; @@ -300,16 +298,16 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '= '; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<= '; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<= '; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<= '; print '
'; print '
'; @@ -320,16 +318,16 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '=  %'; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<=  %'; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<=  %'; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<=  %'; print '
'; print '
'; @@ -371,19 +369,19 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL0.' %'; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL1.' %'; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL2.' %'; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<= '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL3.' %'; print '
'; - print img_weather($text, 'weather-storm.png', $options); + print img_weather($text, 4, $options); print '> '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL3.' %'; print '
'; print '
'; @@ -391,19 +389,19 @@ if ($action == 'edit') { print '
'; print '
'; - print img_weather($text, 'weather-clear.png', $options); + print img_weather($text, 0, $options); print '= '.$level0; print '
'; - print img_weather($text, 'weather-few-clouds.png', $options); + print img_weather($text, 1, $options); print '<= '.$level1; print '
'; - print img_weather($text, 'weather-clouds.png', $options); + print img_weather($text, 2, $options); print '<= '.$level2; print '
'; - print img_weather($text, 'weather-many-clouds.png', $options); + print img_weather($text, 3, $options); print '<= '.$level3; print '
'; - print img_weather($text, 'weather-storm.png', $options); + print img_weather($text, 4, $options); print '> '.$level3; print '
'; print '
'; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e851509a000..e6a93b99ea4 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -3225,7 +3225,7 @@ function img_object($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, * Show weather picto * * @param string $titlealt Text on alt and title of image. Alt only if param notitle is set to 1. If text is "TextA:TextB", use Text A on alt and Text B on title. - * @param string $picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory. + * @param string|int $picto Name of image file to show (If no extension provided, we use '.png'). Image must be stored into htdocs/theme/common directory. Or level of meteo image (0-4). * @param string $moreatt Add more attribute on img tag * @param int $pictoisfullpath If 1, image path is a full path * @param string $morecss More CSS @@ -3236,7 +3236,13 @@ function img_weather($titlealt, $picto, $moreatt = '', $pictoisfullpath = 0, $mo { global $conf; - if (! preg_match('/(\.png|\.gif)$/i', $picto)) $picto .= '.png'; + if (is_numeric($picto)) + { + $leveltopicto=array(0=>'weather-clear.png', 1=>'weather-few-clouds.png', 2=>'weather-clouds.png', 3=>'weather-many-clouds.png', 4=>'weather-storm.png'); + //return ''; + $picto = $leveltopicto[$picto]; + } + elseif (! preg_match('/(\.png|\.gif)$/i', $picto)) $picto .= '.png'; $path = DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/weather/'.$picto; diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index b4c8f6bf011..9363956d764 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2251,9 +2251,53 @@ function colorValidateHex($color, $allow_white = true) /** - * @param string $hex color in hex - * @param integer $steps Steps should be between -255 and 255. Negative = darker, positive = lighter - * @return string + * Change color to make it less aggressive (ratio is negative) or more aggressive (ratio is positive) + * + * @param string $hex Color in hex ('#AA1122' or 'AA1122' or '#a12' or 'a12') + * @param integer $ratio Default=-50. Note: 0=Component color is unchanged, -100=Component color become 88, +100=Component color become 00 or FF + * @return string New string of color + * @see colorAdjustBrightness() + */ +function colorAgressivity($hex, $ratio = -50) +{ + // Steps should be between -255 and 255. Negative = darker, positive = lighter + $ratio = max(-100, min(100, $ratio)); + + // Normalize into a six character long hex string + $hex = str_replace('#', '', $hex); + if (strlen($hex) == 3) { + $hex = str_repeat(substr($hex, 0, 1), 2).str_repeat(substr($hex, 1, 1), 2).str_repeat(substr($hex, 2, 1), 2); + } + + // Split into three parts: R, G and B + $color_parts = str_split($hex, 2); + $return = '#'; + + foreach ($color_parts as $color) { + $color = hexdec($color); // Convert to decimal + if ($ratio > 0) // We increase aggressivity + { + if ($color > 127) $color += ((255 - $color) * ($ratio / 100)); + if ($color < 128) $color -= ($color * ($ratio / 100)); + } + else // We decrease agressivity + { + if ($color > 128) $color -= (($color - 128) * (abs($ratio) / 100)); + if ($color < 127) $color += ((128 - $color) * (abs($ratio) / 100)); + } + $color = max(0, min(255, $color)); // Adjust color + $return .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); // Make two char hex code + } + + //var_dump($hex.' '.$ratio.' -> '.$return); + return $return; +} + +/** + * @param string $hex Color in hex ('#AA1122' or 'AA1122' or '#a12' or 'a12') + * @param integer $steps Step/offset added to each color component. It should be between -255 and 255. Negative = darker, positive = lighter + * @return string New color with format '#AA1122' + * @see colorAgressivity() */ function colorAdjustBrightness($hex, $steps) { diff --git a/htdocs/index.php b/htdocs/index.php index 4cd58ea6495..d8a8ffab17d 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -769,9 +769,7 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard= '
'."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '; - - $weatherDashBoard.= ' '; - + $weatherDashBoard.= img_weather('', $weather->level, '', 0, 'valignmiddle width50'); $weatherDashBoard.= ' '."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 7c11e6d10a7..a9d217e3df5 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1258,11 +1258,12 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr $themeparam='?lang='.$langs->defaultlang.'&theme='.$conf->theme.(GETPOST('optioncss', 'aZ09')?'&optioncss='.GETPOST('optioncss', 'aZ09', 1):'').'&userid='.$user->id.'&entity='.$conf->entity; $themeparam.=($ext?'&'.$ext:'').'&revision='.$conf->global->MAIN_IHM_PARAMS_REV; if (! empty($_SESSION['dol_resetcache'])) $themeparam.='&dol_resetcache='.$_SESSION['dol_resetcache']; - if (GETPOST('dol_hide_topmenu', 'int')) { $themeparam.='&dol_hide_topmenu='.GETPOST('dol_hide_topmenu', 'int'); } - if (GETPOST('dol_hide_leftmenu', 'int')) { $themeparam.='&dol_hide_leftmenu='.GETPOST('dol_hide_leftmenu', 'int'); } - if (GETPOST('dol_optimize_smallscreen', 'int')) { $themeparam.='&dol_optimize_smallscreen='.GETPOST('dol_optimize_smallscreen', 'int'); } - if (GETPOST('dol_no_mouse_hover', 'int')) { $themeparam.='&dol_no_mouse_hover='.GETPOST('dol_no_mouse_hover', 'int'); } - if (GETPOST('dol_use_jmobile', 'int')) { $themeparam.='&dol_use_jmobile='.GETPOST('dol_use_jmobile', 'int'); $conf->dol_use_jmobile=GETPOST('dol_use_jmobile', 'int'); } + if (GETPOSTISSET('dol_hide_topmenu')) { $themeparam.='&dol_hide_topmenu='.GETPOST('dol_hide_topmenu', 'int'); } + if (GETPOSTISSET('dol_hide_leftmenu')) { $themeparam.='&dol_hide_leftmenu='.GETPOST('dol_hide_leftmenu', 'int'); } + if (GETPOSTISSET('dol_optimize_smallscreen')) { $themeparam.='&dol_optimize_smallscreen='.GETPOST('dol_optimize_smallscreen', 'int'); } + if (GETPOSTISSET('dol_no_mouse_hover')) { $themeparam.='&dol_no_mouse_hover='.GETPOST('dol_no_mouse_hover', 'int'); } + if (GETPOSTISSET('dol_use_jmobile')) { $themeparam.='&dol_use_jmobile='.GETPOST('dol_use_jmobile', 'int'); $conf->dol_use_jmobile=GETPOST('dol_use_jmobile', 'int'); } + if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) { $themeparam.='&THEME_AGRESSIVITY_RATIO='.GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); } if (! defined('DISABLE_JQUERY') && ! $disablejs && $conf->use_javascript_ajax) { diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 3159428ce0a..33bbfdf3491 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -116,36 +116,41 @@ a.info-box-text{ text-decoration: none;} color: #fff !important; } +global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-75; +if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); +?> .bg-infoxbox-project{ - background-color: #605ca8 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-action{ - background-color: #d84b80 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-propal, .bg-infoxbox-facture, .bg-infoxbox-commande{ - background-color: #abb87b !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-supplier_proposal, .bg-infoxbox-invoice_supplier, .bg-infoxbox-order_supplier{ - background-color: #40b0cf !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-contrat{ - background-color: #20a68a !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-bank_account{ - background-color: #e39c42 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-adherent{ - //background-color: #f39c12 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-expensereport{ - background-color: #755114 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-holiday{ - background-color: #755114 !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index 827a38738a4..c02ffef410b 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -95,39 +95,43 @@ a.info-box-text{ text-decoration: none;} .info-box-icon { color: #000 !important; } -/* -.bg-infoxbox-project{ - background-color: #605ca8 !important; +global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-100; +if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); +?> +.bg-infoxbox-project i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-action{ - background-color: #d81b60 !important; +.bg-infoxbox-action i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-propal, -.bg-infoxbox-facture, -.bg-infoxbox-commande{ - background-color: #dd4b39 !important; +.bg-infoxbox-propal i.fa, +.bg-infoxbox-facture i.fa, +.bg-infoxbox-commande i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-supplier_proposal, -.bg-infoxbox-invoice_supplier, -.bg-infoxbox-order_supplier{ - background-color: #00c0ef !important; +.bg-infoxbox-supplier_proposal i.fa, +.bg-infoxbox-invoice_supplier i.fa, +.bg-infoxbox-order_supplier i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-contrat{ - background-color: #00a65a !important; +.bg-infoxbox-contrat i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-bank_account{ - background-color: #f39c12 !important; +.bg-infoxbox-bank_account i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-adherent{ - //background-color: #f39c12 !important; +.bg-infoxbox-adherent i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-expensereport{ - background-color: #a55114 !important; +.bg-infoxbox-expensereport i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -.bg-infoxbox-holiday{ - background-color: #cbd81b !important; +.bg-infoxbox-holiday i.fa{ + color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } -*/ + .fa-dol-action:before { content: "\f073"; From 3f105a97bf4aa70ec6528046176279ea18833315 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 04:56:48 +0200 Subject: [PATCH 0691/1148] Debug the new workboard --- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/commande/class/commande.class.php | 2 +- htdocs/core/lib/functions2.lib.php | 18 +++---- .../class/fournisseur.commande.class.php | 2 +- htdocs/index.php | 51 ++++++++----------- htdocs/langs/en_US/main.lang | 1 + .../class/supplier_proposal.class.php | 4 +- htdocs/theme/eldy/global.inc.php | 2 +- htdocs/theme/eldy/info-box.inc.php | 2 +- htdocs/theme/eldy/theme_vars.inc.php | 19 ++++--- htdocs/theme/md/info-box.inc.php | 2 +- htdocs/theme/md/theme_vars.inc.php | 19 ++++--- 12 files changed, 60 insertions(+), 64 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index f1a6d4eb466..49173eff5fd 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3273,7 +3273,7 @@ class Propal extends CommonObject $delay_warning=$conf->propal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("PropalsToClose"); - $labelShort = $langs->trans("ToClose"); + $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { $delay_warning=$conf->propal->facturation->warning_delay; diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index f9662a562f2..de93ff778c4 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3412,7 +3412,7 @@ class Commande extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->client->warning_delay/60/60/24; $response->label=$langs->trans("OrdersToProcess"); - $response->labelShort = $langs->trans("ToProcess"); + $response->labelShort = $langs->trans("Opened"); $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders'; $response->img=img_object('', "order"); diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 9363956d764..72bdce0f524 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2199,7 +2199,7 @@ function fetchObjectByElement($element_id, $element_type, $element_ref = '') * @param array $arraycolor Array * @param string $colorifnotfound Color code to return if entry not defined or not a RGB format * @return string RGB hex value (without # before). For example: 'FF00FF', '01FF02' - * @see colorStringToArray() + * @see colorStringToArray(), colorHexToRgb() */ function colorArrayToHex($arraycolor, $colorifnotfound = '888888') { @@ -2216,7 +2216,7 @@ function colorArrayToHex($arraycolor, $colorifnotfound = '888888') * @param string $stringcolor String with hex (FFFFFF) or comma RGB ('255,255,255') * @param array $colorifnotfound Color code array to return if entry not defined * @return array RGB hex value (without # before). For example: FF00FF - * @see colorArrayToHex() + * @see colorArrayToHex(), colorHexToRgb() */ function colorStringToArray($stringcolor, $colorifnotfound = array(88,88,88)) { @@ -2233,13 +2233,12 @@ function colorStringToArray($stringcolor, $colorifnotfound = array(88,88,88)) } /** - * @param string $color the color you need to valid - * @param boolean $allow_white in case of white isn't valid + * @param string $color the color you need to valid + * @param boolean $allow_white in case of white isn't valid * @return boolean */ function colorValidateHex($color, $allow_white = true) { - if(!$allow_white && ($color === '#fff' || $color === '#ffffff') ) return false; if(preg_match('/^#[a-f0-9]{6}$/i', $color)) //hex color is valid @@ -2249,7 +2248,6 @@ function colorValidateHex($color, $allow_white = true) return false; } - /** * Change color to make it less aggressive (ratio is negative) or more aggressive (ratio is positive) * @@ -2347,10 +2345,10 @@ function colorLighten($hex, $percent) /** - * @param string $hex color in hex - * @param float $alpha 0 to 1 - * @param bool $returnArray set to 1 to return an array instead of string - * @return string|array + * @param string $hex color in hex + * @param float $alpha 0 to 1 to add alpha channel + * @param bool $return Array set to 1 to return an array instead of string + * @return string|array String or array */ function colorHexToRgb($hex, $alpha = false, $returnArray = false) { diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index a77206d5f42..2edd86d1c10 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -2835,7 +2835,7 @@ class CommandeFournisseur extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SuppliersOrdersToProcess"); - $response->labelShort=$langs->trans("ToProcess"); + $response->labelShort=$langs->trans("Opened"); $response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3&mainmenu=commercial&leftmenu=orders_suppliers'; $response->img=img_object('', "order"); diff --git a/htdocs/index.php b/htdocs/index.php index d8a8ffab17d..28c26965815 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -538,36 +538,36 @@ $dashboardgroup = array ( 'stats' => array ('propal_opened','propal_signed'), ), - 'supplier_proposal' => - array ( - 'groupName' => 'SupplierProposals', - 'stats' => - array ('supplier_proposal_opened','supplier_proposal_signed'), - ), 'commande' => array ( 'groupName' => 'Orders', 'stats' => array ('commande'), ), - 'order_supplier' => - array ( - 'groupName' => 'SuppliersOrders', - 'stats' => - array ('order_supplier'), - ), - 'contrat' => - array ( - 'groupName' => 'Contracts', - 'stats' => - array ('contrat_inactive','contrat_active'), - ), 'facture' => array ( 'groupName' => 'Invoices', 'stats' => array ('facture'), ), + 'contrat' => + array ( + 'groupName' => 'Contracts', + 'stats' => + array ('contrat_inactive','contrat_active'), + ), + 'supplier_proposal' => + array ( + 'groupName' => 'SupplierProposals', + 'stats' => + array ('supplier_proposal_opened','supplier_proposal_signed'), + ), + 'order_supplier' => + array ( + 'groupName' => 'SuppliersOrders', + 'stats' => + array ('order_supplier'), + ), 'invoice_supplier' => array ( 'groupName' => 'BillsSuppliers', @@ -580,12 +580,6 @@ $dashboardgroup = array ( 'stats' => array ('bank_account','RemiseCheque'), ), - /*'RemiseCheque' => - array ( - 'groupName' => 'BankChecks', - 'stats' => - array ('RemiseCheque'), - ),*/ 'Adherent' => array ( 'groupName' => 'Members', @@ -713,8 +707,7 @@ if (!empty($valid_dashboardlines)) $openedDashBoard.= '
'."\n"; $openedDashBoard.= ' '."\n"; $openedDashBoard.= '
'."\n"; - - $openedDashBoard .= ' '.$groupName.'' . "\n"; + $openedDashBoard .= ' '.$groupName.'' . "\n"; foreach($boards as $board) { if(!empty($board->labelShort)){ @@ -764,8 +757,6 @@ if (!empty($valid_dashboardlines)) else $text=$langs->transnoentitiesnoconv("NoItemLate"); $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); - - $weatherDashBoard= '
'."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '; @@ -774,13 +765,13 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; - if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)){ + if($totallatePercentage>0 && !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) { $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", price($totallatePercentage).'%').'' . "\n"; $weatherDashBoard.= ' '.$langs->trans('NActionsLate', $totalLateNumber).'' . "\n"; } else{ $weatherDashBoard.= ' '.$langs->transnoentitiesnoconv("NActionsLate", $totalLateNumber).'' . "\n"; - if($totallatePercentage>0){ + if($totallatePercentage>0) { $weatherDashBoard.= ' '.$langs->trans('NActionsLate', price($totallatePercentage).'%').'' . "\n"; } } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 099cc9a5a12..5c3e30967de 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -989,3 +989,4 @@ ToApprove=To approve GlobalOpenedElemView=Global view NoArticlesFoundForTheKeyword=No article found for the keyword '%s' NoArticlesFoundForTheCategory=No article found for the category +ToAcceptRefuse=To accept | refuse \ No newline at end of file diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 0cab8e5b995..3748aede1c7 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -2279,13 +2279,13 @@ class SupplierProposal extends CommonObject $delay_warning=$conf->supplier_proposal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); - $labelShort = $langs->trans("ToClose"); + $labelShort = $langs->trans("ToAcceptRefuse"); } if ($mode == 'signed') { $delay_warning=$conf->supplier_proposal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered - $labelShort = $langs->trans("ToProcess"); + $labelShort = $langs->trans("ToClose"); } $response = new WorkboardResponse(); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index b065fb26937..abff6a60a44 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3255,7 +3255,7 @@ span.dashboardlineko { vertical-align: middle; } .boxtable { - margin-bottom: 8px !important; + margin-bottom: 25px !important; border-bottom-width: 1px; border-top: px solid rgb(); diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 33bbfdf3491..95478023771 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -117,7 +117,7 @@ a.info-box-text{ text-decoration: none;} } global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-75; if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); ?> diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 05417b11bc7..0902a2eaa75 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -33,16 +33,19 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); $theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); -if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +if (! defined('ISLOADEDBYSTEELSHEET')) // File is run after an include of a php page, not by the style sheet, if the constant is not defined. { - if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250, 190, 30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); - } - else - { - // for now we use the same configuration for all types of color blind - $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250, 190, 30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } } } diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index c02ffef410b..7cd5222934a 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -96,7 +96,7 @@ a.info-box-text{ text-decoration: none;} color: #000 !important; } global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-100; if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); ?> diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 7057a65b8c3..5c27b419820 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -29,16 +29,19 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); $theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); -if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +if (! defined('ISLOADEDBYSTEELSHEET')) // File is run after an include of a php page, not by the style sheet, if the constant is not defined. { - if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); - } - else - { - // for now we use the same configuration for all types of color blind - $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } } } $theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4')); From 75792ea42c49897c1e267c95fa46ef8cac22db02 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 05:33:40 +0200 Subject: [PATCH 0692/1148] Fix css --- htdocs/theme/eldy/info-box.inc.php | 2 +- htdocs/theme/md/info-box.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 95478023771..e2d11389c7b 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -191,7 +191,7 @@ if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RA /* USING FONTAWESOME FOR WEATHER */ .info-box-weather .info-box-icon{ - background: rgba(0, 0, 0, 0); !important; + background: rgba(0, 0, 0, 0.08) !important; } .fa-weather-level0:before{ content: "\f185"; diff --git a/htdocs/theme/md/info-box.inc.php b/htdocs/theme/md/info-box.inc.php index 7cd5222934a..df9b5c60d8e 100644 --- a/htdocs/theme/md/info-box.inc.php +++ b/htdocs/theme/md/info-box.inc.php @@ -170,7 +170,7 @@ if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RA /* USING FONTAWESOME FOR WEATHER */ .info-box-weather .info-box-icon{ - background: rgba(0, 0, 0, 0); !important; + background: #eee !important; } .fa-weather-level0:before{ content: "\f185"; From 58573632aba90c1f594edfbc0cbd5fe917cc4f10 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 06:00:33 +0200 Subject: [PATCH 0693/1148] Fix css --- htdocs/theme/eldy/global.inc.php | 5 +++++ htdocs/theme/md/style.css.php | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index abff6a60a44..7638b083a97 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -5586,6 +5586,11 @@ div.tabsElem a.tab { border-right: none; border-left: none; } + + .box-flex-container { + margin: 0 0 0 -8px !important; + } + } @media only screen and (max-width: 1024px) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 4329bedde81..4787166e482 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -5570,6 +5570,10 @@ border-top-right-radius: 6px; border-left: none; } + .box-flex-container { + margin: 0 0 0 -8px !important; + } + } @media only screen and (max-width: 1024px) From 40f5bbc4bb0857edb14b945d8a81b90e49029ca2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 07:05:49 +0200 Subject: [PATCH 0694/1148] Fix css --- htdocs/theme/eldy/info-box.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index e2d11389c7b..cff05f2b6a6 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -268,6 +268,8 @@ if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RA height: 0; } +/* Disabled. This break the responsive on smartphone .box{ overflow: visible; } +*/ From 063f19fe6768f7186b2f5913c6f74f5350d71d4c Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 18 Aug 2019 09:33:02 +0200 Subject: [PATCH 0695/1148] Cashcontrol TakePOS fixes --- htdocs/compta/cashcontrol/cashcontrol_card.php | 15 +++------------ htdocs/compta/cashcontrol/report.php | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 378d6087cc7..1fa95eb0b46 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -88,7 +88,7 @@ if (empty($backtopage)) $backtopage = dol_buildpath('/compta/cashcontrol/cashcon $backurlforlist = dol_buildpath('/compta/cashcontrol/cashcontrol_list.php', 1); $triggermodname = 'CACHCONTROL_MODIFY'; // Name of trigger action code to execute when we modify record -if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH)) +if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) && empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH1)) { setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors'); } @@ -132,16 +132,7 @@ elseif ($action=="add") $error=0; foreach($arrayofpaymentmode as $key=>$val) { - if (GETPOST($key.'_amount', 'alpha') == '') - { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val)), null, 'errors'); - $action='start'; - $error++; - } - else - { - $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); - } + $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); } if (! $error) @@ -235,7 +226,7 @@ if ($action=="create" || $action=="start") $posmodule = GETPOST('posmodule', 'alpha'); $terminalid = GETPOST('posnumber', 'alpha'); $terminaltouse = $terminalid; - if ($terminaltouse == '1') $terminaltouse = ''; + if ($terminaltouse == '1' && $posmodule=='cashdesk') $terminaltouse = ''; // Calculate $initialbalanceforterminal for terminal 0 foreach($arrayofpaymentmode as $key => $val) diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 6584af5db98..ce0cdeed9fb 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -196,10 +196,18 @@ if ($resql) // Bank account print '
\n"; if (! $i) $totalarray['nbfield']++; From 2ddf7c1d1f4e706a7477c8471be91d6b6a4699c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 17:03:20 +0200 Subject: [PATCH 0696/1148] Fix responsive --- htdocs/main.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index b9b0204bf7e..65464d724b1 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1827,11 +1827,11 @@ function top_menu_user(User $user, Translate $langs) } else $appli.=" ".DOL_VERSION; - $btnUser = ' + $btnUser = ' '; - // Other attributes + // Other attributes $parameters=array(); $reshook=$hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; @@ -639,12 +654,12 @@ else print ''; print ''; } From ad5f2dbe9d36de1e7610eeb856debd6955208f20 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 18:56:58 +0200 Subject: [PATCH 0699/1148] Fix update on id --- htdocs/compta/bank/class/account.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 89a05f3e215..453e7dd5a80 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -749,7 +749,6 @@ class Account extends CommonObject $sql.= ",fk_pays = ".$this->country_id; $sql.= " WHERE rowid = ".$this->id; - $sql.= " AND entity = ".$conf->entity; dol_syslog(get_class($this)."::update", LOG_DEBUG); $result = $this->db->query($sql); From d8d927547f4680dcd007f63236fea6788405fd65 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 19:09:53 +0200 Subject: [PATCH 0700/1148] Fix option ACCOUNTANCY_SHOW_EXPORT_FILES_MENU --- htdocs/core/menus/standard/eldy.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 4522d9067e0..b1c3111034f 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1330,7 +1330,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM if (! empty($conf->comptabilite->enabled)) { // Files - if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) + if ((! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 1) || ! empty($conf->global->ACCOUNTANCY_SHOW_EXPORT_FILES_MENU)) { $newmenu->add("/compta/accounting-files.php?mainmenu=accountancy&leftmenu=accountancy_files", $langs->trans("AccountantFiles"), 0, $user->rights->compta->resultat->lire, '', $mainmenu, 'files'); } From 477384105f0a1127bf183252709cc2ea62fb7f8d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 19:25:36 +0200 Subject: [PATCH 0701/1148] FIX missing test on permission on button to delete ledger record --- htdocs/accountancy/bookkeeping/list.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index 05561f4a9d5..e67b19991b0 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -855,10 +855,12 @@ print "
'; @@ -1167,7 +1167,7 @@ if ($object->id > 0) if ($num > 0) { print '
'; - print '
'.$langs->trans("LatestCustomerTemplateInvoices", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllCustomerTemplateInvoices").' '.$num.'
'; + print '
'; print ''; print ''; } diff --git a/htdocs/website/samples/page-sample-corporatehome.html b/htdocs/website/samples/page-sample-corporatehome.html deleted file mode 100644 index a6e4e64c871..00000000000 --- a/htdocs/website/samples/page-sample-corporatehome.html +++ /dev/null @@ -1,15 +0,0 @@ -
-

__[MAIN_INFO_SOCIETE_NOM]__


-__(MyContainerTitle)__ -
-
-
-
-
__(AnotherContainer)__
-
-
-
-
-
__WEBSITE_CREATE_BY__
-
-
\ No newline at end of file diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html new file mode 100644 index 00000000000..fa83d501350 --- /dev/null +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -0,0 +1,44 @@ + +
+
+__(MyContainerTitle)__ +

+
+ + +
+This is example of dynamic content to get the name of your company (see source of page to see code):
+
+

+name; ?> +
+

+ + +
+This is another example of dynamic content to get meta data of a container/page (see source of page to see code):
+
+
+__(Title)__ : title; ?>
+__(Description)__ : description; ?>
+__(Keywords)__ : keywords; ?>
+__(DateCreation)__ : date_creation, 'dayhour', $weblangs); ?>
+
+
+ + +
+__(AnotherContainer)__ +
+
+ +
+ + +
+

+__(YouCanEditHtmlSource)__ +

+Page created by __WEBSITE_CREATE_BY__ +
+
diff --git a/htdocs/website/samples/page-sample-empty.html b/htdocs/website/samples/page-sample-empty.html index f8dac27cdb2..06615c48265 100644 --- a/htdocs/website/samples/page-sample-empty.html +++ b/htdocs/website/samples/page-sample-empty.html @@ -1,3 +1,3 @@ - -
-
+ +
+
From 3dedb2149af70122f65d286f20274d9c1335c3a5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:12:40 +0200 Subject: [PATCH 0630/1148] Fix edit inline of sections --- .../samples/page-sample-dynamiccontent.html | 20 +++++++++---------- htdocs/website/samples/page-sample-empty.html | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html index fa83d501350..41355f1b29b 100644 --- a/htdocs/website/samples/page-sample-dynamiccontent.html +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -1,23 +1,23 @@ -
+

__(MyContainerTitle)__

-
+ -
+
This is example of dynamic content to get the name of your company (see source of page to see code):
-
+

name; ?>

-
+
This is another example of dynamic content to get meta data of a container/page (see source of page to see code):
-
+
__(Title)__ : title; ?>
__(Description)__ : description; ?>
@@ -27,18 +27,18 @@ __(DateCreation)__ : date_creation, 'day
-
+
__(AnotherContainer)__ -
+
-
+


__(YouCanEditHtmlSource)__

Page created by __WEBSITE_CREATE_BY__
-
+ diff --git a/htdocs/website/samples/page-sample-empty.html b/htdocs/website/samples/page-sample-empty.html index 06615c48265..8caea620d80 100644 --- a/htdocs/website/samples/page-sample-empty.html +++ b/htdocs/website/samples/page-sample-empty.html @@ -1,3 +1,3 @@ -
-
+
+
From a346b052e7aa2d711c22bbd1cea9fba73ec03af0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:37:57 +0200 Subject: [PATCH 0631/1148] Enhance help --- htdocs/langs/en_US/website.lang | 1 + htdocs/website/index.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index edcc6ae1593..d9bc082de09 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -44,6 +44,7 @@ RealURL=Real URL ViewWebsiteInProduction=View web site using home URLs SetHereVirtualHost=Use with Apache/NGinx/...
If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on
%s
then set the name of the virtual host you have created in the properties of web site, so the preview can be done also using this dedicated web server access instead of the internal Dolibarr server. YouCanAlsoTestWithPHPS=Use with PHP embedded server
On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running
php -S 0.0.0.0:8080 -t %s +YouCanAlsoDeployToAnotherWHP=Run your web site with another Dolibarr Hosting provider
If you don't have a web server like Apache or NGinx available on internet, you can export and import your web site onto another Dolibarr instance provided by another Dolibarr hosting provider that provide full integration with the Website module. You can find a list of some Dolibarr hosting providers on https://saas.dolibarr.org CheckVirtualHostPerms=Check also that virtual host has permission %s on files into
%s ReadPerm=Read WritePerm=Write diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 484caf99ba6..c723b71429e 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2038,6 +2038,9 @@ if (! GETPOST('hide_websitemenu')) $htmltext.='
'; $htmltext.='
'; $htmltext.=$langs->trans("YouCanAlsoTestWithPHPS", $dataroot); + $htmltext.='
'; + $htmltext.='
'; + $htmltext.=$langs->trans("YouCanAlsoDeployToAnotherWHP"); } print $form->textwithpicto($linktotestonwebserver, $htmltext, 1, 'none', 'valignmiddle', 0, 2, 'helpvirtualhost'); print ''; From ffece8dd346d7adcf5ec85e1e81b631f9d8518fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:46:48 +0200 Subject: [PATCH 0632/1148] Better link for syntax help --- htdocs/core/class/html.form.class.php | 2 +- htdocs/website/index.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index e829fdf6661..9618c722dd6 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -523,7 +523,7 @@ class Form * @param string $extracss Add a CSS style to td, div or span tag * @param int $noencodehtmltext Do not encode into html entity the htmltext * @param int $notabs 0=Include table and tr tags, 1=Do not include table and tr tags, 2=use div, 3=use span - * @param string $tooltiptrigger ''=Tooltip on hover, 'abc'=Tooltip on click (abc is a unique key) + * @param string $tooltiptrigger ''=Tooltip on hover, 'abc'=Tooltip on click (abc is a unique key, clickable link is on image or on link if param $type='none') * @param int $forcenowrap Force no wrap between text and picto (works with notabs=2 only) * @return string HTML code of text, picto, tooltip */ diff --git a/htdocs/website/index.php b/htdocs/website/index.php index c723b71429e..93b06619f8c 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2393,7 +2393,8 @@ if (! GETPOST('hide_websitemenu')) } else { - print $form->textwithpicto($langs->trans("SyntaxHelp"), $htmltext, 1, 'help', 'inline-block', 1, 2, 'tooltipsubstitution'); + //img_help(($tooltiptrigger != '' ? 2 : 1), $alt) + print $form->textwithpicto($langs->trans("SyntaxHelp").' '.img_help(2, $langs->trans("SyntaxHelp")), $htmltext, 1, 'none', 'inline-block', 1, 2, 'tooltipsubstitution'); } } print ''; // end websitehelp From 056626b8e34a5be28b6ad69357a960900fff2183 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:59:08 +0200 Subject: [PATCH 0633/1148] Nicer toolbar for website menu --- htdocs/theme/eldy/global.inc.php | 6 ++++++ htdocs/theme/md/style.css.php | 6 ++++++ htdocs/website/index.php | 36 ++++++++++++++++---------------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index b05968356ce..a16b20e84a0 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3739,6 +3739,12 @@ tr.visible { background-color: transparent; background-image: none; } +.bordertransp { + background-color: transparent; + background-image: none; + border: 1px solid #aaa; + font-weight: normal; +} .websitebar { border-bottom: 1px solid #ccc; background: #e6e6e6; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 8999a73aaea..6f6d1338deb 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3935,6 +3935,12 @@ tr.visible { color: #000 !important; text-shadow: none; } +.bordertransp { + background-color: transparent; + background-image: none; + border: 1px solid #aaa; + font-weight: normal; +} .websitebar { border-bottom: 1px solid #ccc; background: #eee; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 93b06619f8c..46121913c2b 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1954,27 +1954,27 @@ if (! GETPOST('hide_websitemenu')) print '   '; - print ''; + print ''; if (! $atleastonepage) { - print ''; + print ''; } else { - print ''; + print ''; } //print ''; - print ''; - print ''; + print ''; + print ''; - print ''; + print ''; print '   '; - print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("MediaFiles")).'">'; - //print ''; + print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("MediaFiles")).'">'; + //print ''; /*print ''.dol_escape_htmltag($langs->trans("MediaFiles")).''; print ''; */ - print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; + print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; } print ''; @@ -2228,9 +2228,9 @@ if (! GETPOST('hide_websitemenu')) print '   '; - print ''; + print ''; - print ''; + print ''; print ''."\n"; print '
'; @@ -2284,7 +2284,7 @@ if (! GETPOST('hide_websitemenu')) if ($websitepage->grabbed_from) { - //print ''; + //print ''; print ''.img_picto($langs->trans("OnlyEditionOfSourceForGrabbedContent"), 'switch_off', '', false, 0, 0, '', 'nomarginleft').''; } else @@ -2325,17 +2325,17 @@ if (! GETPOST('hide_websitemenu')) if ($object->fk_default_home > 0 && $pageid == $object->fk_default_home) { //$disabled=' disabled="disabled"'; - //print ''; - print ''; + //print ''; + print ''; } else { //$disabled=''; - //print 'ref.'" class="button nobordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'">'; - print ''; + //print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'">'; + print ''; } - print ''; - print ''; + print ''; + print ''; } } From 59625dceb5f205a281d303d86ad97c47624f0dd4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:03:30 +0200 Subject: [PATCH 0634/1148] Fix phpcs --- htdocs/core/lib/website.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index f4a42074789..28633c5fad9 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -113,7 +113,7 @@ function dolKeepOnlyPhpCode($str) * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html', $containerid='') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html', $containerid = '') { $nbrep = 0; @@ -201,7 +201,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context. */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From c131af5ae1b830dea1758b780c02bb5c62e007a1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:16:52 +0200 Subject: [PATCH 0635/1148] FIX #11672 --- htdocs/core/tpl/objectline_edit.tpl.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/core/tpl/objectline_edit.tpl.php b/htdocs/core/tpl/objectline_edit.tpl.php index ddb737bbdd6..bac9ff997bc 100644 --- a/htdocs/core/tpl/objectline_edit.tpl.php +++ b/htdocs/core/tpl/objectline_edit.tpl.php @@ -116,7 +116,6 @@ $coldisplay=0; $toolbarname='dolibarr_details'; if (! empty($conf->global->FCKEDITOR_ENABLE_DETAILS_FULL)) $toolbarname='dolibarr_notes'; $doleditor=new DolEditor('product_desc', $line->description, '', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT)?164:$conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname, '', false, true, $enable, $nbrows, '98%'); - $doleditor=new DolEditor('product_desc', $line->description, '', (empty($conf->global->MAIN_DOLEDITOR_HEIGHT)?164:$conf->global->MAIN_DOLEDITOR_HEIGHT), $toolbarname, '', false, true, $enable, $nbrows, '98%'); $doleditor->Create(); } else { print ''; From b36df2303be281b4da982c37686f9ceb6e19b384 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:26:46 +0200 Subject: [PATCH 0636/1148] Update movement_list.php --- htdocs/product/stock/movement_list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/stock/movement_list.php b/htdocs/product/stock/movement_list.php index a64a8baa70e..f62b732cf7e 100644 --- a/htdocs/product/stock/movement_list.php +++ b/htdocs/product/stock/movement_list.php @@ -943,7 +943,7 @@ if ($resql) print_liste_field_titre($arrayfields['m.price']['label'], $_SERVER["PHP_SELF"], "m.price", "", $param, '', $sortfield, $sortorder, 'right '); } if (! empty($arrayfields['m.fk_projet']['checked'])) { - print_liste_field_titre($arrayfields['m.fk_projet']['label'],$_SERVER["PHP_SELF"], "m.fk_projet","",$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($arrayfields['m.fk_projet']['label'], $_SERVER["PHP_SELF"], "m.fk_projet", "", $param, 'align="right"', $sortfield, $sortorder); } // Extra fields From 4a083bb0389bb0c922370021f291cfe36130a7ce Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:35:05 +0200 Subject: [PATCH 0637/1148] Update chargesociales.class.php --- htdocs/compta/sociales/class/chargesociales.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index 05169adcf7b..4fd157de9e6 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -317,7 +317,7 @@ class ChargeSociales extends CommonObject $sql.= ", date_ech='".$this->db->idate($this->date_ech)."'"; $sql.= ", periode='".$this->db->idate($this->periode)."'"; $sql.= ", amount='".price2num($this->amount, 'MT')."'"; - $sql.= ", fk_projet='".($this->fk_project > 0 ? $this->db->escape($this->fk_project) : null)."'"; + $sql.= ", fk_projet=".($this->fk_project > 0 ? $this->fk_project : null); $sql.= ", fk_user_modif=".$user->id; $sql.= " WHERE rowid=".$this->id; From ac8bf7b06658a5ac71381611d5e36caf5f6e93cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:48:29 +0200 Subject: [PATCH 0638/1148] Update propal.class.php --- htdocs/comm/propal/class/propal.class.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 1bf1e5a6a69..a2d1e934d35 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1056,6 +1056,14 @@ class Propal extends CommonObject } } + // Add linked object (deprecated, use ->linkedObjectsIds instead) + if (! $error && $this->origin && $this->origin_id) + { + dol_syslog('Deprecated use of linked object, use ->linkedObjectsIds instead', LOG_WARNING); + $ret = $this->add_object_linked(); + if (! $ret) dol_print_error($this->db); + } + /* * Insertion du detail des produits dans la base * Insert products detail in database From f26a13ff137d2489896e0b68fcd4de5d2aff1a1c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:50:18 +0200 Subject: [PATCH 0639/1148] NEW Removed deprecated code that create linked object from ->origin --- htdocs/comm/propal/class/propal.class.php | 8 -------- htdocs/fourn/class/fournisseur.facture.class.php | 11 ----------- .../class/supplier_proposal.class.php | 7 ------- 3 files changed, 26 deletions(-) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 598d34f7093..4767db0e5ad 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1056,14 +1056,6 @@ class Propal extends CommonObject } } - // Add linked object (deprecated, use ->linkedObjectsIds instead) - if (! $error && $this->origin && $this->origin_id) - { - dol_syslog('Deprecated use of linked object, use ->linkedObjectsIds instead', LOG_WARNING); - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } - /* * Insertion du detail des produits dans la base * Insert products detail in database diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 41ac2f126a7..755ea10303c 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -412,17 +412,6 @@ class FactureFournisseur extends CommonInvoice } } - // Add linked object (deprecated, use ->linkedObjectsIds instead) - if (! $error && $this->id && ! empty($this->origin) && ! empty($this->origin_id)) - { - $ret = $this->add_object_linked(); - if (! $ret) - { - dol_print_error($this->db); - $error++; - } - } - if (count($this->lines) && is_object($this->lines[0])) // If this->lines is array of InvoiceLines (preferred mode) { dol_syslog("There is ".count($this->lines)." lines that are invoice lines objects"); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 546a93763a6..a6b240a4532 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -986,13 +986,6 @@ class SupplierProposal extends CommonObject } } - // Add linked object (deprecated, use ->linkedObjectsIds instead) - if (! $error && $this->origin && $this->origin_id) - { - $ret = $this->add_object_linked(); - if (! $ret) dol_print_error($this->db); - } - /* * Insertion du detail des produits dans la base */ From 9f18b3d6904ed19604c2db2f322626595f705d9f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 19:53:38 +0200 Subject: [PATCH 0640/1148] Update commonobject.class.php --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 69b43dbe514..458c6a2563b 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1913,7 +1913,7 @@ abstract class CommonObject * Change the multicurrency rate * * @param double $rate multicurrency rate - * @param int $mode mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency + * @param int $mode mode 1 : amounts in company currency will be recalculated, mode 2 : amounts in foreign currency will be recalculated * @return int >0 if OK, <0 if KO */ public function setMulticurrencyRate($rate, $mode = 1) From c0ac8daa61f976ed80d4097b4ca5e92845a8dd36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:18:12 +0200 Subject: [PATCH 0641/1148] Introduce the color theme "flashy" to use the high contrast color as an option because colors seems too agressive for sensible eyes. --- htdocs/core/lib/usergroups.lib.php | 1 + htdocs/theme/eldy/theme_vars.inc.php | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 81e9c8dea73..7c97c38dd4f 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -956,6 +956,7 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false) $colorBlindOptions = array( 0 => $langs->trans('No'), + 'flashy' => $langs->trans('Flashy'), 'protanopia' => $langs->trans('Protanopia'), 'deuteranopes' => $langs->trans('Deuteranopes'), 'tritanopes' => $langs->trans('Tritanopes'), diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index f3fe44fbd04..6b8ac64a2ec 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,11 +32,18 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); -if(!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +$theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { - // for now we use the same configuration for all types of color blind - $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } } $theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4')); From 17f1962c345a8d680644c6b48e1da89b0a47a872 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:19:18 +0200 Subject: [PATCH 0642/1148] Support theme colors for theme MD --- htdocs/theme/md/theme_vars.inc.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 95ac3abdd34..b200746c330 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -29,6 +29,18 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); $theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php +{ + if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') + { + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + } + else + { + // for now we use the same configuration for all types of color blind + $theme_datacolor = array(array(248, 220, 1), array(9, 85, 187), array(42, 208, 255), array(0, 0, 0), array(169, 169, 169), array(253, 102, 136), array(120, 154, 190), array(146, 146, 55), array(0, 52, 251), array(196, 226, 161), array(222, 160, 41), array(85,135,150), array(150,135,80), array(150,80,150)); + } +} $theme_bgcolor = array(hexdec('F4'),hexdec('F4'),hexdec('F4')); $theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC')); From 56bc7b62ff0b4e5069ffc0bd22a26d9acaa20d96 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:25:08 +0200 Subject: [PATCH 0643/1148] Update products.lang --- htdocs/langs/en_US/products.lang | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang index d9cf127b40d..73e672284de 100644 --- a/htdocs/langs/en_US/products.lang +++ b/htdocs/langs/en_US/products.lang @@ -341,4 +341,3 @@ ErrorDestinationProductNotFound=Destination product not found ErrorProductCombinationNotFound=Product variant not found ActionAvailableOnVariantProductOnly=Action only available on the variant of product ProductsPricePerCustomer=Product prices per customers -GlobalSearchOnExtrafield=Global search : apply on extrafields too (Warning : date format is YYYY-MM-DD) From 64e52789d643392f1ef9fb4f0e477bb9115dddae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:39:47 +0200 Subject: [PATCH 0644/1148] FIX #11591 FIX #11592 --- htdocs/contact/class/contact.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index f1ebeddd30e..bae8632e289 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1216,11 +1216,12 @@ class Contact extends CommonObject public function getCivilityLabel() { global $langs; - $langs->load("dict"); - $code=(! empty($this->civility_id)?$this->civility:(! empty($this->civilite)?$this->civilite:'')); + $code=($this->civility_code ? $this->civility_code : (! empty($this->civility_id)?$this->civility:(! empty($this->civilite)?$this->civilite:''))); if (empty($code)) return ''; - return $langs->getLabelFromKey($this->db, "Civility".$code, "c_civility", "code", "label", $code); + + $langs->load("dict"); + return $langs->getLabelFromKey($this->db, "Civility".$code, "c_civility", "code", "label", $code); } /** From b0f0f655e9d2eea4f50cce60dbb80cd2653d01ac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 20:46:53 +0200 Subject: [PATCH 0645/1148] Update doc --- .github/CONTRIBUTING.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a13037402f8..19c076242f8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -115,12 +115,14 @@ Also, some code changes need a prior approbation: Once a PR has been submitted, you may need to wait for its integration. It is common that the project leader let the PR open for a long delay to allow every developer discuss about the PR. +If the label of PR start with "WIP" (Work In Progress), it will not be analyzed (until you change the label of PR). + If your PR has errors reported by the Continuous Integration Platform, it means your PR is not valid and nothing will be done with it. It will be kept open to allow developers to fix this, or it may be closed several month later. Don't expect anything on your PR if you have such errors, you MUST first fix the Continuous Integration error to have it taken into consideration. If the PR is valid, and is kept open for a long time, a tag will also be added on the PR to describe the status of your PR and why the PR is kept open. By putting your mouse on the tag, you will get a full explanation of the tag/status that explain why your PR has not been integrated yet. -In most cases, it give you information of things you have to do to have the PR taken into consideration (for example a change is requested, a conflict is expected to be solved, some questions were asked). If you have a yellow, red flag of purple flag, don't expect to have your PR validated. You must first provide the answer the flag ask you. The majority of PR are waiting a developer action. +In most cases, it gives you information of things you have to do to have the PR taken into consideration (for example a change is requested, a conflict is expected to be solved, some questions were asked). If you have a yellow, red flag of purple flag, don't expect to have your PR validated. You must first provide the answer the flag ask you. The majority of PR are waiting an action of the developer/author. -Around 95% of submitted PR are reviewed and tagged. Even if this is one of the most important ratio of answered PR in Open Source world, don't expect the core team to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. +Statistics on Dolibarr project shows that around 95% of submitted PR are reviewed and tagged. This is one of the most important ratio of answered PR in Open Source world. Don't expect the core team to reach the 100%. With the increasing popularity of Dolibarr, this ratio will probably decrease in future. ### Resources From 4bed1b9a3d63391b1c12eae9f251ecc695566192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 22:21:31 +0200 Subject: [PATCH 0646/1148] Fix #11683 Correct links to create a new product or service from search results --- htdocs/product/list.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 460e9d5ee45..e7e8f1e4999 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -458,6 +458,10 @@ if ($resql) if($type == Product::TYPE_SERVICE) $rightskey='service'; if($user->rights->{$rightskey}->creer) { + if ($type === "") { + $newcardbutton.= dolGetButtonTitle($langs->trans('NewProduct'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type=0'); + $type = Product::TYPE_SERVICE; + } $label='NewProduct'; if($type == Product::TYPE_SERVICE) $label='NewService'; $newcardbutton.= dolGetButtonTitle($langs->trans($label), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/product/card.php?action=create&type='.$type); From 6a2d37c5c83d1d286c8e57024c16e0015ef59439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 22:49:21 +0200 Subject: [PATCH 0647/1148] Fix code style / CI. --- htdocs/admin/pdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print '
'; // Place customer adress to the ISO location From 0045428c6c623649e998ca1d648d1a36766171c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 23:45:28 +0200 Subject: [PATCH 0648/1148] Fix link --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 28633c5fad9..2421ff19091 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -157,7 +157,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Replace relative link / with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) - $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\4"', $content, -1, $nbrep); + $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\3"', $content, -1, $nbrep); // Replace relative link /xxx.php?a=b&c=d#aaa or /xxx.php?a=b&c=d with dolibarr URL $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php\?([^#\"<>]*)(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2&\3\4"', $content, -1, $nbrep); From bf6f92edf8552cf1c23c2650507ef1abd1815cac Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 23:54:33 +0200 Subject: [PATCH 0649/1148] Fix template --- htdocs/website/samples/page-sample-dynamiccontent.html | 2 +- htdocs/website/samples/page-sample-empty.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html index 41355f1b29b..c0e217dcc72 100644 --- a/htdocs/website/samples/page-sample-dynamiccontent.html +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -1,4 +1,4 @@ - +

__(MyContainerTitle)__ diff --git a/htdocs/website/samples/page-sample-empty.html b/htdocs/website/samples/page-sample-empty.html index 8caea620d80..d68e73870d9 100644 --- a/htdocs/website/samples/page-sample-empty.html +++ b/htdocs/website/samples/page-sample-empty.html @@ -1,3 +1,3 @@ - +
From 31c26edaf722df2ce70d0901853f033aa7915c85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 00:31:55 +0200 Subject: [PATCH 0650/1148] Fix link --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 2421ff19091..1ae45fee768 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -159,7 +159,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\3"', $content, -1, $nbrep); // Replace relative link /xxx.php?a=b&c=d#aaa or /xxx.php?a=b&c=d with dolibarr URL - $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php\?([^#\"<>]*)(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2&\3\4"', $content, -1, $nbrep); + $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php\?([^#\"<>]*)(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2&\3\4"', $content, -1, $nbrep); // Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/ $content = preg_replace('/url\((["\']?)medias\//', 'url(\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); From d70e6e4e9a32dedbf637eadacd2574161f104c36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 02:17:33 +0200 Subject: [PATCH 0651/1148] Fix record file with empty name --- htdocs/website/class/website.class.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 31b10401c8c..147955db4a5 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -1065,6 +1065,8 @@ class Website extends CommonObject { while (! feof($fp)) { + $reg = array(); + // Warning fgets with second parameter that is null or 0 hang. $buf = fgets($fp, 65000); if (preg_match('/^-- Page ID (\d+)\s[^\s]+\s(\d+).*Aliases\s(.*)\s--;/i', $buf, $reg)) @@ -1086,8 +1088,11 @@ class Website extends CommonObject // Regenerate alternative aliases pages foreach($aliasesarray as $aliasshortcuttocreate) { - $filealias=$conf->website->dir_output.'/'.$object->ref.'/'.$aliasshortcuttocreate.'.php'; - dolSavePageAlias($filealias, $object, $objectpagestatic); + if (trim($aliasshortcuttocreate)) + { + $filealias=$conf->website->dir_output.'/'.$object->ref.'/'.trim($aliasshortcuttocreate).'.php'; + dolSavePageAlias($filealias, $object, $objectpagestatic); + } } } } From 08038e5078fea8dfa8755c90b5ec65758f7b4e37 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 02:31:06 +0200 Subject: [PATCH 0652/1148] FIX save of empty files --- htdocs/core/lib/website2.lib.php | 2 +- htdocs/website/class/website.class.php | 11 +++++++---- htdocs/website/index.php | 7 +++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index cf6082f3bd8..357c050afd5 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -61,7 +61,7 @@ function dolSavePageAlias($filealias, $object, $objectpage) global $conf; // Now create the .tpl file (duplicate code with actions updatesource or updatecontent but we need this to save new header) - dol_syslog("We regenerate the alias page filealias=".$filealias); + dol_syslog("dolSavePageAlias We regenerate the alias page filealias=".$filealias); $aliascontent = 'website->dir_output.'/'.$object->ref.'/'.trim($aliasshortcuttocreate).'.php'; - dolSavePageAlias($filealias, $object, $objectpagestatic); + if (trim($aliasshortcuttocreate)) + { + $filealias=$conf->website->dir_output.'/'.$object->ref.'/'.trim($aliasshortcuttocreate).'.php'; + dolSavePageAlias($filealias, $object, $objectpagestatic); + } } } } diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 46121913c2b..273e74858ce 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1393,8 +1393,11 @@ if ($action == 'updatemeta') { foreach($tmpaltaliases as $tmpaliasalt) { - $result=dolSavePageAlias($pathofwebsite.'/'.trim($tmpaliasalt).'.php', $object, $objectpage); - if (! $result) setEventMessages('Failed to write file '.$pathofwebsite.'/'.trim($tmpaliasalt).'.php', null, 'errors'); + if (trim($tmpaliasalt)) + { + $result=dolSavePageAlias($pathofwebsite.'/'.trim($tmpaliasalt).'.php', $object, $objectpage); + if (! $result) setEventMessages('Failed to write file '.$pathofwebsite.'/'.trim($tmpaliasalt).'.php', null, 'errors'); + } } } } From 2510c1e5e46336fb649de246250e39c237e442a7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 03:05:55 +0200 Subject: [PATCH 0653/1148] Better help text --- htdocs/core/lib/website.lib.php | 5 +++-- htdocs/core/tpl/filemanager.tpl.php | 7 ++++--- htdocs/langs/en_US/main.lang | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 1ae45fee768..9805801b4b5 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -154,7 +154,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Protect the link styles.css.php to any replacement that we make after. $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); - // Replace relative link / with dolibarr URL + // Replace relative link '/' with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) $content = preg_replace('/(href=")\/?([^:\"\!]*)\.php(#[^\"<>]*)?\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\3"', $content, -1, $nbrep); @@ -165,7 +165,8 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content = preg_replace('/url\((["\']?)medias\//', 'url(\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); $content = preg_replace('/data-slide-bg=(["\']?)medias\//', 'data-slide-bg=\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); - // ]*src=")(medias\/)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); // ]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT, '/').'\/viewimage))/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php index c0eff19fa84..a178f6400b8 100644 --- a/htdocs/core/tpl/filemanager.tpl.php +++ b/htdocs/core/tpl/filemanager.tpl.php @@ -163,11 +163,12 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg // Show the link to "Root" if ($showroot) { - print '
'; + print ''; } - - print ''; // Place customer adress to the ISO location From 9692ea5faf2ef69bec7328feda1a23092ce55143 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:41:53 +0200 Subject: [PATCH 0668/1148] FIX #11671 CVE-2019-15062 --- htdocs/core/actions_linkedfiles.inc.php | 8 +++----- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/user/card.php | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 72c78cb8a4d..54243494de4 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -125,8 +125,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $link = new Link($db); - $link->id = $linkid; - $link->fetch(); + $link->fetch($linkid); $res = $link->delete($user); $langs->load('link'); @@ -160,8 +159,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save', 'alpha') && GETPOST(' require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $langs->load('link'); $link = new Link($db); - $link->id = GETPOST('linkid', 'int'); - $f = $link->fetch(); + $f = $link->fetch(GETPOST('linkid', 'int')); if ($f) { $link->url = GETPOST('link', 'alpha'); @@ -169,7 +167,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save', 'alpha') && GETPOST(' { $link->url = 'http://' . $link->url; } - $link->label = GETPOST('label', 'alpha'); + $link->label = GETPOST('label', 'alphanohtml'); $res = $link->update($user); if (!$res) { diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 5f63d4db66c..d271f90720c 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1839,7 +1839,7 @@ class FormFile print $langs->trans('Link') . ': '; print ''; print ''; print ''; print ''; @@ -1853,7 +1853,7 @@ class FormFile print ''."\n"; print ''; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 36514aafd8e..13035d1fb0e 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -329,12 +329,12 @@ if (empty($reshook)) { { $error = 0; - if (!$_POST["lastname"]) { + if (! GETPOST("lastname", 'alpha')) { setEventMessages($langs->trans("NameNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; } - if (!$_POST["login"]) { + if (! GETPOST("login", 'alpha')) { setEventMessages($langs->trans("LoginNotDefined"), null, 'errors'); $action = "edit"; // Go back to create page $error ++; From b63c4b74b8e843614e17247554f6f614e53b65fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:56:28 +0200 Subject: [PATCH 0669/1148] Code comment --- htdocs/filefunc.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index b4aa814f2a5..85ede0efd39 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -149,6 +149,7 @@ if (empty($dolibarr_strict_mode)) $dolibarr_strict_mode=0; // For debug in php s // This test check if referrer ($_SERVER['HTTP_REFERER']) is same web site than Dolibarr ($_SERVER['HTTP_HOST']) // when we post forms (we allow GET to allow direct link to access a particular page). // Note about $_SERVER[HTTP_HOST/SERVER_NAME]: http://shiflett.org/blog/2006/mar/server-name-versus-http-host +// See also option $conf->global->MAIN_SECURITY_CSRF_WITH_TOKEN for a stronger CSRF protection. if (! defined('NOCSRFCHECK') && empty($dolibarr_nocsrfcheck)) { if (! empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'GET' && ! empty($_SERVER['HTTP_HOST'])) From 6a5e6754819fefa94259c2bad0c9127f61acfe97 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:59:51 +0200 Subject: [PATCH 0670/1148] Add SECURITY.md file --- SECURITY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..63620cf4bf4 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,12 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | +| -------- | ------------------ | +| >= 9.0.* | :white_check_mark: | + +## Reporting a Vulnerability + +To report a vulnerability, please send an email to security@dolibarr.org +In most cases, after fixing the security, we make an answer by email to say the issue has been fixed. From 1e93d3d7902ecbb662dbc08f5a6b400fd8fc467f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:03:11 +0200 Subject: [PATCH 0671/1148] Prepare v10.0.2 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index 85ede0efd39..94455858e8b 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE', 'Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.1'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c +if (! defined('DOL_VERSION')) define('DOL_VERSION', '10.0.2'); // a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c if (! defined('EURO')) define('EURO', chr(128)); From 48125fd957be6bf8526340b829e297c8d30a35d7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:32:58 +0200 Subject: [PATCH 0672/1148] Fix phpcs --- htdocs/admin/pdf.php | 2 +- htdocs/product/stock/card.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print ''; // Place customer adress to the ISO location diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 89d7258e3cc..a9d3e5979ce 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -74,7 +74,7 @@ if ($id > 0 || ! empty($ref)) { } // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('warehousecard','globalcard')); +$hookmanager->initHooks(array('warehousecard', 'globalcard')); /* * Actions From ee50c41e74d0259e71309eecafa9454eec2eebb8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:32:58 +0200 Subject: [PATCH 0673/1148] Fix phpcs --- htdocs/admin/pdf.php | 2 +- htdocs/product/stock/card.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print ''; // Place customer adress to the ISO location diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index ae2150e8464..1c78d6726d3 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -56,7 +56,7 @@ $backtopage=GETPOST('backtopage', 'alpha'); $result=restrictedArea($user, 'stock'); // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context -$hookmanager->initHooks(array('warehousecard','globalcard')); +$hookmanager->initHooks(array('warehousecard', 'globalcard')); $object = new Entrepot($db); From d51a651ab4811051f6bcfd2317a0f02e3e1b4af3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 17:35:12 +0200 Subject: [PATCH 0674/1148] Fix phpcs --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 64d3b414cf8..58e13f37763 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1910,7 +1910,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE) !== true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; From 898996da4ab4a2109d17f411065e8b75f2f44156 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 21:45:13 +0200 Subject: [PATCH 0675/1148] =?UTF-8?q?FIX=20vulenrability=20in=20uploading?= =?UTF-8?q?=20file=20found=20by=20=E7=BE=8E=E5=88=9B=E7=A7=91=E6=8A=80?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=AE=9E=E9=AA=8C=E5=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/core/lib/files.lib.php | 7 ++++--- htdocs/core/lib/functions.lib.php | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 58e13f37763..1012b825254 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -985,6 +985,7 @@ function dolCheckVirus($src_file) * - This function can be used only into a HTML page context. Use dol_move if you are outside. * - Test on antivirus is always done (if antivirus set). * - Database of files is NOT updated (this is done by dol_add_file_process() that calls this function). + * - Extension .noexe may be added if file is executable and MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED is not set. * * @param string $src_file Source full path filename ($_FILES['field']['tmp_name']) * @param string $dest_file Target full path filename ($_FILES['field']['name']) @@ -1063,15 +1064,15 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable // Security: // We refuse cache files/dirs, upload using .. and pipes into filenames. - if (preg_match('/^\./', $src_file) || preg_match('/\.\./', $src_file) || preg_match('/[<>|]/', $src_file)) + if (preg_match('/^\./', basename($src_file)) || preg_match('/\.\./', $src_file) || preg_match('/[<>|]/', $src_file)) { dol_syslog("Refused to deliver file ".$src_file, LOG_WARNING); return -1; } // Security: - // On interdit fichiers caches, remontees de repertoire ainsi que les pipe dans les noms de fichiers. - if (preg_match('/^\./', $dest_file) || preg_match('/\.\./', $dest_file) || preg_match('/[<>|]/', $dest_file)) + // We refuse cache files/dirs, upload using .. and pipes into filenames. + if (preg_match('/^\./', basename($dest_file)) || preg_match('/\.\./', $dest_file) || preg_match('/[<>|]/', $dest_file)) { dol_syslog("Refused to deliver file ".$dest_file, LOG_WARNING); return -2; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e9f4301f8f2..24a87c15032 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -796,7 +796,8 @@ function dol_size($size, $type = '') */ function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1) { - $filesystem_forbidden_chars = array('<','>','/','\\','?','*','|','"','°'); + // List of special chars for filenames are defined on page https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file + $filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°'); return dol_string_nospecial($unaccent?dol_string_unaccent($str):$str, $newstr, $filesystem_forbidden_chars); } From 019cbc501dade8af4bcd3e0a12f52e690d9ba8ae Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 22:44:02 +0200 Subject: [PATCH 0676/1148] Report a better error message when db is offline. --- htdocs/master.inc.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php index c09a04e8709..fcf68096e6b 100644 --- a/htdocs/master.inc.php +++ b/htdocs/master.inc.php @@ -121,6 +121,25 @@ if (! defined('NOREQUIREDB')) if ($db->error) { + // If we were into a website context + if (! defined('USEDOLIBARREDITOR') && ! defined('USEDOLIBARRSERVER') && ! empty($_SERVER['SCRIPT_FILENAME']) && (strpos($_SERVER['SCRIPT_FILENAME'], DOL_DATA_ROOT.'/website') === 0)) + { + $sapi_type = php_sapi_name(); + if (substr($sapi_type, 0, 3) != 'cgi') http_response_code(503); // To tel search engine this is a temporary error + print '
'; + if (is_object($langs)) + { + $langs->setDefaultLang('auto'); + $langs->load("website"); + print $langs->trans("SorryWebsiteIsCurrentlyOffLine"); + } + else + { + print "SorryWebsiteIsCurrentlyOffLine"; + } + print '
'; + exit; + } dol_print_error($db, "host=".$conf->db->host.", port=".$conf->db->port.", user=".$conf->db->user.", databasename=".$conf->db->name.", ".$db->error); exit; } From 4cea0433b7baa2edf41c3ca4c5bfa04b362105a5 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Fri, 16 Aug 2019 23:33:48 +0200 Subject: [PATCH 0677/1148] If user has not used change control, add total invoice payment --- htdocs/takepos/invoice.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index dfa058068ad..17805a6b060 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -175,6 +175,9 @@ if ($action == 'valid' && $user->rights->facture->creer) $payment->datepaye = $now; $payment->fk_account = $bankaccount; $payment->amounts[$invoice->id] = $amountofpayment; + + // If user has not used change control, add total invoice payment + if ($amountofpayment == 0) $payment->amounts[$invoice->id] = $invoice->total_ttc; $payment->paiementid=$paiementid; $payment->num_payment=$invoice->ref; From ae7ba9ff54a71e2eeffb58d7d52bc7c2f31a5d91 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 15:15:52 +0200 Subject: [PATCH 0678/1148] Doc --- htdocs/core/class/utils.class.php | 2 +- htdocs/core/modules/modSyslog.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index f86d6570e5c..be220c90487 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -802,7 +802,7 @@ class Utils dol_include_once('/core/lib/files.lib.php'); - $nbSaves = ! empty($conf->global->SYSLOG_FILE_SAVES) ? intval($conf->global->SYSLOG_FILE_SAVES) : 14; + $nbSaves = empty($conf->global->SYSLOG_FILE_SAVES) ? 10 : intval($conf->global->SYSLOG_FILE_SAVES); if (empty($conf->global->SYSLOG_FILE)) { $mainlogdir = DOL_DATA_ROOT; diff --git a/htdocs/core/modules/modSyslog.class.php b/htdocs/core/modules/modSyslog.class.php index b754eae2765..164d86522e6 100644 --- a/htdocs/core/modules/modSyslog.class.php +++ b/htdocs/core/modules/modSyslog.class.php @@ -92,7 +92,7 @@ class modSyslog extends DolibarrModules 'objectname' => 'Utils', 'method' => 'compressSyslogs', 'parameters' => '', - 'comment' => 'Compress and archive log files. Warning: batch must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission "rws" on this directory so log files will always have the group and permissions of the web server Operating System group', + 'comment' => 'Compress and archive log files. The number of versions to keep is defined into the setup of module. Warning: Main application cron script must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission "rws" on this directory so log files will always have the group and permissions of the web server Operating System group', 'frequency' => 1, 'unitfrequency' => 3600 * 24, 'priority' => 50, From 79f34074f761e4570b16a1a9acb4844d7f2b6ac3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 15:22:26 +0200 Subject: [PATCH 0679/1148] Fix link to delete job --- htdocs/cron/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 7273640e77e..ba868ed7b5d 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -1,7 +1,7 @@ - * Copyright (C) 2013-2016 Laurent Destailleur + * Copyright (C) 2013-2019 Laurent Destailleur * Copyright (C) 2019 Frédéric France * * This program is free software; you can redistribute it and/or modify @@ -553,7 +553,7 @@ if ($num > 0) } if ($user->rights->cron->delete) { - print "rowid."&action=delete".($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param; + print "rowid."&action=delete".($page?'&page='.$page:'').($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'').$param; print "\" title=\"".dol_escape_htmltag($langs->trans('CronDelete'))."\">".img_picto($langs->trans('CronDelete'), 'delete')."  "; } else { print "trans('NotEnoughPermissions'))."\">".img_picto($langs->trans('NotEnoughPermissions'), 'delete')."   "; From b99b49c542efefab471b555891423c89f9fd6739 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 17:39:31 +0200 Subject: [PATCH 0680/1148] Enhance website module --- htdocs/langs/en_US/main.lang | 2 ++ htdocs/website/class/websitepage.class.php | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 1775ab266bb..528e3ff79aa 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -983,3 +983,5 @@ PaymentInformation=Payment information ValidFrom=Valid from ValidUntil=Valid until NoRecordedUsers=No users +NoArticlesFoundForTheKeyword=No article found for the keyword '%s' +NoArticlesFoundForTheCategory=No article found for the category \ No newline at end of file diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php index 417a1bfc305..23fd1842c89 100644 --- a/htdocs/website/class/websitepage.class.php +++ b/htdocs/website/class/websitepage.class.php @@ -340,7 +340,8 @@ class WebsitePage extends CommonObject return $records; } else { - $this->errors[] = 'Error ' . $this->db->lasterror(); + $this->error = 'Error ' . $this->db->lasterror(); + $this->errors[] = $this->error; dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR); return -1; From ac1203fce3ec1ac713307b6e7b6e6cd3f30b925e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 18:42:43 +0200 Subject: [PATCH 0681/1148] Update template --- .../samples/page-sample-dynamiccontent.html | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/htdocs/website/samples/page-sample-dynamiccontent.html b/htdocs/website/samples/page-sample-dynamiccontent.html index c0e217dcc72..b2dd5acaea4 100644 --- a/htdocs/website/samples/page-sample-dynamiccontent.html +++ b/htdocs/website/samples/page-sample-dynamiccontent.html @@ -42,3 +42,57 @@ __(YouCanEditHtmlSource)__ Page created by __WEBSITE_CREATE_BY__
+ + + + +
+This is an example of a section to show the list of latest 5 articles (container with type "blogpost"), that contains the keyword "mykeyword"...
+ +

Latest Blog posts

+
+ loadLangs(array("main")); + $websitepage = new WebsitePage($db); + $fuser = new User($db); + $arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', 5, 0, array('type_container'=>'blogpost', 'keywords'=>$keyword)); + if (is_numeric($arrayofblogs) && $arrayofblogs < 0) + { + print '
'.$weblangs->trans($websitepage->error).'
'; + } + elseif (is_array($arrayofblogs) && ! empty($arrayofblogs)) + { + foreach($arrayofblogs as $blog) + { + print ''; + } + } + else + { + print '
'; + print '
'; + print $weblangs->trans("NoArticlesFoundForTheKeyword", $keyword); + print '
'; + print '
'; + + } + ?> +
+
\ No newline at end of file From 2147d505c3745161904dcdbf864ab5c6547ad8fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Aug 2019 21:44:37 +0200 Subject: [PATCH 0682/1148] NEW Can restrict API usage to some IP only --- htdocs/api/admin/index.php | 29 ++++++++++++++++++++++++----- htdocs/api/index.php | 15 +++++++++++++++ htdocs/langs/en_US/admin.lang | 1 + 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index ed23151d99b..0ca6786b9b2 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -78,6 +78,12 @@ if ($action == 'setproductionmode') } } +if ($action == 'save') +{ + dolibarr_set_const($db, 'API_RESTICT_ON_IP', GETPOST('API_RESTICT_ON_IP', 'alpha')); +} + + dol_mkdir(DOL_DATA_ROOT.'/api/temp'); // May have been deleted by a purge @@ -93,37 +99,50 @@ print load_fiche_titre($langs->trans("ApiSetup"), $linkback, 'title_setup'); print $langs->trans("ApiDesc")."
\n"; print "
\n"; -//print ''; +print ''; print ''; +print ''; + print '
'; diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php index 2c6580be662..c65c1fde57f 100644 --- a/htdocs/fourn/card.php +++ b/htdocs/fourn/card.php @@ -469,7 +469,7 @@ if ($object->id > 0) $num = $db->num_rows($query); - print '
'.$langs->trans("LastCustomersBills", ($num<=$MAXLIST?"":$MAXLIST)).''.$langs->trans("AllBills").' '.$num.'
'; + print '
'; print ''; print ''."\n"; $nbworkboardempty=0; if (! empty($valid_dashboardlines)) { + $openedDashBoard = ''; + $boxwork.=''; + // README.md + print ''; + print '
'.$langs->trans("ProductsAndServices").''; print ''.$langs->trans("AllProductReferencesOfSupplier").' '.$object->nbOfProductRefs().''; @@ -541,7 +541,7 @@ if ($object->id > 0) if ($num > 0) { - print ''; + print '
'; print ''; print ''; - print ''; - print ''; - // Title - print ''; - print ''; + if (! empty($conf->global->THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION)) + { + // Firstname + print ''; + print ''; + print ''; + + // Title + print ''; + print ''; + } } // Alias names (commercial, trademark or alias names) From 5b1a89bf94e066570ea3ca7b6000d183468b5e2f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 30 Jul 2019 11:55:46 +0200 Subject: [PATCH 0397/1148] Fix php error with const --- htdocs/compta/cashcontrol/cashcontrol_card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 61acf6e3a89..378d6087cc7 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -247,7 +247,7 @@ if ($action=="create" || $action=="start") } // Get the bank account dedicated to this point of sale module/terminal - $vartouse=CASHDESK_ID_BANKACCOUNT_CASH.$terminaltouse; + $vartouse='CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse; $bankid = $conf->global->$vartouse; // This value is ok for 'Terminal 0' for module 'CashDesk' and 'TakePos' (they manage only 1 terminal) // Hook to get the good bank id according to posmodule and posnumber. // @TODO add hook here From a7a2e483c97e3682f4b8adb5cbd8013194793bd4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 16:01:26 +0200 Subject: [PATCH 0398/1148] Update paymentmodes.php --- htdocs/societe/paymentmodes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index e48fe32e4f0..4f525330e79 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -1683,7 +1683,7 @@ if ($socid && $action == 'create' && $user->rights->societe->creer) print ''; print ''; - print ''; + print ''; print ''; print ''; print "\n"; -print ''; -print ''; +print ''; @@ -134,23 +134,26 @@ $atleastonefound = 0; if (! empty($conf->banque->enabled)) { print ''; - print ''; print ''; - print ''; print ''; - print ''; foreach($paiements as $modep) { - if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; + if (in_array($modep->code, array('LIQ', 'CB', 'CHQ'))) continue; // Already managed before $name="CASHDESK_ID_BANKACCOUNT_".$modep->code.$terminaltouse; print ''; - print ''; // Force warehouse (this is not a default value) - print ''; // Force warehouse (this is not a default value) - print '
'; @@ -644,7 +644,7 @@ if ($object->id > 0) if ($num > 0) { - print ''; + print '
'; print ''; print ''; $boxwork.='
'; @@ -717,7 +717,7 @@ if ($object->id > 0) $num = $db->num_rows($resql); if ($num > 0) { - print ''; + print '
'; print ''; print ''; @@ -1267,8 +1271,6 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if (! empty($rib->bic)) { if (! checkSwiftForAccount($rib)) { print ' '.img_picto($langs->trans("SwiftNotValid"), 'warning'); - } else { - print ' '.img_picto($langs->trans("SwiftValid"), 'info'); } } print ''; @@ -1279,6 +1281,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' //print ''; print ''; + print ''; + // FRSTRECUR print ''; } @@ -1531,6 +1535,9 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer) print ''; print ''; + print ''; + print ''; + print ''; print ''; + print ''; + print ''; + print ''; print ''; - print ''; + print ''; print ''; print ''; print ''; print ''; print ''; - print ''; - print ''; + print ''; + print ''; print ''; print ''; + print ''; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totaldebitfield']=$totalarray['nbfield']; $totalarray['totaldebit'] += $line->debit; @@ -692,7 +692,7 @@ if ($num > 0) // Amount credit if (! empty($arrayfields['t.credit']['checked'])) { - print ''; + print ''; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalcreditfield']=$totalarray['nbfield']; $totalarray['totalcredit'] += $line->credit; @@ -754,8 +754,8 @@ if ($num > 0) if ($num < $limit && empty($offset)) print ''; else print ''; } - elseif ($totalarray['totaldebitfield'] == $i) print ''; - elseif ($totalarray['totalcreditfield'] == $i) print ''; + elseif ($totalarray['totaldebitfield'] == $i) print ''; + elseif ($totalarray['totalcreditfield'] == $i) print ''; else print ''; } print ''; From a63a6a58537fda283d8c8fa76733737fa0b7ad4a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 23:49:05 +0200 Subject: [PATCH 0368/1148] FIX Online payment --- htdocs/public/payment/newpayment.php | 44 ++++++++++++++++++++++++++-- htdocs/theme/eldy/global.inc.php | 3 ++ htdocs/theme/md/style.css.php | 3 ++ 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 5d04b6335c7..8c9eb93004f 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1687,26 +1687,51 @@ if ($action != 'dopayment') if ((empty($paymentmethod) || $paymentmethod == 'paybox') && ! empty($conf->paybox->enabled)) { // If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of paybox - print '
'; + print '
'; print '
'; print ''.$langs->trans("CreditOrDebitCard").''; print '
'; + print ' + '; } if ((empty($paymentmethod) || $paymentmethod == 'stripe') && ! empty($conf->stripe->enabled)) { // If STRIPE_PICTO_FOR_PAYMENT is 'cb' we show a picto of a crdit card instead of stripe - print '
'; + print '
'; print '
'; print ''.$langs->trans("CreditOrDebitCard").''; print '
'; + print ' + '; } if ((empty($paymentmethod) || $paymentmethod == 'paypal') && ! empty($conf->paypal->enabled)) { if (empty($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY)) $conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY='integral'; - print '
'; + print '
'; if ($conf->global->PAYPAL_API_INTEGRAL_OR_PAYPALONLY == 'integral') { print '
'; @@ -1718,6 +1743,19 @@ if ($action != 'dopayment') //print '
'.$langs->trans("PaypalAccount").'">'; } print '
'; + print ' + '; } } } diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 58b076a953c..a137b91236f 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -147,6 +147,9 @@ input.buttonpayment, button.buttonpayment, div.buttonpayment { color: #fff; border-radius: 4px; } +div.buttonpayment input:focus { + color: #008; +} .buttonpaymentsmall { font-size: 0.65em; padding-left: 5px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9fad375eade..8999a73aaea 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -376,6 +376,9 @@ div.buttonpayment input { color: #333; cursor: pointer; } +div.buttonpayment input:focus { + color: #008; +} input.buttonpaymentcb { background-image: url(); background-size: 26px; From 9ca4d65965050e02a4afd746f06f2f323c656705 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:12:03 +0200 Subject: [PATCH 0369/1148] Fix stripe error management --- htdocs/public/payment/newpayment.php | 10 ++++++++-- htdocs/stripe/class/stripe.class.php | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 8c9eb93004f..02dc94285f6 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -430,7 +430,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) 'dol_version' => DOL_VERSION, 'dol_entity' => $conf->entity, 'dol_company' => $mysoc->name, // Usefull when using multicompany - 'dol_tax_num' => $taxinfo, + 'dol_tax_num' => $vatnumber, 'ipaddress'=> getUserRemoteIP() ); @@ -455,7 +455,13 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) include_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; $stripe = new Stripe($db); $stripeacc = $stripe->getStripeAccount($service); - $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1); + $customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1); + if (empty($customer)) + { + $error++; + dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERROR, 0, '_stripe'); + setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); + } // Create Stripe card from Token if ($savesource) { diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 6b910236e96..c731637fce6 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -177,6 +177,7 @@ class Stripe extends CommonObject } catch(Exception $e) { + // For exemple, we may have error: 'No such customer: cus_XXXXX; a similar object exists in live mode, but a test mode key was used to make this request.' $this->error = $e->getMessage(); } } From 3112f2b1c564d549440cfbb63fb267237891b15f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:13:49 +0200 Subject: [PATCH 0370/1148] Fix error level --- htdocs/public/payment/newpayment.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 02dc94285f6..e43089f0a8d 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -459,7 +459,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) if (empty($customer)) { $error++; - dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERROR, 0, '_stripe'); + dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERR, 0, '_stripe'); setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); } From 406375bfc444829764b844477a73a810ffb9248a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:17:53 +0200 Subject: [PATCH 0371/1148] Fix error management --- htdocs/public/payment/newpayment.php | 76 +++++++++++++++------------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index e43089f0a8d..0a967cb10a7 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -461,47 +461,51 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled)) $error++; dol_syslog('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, LOG_ERR, 0, '_stripe'); setEventMessages('Failed to get/create stripe customer for thirdparty id = '.$thirdparty_id.' and servicestatus = '.$servicestatus.': '.$stripe->error, null, 'errors'); + $action=''; } // Create Stripe card from Token - if ($savesource) { - $card = $customer->sources->create(array("source" => $stripeToken, "metadata" => $metadata)); - } else { - $card = $stripeToken; - } - - if (empty($card)) + if (! $error) { - $error++; - dol_syslog('Failed to create card record', LOG_WARNING, 0, '_stripe'); - setEventMessages('Failed to create card record', null, 'errors'); - $action=''; - } - else - { - if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; - if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; - if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; + if ($savesource) { + $card = $customer->sources->create(array("source" => $stripeToken, "metadata" => $metadata)); + } else { + $card = $stripeToken; + } - dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_stripe'); - $charge = \Stripe\Charge::create(array( - 'amount' => price2num($amountstripe, 'MU'), - 'currency' => $currency, - 'capture' => true, // Charge immediatly - 'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, - 'metadata' => $metadata, - 'customer' => $customer->id, - 'source' => $card, - 'statement_descriptor' => dol_trunc($FULLTAG, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) - ), array("idempotency_key" => "$FULLTAG", "stripe_account" => "$stripeacc")); - // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) - if (empty($charge)) - { - $error++; - dol_syslog('Failed to charge card', LOG_WARNING, 0, '_stripe'); - setEventMessages('Failed to charge card', null, 'errors'); - $action=''; - } + if (empty($card)) + { + $error++; + dol_syslog('Failed to create card record', LOG_WARNING, 0, '_stripe'); + setEventMessages('Failed to create card record', null, 'errors'); + $action=''; + } + else + { + if (! empty($FULLTAG)) $metadata["FULLTAG"] = $FULLTAG; + if (! empty($dol_id)) $metadata["dol_id"] = $dol_id; + if (! empty($dol_type)) $metadata["dol_type"] = $dol_type; + + dol_syslog("Create charge on card ".$card->id, LOG_DEBUG, 0, '_stripe'); + $charge = \Stripe\Charge::create(array( + 'amount' => price2num($amountstripe, 'MU'), + 'currency' => $currency, + 'capture' => true, // Charge immediatly + 'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref, + 'metadata' => $metadata, + 'customer' => $customer->id, + 'source' => $card, + 'statement_descriptor' => dol_trunc($FULLTAG, 10, 'right', 'UTF-8', 1), // 22 chars that appears on bank receipt (company + description) + ), array("idempotency_key" => "$FULLTAG", "stripe_account" => "$stripeacc")); + // Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...) + if (empty($charge)) + { + $error++; + dol_syslog('Failed to charge card', LOG_WARNING, 0, '_stripe'); + setEventMessages('Failed to charge card', null, 'errors'); + $action=''; + } + } } } else From 79bb9d951f5a47c786200006a89177ccfce9b950 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 01:36:05 +0200 Subject: [PATCH 0372/1148] Fix phpcs --- htdocs/expensereport/class/expensereport.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 4cc935f95a2..2d9795e6f59 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1181,7 +1181,6 @@ class ExpenseReport extends CommonObject } } } - } } From ecc0b4ed32a13646fcfb277dbd5c1ef0531889b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 02:16:21 +0200 Subject: [PATCH 0373/1148] Add prefixsession in event table --- htdocs/admin/tools/listevents.php | 76 ++++++++++++++++++++++++------ htdocs/core/class/events.class.php | 34 +++++++++++-- 2 files changed, 92 insertions(+), 18 deletions(-) diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php index 39ed6162f0f..bcb727f1fcb 100644 --- a/htdocs/admin/tools/listevents.php +++ b/htdocs/admin/tools/listevents.php @@ -56,11 +56,12 @@ $pagenext = $page + 1; if (! $sortfield) $sortfield="dateevent"; if (! $sortorder) $sortorder="DESC"; -$search_code = GETPOST("search_code"); -$search_ip = GETPOST("search_ip"); -$search_user = GETPOST("search_user"); -$search_desc = GETPOST("search_desc"); -$search_ua = GETPOST("search_ua"); +$search_code = GETPOST("search_code", "alpha"); +$search_ip = GETPOST("search_ip", "alpha"); +$search_user = GETPOST("search_user", "alpha"); +$search_desc = GETPOST("search_desc", "alpha"); +$search_ua = GETPOST("search_ua", "none"); +$search_prefix_session = GETPOST("search_prefix_session", "none"); if (GETPOST("date_startmonth") == '' || GETPOST("date_startmonth") > 0) $date_start=dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear")); else $date_start=-1; @@ -91,6 +92,8 @@ $date_endday = $tmp['mday']; $date_endmonth = $tmp['mon']; $date_endyear = $tmp['year']; +$arrayfields=array(); + /* * Actions @@ -108,6 +111,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x' $search_user=''; $search_desc=''; $search_ua=''; + $search_prefix_session=''; } // Purge audit events @@ -136,6 +140,7 @@ if ($action == 'confirm_purge' && $confirm == 'yes' && $user->admin) $securityevent->type='SECURITY_EVENTS_PURGE'; $securityevent->dateevent=$now; $securityevent->description=$text; + $result=$securityevent->create($user); if ($result > 0) { @@ -163,7 +168,7 @@ $userstatic=new User($db); $usefilter=0; $sql = "SELECT e.rowid, e.type, e.ip, e.user_agent, e.dateevent,"; -$sql.= " e.fk_user, e.description,"; +$sql.= " e.fk_user, e.description, e.prefix_session,"; $sql.= " u.login"; $sql.= " FROM ".MAIN_DB_PREFIX."events as e"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON u.rowid = e.fk_user"; @@ -175,6 +180,7 @@ if ($search_ip) { $usefilter++; $sql.=natural_search("e.ip", $search_ip, 0); } if ($search_user) { $usefilter++; $sql.=natural_search("u.login", $search_user, 0); } if ($search_desc) { $usefilter++; $sql.=natural_search("e.description", $search_desc, 0); } if ($search_ua) { $usefilter++; $sql.=natural_search("e.user_agent", $search_ua, 0); } +if ($search_prefix_session) { $usefilter++; $sql.=natural_search("e.prefix_session", $search_prefix_session, 0); } $sql.= $db->order($sortfield, $sortorder); // Count total nb of records @@ -207,6 +213,7 @@ if ($result) if ($search_user) $param.='&search_user='.urlencode($search_user); if ($search_desc) $param.='&search_desc='.urlencode($search_desc); if ($search_ua) $param.='&search_ua='.urlencode($search_ua); + if ($search_prefix_sessiona) $param.='&search_prefix_session='.urlencode($search_prefix_session); if ($date_startmonth) $param.= "&date_startmonth=".urlencode($date_startmonth); if ($date_startday) $param.= "&date_startday=".urlencode($date_startday); if ($date_startyear) $param.= "&date_startyear=".urlencode($date_startyear); @@ -239,22 +246,36 @@ if ($result) print '
'; print ''; // IP print ''; print ''; print ''; + if (! empty($arrayfields['e.user_agent']['checked'])) + { + print ''; + } + + if (! empty($arrayfields['e.prefix_session']['checked'])) + { + print ''; + } + print ''; - print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "e.dateevent", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Code", $_SERVER["PHP_SELF"], "e.type", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("IP", $_SERVER["PHP_SELF"], "e.ip", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("User", $_SERVER["PHP_SELF"], "u.login", "", $param, 'align="left"', $sortfield, $sortorder); - print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "e.description", "", $param, 'align="left"', $sortfield, $sortorder); + print_liste_field_titre("Date", $_SERVER["PHP_SELF"], "e.dateevent", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Code", $_SERVER["PHP_SELF"], "e.type", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("IP", $_SERVER["PHP_SELF"], "e.ip", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("User", $_SERVER["PHP_SELF"], "u.login", "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Description", $_SERVER["PHP_SELF"], "e.description", "", $param, '', $sortfield, $sortorder); + if (! empty($arrayfields['e.user_agent']['checked'])) + { + print_liste_field_titre("UserAgent", $_SERVER["PHP_SELF"], "e.user_agent", "", $param, '', $sortfield, $sortorder); + } + if (! empty($arrayfields['e.prefix_session']['checked'])) + { + print_liste_field_titre("PrefixSession", $_SERVER["PHP_SELF"], "e.prefix_session", "", $param, '', $sortfield, $sortorder); + } print_liste_field_titre(''); print "\n"; @@ -312,9 +341,26 @@ if ($result) print $text; print ''; + if (! empty($arrayfields['e.user_agent']['checked'])) + { + // User agent + print ''; + } + + if (! empty($arrayfields['e.prefix_session']['checked'])) + { + // User agent + print ''; + } + // More informations print ''; diff --git a/htdocs/core/class/events.class.php b/htdocs/core/class/events.class.php index af87e25fad1..57a076963fd 100644 --- a/htdocs/core/class/events.class.php +++ b/htdocs/core/class/events.class.php @@ -63,11 +63,20 @@ class Events // extends CommonObject public $dateevent; + public $ip; + + public $user_agent; + /** * @var string description */ public $description; + /** + * @var string Prefix session obtained with method dol_getprefix() + */ + public $prefix_session; + // List of all Audit/Security events supported by triggers public $eventstolog=array( array('id'=>'USER_LOGIN', 'test'=>1), @@ -108,6 +117,18 @@ class Events // extends CommonObject ); + // BEGIN MODULEBUILDER PROPERTIES + /** + * @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor. + */ + public $fields=array( + 'rowid' =>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'noteditable'=>1, 'notnull'=> 1, 'index'=>1, 'position'=>1, 'comment'=>'Id'), + 'entity' =>array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>20), + 'prefix_session'=>array('type'=>'varchar(255)', 'label'=>'PrefixSession', 'enabled'=>1, 'visible'=>-1, 'notnull'=>-1, 'index'=>0, 'position'=>1000), + 'user_agent' =>array('type'=>'varchar(255)', 'label'=>'UserAgent', 'enabled'=>1, 'visible'=>-1, 'notnull'=> 1, 'default'=>0, 'index'=>1, 'position'=>1000), + ); + + /** * Constructor * @@ -144,7 +165,8 @@ class Events // extends CommonObject $sql.= "user_agent,"; $sql.= "dateevent,"; $sql.= "fk_user,"; - $sql.= "description"; + $sql.= "description,"; + $sql.= "prefix_session"; $sql.= ") VALUES ("; $sql.= " '".$this->db->escape($this->type)."',"; $sql.= " ".$conf->entity.","; @@ -152,7 +174,8 @@ class Events // extends CommonObject $sql.= " ".($this->user_agent ? "'".$this->db->escape(dol_trunc($this->user_agent, 250))."'" : 'NULL').","; $sql.= " '".$this->db->idate($this->dateevent)."',"; $sql.= " ".($user->id?"'".$this->db->escape($user->id)."'":'NULL').","; - $sql.= " '".$this->db->escape(dol_trunc($this->description, 250))."'"; + $sql.= " '".$this->db->escape(dol_trunc($this->description, 250))."',"; + $sql.= " '".$this->db->escape(dol_getprefix())."'"; $sql.= ")"; dol_syslog(get_class($this)."::create", LOG_DEBUG); @@ -222,7 +245,8 @@ class Events // extends CommonObject $sql.= " t.dateevent,"; $sql.= " t.description,"; $sql.= " t.ip,"; - $sql.= " t.user_agent"; + $sql.= " t.user_agent,"; + $sql.= " t.prefix_session"; $sql.= " FROM ".MAIN_DB_PREFIX."events as t"; $sql.= " WHERE t.rowid = ".$id; @@ -242,6 +266,7 @@ class Events // extends CommonObject $this->description = $obj->description; $this->ip = $obj->ip; $this->user_agent = $obj->user_agent; + $this->prefix_session = $obj->prefix_session; } $this->db->free($resql); @@ -293,5 +318,8 @@ class Events // extends CommonObject $this->type=''; $this->dateevent=time(); $this->description='This is a specimen event'; + $this->ip = '1.2.3.4'; + $this->user_agent = 'Mozilla specimen User Agent X.Y'; + $this->prefix_session = dol_getprefix(); } } From cd22cc70c8a307f4feda0cde338b7a799712fdb3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 06:41:51 +0200 Subject: [PATCH 0374/1148] FIX FEC Format - Save translation of the journal --- htdocs/accountancy/class/bookkeeping.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php index 21e43b524d7..67633e828a5 100644 --- a/htdocs/accountancy/class/bookkeeping.class.php +++ b/htdocs/accountancy/class/bookkeeping.class.php @@ -472,14 +472,15 @@ class BookKeeping extends CommonObject */ public function createStd(User $user, $notrigger = false, $mode='') { - global $conf; + global $conf, $langs; + + $langs->loadLangs(array("accountancy", "bills", "compta")); dol_syslog(__METHOD__, LOG_DEBUG); $error = 0; // Clean parameters - if (isset($this->doc_type)) { $this->doc_type = trim($this->doc_type); } @@ -546,7 +547,7 @@ class BookKeeping extends CommonObject $now = dol_now(); // Check parameters - // Put here code to add control on parameters values + $this->journal_label = $langs->trans($this->journal_label); // Insert request $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . $mode.' ('; From 7a9f2b43c508958104281304c6215446c93cc4f6 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 07:05:18 +0200 Subject: [PATCH 0375/1148] FIX Language key --- htdocs/adherents/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index f0d8df454cf..a86975b606f 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1161,7 +1161,7 @@ else } // Morphy $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; From cededd97d28b2ab22d72a8ef2ae84512a8bb2e96 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 08:52:08 +0200 Subject: [PATCH 0376/1148] FIX Language key --- htdocs/adherents/card.php | 2 +- htdocs/adherents/type.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php index 373e8b953f6..c6ec8569a09 100644 --- a/htdocs/adherents/card.php +++ b/htdocs/adherents/card.php @@ -1181,7 +1181,7 @@ else } // Morphy $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 19790159c22..4251ba45ab9 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -342,7 +342,7 @@ if ($action == 'create') // Morphy $morphys[""] = $langs->trans("MorPhy"); $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; @@ -775,7 +775,7 @@ if ($rowid > 0) // Morphy $morphys[""] = $langs->trans("MorPhy"); $morphys["phy"] = $langs->trans("Physical"); - $morphys["mor"] = $langs->trans("Morale"); + $morphys["mor"] = $langs->trans("Moral"); print '"; From 858e8a826f3a0a8ddab94061ffa574b029233148 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Fri, 26 Jul 2019 14:42:59 +0200 Subject: [PATCH 0377/1148] FIX: use rounding to compare the amounts --- ...e_20_modWorkflow_WorkflowManager.class.php | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php index e478e265652..5c13e372640 100644 --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php @@ -105,8 +105,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Propal::STATUS_SIGNED || $element->statut == Propal::STATUS_BILLED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked proposals = ".$totalonlinkedelements.", of order = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['propal'] as $element) { $ret=$element->classifyBilled($user); @@ -134,7 +134,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Commande::STATUS_VALIDATED || $element->statut == Commande::STATUS_SHIPMENTONPROCESS || $element->statut == Commande::STATUS_CLOSED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked orders = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) { foreach($object->linkedObjects['commande'] as $element) { @@ -157,8 +157,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Propal::STATUS_SIGNED || $element->statut == Propal::STATUS_BILLED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked proposals = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['propal'] as $element) { $ret=$element->classifyBilled($user); @@ -186,8 +186,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == CommandeFournisseur::STATUS_ACCEPTED || $element->statut == CommandeFournisseur::STATUS_ORDERSENT || $element->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY || $element->statut == CommandeFournisseur::STATUS_RECEIVED_COMPLETELY) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked orders = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['order_supplier'] as $element) { $ret=$element->classifyBilled($user); @@ -209,8 +209,8 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == SupplierProposal::STATUS_SIGNED || $element->statut == SupplierProposal::STATUS_BILLED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked supplier proposals = ".$totalonlinkedelements.", of supplier invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) - { + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) + { foreach($object->linkedObjects['supplier_proposal'] as $element) { $ret=$element->classifyBilled($user); @@ -237,7 +237,7 @@ class InterfaceWorkflowManager extends DolibarrTriggers if ($element->statut == Commande::STATUS_VALIDATED || $element->statut == Commande::STATUS_SHIPMENTONPROCESS || $element->statut == Commande::STATUS_CLOSED) $totalonlinkedelements += $element->total_ht; } dol_syslog( "Amount of linked orders = ".$totalonlinkedelements.", of invoice = ".$object->total_ht.", egality is ".($totalonlinkedelements == $object->total_ht) ); - if ( ($totalonlinkedelements == $object->total_ht) || (! empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) ) + if ($this->shouldClassify($conf, $totalonlinkedelements, $object->total_ht)) { foreach($object->linkedObjects['commande'] as $element) { @@ -310,4 +310,26 @@ class InterfaceWorkflowManager extends DolibarrTriggers return 0; } + /** + * @param Object $conf Dolibarr settings object + * @param float $totalonlinkedelements Sum of total amounts (excl VAT) of + * invoices linked to $object + * @param float $object_total_ht The total amount (excl VAT) of the object + * (an order, a proposal, a bill, etc.) + * @return bool True if the amounts are equal (arithmetic errors within tolerance margin) + * True if the module is configured to skip the amount equality check + * False otherwise. + */ + private function shouldClassify($conf, $totalonlinkedelements, $object_total_ht) + { + // if the configuration allows unmatching amounts, allow classification anyway + if (!empty($conf->global->WORKFLOW_CLASSIFY_IF_AMOUNTS_ARE_DIFFERENTS)) { + return true; + } + // if the rounded amount difference is zero, allow classification, else deny + return 0 == round( + $totalonlinkedelements - $object_total_ht, + $conf->global->MAIN_MAX_DECIMALS_UNIT + ); + } } From 56f124844c353306307728f17eb3ba211a8710b9 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 10:04:28 +0200 Subject: [PATCH 0378/1148] Test in progress --- .../class/accountancyexport.class.php | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 1b477a57ae9..904388db64d 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -938,20 +938,14 @@ class AccountancyExport $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); - if ($line->doc_type == 'supplier_invoice') { - $type_enregistrement = 'F'; - } elseif ($line->doc_type == 'customer_invoice') { - $type_enregistrement = 'C'; - } else { - $type_enregistrement = 'E'; - } + $type_enregistrement = 'E'; // For write movement print $type_enregistrement . $separator; - print $line->code_journal . $separator; + print substr($line->code_journal, 0, 2) . $separator; print $line->id . $separator; print $line->piece_num . $separator; print $date_document . $separator; print $line->label_operation . $separator; - print $separator; + print $line->date_lim_reglement . $separator; if ($line->doc_type == 'supplier_invoice') { if ($line->montant < 0) { @@ -969,9 +963,18 @@ class AccountancyExport $nature_piece = ''; } print $nature_piece . $separator; + if (! empty($line->subledger_account)) { - print $line->numero_compte . $separator; + if ($line->doc_type == 'supplier_invoice') { + $racine_subledger_account = '40'; + } elseif ($line->doc_type == 'customer_invoice') { + $racine_subledger_account = '41'; + } else { + $nature_piece = ''; + } + print $racine_subledger_account . $separator; } + print price(abs($line->montant)) . $separator; print $line->sens . $separator; print length_accountg($line->numero_compte) . $separator; @@ -984,11 +987,11 @@ class AccountancyExport } if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { - print 'F' . $separator; + print 'F'; } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { - print 'C' . $separator; + print 'C'; } else { - print $separator; + print ''; } print $end_line; } From a5e3adc6f1453a3719fa0aeda7a8e01fe2ffb5cc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 10:51:17 +0200 Subject: [PATCH 0379/1148] Fix travis --- htdocs/bom/class/bom.class.php | 4 ++-- htdocs/comm/propal/class/propal.class.php | 4 ++-- htdocs/commande/class/commande.class.php | 4 ++-- htdocs/compta/facture/class/facture.class.php | 4 ++-- htdocs/contrat/class/contrat.class.php | 4 ++-- htdocs/expedition/class/expedition.class.php | 4 ++-- htdocs/expensereport/class/expensereport.class.php | 4 ++-- htdocs/fichinter/class/fichinter.class.php | 4 ++-- htdocs/fourn/class/fournisseur.commande.class.php | 4 ++-- htdocs/fourn/class/fournisseur.facture.class.php | 4 ++-- htdocs/livraison/class/livraison.class.php | 4 ++-- htdocs/reception/class/reception.class.php | 4 ++-- htdocs/supplier_proposal/class/supplier_proposal.class.php | 4 ++-- 13 files changed, 26 insertions(+), 26 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index dd861d5dc47..40b4e89dfc5 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -584,8 +584,8 @@ class BOM extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'bom/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'bom/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 5de2c9b23f5..d957235d967 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1809,8 +1809,8 @@ class Propal extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'propale/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'propale/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index d0e0addbc94..15156688603 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -425,8 +425,8 @@ class Commande extends CommonOrder if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'commande/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 2a9a4f5686d..216282d369e 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2419,8 +2419,8 @@ class Facture extends CommonInvoice if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'facture/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'facture/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0b08d3723da..bfc18faf123 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -487,8 +487,8 @@ class Contrat extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'contract/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'contract/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 37f191a0ab0..3205a245285 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -814,8 +814,8 @@ class Expedition extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/sending/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/sending/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 2d9795e6f59..63b0b798a29 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1152,8 +1152,8 @@ class ExpenseReport extends CommonObject require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expensereport/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expensereport/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index ce066fc8c11..c987e6ffc58 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -577,8 +577,8 @@ class Fichinter extends CommonObject require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'ficheinter/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'ficheinter/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index b32e90c311d..c85bfaaf2d3 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -552,8 +552,8 @@ class CommandeFournisseur extends CommonOrder if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/commande/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index b13925bf29d..31780d33ed5 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1420,8 +1420,8 @@ class FactureFournisseur extends CommonInvoice if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index f24a2aee713..88cf4e1355a 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -442,8 +442,8 @@ class Livraison extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/receipt/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/receipt/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 84f95e40b9a..e89eb2c595b 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -644,8 +644,8 @@ class Reception extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'reception/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'reception/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 786485ad6dd..cb4f774a951 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1485,8 +1485,8 @@ class SupplierProposal extends CommonObject if (preg_match('/^[\(]?PROV/i', $this->ref)) { // Now we rename also files into index - $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->newref."'"; - $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'supplier_proposal/".$this->ref."' and entity = ".$conf->entity; + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->db->escape($this->newref)."'"; + $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'supplier_proposal/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } From f82571120675a2b22606d13f9f0077e1fbb506dd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 11:01:29 +0200 Subject: [PATCH 0380/1148] Code comment --- htdocs/core/modules/societe/modules_societe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/societe/modules_societe.class.php b/htdocs/core/modules/societe/modules_societe.class.php index d185b4cfcf7..4a873847d8a 100644 --- a/htdocs/core/modules/societe/modules_societe.class.php +++ b/htdocs/core/modules/societe/modules_societe.class.php @@ -393,7 +393,7 @@ abstract class ModeleAccountancyCode * @param int $hidedesc Hide description * @param int $hideref Hide ref * @return int <0 if KO, >0 if OK - * @deprecated Use the new function generateDocument of Facture class + * @deprecated Use the new function generateDocument of Objects class * @see Societe::generateDocument() */ function thirdparty_doc_create(DoliDB $db, Societe $object, $message, $modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0) From 7931f0b422b6f193606079a6c3368d33ee18e916 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 29 Jul 2019 11:06:39 +0200 Subject: [PATCH 0381/1148] Fix sql error --- htdocs/bom/class/bom.class.php | 2 +- htdocs/comm/propal/class/propal.class.php | 2 +- htdocs/commande/class/commande.class.php | 2 +- htdocs/compta/facture/class/facture.class.php | 2 +- htdocs/contrat/class/contrat.class.php | 2 +- htdocs/expedition/class/expedition.class.php | 2 +- htdocs/expensereport/class/expensereport.class.php | 2 +- htdocs/fichinter/class/fichinter.class.php | 2 +- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- htdocs/fourn/class/fournisseur.facture.class.php | 2 +- htdocs/livraison/class/livraison.class.php | 2 +- htdocs/reception/class/reception.class.php | 2 +- htdocs/supplier_proposal/class/supplier_proposal.class.php | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 40b4e89dfc5..7ad86b59ae8 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -585,7 +585,7 @@ class BOM extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'bom/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'bom/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index d957235d967..a9746ca6f65 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1810,7 +1810,7 @@ class Propal extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'propale/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'propale/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index 15156688603..434d43e8ffa 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -426,7 +426,7 @@ class Commande extends CommonOrder { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'commande/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 216282d369e..a8b75341ed3 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2420,7 +2420,7 @@ class Facture extends CommonInvoice { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'facture/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'facture/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index bfc18faf123..147d31311d3 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -488,7 +488,7 @@ class Contrat extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'contract/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'contract/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index 3205a245285..7fc4def441b 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -815,7 +815,7 @@ class Expedition extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/sending/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'expedition/sending/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 63b0b798a29..1160a6dcb94 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1153,7 +1153,7 @@ class ExpenseReport extends CommonObject // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expensereport/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'expensereport/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index c987e6ffc58..4ce2aa954b2 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -578,7 +578,7 @@ class Fichinter extends CommonObject // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'ficheinter/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'ficheinter/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index c85bfaaf2d3..d15545e4cda 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -553,7 +553,7 @@ class CommandeFournisseur extends CommonOrder { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/commande/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'fournisseur/commande/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 31780d33ed5..9fe2f9bf6ed 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1421,7 +1421,7 @@ class FactureFournisseur extends CommonInvoice { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 88cf4e1355a..a8eee72df33 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -443,7 +443,7 @@ class Livraison extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'expedition/receipt/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'expedition/receipt/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index e89eb2c595b..3e2776675a1 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -645,7 +645,7 @@ class Reception extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'reception/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'reception/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index cb4f774a951..481d80cab57 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1486,7 +1486,7 @@ class SupplierProposal extends CommonObject { // Now we rename also files into index $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->db->escape($this->newref)."'"; - $sql.= " WHERE filename LIKE '".$this->db->escape($this-ref)."%' AND filepath = 'supplier_proposal/".$this->db->escape($this-ref)."' and entity = ".$conf->entity; + $sql.= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'supplier_proposal/".$this->db->escape($this->ref)."' and entity = ".$conf->entity; $resql = $this->db->query($sql); if (! $resql) { $error++; $this->error = $this->db->lasterror(); } From 87fc3c39689a35b872902e32aaba66850a81c663 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Mon, 29 Jul 2019 13:54:48 +0200 Subject: [PATCH 0382/1148] FIX: expedition card: infinite loop for printObjectLine hook if return > 0 --- htdocs/expedition/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php index ae9ef67f755..326d378a199 100644 --- a/htdocs/expedition/card.php +++ b/htdocs/expedition/card.php @@ -1586,9 +1586,9 @@ if ($action == 'create') print $line->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var], 'colspan'=>$colspan),$indiceAsked); print ''; } - - $indiceAsked++; } + + $indiceAsked++; } print "
'; diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php index a69b98a9ac1..1d0897a72b0 100644 --- a/htdocs/margin/tabs/thirdpartyMargins.php +++ b/htdocs/margin/tabs/thirdpartyMargins.php @@ -18,7 +18,7 @@ /** * \file htdocs/margin/tabs/thirdpartyMargins.php * \ingroup product margins - * \brief Page des marges des factures clients pour un tiers + * \brief Page for invoice margins of a thirdparty */ require '../../main.inc.php'; @@ -170,7 +170,7 @@ if ($socid > 0) { $num = $db->num_rows($result); - print_barre_liste($langs->trans("MarginDetails"), $page, $_SERVER["PHP_SELF"], "&socid=".$object->id, $sortfield, $sortorder, '', 0, 0, ''); + print_barre_liste($langs->trans("MarginDetails"), $page, $_SERVER["PHP_SELF"], "&socid=".$object->id, $sortfield, $sortorder, '', $num, $num, ''); $i = 0; print '
'; // You can use div-table-responsive-no-min if you dont need reserved height for your table diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 7c2bbba5c42..58b076a953c 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2519,7 +2519,7 @@ table.liste tr:last-of-type td, table.noborder:not(#tablelines) tr:last-of-type border-bottom-color: rgb(); border-bottom-style: solid; } -div.tabBar div.fichehalfright table.noborder:not(.margintable):not(.paymenttable):last-of-type { +div.tabBar div.fichehalfright table.noborder:not(.margintable):not(.paymenttable):not(.lastrecordtable):last-of-type { border-bottom: 1px solid rgb(); } div.tabBar table.border>tbody>tr:last-of-type>td { diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 0f415ddbf33..f40d3afce33 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -450,8 +450,10 @@ if ($projectid) print '' . $langs->trans('TicketAssignedToMeInfos') . '

'; From 053ae8224b45b0940d0539e35a4b9be5bfacfab3 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 27 Jul 2019 06:36:39 +0200 Subject: [PATCH 0354/1148] NEW Box use fiscal year (Thanks Yves57) --- .../boxes/box_graph_invoices_permonth.php | 23 +++++++++++++--- .../box_graph_invoices_supplier_permonth.php | 23 +++++++++++++--- .../core/boxes/box_graph_orders_permonth.php | 23 +++++++++++++--- .../box_graph_orders_supplier_permonth.php | 23 +++++++++++++--- .../boxes/box_graph_propales_permonth.php | 23 +++++++++++++--- htdocs/core/class/stats.class.php | 27 +++++++++++++------ 6 files changed, 114 insertions(+), 28 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index 5c747065138..ad2505374b8 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -74,6 +74,9 @@ class box_graph_invoices_permonth extends ModeleBoxes //include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; //$facturestatic=new Facture($db); + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxCustomersInvoicesPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -129,7 +132,7 @@ class box_graph_invoices_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicesnbinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$endyear.'.png'; @@ -146,7 +149,13 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -167,7 +176,7 @@ class box_graph_invoices_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicesamountinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$endyear.'.png'; @@ -184,7 +193,13 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index d06098daa3b..83779501df7 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -73,6 +73,9 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxSuppliersInvoicesPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -126,7 +129,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicessuppliernbinyear-".$year.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesnbinyear-'.$year.'.png'; @@ -143,7 +146,13 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -164,7 +173,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."invoicessupplieramountinyear-".$year.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=billstats&file=invoicesamountinyear-'.$year.'.png'; @@ -181,7 +190,13 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index 8c4cb250376..8aa465782b6 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -74,6 +74,9 @@ class box_graph_orders_permonth extends ModeleBoxes //include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; //$commandestatic=new Commande($db); + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxCustomersOrdersPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -129,7 +132,7 @@ class box_graph_orders_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."ordersnbinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; @@ -144,7 +147,13 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -165,7 +174,7 @@ class box_graph_orders_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."ordersamountinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; @@ -180,7 +189,13 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index a584c7288ca..a5d5c9e6c0f 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -73,6 +73,9 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $text = $langs->trans("BoxSuppliersOrdersPerMonth", $max); $this->info_box_head = array( 'text' => $text, @@ -128,7 +131,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."orderssuppliernbinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersnbinyear-'.$endyear.'.png'; @@ -143,7 +146,13 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -164,7 +173,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $filenamenb = $dir."/".$prefix."orderssupplieramountinyear-".$endyear.".png"; if ($mode == 'customer') $fileurlnb = DOL_URL_ROOT.'/viewimage.php?modulepart=orderstats&file=ordersamountinyear-'.$endyear.'.png'; @@ -179,7 +188,13 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 861c5086704..763cdb855f9 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -74,6 +74,9 @@ class box_graph_propales_permonth extends ModeleBoxes //include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; //$propalstatic=new Propal($db); + $startmonth = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) $startmonth = 0; + $langs->load("propal"); $text = $langs->trans("BoxProposalsPerMonth", $max); @@ -128,7 +131,7 @@ class box_graph_propales_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($shownb) { - $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data1 = $stats->getNbByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $datatype1 = array_pad(array(), ($endyear-$startyear+1), 'bars'); $filenamenb = $dir."/".$prefix."propalsnbinyear-".$endyear.".png"; @@ -144,7 +147,13 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px1->SetLegend($legend); @@ -165,7 +174,7 @@ class box_graph_propales_permonth extends ModeleBoxes // Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...) if ($showtot) { - $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0)); + $data2 = $stats->getAmountByMonthWithPrevYear($endyear, $startyear, (GETPOST('action', 'aZ09')==$refreshaction?-1:(3600*24)), ($WIDTH<300?2:0), $startmonth); $datatype2 = array_pad(array(), ($endyear-$startyear+1), 'bars'); //$datatype2 = array('lines','bars'); @@ -183,7 +192,13 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - $legend[]=$i; + if ($startmonth != 0) { + $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + } + else + { + $legend[]=$i; + } $i++; } $px2->SetLegend($legend); diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index 08025161a0d..b41c1d8dfa6 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -39,10 +39,12 @@ abstract class Stats * @param int $endyear Start year * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) - * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month - * @return array Array of values + * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month + * @param int $startmonth month of the fiscal year start minus 1; 0=january + * @return array Array of values + */ - public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0) + public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) { global $conf,$user,$langs; @@ -86,6 +88,10 @@ abstract class Stats else { $year=$startyear; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) { + $startmonth = 0; + } + if ($startmonth != 0) $year = $year - 1; while ($year <= $endyear) { $datay[$year] = $this->getNbByMonth($year, $format); @@ -96,11 +102,11 @@ abstract class Stats for ($i = 0 ; $i < 12 ; $i++) { - $data[$i][]=$datay[$endyear][$i][0]; + $data[$i][]=$datay[$endyear][($i+$startmonth)%12][0]; $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year][$i][1]; + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; $year++; } } @@ -134,9 +140,10 @@ abstract class Stats * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month + * @param int $startmonth month of the fiscal year start minus 1; 0=january * @return array Array of values */ - public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0) + public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) { global $conf,$user,$langs; @@ -181,6 +188,10 @@ abstract class Stats else { $year=$startyear; + if (empty($conf->global->GRAPH_USE_FISCAL_YEAR)) { + $startmonth = 0; + } + if ($startmonth != 0) $year = $year - 1; while($year <= $endyear) { $datay[$year] = $this->getAmountByMonth($year, $format); @@ -191,11 +202,11 @@ abstract class Stats // $data = array('xval'=>array(0=>xlabel,1=>yval1,2=>yval2...),...) for ($i = 0 ; $i < 12 ; $i++) { - $data[$i][]=$datay[$endyear][$i][0]; // set label + $data[$i][]=$datay[$endyear][($i+$startmonth)%12][0]; // set label $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year][$i][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From 83e2f71e079641e2ad85ab9db454418490f7f12d Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sat, 27 Jul 2019 07:56:33 +0200 Subject: [PATCH 0355/1148] Fix travis --- htdocs/core/boxes/box_graph_invoices_permonth.php | 6 ++++-- .../core/boxes/box_graph_invoices_supplier_permonth.php | 6 ++++-- htdocs/core/boxes/box_graph_orders_permonth.php | 6 ++++-- htdocs/core/boxes/box_graph_orders_supplier_permonth.php | 6 ++++-- htdocs/core/boxes/box_graph_propales_permonth.php | 6 ++++-- htdocs/core/class/stats.class.php | 8 ++++---- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index ad2505374b8..dc02d7421df 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -149,7 +149,8 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -193,7 +194,8 @@ class box_graph_invoices_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index 83779501df7..12836031714 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -146,7 +146,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -190,7 +191,8 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index 8aa465782b6..b338d562132 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -147,7 +147,8 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -189,7 +190,8 @@ class box_graph_orders_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index a5d5c9e6c0f..e9ec246fef0 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -146,7 +146,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -188,7 +189,8 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 763cdb855f9..effe625b930 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -147,7 +147,8 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else @@ -192,7 +193,8 @@ class box_graph_propales_permonth extends ModeleBoxes $i=$startyear;$legend=array(); while ($i <= $endyear) { - if ($startmonth != 0) { + if ($startmonth != 0) + { $legend[]=sprintf("%d/%d",$i-2001, $i-2000); } else diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index b41c1d8dfa6..2544441e16b 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -40,11 +40,11 @@ abstract class Stats * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month - * @param int $startmonth month of the fiscal year start minus 1; 0=january + * @param int $startmonth month of the fiscal year start min 1 max 12 ; if 0 = january * @return array Array of values */ - public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) + public function getNbByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth = 0) { global $conf,$user,$langs; @@ -140,10 +140,10 @@ abstract class Stats * @param int $startyear End year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @param int $format 0=Label of absiss is a translated text, 1=Label of absiss is month number, 2=Label of absiss is first letter of month - * @param int $startmonth month of the fiscal year start minus 1; 0=january + * @param int $startmonth month of the fiscal year start min 1 max 12 ; if 0 = january * @return array Array of values */ - public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth=0) + public function getAmountByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0, $format = 0, $startmonth = 0) { global $conf,$user,$langs; From 581ae226ffbfe914e0f68a64d277cb3fc61a21a6 Mon Sep 17 00:00:00 2001 From: ATM john Date: Sat, 27 Jul 2019 18:25:25 +0200 Subject: [PATCH 0356/1148] Fix sellist showOuputField --- htdocs/core/class/commonobject.class.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 5bb557cac2c..9e66d391e0f 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5928,6 +5928,12 @@ abstract class CommonObject $type='link'; $param['options']=array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]); } + elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) { + $param['options'] = array($reg[1] . ':' . $reg[2] . ':' . $reg[3] . ':' . $reg[4] => 'N'); + $type = 'sellist'; + } + + $langfile=$val['langfile']; $list=$val['list']; $help=$val['help']; From 37ad5308e6f3483ec84898b0b888af284c3935ce Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 27 Jul 2019 19:19:13 +0200 Subject: [PATCH 0357/1148] Fix holiday counter auto update --- htdocs/holiday/class/holiday.class.php | 59 ++++++++++---------------- 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 03b2491ab59..b01d3d45984 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -1132,45 +1132,30 @@ class Holiday extends CommonObject $result = $this->db->query($sql); $typeleaves=$this->getTypes(1,1); - foreach($typeleaves as $key => $val) - { - // On ajoute x jours à chaque utilisateurs - $nb_holiday = $val['newByMonth']; - if (empty($nb_holiday)) $nb_holiday=0; - if ($nb_holiday > 0) + // Update each user counter + foreach ($users as $userCounter) { + $nbDaysToAdd = $typeleaves[$userCounter['type']]['newByMonth']; + if(empty($nbDaysToAdd)) continue; + + dol_syslog("We update leave type id ".$userCounter['type']." for user id ".$userCounter['rowid'], LOG_DEBUG); + + $nowHoliday = $userCounter['nb_holiday']; + $newSolde = $nowHoliday + $nbDaysToAdd; + + // We add a log for each user + $this->addLogCP($user->id, $userCounter['rowid'], $langs->trans('HolidaysMonthlyUpdate'), $newSolde, $userCounter['type']); + + $result = $this->updateSoldeCP($userCounter['rowid'], $newSolde, $userCounter['type'], $langs->trans('HolidaysMonthlyUpdate')); + + if ($result < 0) { - dol_syslog("We update leavefor everybody for type ".$key, LOG_DEBUG); - - $i = 0; - while ($i < $nbUser) - { - $now_holiday = $this->getCPforUser($users[$i]['rowid'], $val['rowid']); - $new_solde = $now_holiday + $nb_holiday; - - // We add a log for each user - $this->addLogCP($user->id, $users[$i]['rowid'], $langs->trans('HolidaysMonthlyUpdate'), $new_solde, $val['rowid']); - - $i++; - } - - // Now we update counter for all users at once - $sql2 = "UPDATE ".MAIN_DB_PREFIX."holiday_users SET"; - $sql2.= " nb_holiday = nb_holiday + ".$nb_holiday; - $sql2.= " WHERE fk_type = ".$val['rowid']; - - $result= $this->db->query($sql2); - - if (! $result) - { - dol_print_error($this->db); - break; - } + $error++; + break; } - else dol_syslog("No change for leave of type ".$key, LOG_DEBUG); } - if ($result) + if (! $error) { $this->db->commit(); return 1; @@ -1522,7 +1507,7 @@ class Holiday extends CommonObject else { // List of vacation balance users - $sql = "SELECT cpu.fk_user, cpu.fk_type, cpu.nb_holiday, u.lastname, u.firstname, u.gender, u.photo, u.employee, u.statut, u.fk_user"; + $sql = "SELECT cpu.fk_user, cpu.fk_type, cpu.nb_holiday, u.lastname, u.firstname, u.gender, u.photo, u.employee, u.statut, u.fk_user as manager"; $sql.= " FROM ".MAIN_DB_PREFIX."holiday_users as cpu, ".MAIN_DB_PREFIX."user as u"; $sql.= " WHERE cpu.fk_user = u.rowid"; if ($filters) $sql.=$filters; @@ -1549,9 +1534,9 @@ class Holiday extends CommonObject $tab_result[$i]['status'] = $obj->statut; $tab_result[$i]['employee'] = $obj->employee; $tab_result[$i]['photo'] = $obj->photo; - $tab_result[$i]['fk_user'] = $obj->fk_user; + $tab_result[$i]['fk_user'] = $obj->manager; - $tab_result[$i]['type'] = $obj->type; + $tab_result[$i]['type'] = $obj->fk_type; $tab_result[$i]['nb_holiday'] = $obj->nb_holiday; $i++; From 43adb51932ac24ac3badac257855d7e8d8ad8e38 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sat, 27 Jul 2019 22:06:08 +0200 Subject: [PATCH 0358/1148] Fix var declaration #11429 --- htdocs/expensereport/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index cc553f1e5de..21e716d7ac1 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -1904,7 +1904,7 @@ else if ($resql) { $num = $db->num_rows($resql); - $i = 0; $total = 0; + $i = 0; $totalpaid = 0; while ($i < $num) { $objp = $db->fetch_object($resql); From fd11dc782cdf68fe2f37541dc5df658004ed8368 Mon Sep 17 00:00:00 2001 From: Vaadasch Date: Sun, 28 Jul 2019 00:32:29 +0200 Subject: [PATCH 0359/1148] Change "DOCUMENT_URI" to "PHP_SELF" DOCUMENT_URI works with Apache. To be compliant with Nginx and probably some others, use PHP_SELF --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 0e6b0befef9..9840f01e3cd 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1411,7 +1411,7 @@ class ExtraFields // current object id can be use into filter if (strpos($InfoFieldList[4], '$ID$') !== false && !empty($objectid)) { $InfoFieldList[4] = str_replace('$ID$', $objectid, $InfoFieldList[4]); - } elseif (preg_match("#^.*list.php$#", $_SERVER["DOCUMENT_URI"])) { + } elseif (preg_match("#^.*list.php$#", $_SERVER["PHP_SELF"])) { // Pattern for word=$ID$ $word = '\b[a-zA-Z0-9-\.-_]+\b=\$ID\$'; From 3e69421ec3abdc9f650873c25cfb3a3088df12b7 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 28 Jul 2019 07:33:57 +0200 Subject: [PATCH 0360/1148] Fix travis --- htdocs/core/boxes/box_graph_invoices_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_invoices_supplier_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_orders_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_orders_supplier_permonth.php | 4 ++-- htdocs/core/boxes/box_graph_propales_permonth.php | 2 +- htdocs/core/class/stats.class.php | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php index dc02d7421df..d33600c0fc8 100644 --- a/htdocs/core/boxes/box_graph_invoices_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php @@ -151,7 +151,7 @@ class box_graph_invoices_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -196,7 +196,7 @@ class box_graph_invoices_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php index 12836031714..d01d5b6252f 100644 --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php @@ -148,7 +148,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -193,7 +193,7 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php index b338d562132..f9be1c79cea 100644 --- a/htdocs/core/boxes/box_graph_orders_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_permonth.php @@ -149,7 +149,7 @@ class box_graph_orders_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -192,7 +192,7 @@ class box_graph_orders_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php index e9ec246fef0..1f907fc01be 100644 --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php @@ -148,7 +148,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { @@ -191,7 +191,7 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index effe625b930..7179f255add 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -149,7 +149,7 @@ class box_graph_propales_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index 2544441e16b..f873b0f5deb 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -106,7 +106,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; $year++; } } @@ -206,7 +206,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From be6ad7b6a450f0a032655d84117835f2216060a9 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 28 Jul 2019 17:10:37 +0200 Subject: [PATCH 0361/1148] New : can define RUM date on third bank account --- htdocs/langs/en_US/withdrawals.lang | 3 ++- .../societe/class/companybankaccount.class.php | 5 +++-- htdocs/societe/paymentmodes.php | 18 ++++++++++++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang index cbca2b2f103..88e5eaf128c 100644 --- a/htdocs/langs/en_US/withdrawals.lang +++ b/htdocs/langs/en_US/withdrawals.lang @@ -76,7 +76,8 @@ WithdrawalFile=Withdrawal file SetToStatusSent=Set to status "File Sent" ThisWillAlsoAddPaymentOnInvoice=This will also record payments to invoices and will classify them as "Paid" if remain to pay is null StatisticsByLineStatus=Statistics by status of lines -RUM=UMR +RUM=Unique Mandate Reference (UMR) +DateRUM=Mandate signature date RUMLong=Unique Mandate Reference RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. WithdrawMode=Direct debit mode (FRST or RECUR) diff --git a/htdocs/societe/class/companybankaccount.class.php b/htdocs/societe/class/companybankaccount.class.php index 0c4da8aa103..6f957be32d7 100644 --- a/htdocs/societe/class/companybankaccount.class.php +++ b/htdocs/societe/class/companybankaccount.class.php @@ -46,7 +46,7 @@ class CompanyBankAccount extends Account * @var integer */ public $datec; - + /** * Date modification record (tms) * @@ -217,7 +217,7 @@ class CompanyBankAccount extends Account if (empty($id) && empty($socid)) return -1; $sql = "SELECT rowid, type, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation, proprio,"; - $sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur"; + $sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur, date_rum"; $sql.= " FROM ".MAIN_DB_PREFIX."societe_rib"; if ($id) $sql.= " WHERE rowid = ".$id; if ($socid) @@ -255,6 +255,7 @@ class CompanyBankAccount extends Account $this->datem = $this->db->jdate($obj->datem); $this->rum = $obj->rum; $this->frstrecur = $obj->frstrecur; + $this->date_rum = $this->db->jdate($obj->date_rum); } $this->db->free($resql); diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 497afe9c210..8ec3cdc5ca6 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -157,9 +157,13 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur', 'alpha'); $companybankaccount->rum = GETPOST('rum', 'alpha'); + $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); if (empty($companybankaccount->rum)) { $companybankaccount->rum = $prelevement->buildRumNumber($object->code_client, $companybankaccount->datec, $companybankaccount->id); + } + if (empty($companybankaccount->date_rum)) + { $companybankaccount->date_rum = dol_now(); } @@ -268,6 +272,7 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur'); $companybankaccount->rum = GETPOST('rum', 'alpha'); + $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); $companybankaccount->datec = dol_now(); $companybankaccount->status = 1; @@ -1208,6 +1213,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if (! empty($conf->prelevement->enabled)) { print_liste_field_titre("RUM"); + print_liste_field_titre("DateRUM"); print_liste_field_titre("WithdrawMode"); } print_liste_field_titre("DefaultRIB", '', '', '', '', '', '', '', 'center '); @@ -1257,8 +1263,6 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard' if (! empty($rib->iban)) { if (! checkIbanForAccount($rib)) { print ' '.img_picto($langs->trans("IbanNotValid"), 'warning'); - } else { - print ' '.img_picto($langs->trans("IbanValid"), 'info'); } } print '
'.$prelevement->buildRumNumber($object->code_client, $rib->datec, $rib->id).''.$rib->rum.''.dol_print_date($rib->date_rum, 'day').''.$rib->frstrecur.'
'.$langs->trans("RUM").'
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum')?GETPOST('date_rum'):$companybankaccount->date_rum, 'date_rum', 0,0,1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); print $form->selectarray("frstrecur", $tblArraychoice, dol_escape_htmltag(GETPOST('frstrecur', 'alpha')?GETPOST('frstrecur', 'alpha'):$companybankaccount->frstrecur), 0); @@ -1675,6 +1682,9 @@ if ($socid && $action == 'create' && $user->rights->societe->creer) print '
'.$langs->trans("RUM").'
'.$langs->trans("RUMWillBeGenerated").'
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum'), 'date_rum', 0,0,1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); print $form->selectarray("frstrecur", $tblArraychoice, (isset($_POST['frstrecur'])?GETPOST('frstrecur'):'FRST'), 0); From 02d6c1a334625fb5e100a286537469a3aabcc631 Mon Sep 17 00:00:00 2001 From: Vaadasch Date: Sun, 28 Jul 2019 17:51:15 +0200 Subject: [PATCH 0362/1148] Change 0 and 1 to FALSE and TRUE for pgsql 0 and 1 are read as False and True by Mysql, but not by PGsql. FALSE and TRUE are correctly read by both => changing --- htdocs/core/class/extrafields.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 0e6b0befef9..a74783a7838 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -1445,13 +1445,13 @@ class ExtraFields $InfoFieldList[4] = str_replace('$ID$', '0', $InfoFieldList[4]); } else { if (!empty($matchCondition[1])) { - $boolCond = (($matchCondition[1] == "AND") ? ' AND 1 ' : ' OR 0 '); + $boolCond = (($matchCondition[1] == "AND") ? ' AND TRUE ' : ' OR FALSE '); $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond . $matchCondition[3], $InfoFieldList[4]); } elseif (!empty($matchCondition[3])) { - $boolCond = (($matchCondition[3] == "AND") ? ' 1 AND ' : ' 0 OR'); + $boolCond = (($matchCondition[3] == "AND") ? ' TRUE AND ' : ' FALSE OR'); $InfoFieldList[4] = str_replace($matchCondition[0], $boolCond, $InfoFieldList[4]); } else { - $InfoFieldList[4] = 1; + $InfoFieldList[4] = " TRUE "; } } From 1f3e5096035c181f15529db684da4ed9351a7843 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 21:24:42 +0200 Subject: [PATCH 0363/1148] Show message when a redirect is done. --- htdocs/core/lib/website.lib.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index a4c187f2ffa..00716f6a3ab 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -339,6 +339,14 @@ function redirectToContainer($containerref, $containeraliasalt = '', $containeri } } + if (defined('USEDOLIBARREDITOR')) + { + print '
'; + print "This page contains dynamic code that make a redirect to '".$containerref."' in your current context. There is no preview for this page."; + print '
'; + exit; + } + if (defined('USEDOLIBARRSERVER')) // When page called from Dolibarr server { // Check new container exists From 3cc2c91e31c0b0687d0e64073a691d59bd74cd47 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Sun, 28 Jul 2019 19:07:44 +0200 Subject: [PATCH 0364/1148] Use date_rum if defined --- htdocs/compta/prelevement/class/bonprelevement.class.php | 5 +++-- htdocs/societe/paymentmodes.php | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 1a98c33ab02..a60330270d4 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1417,7 +1417,7 @@ class BonPrelevement extends CommonObject $sql = "SELECT soc.code_client as code, soc.address, soc.zip, soc.town, c.code as country_code,"; $sql.= " pl.client_nom as nom, pl.code_banque as cb, pl.code_guichet as cg, pl.number as cc, pl.amount as somme,"; - $sql.= " f.ref as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum"; + $sql.= " f.ref as fac, pf.fk_facture as idfac, rib.datec, rib.iban_prefix as iban, rib.bic as bic, rib.rowid as drum, rib.rum, rib.date_rum"; $sql.= " FROM"; $sql.= " ".MAIN_DB_PREFIX."prelevement_lignes as pl,"; $sql.= " ".MAIN_DB_PREFIX."facture as f,"; @@ -1443,7 +1443,8 @@ class BonPrelevement extends CommonObject while ($i < $num) { $obj = $this->db->fetch_object($resql); - $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $this->db->jdate($obj->datec), $obj->drum, $obj->rum); + $daterum = (!empty($obj->date_rum)) ? $this->db->jdate($obj->date_rum) : $this->db->jdate($obj->datec); + $fileDebiteurSection .= $this->EnregDestinataireSEPA($obj->code, $obj->nom, $obj->address, $obj->zip, $obj->town, $obj->country_code, $obj->cb, $obj->cg, $obj->cc, $obj->somme, $obj->fac, $obj->idfac, $obj->iban, $obj->bic, $daterum, $obj->drum, $obj->rum); $this->total = $this->total + $obj->somme; $i++; } diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php index 8ec3cdc5ca6..e48fe32e4f0 100644 --- a/htdocs/societe/paymentmodes.php +++ b/htdocs/societe/paymentmodes.php @@ -157,7 +157,7 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur', 'alpha'); $companybankaccount->rum = GETPOST('rum', 'alpha'); - $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); + $companybankaccount->date_rum = dol_mktime(0, 0, 0, GETPOST('date_rummonth'), GETPOST('date_rumday'), GETPOST('date_rumyear')); if (empty($companybankaccount->rum)) { $companybankaccount->rum = $prelevement->buildRumNumber($object->code_client, $companybankaccount->datec, $companybankaccount->id); @@ -272,7 +272,7 @@ if (empty($reshook)) $companybankaccount->owner_address = GETPOST('owner_address', 'alpha'); $companybankaccount->frstrecur = GETPOST('frstrecur'); $companybankaccount->rum = GETPOST('rum', 'alpha'); - $companybankaccount->date_rum = dol_mktime(0,0,0, GETPOST('date_rummonth'),GETPOST('date_rumday'),GETPOST('date_rumyear')); + $companybankaccount->date_rum = dol_mktime(0, 0, 0, GETPOST('date_rummonth'), GETPOST('date_rumday'), GETPOST('date_rumyear')); $companybankaccount->datec = dol_now(); $companybankaccount->status = 1; @@ -1536,7 +1536,7 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer) print '
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum')?GETPOST('date_rum'):$companybankaccount->date_rum, 'date_rum', 0,0,1, 'date_rum').'
'.$form->selectDate(GETPOST('date_rum')?GETPOST('date_rum'):$companybankaccount->date_rum, 'date_rum', 0, 0, 1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); From 9a7113f4f5295b610e853beb3549257aad0413e3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 22:26:55 +0200 Subject: [PATCH 0365/1148] FIX Update the file index table when we validate/rename a ref. --- htdocs/bom/class/bom.class.php | 14 ++++++++++---- htdocs/comm/propal/class/propal.class.php | 16 ++++++++++------ htdocs/commande/class/commande.class.php | 12 +++++++++--- htdocs/compta/facture/class/facture.class.php | 11 ++++++++--- htdocs/contrat/class/contrat.class.php | 11 ++++++++--- htdocs/expedition/class/expedition.class.php | 11 ++++++++--- .../expensereport/class/expensereport.class.php | 12 +++++++++--- htdocs/fichinter/class/fichinter.class.php | 13 ++++++++++--- .../fourn/class/fournisseur.commande.class.php | 11 ++++++++--- htdocs/fourn/class/fournisseur.facture.class.php | 13 +++++++++---- htdocs/livraison/class/livraison.class.php | 11 ++++++++--- htdocs/reception/class/reception.class.php | 11 ++++++++--- .../class/supplier_proposal.class.php | 16 ++++++++++------ 13 files changed, 115 insertions(+), 47 deletions(-) diff --git a/htdocs/bom/class/bom.class.php b/htdocs/bom/class/bom.class.php index 10601303a61..dd861d5dc47 100644 --- a/htdocs/bom/class/bom.class.php +++ b/htdocs/bom/class/bom.class.php @@ -515,6 +515,7 @@ class BOM extends CommonObject public function valid($user, $notrigger = 0) { global $conf, $langs; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $error=0; @@ -582,13 +583,18 @@ class BOM extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments - $oldref = dol_sanitizeFileName($this->ref); + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'bom/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'bom/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments + $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->bom->dir_output.'/'.$oldref; $dirdest = $conf->bom->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 0d3eacc56a4..5de2c9b23f5 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1739,10 +1739,10 @@ class Propal extends CommonObject */ public function valid($user, $notrigger = 0) { - require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - global $conf; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + $error=0; // Protection @@ -1808,14 +1808,18 @@ class Propal extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of propal directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'propale/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'propale/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->propal->multidir_output[$this->entity].'/'.$oldref; $dirdest = $conf->propal->multidir_output[$this->entity].'/'.$newref; - - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index fd7832f868f..d0e0addbc94 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -321,6 +321,7 @@ class Commande extends CommonOrder public function valid($user, $idwarehouse = 0, $notrigger = 0) { global $conf,$langs; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $error=0; @@ -423,13 +424,18 @@ class Commande extends CommonOrder // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'commande/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'commande/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->commande->dir_output.'/'.$oldref; $dirdest = $conf->commande->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index e5041217cb3..2a9a4f5686d 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2418,13 +2418,18 @@ class Facture extends CommonInvoice // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of object directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'facture/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'facture/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->facture->dir_output.'/'.$oldref; $dirdest = $conf->facture->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 6396b5e5f88..0b08d3723da 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -486,13 +486,18 @@ class Contrat extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of object directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'contract/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'contract/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->contract->dir_output.'/'.$oldref; $dirdest = $conf->contract->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php index d79b6976630..37f191a0ab0 100644 --- a/htdocs/expedition/class/expedition.class.php +++ b/htdocs/expedition/class/expedition.class.php @@ -813,13 +813,18 @@ class Expedition extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/sending/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/sending/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($numref); $dirsource = $conf->expedition->dir_output.'/sending/'.$oldref; $dirdest = $conf->expedition->dir_output.'/sending/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 3bdd026e62f..4cc935f95a2 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -1151,13 +1151,18 @@ class ExpenseReport extends CommonObject { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - // On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attachments + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expensereport/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expensereport/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->expensereport->dir_output.'/'.$oldref; $dirdest = $conf->expensereport->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::setValidate() rename dir ".$dirsource." into ".$dirdest); @@ -1176,6 +1181,7 @@ class ExpenseReport extends CommonObject } } } + } } diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php index 807b547a4bc..ce066fc8c11 100644 --- a/htdocs/fichinter/class/fichinter.class.php +++ b/htdocs/fichinter/class/fichinter.class.php @@ -574,13 +574,20 @@ class Fichinter extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of object directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; + + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'ficheinter/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'ficheinter/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->ficheinter->dir_output.'/'.$oldref; $dirdest = $conf->ficheinter->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::setValid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 1dddd3e7319..b32e90c311d 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -551,13 +551,18 @@ class CommandeFournisseur extends CommonOrder // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // We rename directory ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/commande/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/commande/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->fournisseur->commande->dir_output.'/'.$oldref; $dirdest = $conf->fournisseur->commande->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 15169e79f6d..b13925bf29d 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -1322,6 +1322,7 @@ class FactureFournisseur extends CommonInvoice public function validate($user, $force_number = '', $idwarehouse = 0, $notrigger = 0) { global $conf,$langs; + require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $now=dol_now(); @@ -1418,14 +1419,18 @@ class FactureFournisseur extends CommonInvoice // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire facture ($this->ref = ancienne ref, $num = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'fournisseur/facture/".get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); - $dirsource = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$oldref; $dirdest = $conf->fournisseur->facture->dir_output.'/'.get_exdir($this->id, 2, 0, 0, $this, 'invoice_supplier').$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php index 9a84274d0c5..f24a2aee713 100644 --- a/htdocs/livraison/class/livraison.class.php +++ b/htdocs/livraison/class/livraison.class.php @@ -441,13 +441,18 @@ class Livraison extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) - // afin de ne pas perdre les fichiers attaches + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'expedition/receipt/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'expedition/receipt/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($numref); $dirsource = $conf->expedition->dir_output.'/receipt/'.$oldref; $dirdest = $conf->expedition->dir_output.'/receipt/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/reception/class/reception.class.php b/htdocs/reception/class/reception.class.php index 811c2b8586f..84f95e40b9a 100644 --- a/htdocs/reception/class/reception.class.php +++ b/htdocs/reception/class/reception.class.php @@ -643,13 +643,18 @@ class Reception extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref) - // in order not to lose the attached files + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'reception/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'reception/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($numref); $dirsource = $conf->reception->dir_output.'/'.$oldref; $dirdest = $conf->reception->dir_output.'/'.$newref; - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index ca16348dcd6..786485ad6dd 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -1484,16 +1484,20 @@ class SupplierProposal extends CommonObject // Rename directory if dir was a temporary ref if (preg_match('/^[\(]?PROV/i', $this->ref)) { - // Rename of propal directory ($this->ref = old ref, $num = new ref) - // to not lose the linked files - $oldref = dol_sanitizeFileName($this->ref); + // Now we rename also files into index + $sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->newref."', SUBSTR(filename, ".(strlen($this->ref)+1).")), filepath = 'supplier_proposal/".$this->newref."'"; + $sql.= " WHERE filename LIKE '".$this->ref."%' AND filepath = 'supplier_proposal/".$this->ref."' and entity = ".$conf->entity; + $resql = $this->db->query($sql); + if (! $resql) { $error++; $this->error = $this->db->lasterror(); } + + // We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments + $oldref = dol_sanitizeFileName($this->ref); $newref = dol_sanitizeFileName($num); $dirsource = $conf->supplier_proposal->dir_output.'/'.$oldref; $dirdest = $conf->supplier_proposal->dir_output.'/'.$newref; - - if (file_exists($dirsource)) + if (! $error && file_exists($dirsource)) { - dol_syslog(get_class($this)."::validate rename dir ".$dirsource." into ".$dirdest); + dol_syslog(get_class($this)."::valid rename dir ".$dirsource." into ".$dirdest); if (@rename($dirsource, $dirdest)) { dol_syslog("Rename ok"); From 4e26eefe6e2c909c3a00a7de8f779e2fb9f8399d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 28 Jul 2019 22:57:07 +0200 Subject: [PATCH 0366/1148] Fix field not mandatory --- htdocs/stripe/admin/stripe.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 3966a3f439f..770678aae15 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -194,7 +194,7 @@ if (empty($conf->stripeconnect->enabled)) print '
'; - print ''.$langs->trans("STRIPE_TEST_WEBHOOK_KEY").''; + print ''.$langs->trans("STRIPE_TEST_WEBHOOK_KEY").''; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
'; @@ -267,7 +267,7 @@ if (empty($conf->stripeconnect->enabled)) print '
'; - print ''.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").''; + print ''.$langs->trans("STRIPE_LIVE_WEBHOOK_KEY").''; if ($conf->global->MAIN_FEATURES_LEVEL >= 2) { print ''; print '   '.$langs->trans("Example").': we_xxxxxxxxxxxxxxxxxxxxxxxx
'; From a2fc3689dace61795fd3761bb0f444fb34f5e92c Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 28 Jul 2019 22:59:43 +0200 Subject: [PATCH 0367/1148] Nowrap on amount --- htdocs/accountancy/bookkeeping/card.php | 6 +++--- htdocs/accountancy/bookkeeping/list.php | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php index ad7a30603dc..6de7bbfe50e 100644 --- a/htdocs/accountancy/bookkeeping/card.php +++ b/htdocs/accountancy/bookkeeping/card.php @@ -641,8 +641,8 @@ if ($action == 'create') print '
' . $accountingaccount->getNomUrl(0,1,1,'',0) . '' . length_accounta($line->subledger_account) . '' . $line->label_operation. '' . price($line->debit) . '' . price($line->credit) . '' . price($line->debit) . '' . price($line->credit) . ''; print 'id . '&piece_num=' . $line->piece_num . '&mode='.$mode.'">'; @@ -675,7 +675,7 @@ if ($action == 'create') print $formaccounting->select_account($accountingaccount_number, 'accountingaccount_number', 1, array (), 1, 1, ''); print ''; - // TODO For the moment we keep a fre input text instead of a combo. The select_auxaccount has problem because it does not + // TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not // use setup of keypress to select thirdparty and this hang browser on large database. if (! empty($conf->global->ACCOUNTANCY_COMBO_FOR_AUX)) { diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php index c8df00f6cdc..9fb1746ceac 100644 --- a/htdocs/accountancy/bookkeeping/list.php +++ b/htdocs/accountancy/bookkeeping/list.php @@ -683,7 +683,7 @@ if ($num > 0) // Amount debit if (! empty($arrayfields['t.debit']['checked'])) { - print '' . ($line->debit ? price($line->debit) : ''). '' . ($line->debit ? price($line->debit) : ''). '' . ($line->credit ? price($line->credit) : '') . '' . ($line->credit ? price($line->credit) : '') . ''.$langs->trans("Total").''.$langs->trans("Totalforthispage").''.price($totalarray['totaldebit']).''.price($totalarray['totalcredit']).''.price($totalarray['totaldebit']).''.price($totalarray['totalcredit']).'
'.$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0).''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - //print ''; + //print ''; print ''; + print ''; + print ''; + print ''; + print ''; $searchpicto=$form->showFilterAndCheckAddButtons(0); print $searchpicto; @@ -264,11 +285,19 @@ if ($result) print '
'; + print $obj->user_agent; + print ''; + print $obj->prefix_session; + print ''; $htmltext=''.$langs->trans("UserAgent").': '.($obj->user_agent?$obj->user_agent:$langs->trans("Unknown")); + $htmltext.='
'.$langs->trans("PrefixSession").': '.($obj->prefix_session?$obj->prefix_session:$langs->trans("Unknown")); print $form->textwithpicto('', $htmltext); print '
'.$langs->trans("Nature").''; print $form->selectarray("morphy", $morphys, (GETPOSTISSET("morphy")?GETPOST("morphy",'alpha'):$object->morphy)); print "
'.$langs->trans("MemberNature").''; print $form->selectarray("morphy", $morphys, (GETPOSTISSET("morphy")?GETPOST("morphy", 'alpha'):$object->morphy)); print "
'.$langs->trans("MemberNature").''; print $form->selectarray("morphy", $morphys, isset($_POST["morphy"])?$_POST["morphy"]:$object->morphy); print "
'.$langs->trans("MemberNature").''; print $form->selectarray("morphy", $morphys, isset($_POST["morphy"])?$_POST["morphy"]:$object->morphy); print "
"; From 96380f01c6170a853602eb7f6ffab777d788073e Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Mon, 29 Jul 2019 15:41:53 +0200 Subject: [PATCH 0383/1148] Test in progress --- .../class/accountancyexport.class.php | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php index 904388db64d..10ebabc4f8a 100644 --- a/htdocs/accountancy/class/accountancyexport.class.php +++ b/htdocs/accountancy/class/accountancyexport.class.php @@ -938,15 +938,22 @@ class AccountancyExport $date_document = dol_print_date($line->doc_date, '%Y%m%d'); $date_creation = dol_print_date($line->date_creation, '%Y%m%d'); + // TYPE $type_enregistrement = 'E'; // For write movement print $type_enregistrement . $separator; + // JNAL print substr($line->code_journal, 0, 2) . $separator; + // NECR print $line->id . $separator; + // NPIE print $line->piece_num . $separator; + // DATP print $date_document . $separator; + // LIBE print $line->label_operation . $separator; + // DATH print $line->date_lim_reglement . $separator; - + // CNPI if ($line->doc_type == 'supplier_invoice') { if ($line->montant < 0) { $nature_piece = 'AF'; @@ -963,7 +970,8 @@ class AccountancyExport $nature_piece = ''; } print $nature_piece . $separator; - + // RACI + /* if (! empty($line->subledger_account)) { if ($line->doc_type == 'supplier_invoice') { $racine_subledger_account = '40'; @@ -973,19 +981,27 @@ class AccountancyExport $nature_piece = ''; } print $racine_subledger_account . $separator; + } else { + print $separator; } - + */ + // MONT print price(abs($line->montant)) . $separator; + // CODC print $line->sens . $separator; + // CPTG print length_accountg($line->numero_compte) . $separator; + // DATE print $date_creation . $separator; + // CLET print $line->lettering_code . $separator; + // DATL print $line->date_lettering . $separator; - + // CPTA if (! empty($line->subledger_account)) { print length_accounta($line->subledger_account) . $separator; } - + // CNAT if ($line->doc_type == 'supplier_invoice' && ! empty($line->subledger_account)) { print 'F'; } elseif ($line->doc_type == 'customer_invoice' && ! empty($line->subledger_account)) { From 9e92b73d4aaa514c3395629047fe7c1c5469eca0 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 29 Jul 2019 17:12:41 +0200 Subject: [PATCH 0384/1148] Move open dashboard --- htdocs/index.php | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index d6ce8c90067..bce4c521ad5 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -100,7 +100,7 @@ if (! empty($conf->global->MAIN_MOTD)) } -print '
'; + /* @@ -112,7 +112,7 @@ $boxstat=''; // Load translation files required by page $langs->loadLangs(array('commercial', 'bills', 'orders', 'contracts')); -if (empty($user->societe_id)) +if (empty($user->societe_id) && empty($conf->global->MAIN_DISABLE_GLOBAL_BOXSTATS)) { $boxstat.='
'; $boxstat.=''; @@ -359,9 +359,8 @@ if (empty($user->societe_id)) $boxstat.='
'; $boxstat.='
'; } -//print $boxstat; -print '
'; + /* @@ -636,7 +635,13 @@ $boxwork.='
'; // End table array of working board $boxwork.=''; -print '
'; + + +print '
'; +print $boxwork; +print '
'; + +print '
'; print '
'; @@ -649,7 +654,7 @@ $boxlist.='
'; $boxlist.='
'; -$boxlist.=$boxwork; +//$boxlist.=$boxwork; $boxlist.=$resultboxes['boxlista']; $boxlist.= '
'; From 8b56ca8cd03ecf02a7b0fb7045b5f906a57d1819 Mon Sep 17 00:00:00 2001 From: John Botella Date: Mon, 29 Jul 2019 17:14:52 +0200 Subject: [PATCH 0385/1148] Little css and images change --- htdocs/theme/eldy/img/title_bank.png | Bin 638 -> 501 bytes htdocs/theme/eldy/img/title_commercial.png | Bin 650 -> 431 bytes htdocs/theme/eldy/img/title_home.png | Bin 474 -> 750 bytes htdocs/theme/eldy/img/title_products.png | Bin 374 -> 687 bytes htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- 5 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/img/title_bank.png b/htdocs/theme/eldy/img/title_bank.png index c916e89d8f65eb07682f788919715f2d829aad7b..5bd5d25a1eaf5da8b760719867d116addbb76666 100644 GIT binary patch literal 501 zcmVKQbqZWJ*-SB^#rf*p+c#me8wBh|4C|AHiY~5S%X-dE4-6Ufw@?2 z6Q>EJigKDe4LP0ysW``iQubxrKntC?yfyPxw#oNLeO!~ia%-VbJQ@2qkgehrTqvmA zKTFrIL(r|^zag`Ktz0vWU|AZ$vNVEaX#~sC2$rQ0EX&jj#3mf7i{{TC+>5OI&zJxbV3s{usHY(s2CpZfmUz+Sf=%I3r7olKp3Z&xnxL+i# r-;_KRE$$b|7CxqP8Oc#QNa literal 638 zcmV-^0)hRBP)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^-6 z4KXAJaWQiM00I6!AMY|_yYV@l!P0AL_>qZ z0g#dt;G6(Mk7RC;Kt;7Q<7l;V91|yT41UrUYme=x-M4RM*J6yJs@S2zsL9vlYw{Js zZq`i^X#+ut{6b?)xDnaqXnqffL}UmwfnL?zrUjh+{O% z7ce>71PGkxLrw8XzpdBuzO$djZ9)vb3S8@g4sAyQB5jF7HLY4@ zv<EEoX&~e z2adI@NH8o@^KPwuw;)$1fZ#5n0JeS5fkhy66(*-7;P~&$P;L z8{dh)ToC`6@{LJZ3)Xk~_rO<1{E1VUdPR0)g~=ymtOWFsqWy2+NNXHBk)4;Fq>>VO zmVm71y*a)f<$U*AlhiC(xx~{7vz&=(WD*ylh diff --git a/htdocs/theme/eldy/img/title_commercial.png b/htdocs/theme/eldy/img/title_commercial.png index 6671810c5deaa7447b9e6fe41a32f6b57066791c..cbfe44fa539763fba67dabc62f1083f714ac8afb 100644 GIT binary patch literal 431 zcmV;g0Z{&lP)XN3KY{M5=Ct7dY#w-|I#$p&c3(S%xbg@q>(kqncxzm$h;Na@Y+B#h#WJN zi7{L6)jHD_%xz-23xo3(4bDSFV`^{}xxS84U=7CzmRr8v2j<>3)lM}Sn%_7#_Nv%B z8-oR&u~c2y+X!unnB3*sOR-s4U=bmhtsr{eB!AxEdBB>B6oI3ZWIW*!-!=Q+qzDYt zOe%xHR1U&mpPQr{;iGF8HN59I!FAV8D!8M)hsm~MhWz(5GQkzj+WZ9#_{57HJ{A8j ZegNWfxVi$fRiyv`002ovPDHLkV1l%2vTgtX literal 650 zcmV;50(Jd~P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^-6 z4KXu?qO`OC00Ih0L_t(o!_`^Aje{@{oIT|qO5iHMCD6f90wquaC8UIuKnbCO^L60s zfK;&e*+?A1hQNXWX&(`Gc0Afyk1;Vb&iZ`d#Lub0U$*#DA}Rso08#)Q01Ln}bEBGw znbiV-0pI|zCmeu6EuSLrG5~rQ_rrh}#`(>-t<6gst&)f=fNVj@(yF{`!4r`I@I5iC z1@Mq~Jsp5_jfge6O%izbBU*3(3JKGjml4q?GrK6=rq>QfMG2txynjWtH1|cJ)jA?d zrLVtOZ2-8LT1aB=u$7cV*DH~^A~sPsDFMq1qh6XA@B*? zoF3&cl7>V%var>n)dXMr4jmIBPNE7{#8-JB^09*s$L-wJJZOm+-EOHqW z>ib2MvXNt8Hp8^F+U#qTO(^lR=Uqaj^R;Bt+8Vrl!}=Dxf+wOpAk-oFDbJtp&HNNw zuGbhIhhlyPTSK;g17oiu{_Vkwz_Pi_&n%sEFXks%8u^%H*Z${TmkX`(L48;7iN`9$ zzg!S-&D?XUjJKLLLBrSN^7YrdfC=E8j7ekqc_ZH4dH@c8H?lh?Q7;!fZPW0dCgj%@yM{6#xJL07*qoM6N<$f{ThDTmS$7 diff --git a/htdocs/theme/eldy/img/title_home.png b/htdocs/theme/eldy/img/title_home.png index 505d18ab403a14820316e0e9e51ba20c6cec9784..e89613dcd753d62536d1192b0f4b89b0e75ab093 100644 GIT binary patch literal 750 zcmV>vum$-o5fcGq#Gi6tCJx87~+KWLHQZa}<0srTWw}5-q zf~&zvj1=j#fFC%IX@3iH4sHbCvT+NwlMT59k17OA;t7^c7UWj+1wdZlX#82MzAtWH zRmdY43IN=}{Ma`iw*$T*#n_F_R8ss{32a@)pDdjzguW{Ws9I7zSgdkgmN1#JA!bH=2G2pv|nXzw?@Qf7j zU_5ZsMH_G^*)`0Ly$f-_gtvf)F<`kb6k6M3REzdNf+5lAl4vbnmjO(o2OCmt5952l zdlw5rfDL#aX!su6Qr=w{s1PuTucCFEs0D8W-d9+i1>Av;fd=W5qTE?sF0yBNz3|C3 zhQBUlU09Q9RO&6vD~A2PYpg(LTz5i7EvQR9 zuc|U!Hqvi%9X4kHi>YyvAsa&=*=zkjsj^2i|GT-8T&V1 gR-K~T_>`)upQk|lC+m|yIRF3v07*qoM6N<$g0pf*Q~&?~ literal 474 zcmV<00VV#4P)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^-6 z4KoLpAR>bR00CM_L_t(o!|j>dZG$irhQCwwy^N3z!Ukc4jKBu%2+anJkWt76bOX8p z8=Srvi69aV#9XZUNWX+EUp~;e*jQARQ0SeAeKJOMS`t7Qk8OG+o z7jSeAobo9QcXKZV@A^K2e)$Ew!viT$8lk(&HiHKe z;5q}kRRg4}!@EFiUI1@Z0m<6%K2=(I_E@A&B2t80VLwIW>@Ckbm#J288*>0#pc7YB zbpzGU0vJPeY&HTP4d6%6hna= zJNRRCn+PA_Bm5%pRj}}?+8FlZzOD3`=g;n!NU{)Y4P4r1>phjkOXQ904^L8r#{ED; Q#Q*>R07*qoM6N<$f*aez@c;k- diff --git a/htdocs/theme/eldy/img/title_products.png b/htdocs/theme/eldy/img/title_products.png index 100edf445f129bfc7d97186aea3337af6f07f4b2..c608a2c7a8607a03af4088de526a0335749ae105 100644 GIT binary patch literal 687 zcmV;g0#N;lP)kfMciIoofjr%x>wRM8+#uz?yfy%Sb7{~sq zpf=zP=1M^2**q>t$|6YpUSX&WTmt)W1s_WWT)?H&7D~>2kIUGT2elsO@wBAl@0i4K zNygh6O0P|(W6JoP!#S*LJKKn7C7sOTEQa%*IHTco>}<&xk0rHlyx@dIT*cl3PNw$iv-XOqkS${@h3y}$@Ir8bgYD>}c0TU7#P1GNTxux>2T0Ygh;RRN1EuG#_1wx?PF?_zra zsGfj%TU`u2!mCgxRRTuQf51@vOMqQjnv!1?tEnbV<9U~R%T2tkm*=mtV3XL@Wz6d) zuGdMW7+703NILw4_>For2W-CJ{F^%V>cg0>0I)3BG!Eq_HTlQ)AOhe;oWPTU<7Xrv zxP^5@SVn)u%2+?e%4l%L>H>`p77Mg;ut7m<2kTTGXcVwUsDq3S;8=Qo4-aEF{R2xY V!0-roM&1Ab002ovPDHLkV1h=`GfMyf literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^`arDB!3HE>Y`eG%NHG=%xjQkeJ16rJ$YD$Jc6R~N zK=9LfcRi5eEbxddW?zuQ z;~{U815aywFY^x0zJk0%Tz(8W2RM2Tu)SjId%%(R;m_ietw&<^$T6O&KFR8I>7Kjh z(xVd}}!@Z;ra>sqxe8_%!lYXGq?-l!hhBmKW ze6@b|(kU;lI(Np&I=uZLyzk>uC3%^`&fM2db(=0NQ_h^vy5Ka6rSG3RA diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index f02c25113ef..c1ea24c3070 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -38,9 +38,9 @@ $theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC')); // Colors $colorbackhmenu1='60,70,100'; // topmenu -$colorbackvmenu1='248,248,248'; // vmenu +$colorbackvmenu1='249,250,252'; // vmenu $colortopbordertitle1='200,200,200'; // top border of title -$colorbacktitle1='220,220,223'; // title of tables,list +$colorbacktitle1='233,234,238'; // title of tables,list $colorbacktabcard1='255,255,255'; // card $colorbacktabactive='234,234,234'; $colorbacklineimpair1='255,255,255'; // line impair From 567c4bf97b402b850b0c6e2b8cf460df1c9fdf5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josep=20Llu=C3=ADs?= Date: Mon, 29 Jul 2019 18:17:48 +0200 Subject: [PATCH 0386/1148] FIX: resource tpls directories search resource tpls also in custom modules directories --- htdocs/resource/element_resource.php | 52 +++++++++++++++++++--------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php index 2e4085200a2..e2e0e0eb0ee 100644 --- a/htdocs/resource/element_resource.php +++ b/htdocs/resource/element_resource.php @@ -1,6 +1,7 @@ * Copyright (C) 2016 Gilles Poirier + * Copyright (C) 2019 Josep Lluís Amador * * 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 @@ -474,29 +475,46 @@ else $linked_resources = $object->getElementResources($element, $element_id, $resource_obj); - - // If we have a specific template we use it - if(file_exists(dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_add.tpl.php'))) + // Output template part (modules that overwrite templates must declare this into descriptor) + $defaulttpldir='/core/tpl'; + $dirtpls=array_merge($conf->modules_parts['tpl'], array($defaulttpldir), array($path.$defaulttpldir)); + + foreach($dirtpls as $module => $reldir) { - $res=include dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_add.tpl.php'); - } - else - { - $res=include DOL_DOCUMENT_ROOT . '/core/tpl/resource_add.tpl.php'; + if(file_exists(dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_add.tpl.php'))) + { + $tpl = dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_add.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/resource_add.tpl.php'; + } + if (empty($conf->file->strict_mode)) { + $res=@include $tpl; + } else { + $res=include $tpl; // for debug + } + if ($res) break; } if ($mode != 'add' || $resource_obj != $resource_type) { - //print load_fiche_titre($langs->trans(ucfirst($element_prop['element']).'Singular')); - - // If we have a specific template we use it - if(file_exists(dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_view.tpl.php'))) + foreach($dirtpls as $module => $reldir) { - $res=@include dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_view.tpl.php'); - } - else - { - $res=include DOL_DOCUMENT_ROOT . '/core/tpl/resource_view.tpl.php'; + if(file_exists(dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_view.tpl.php'))) + { + $tpl = dol_buildpath($reldir.'/resource_'.$element_prop['element'].'_view.tpl.php'); + } + else + { + $tpl = DOL_DOCUMENT_ROOT.$reldir.'/resource_view.tpl.php'; + } + if (empty($conf->file->strict_mode)) { + $res=@include $tpl; + } else { + $res=include $tpl; // for debug + } + if ($res) break; } } } From d2bc3ac1ef7f4cb97913e695e7f0ed33bcde2aa2 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 29 Jul 2019 18:34:21 +0200 Subject: [PATCH 0387/1148] FIX stripe webhook ID constant set --- htdocs/stripe/admin/stripe.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php index 770678aae15..c2b2143f277 100644 --- a/htdocs/stripe/admin/stripe.php +++ b/htdocs/stripe/admin/stripe.php @@ -55,6 +55,9 @@ if ($action == 'setvalue' && $user->admin) if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_TEST_SECRET_KEY", GETPOST('STRIPE_TEST_SECRET_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); + if (! $result > 0) + $error ++; + $result = dolibarr_set_const($db, "STRIPE_TEST_WEBHOOK_ID", GETPOST('STRIPE_TEST_WEBHOOK_ID', 'alpha'), 'chaine', 0, '', $conf->entity); if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_TEST_WEBHOOK_KEY", GETPOST('STRIPE_TEST_WEBHOOK_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); @@ -64,6 +67,9 @@ if ($action == 'setvalue' && $user->admin) if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_LIVE_SECRET_KEY", GETPOST('STRIPE_LIVE_SECRET_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); + if (! $result > 0) + $error ++; + $result = dolibarr_set_const($db, "STRIPE_LIVE_WEBHOOK_ID", GETPOST('STRIPE_LIVE_WEBHOOK_ID', 'alpha'), 'chaine', 0, '', $conf->entity); if (! $result > 0) $error ++; $result = dolibarr_set_const($db, "STRIPE_LIVE_WEBHOOK_KEY", GETPOST('STRIPE_LIVE_WEBHOOK_KEY', 'alpha'), 'chaine', 0, '', $conf->entity); From 10344d9c34d9f9b9ac5864c5fed280cf799e887b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 02:24:04 +0200 Subject: [PATCH 0388/1148] Try to use the new scrutinizer engine --- .scrutinizer.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index b48aa158cce..85809bcc058 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -1,6 +1,12 @@ # .scrutinizer.yml #build: # - php-scrutinizer-run +build: + nodes: + analysis: + tests: + override: + - php-scrutinizer-run imports: - javascript From 8228979e6777fc71e3aaaedf884637713b401632 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 30 Jul 2019 09:18:18 +0200 Subject: [PATCH 0389/1148] Fix travis --- htdocs/core/class/stats.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index f873b0f5deb..a15800f8ce6 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -106,7 +106,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; + $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; $year++; } } @@ -206,7 +206,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int)(($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0 )][($i+$startmonth)%12][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From b146004966870bca95acbd269b0563932a5e8356 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Tue, 30 Jul 2019 11:06:40 +0200 Subject: [PATCH 0390/1148] Fix travis --- htdocs/core/boxes/box_graph_propales_permonth.php | 2 +- htdocs/core/class/stats.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php index 7179f255add..78cbadc6fb2 100644 --- a/htdocs/core/boxes/box_graph_propales_permonth.php +++ b/htdocs/core/boxes/box_graph_propales_permonth.php @@ -195,7 +195,7 @@ class box_graph_propales_permonth extends ModeleBoxes { if ($startmonth != 0) { - $legend[]=sprintf("%d/%d",$i-2001, $i-2000); + $legend[]=sprintf("%d/%d", $i-2001, $i-2000); } else { diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php index a15800f8ce6..85a6f43ed4d 100644 --- a/htdocs/core/class/stats.class.php +++ b/htdocs/core/class/stats.class.php @@ -106,7 +106,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; + $data[$i][]=$datay[$year - (1 - ((int) ($i+$startmonth)/12) + ($startmonth == 0 ? 1 : 0))][($i+$startmonth)%12][1]; $year++; } } @@ -206,7 +206,7 @@ abstract class Stats $year=$startyear; while($year <= $endyear) { - $data[$i][]=$datay[$year - (1 - (int) (($i+$startmonth)/12)) + ($startmonth == 0 ? 1 : 0)][($i+$startmonth)%12][1]; // set yval for x=i + $data[$i][]=$datay[$year - (1 - ((int) ($i+$startmonth)/12) + ($startmonth == 0 ? 1 : 0))][($i+$startmonth)%12][1]; // set yval for x=i $year++; } } From 5880d549fbe430580b32ab3bc57e64b0c7c3baf0 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 30 Jul 2019 11:55:46 +0200 Subject: [PATCH 0391/1148] Fix php error with const --- htdocs/compta/cashcontrol/cashcontrol_card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 61acf6e3a89..378d6087cc7 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -247,7 +247,7 @@ if ($action=="create" || $action=="start") } // Get the bank account dedicated to this point of sale module/terminal - $vartouse=CASHDESK_ID_BANKACCOUNT_CASH.$terminaltouse; + $vartouse='CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse; $bankid = $conf->global->$vartouse; // This value is ok for 'Terminal 0' for module 'CashDesk' and 'TakePos' (they manage only 1 terminal) // Hook to get the good bank id according to posmodule and posnumber. // @TODO add hook here From 449ef9200752de8e3feea2eefd606de80c037ee0 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Tue, 30 Jul 2019 12:31:03 +0200 Subject: [PATCH 0392/1148] FIX: categories import: prevent mismatch between category type and object type --- .../modules/import/import_csv.modules.php | 21 ++++++++++++++----- .../modules/import/import_xlsx.modules.php | 21 ++++++++++++++----- htdocs/core/modules/modCategorie.class.php | 14 +++++++++---- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index a6473eaeb8e..776d8dfa04f 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -493,15 +493,24 @@ class ImportCsv extends ModeleImports if (! empty($objimport->array_import_regex[0][$val]) && ($newval != '')) { // If test is "Must exist in a field@table" - if (preg_match('/^(.*)@(.*)$/',$objimport->array_import_regex[0][$val],$reg)) + if (preg_match('/^(.+)@([^:]+)(:.+)?$/',$objimport->array_import_regex[0][$val],$reg)) { $field=$reg[1]; $table=$reg[2]; + $filter=substr($reg[3], 1); + + $cachekey = $field.'@'.$table; + if(! empty($filter)) $cachekey.= ':'.$filter; // Load content of field@table into cache array - if (! is_array($this->cachefieldtable[$field.'@'.$table])) // If content of field@table not already loaded into cache + if (! is_array($this->cachefieldtable[$cachekey])) // If content of field@table not already loaded into cache { $sql="SELECT ".$field." as aliasfield FROM ".$table; + if(! empty($filter)) + { + $sql.= ' WHERE ' . $filter; + } + $resql=$this->db->query($sql); if ($resql) { @@ -510,7 +519,7 @@ class ImportCsv extends ModeleImports while ($i < $num) { $obj=$this->db->fetch_object($resql); - if ($obj) $this->cachefieldtable[$field.'@'.$table][]=$obj->aliasfield; + if ($obj) $this->cachefieldtable[$cachekey][]=$obj->aliasfield; $i++; } } @@ -521,9 +530,11 @@ class ImportCsv extends ModeleImports } // Now we check cache is not empty (should not) and key is into cache - if (! is_array($this->cachefieldtable[$field.'@'.$table]) || ! in_array($newval,$this->cachefieldtable[$field.'@'.$table])) + if (! is_array($this->cachefieldtable[$cachekey]) || ! in_array($newval,$this->cachefieldtable[$cachekey])) { - $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$table); + $tableforerror = $table; + if(! empty($filter)) $tableforerror.= ':'.$filter; + $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$tableforerror); $this->errors[$error]['type']='FOREIGNKEY'; $errorforthistable++; $error++; diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 7f222f523ca..d58fd16cf2f 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -519,15 +519,24 @@ class ImportXlsx extends ModeleImports if (! empty($objimport->array_import_regex[0][$val]) && ($newval != '')) { // If test is "Must exist in a field@table" - if (preg_match('/^(.*)@(.*)$/',$objimport->array_import_regex[0][$val],$reg)) + if (preg_match('/^(.+)@([^:]+)(:.+)?$/',$objimport->array_import_regex[0][$val],$reg)) { $field=$reg[1]; $table=$reg[2]; + $filter=substr($reg[3], 1); + + $cachekey = $field.'@'.$table; + if(! empty($filter)) $cachekey.= ':'.$filter; // Load content of field@table into cache array - if (! is_array($this->cachefieldtable[$field.'@'.$table])) // If content of field@table not already loaded into cache + if (! is_array($this->cachefieldtable[$cachekey])) // If content of field@table not already loaded into cache { $sql="SELECT ".$field." as aliasfield FROM ".$table; + if(! empty($filter)) + { + $sql.= ' WHERE ' . $filter; + } + $resql=$this->db->query($sql); if ($resql) { @@ -536,7 +545,7 @@ class ImportXlsx extends ModeleImports while ($i < $num) { $obj=$this->db->fetch_object($resql); - if ($obj) $this->cachefieldtable[$field.'@'.$table][]=$obj->aliasfield; + if ($obj) $this->cachefieldtable[$cachekey][]=$obj->aliasfield; $i++; } } @@ -547,9 +556,11 @@ class ImportXlsx extends ModeleImports } // Now we check cache is not empty (should not) and key is into cache - if (! is_array($this->cachefieldtable[$field.'@'.$table]) || ! in_array($newval,$this->cachefieldtable[$field.'@'.$table])) + if (! is_array($this->cachefieldtable[$cachekey]) || ! in_array($newval,$this->cachefieldtable[$cachekey])) { - $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$table); + $tableforerror = $table; + if(! empty($filter)) $tableforerror.= ':'.$filter; + $this->errors[$error]['lib']=$langs->transnoentitiesnoconv('ErrorFieldValueNotIn',$key,$newval,$field,$tableforerror); $this->errors[$error]['type']='FOREIGNKEY'; $errorforthistable++; $error++; diff --git a/htdocs/core/modules/modCategorie.class.php b/htdocs/core/modules/modCategorie.class.php index 50074779955..668b0ac9014 100644 --- a/htdocs/core/modules/modCategorie.class.php +++ b/htdocs/core/modules/modCategorie.class.php @@ -422,8 +422,8 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('cp'=>MAIN_DB_PREFIX.'categorie_product'); - $this->import_fields_array[$r]=array('cp.fk_categorie'=>"Category*",'cp.fk_product'=>"Product*" - ); + $this->import_fields_array[$r]=array('cp.fk_categorie'=>"Category*",'cp.fk_product'=>"Product*"); + $this->import_regex_array[$r]=array('cp.fk_categorie'=>'rowid@'.MAIN_DB_PREFIX.'categorie:type=0'); $this->import_convertvalue_array[$r]=array( 'cp.fk_categorie'=>array('rule'=>'fetchidfromref','classfile'=>'/categories/class/categorie.class.php','class'=>'Categorie','method'=>'fetch','element'=>'category'), @@ -441,7 +441,10 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('cs'=>MAIN_DB_PREFIX.'categorie_societe'); - $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"ThirdParty*" + $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"ThirdParty*"); + $this->import_regex_array[$r]=array( + 'cs.fk_categorie'=>'rowid@'.MAIN_DB_PREFIX.'categorie:type=2', + 'cs.fk_soc'=>'rowid@'.MAIN_DB_PREFIX.'societe:client>0' ); $this->import_convertvalue_array[$r]=array( @@ -460,7 +463,10 @@ class modCategorie extends DolibarrModules $this->import_icon[$r]=$this->picto; $this->import_entities_array[$r]=array(); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('cs'=>MAIN_DB_PREFIX.'categorie_fournisseur'); - $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"Supplier*" + $this->import_fields_array[$r]=array('cs.fk_categorie'=>"Category*",'cs.fk_soc'=>"Supplier*"); + $this->import_regex_array[$r]=array( + 'cs.fk_categorie'=>'rowid@'.MAIN_DB_PREFIX.'categorie:type=1', + 'cs.fk_soc'=>'rowid@'.MAIN_DB_PREFIX.'societe:fournisseur>0' ); $this->import_convertvalue_array[$r]=array( From 6aefa648e71a4f336c2f336be4c87f3bc0c92b71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 14:00:43 +0200 Subject: [PATCH 0393/1148] FIX CVE-2019-11199 --- htdocs/viewimage.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php index 073aaa9fb24..3db6e9fb803 100644 --- a/htdocs/viewimage.php +++ b/htdocs/viewimage.php @@ -170,7 +170,9 @@ if (GETPOST('type','alpha')) $type=GETPOST('type','alpha'); else $type=dol_mimetype($original_file); // Security: This wrapper is for images. We do not allow type/html -if (preg_match('/html/', $type)) accessforbidden('Error: Using the image wrapper to output a file with a mime type HTML is not possible.', 1, 1, 1); +if (preg_match('/html/i', $type)) accessforbidden('Error: Using the image wrapper to output a file with a mime type HTML is not possible.', 1, 1, 1); +// Security: This wrapper is for images. We do not allow files ending with .noexe +if (preg_match('/\.noexe$/i', $original_file)) accessforbidden('Error: Using the image wrapper to output a file ending with .noexe is not allowed.', 1, 1, 1); // Security: Delete string ../ into $original_file $original_file = str_replace("../","/", $original_file); From de293c4ef2ec2aa3a5c60eace86d448437facaf4 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Tue, 30 Jul 2019 14:09:03 +0200 Subject: [PATCH 0394/1148] FIX issue #9300: install error with PostgreSQL when using custom table prefix --- htdocs/install/step2.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/htdocs/install/step2.php b/htdocs/install/step2.php index 30b3ff7d64f..a53e5f07ee7 100644 --- a/htdocs/install/step2.php +++ b/htdocs/install/step2.php @@ -451,6 +451,11 @@ if ($action == "set") $buffer=trim($buffer); if ($buffer) { + // Replace the prefix in table names + if ($dolibarr_main_db_prefix != 'llx_') + { + $buffer=preg_replace('/llx_/i',$dolibarr_main_db_prefix,$buffer); + } dolibarr_install_syslog("step2: request: " . $buffer); print "\n"; $resql=$db->query($buffer,0,'dml'); From 703506c0e2674795fdf0dd2f9f78ee7f3c98b5b0 Mon Sep 17 00:00:00 2001 From: Marc de Lima Lucio Date: Tue, 30 Jul 2019 14:11:21 +0200 Subject: [PATCH 0395/1148] FIX: import filter error --- htdocs/core/modules/import/import_csv.modules.php | 2 +- htdocs/core/modules/import/import_xlsx.modules.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 776d8dfa04f..e0ec89379af 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -497,7 +497,7 @@ class ImportCsv extends ModeleImports { $field=$reg[1]; $table=$reg[2]; - $filter=substr($reg[3], 1); + $filter=!empty($reg[3])?substr($reg[3], 1):''; $cachekey = $field.'@'.$table; if(! empty($filter)) $cachekey.= ':'.$filter; diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index d58fd16cf2f..7d850ccfb8b 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -523,7 +523,7 @@ class ImportXlsx extends ModeleImports { $field=$reg[1]; $table=$reg[2]; - $filter=substr($reg[3], 1); + $filter=!empty($reg[3])?substr($reg[3], 1):''; $cachekey = $field.'@'.$table; if(! empty($filter)) $cachekey.= ':'.$filter; From db69a07bc448948cd9e2bcb12c1c8705a7e9c1bf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 15:21:26 +0200 Subject: [PATCH 0396/1148] FIX Option THIRDPARTY_SUGGEST_ALSO_ADDRESS_CREATION --- htdocs/societe/card.php | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 34784beefcb..3f7b97fee73 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -383,7 +383,7 @@ if (empty($reshook)) } else $object->canvas=$canvas; - if (GETPOST("private") == 1) // Ask to create a contact + if (GETPOST("private", 'int') == 1) // Ask to create a contact { $object->particulier = GETPOST("private"); @@ -1172,13 +1172,18 @@ else // If javascript on, we show option individual if ($conf->use_javascript_ajax) { - print '
'.$form->editfieldkey('FirstName', 'firstname', '', $object, 0).'
'.$form->editfieldkey('UserTitle', 'civility_id', '', $object, 0).''; - print $formcompany->select_civility($object->civility_id, 'civility_id', 'maxwidth100').'
'.$form->editfieldkey('FirstName', 'firstname', '', $object, 0).'
'.$form->editfieldkey('UserTitle', 'civility_id', '', $object, 0).''; + print $formcompany->select_civility($object->civility_id, 'civility_id', 'maxwidth100').'
'.$langs->trans("RUMWillBeGenerated").'
'.$langs->trans("DateRUM").''.$form->selectDate(GETPOST('date_rum'), 'date_rum', 0,0,1, 'date_rum').'
'.$form->selectDate(GETPOST('date_rum'), 'date_rum', 0, 0, 1, 'date_rum').'
'.$langs->trans("WithdrawMode").''; $tblArraychoice = array("FRST" => $langs->trans("FRST"), "RECUR" => $langs->trans("RECUR")); From a871aa818b5d3e931bb2214ead646723735c771e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 18:15:04 +0200 Subject: [PATCH 0399/1148] FIX #11460 FIX #11492 FIX #11576 FIX #11590 --- htdocs/core/tpl/objectline_create.tpl.php | 50 ++++++++++++++++------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index bf46ecb9890..ebb9e8a41ac 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -255,6 +255,25 @@ if ($nolinesbefore) { { $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, 1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); } + + if (empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) + { + ?> + + select_produits_fournisseurs($object->socid, GETPOST('idprodfournprice'), 'idprodfournprice', '', '', $ajaxoptions, 1, $alsoproductwithnosupplierprice, 'maxwidth300'); - ?> - - global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_SUPPLIER_PRODUCTS)) + { + ?> + + '; echo ''; From e54c6fb5e2e1af537925b2d74457e6ee7caf12f1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 30 Jul 2019 19:30:56 +0200 Subject: [PATCH 0400/1148] FIX #11460 FIX #11492 FIX #11576 FIX #11590 --- htdocs/core/tpl/objectline_create.tpl.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index ebb9e8a41ac..75c6f72e1df 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -256,7 +256,7 @@ if ($nolinesbefore) { $form->select_produits(GETPOST('idprod'), 'idprod', $filtertype, $conf->product->limit_size, $buyer->price_level, 1, 2, '', 1, array(), $buyer->id, '1', 0, 'maxwidth300', 0, '', GETPOST('combinations', 'array')); } - if (empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) + if (! empty($conf->global->MAIN_AUTO_OPEN_SELECT2_ON_FOCUS_FOR_CUSTOMER_PRODUCTS)) { ?> '; - } - } - } -} -else -{ - print '
'; - $langs->load("errors"); - print $langs->trans("ErrorModuleSetupNotComplete"); - print '
'; - $action=''; -} - - -print '
'; - -$head = array(); - -if ($action == 'editcontent') -{ - /* - * Editing global variables not related to a specific theme - */ - - $csscontent = @file_get_contents($filecss); - - $contentforedit = ''; - /*$contentforedit.=''."\n";*/ - $contentforedit .= $objectpage->content; - - require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; - $doleditor=new DolEditor('PAGE_CONTENT', $contentforedit, '', 500, 'Full', '', true, true, true, ROWS_5, '90%'); - $doleditor->Create(0, '', false); -} print "
\n\n"; diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index a9746ca6f65..7a24fad83af 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3506,7 +3506,7 @@ class Propal extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Proposal")); return ""; } } diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 6bb47f12a12..0fd061ac7ed 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -2591,7 +2591,7 @@ if ($action == 'create' && $user->rights->commande->creer) } } else { $langs->load("errors"); - print ''; + print ''; } } } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index a8b75341ed3..13bc74bc6f1 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3452,7 +3452,7 @@ class Facture extends CommonInvoice else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Invoice")); return ""; } } diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index d9a912ea50b..26e3f2792d6 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -489,7 +489,7 @@ class RemiseCheque extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Bank")); return ""; } } diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php index a3c79d23602..614782c519b 100644 --- a/htdocs/compta/paiement/class/paiement.class.php +++ b/htdocs/compta/paiement/class/paiement.class.php @@ -1141,7 +1141,7 @@ class Paiement extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Invoice")); return ""; } } diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index d0c69fbe61b..ddbec62e413 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -78,7 +78,7 @@ if (empty($reshook)) // $conf->global->PRELEVEMENT_CODE_BANQUE and $conf->global->PRELEVEMENT_CODE_GUICHET should be empty $bprev = new BonPrelevement($db); $executiondate = dol_mktime(0, 0, 0, GETPOST('remonth'), (GETPOST('reday')+$conf->global->PRELEVEMENT_ADDDAYS), GETPOST('reyear')); - + $result = $bprev->create($conf->global->PRELEVEMENT_CODE_BANQUE, $conf->global->PRELEVEMENT_CODE_GUICHET, $mode, $format, $executiondate); if ($result < 0) { @@ -116,7 +116,7 @@ llxHeader('', $langs->trans("NewStandingOrder")); if (prelevement_check_config() < 0) { $langs->load("errors"); - setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); + setEventMessages($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Withdraw")), null, 'errors'); } /*$h=0; diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index 4e2c4e2d3a5..1be716f8f61 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -58,7 +58,7 @@ llxHeader('', $langs->trans("CustomersStandingOrdersArea")); if (prelevement_check_config() < 0) { $langs->load("errors"); - setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); + setEventMessages($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Withdraw")), null, 'errors'); } print load_fiche_titre($langs->trans("CustomersStandingOrdersArea")); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 147d31311d3..e81febde6df 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -245,7 +245,7 @@ class Contrat extends CommonObject else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Contract")); return ""; } } diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 45ad69f6c64..b48fef9759a 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -701,7 +701,7 @@ class PaiementFourn extends Paiement else { $langs->load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Supplier")); return ""; } } diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index 8e4d42559a8..4c8e761da9a 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -90,7 +90,7 @@ ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module. ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this vendor ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created because of too-low quantities -ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete. +ErrorModuleSetupNotComplete=Setup of module %s looks to be uncomplete. Go on Home - Setup - Modules to complete. ErrorBadMask=Error on mask ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number ErrorBadMaskBadRazMonth=Error, bad reset value diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index 1cf435379cd..a223f936638 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -90,7 +90,7 @@ ErrorSpecialCharNotAllowedForField=Les caractères spéciaux ne sont pas admis p ErrorNumRefModel=Une référence existe en base (%s) et est incompatible avec cette numérotation. Supprimez la ligne ou renommez la référence pour activer ce module. ErrorQtyTooLowForThisSupplier=Quantité insuffisante pour ce fournisseur ou aucun tarif défini sur ce produit pour ce fournisseur ErrorOrdersNotCreatedQtyTooLow=Certaines commandes n'ont pas été créées en raison de quantités trop faibles -ErrorModuleSetupNotComplete=La configuration des modules semble incomplète. Aller sur la page Accueil - Configuration - Modules pour corriger. +ErrorModuleSetupNotComplete=La configuration du module '%s' semble incomplète. Aller sur la page Accueil - Configuration - Modules pour corriger. ErrorBadMask=Erreur sur le masque ErrorBadMaskFailedToLocatePosOfSequence=Erreur, masque sans numéro de séquence ErrorBadMaskBadRazMonth=Erreur, mauvais valeur de remise à zéro diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index 0a967cb10a7..a9e712c92db 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1928,7 +1928,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment // JS Code for Stripe if (empty($stripearrayofkeys['publishable_key'])) { - print info_admin($langs->trans("ErrorModuleSetupNotComplete", "stripe"), 0, 0, 'error'); + $langs->load("errors"); + print info_admin($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("Stripe")), 0, 0, 'error'); } else { diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index c9275293bb2..964812a05a3 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -224,21 +224,25 @@ $object = new Societe($db); * Actions */ -if ($action=="change") +if ($action=="change") // Change customer for TakePOS { $idcustomer = GETPOST('idcustomer', 'int'); $place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant - $sql="UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".$idcustomer." where ref='(PROV-POS-".$place.")'"; + // @TODO Check if draft invoice already exists, if not create it or return a warning to ask to enter at least one line to have it created automatically + $sql="UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".$idcustomer." where ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")'"; $resql = $db->query($sql); - ?> - - + + load("errors"); - print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete"); + print $langs->trans("Error")." ".$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("SupplierProposal")); return ""; } } diff --git a/htdocs/takepos/admin/terminal.php b/htdocs/takepos/admin/terminal.php index b952285747b..0a91e303a53 100644 --- a/htdocs/takepos/admin/terminal.php +++ b/htdocs/takepos/admin/terminal.php @@ -125,8 +125,8 @@ print '
'.$langs->trans("Parameters").''.$langs->trans("Value").'
'.$langs->trans("CashDeskThirdPartyForSell").''; +print '
'.$langs->trans("CashDeskThirdPartyForSell").''; print $form->select_company($conf->global->{'CASHDESK_ID_THIRDPARTY'.$terminaltouse}, 'socid', '(s.client IN (1, 3) AND s.status = 1)', 1, 0, 0, array(), 0); print '
'.$langs->trans("CashDeskBankAccountForSell").''; + print ''; $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse, 0, "courant=2", 1); + if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$terminaltouse})) $atleastonefound++; print '
'.$langs->trans("CashDeskBankAccountForCheque").''; + print ''; $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse, 0, "courant=1", 1); + if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$terminaltouse})) $atleastonefound++; print '
'.$langs->trans("CashDeskBankAccountForCB").''; + print ''; $form->select_comptes($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse}, 'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse, 0, "courant=1", 1); + if (! empty($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$terminaltouse})) $atleastonefound++; print '
'.$langs->trans("CashDeskBankAccountFor").' '.$langs->trans($modep->libelle).''; + print ''; if (! empty($conf->global->$name)) $atleastonefound++; $cour=preg_match('/^LIQ.*/', $modep->code)?2:1; $form->select_comptes($conf->global->$name, $name, 0, "courant=".$cour, 1); @@ -162,7 +165,7 @@ if (! empty($conf->stock->enabled)) { print '
'.$langs->trans("CashDeskDoNotDecreaseStock").''; + print ''; if (empty($conf->productbatch->enabled)) { print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK'.$terminal, $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$terminal}, 1); } @@ -180,7 +183,7 @@ if (! empty($conf->stock->enabled)) print '
'.$langs->trans("CashDeskIdWareHouse").''; + print ''; if (! $disabled) { print $formproduct->selectWarehouses($conf->global->{'CASHDESK_ID_WAREHOUSE'.$terminal}, 'CASHDESK_ID_WAREHOUSE'.$terminal, '', 1, $disabled); @@ -195,7 +198,7 @@ if (! empty($conf->stock->enabled)) print '
'; -if (empty($atleastonefound) && ! empty($conf->banque->enabled)) +if ($atleastonefound == 0 && ! empty($conf->banque->enabled)) { print info_admin($langs->trans("AtLeastOneDefaultBankAccountMandatory"), 0, 0, 'error'); } diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 79c7eee3d56..e09c31664cd 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -42,7 +42,7 @@ $langs->loadLangs(array("bills", "cashdesk")); $id = GETPOST('id', 'int'); $action = GETPOST('action', 'alpha'); $idproduct = GETPOST('idproduct', 'int'); -$place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Ba or Restaurant +$place = (GETPOST('place', 'int') > 0 ? GETPOST('place', 'int') : 0); // $place is id of table for Bar or Restaurant /** * Abort invoice creationg with a given error message @@ -184,9 +184,21 @@ if (($action=="addline" || $action=="freezone") && $placeid == 0) $invoice->module_source = 'takepos'; $invoice->pos_source = $_SESSION["takeposterminal"]; - $placeid = $invoice->create($user); - $sql="UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid=".$placeid; - $db->query($sql); + if ($invoice->socid <= 0) + { + $langs->load('errors'); + dol_htmloutput_errors($langs->trans("ErrorModuleSetupNotComplete", "TakePos"), null, 1); + } + else + { + $placeid = $invoice->create($user); + if ($placeid < 0) + { + dol_htmloutput_errors($invoice->error, $invoice->errors, 1); + } + $sql="UPDATE ".MAIN_DB_PREFIX."facture set ref='(PROV-POS".$_SESSION["takeposterminal"]."-".$place.")' where rowid=".$placeid; + $db->query($sql); + } } if ($action == "addline") diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 702bb082714..dba42a105ae 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -352,7 +352,7 @@ function deleteline() { } function Customer() { - console.log("Open box to select the thirdparty"); + console.log("Open box to select the thirdparty place="+place); $.colorbox({href:"../societe/list.php?contextpage=poslist&nomassaction=1&place="+place, width:"90%", height:"80%", transition:"none", iframe:"true", title:"trans("Customer");?>"}); } @@ -619,7 +619,7 @@ $sql = "SELECT code, libelle FROM ".MAIN_DB_PREFIX."c_paiement"; $sql.= " WHERE entity IN (".getEntity('c_paiement').")"; $sql.= " AND active = 1"; $sql.= " ORDER BY libelle"; -print $sql; + $resql = $db->query($sql); $paiementsModes = array(); if ($resql){ @@ -634,7 +634,8 @@ if ($resql){ } } if (empty($paiementsModes)) { - setEventMessages($langs->trans("ErrorModuleSetupNotComplete"), null, 'errors'); + $langs->load('errors'); + setEventMessages($langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("TakePOS")), null, 'errors'); } if (count($maincategories)==0) { setEventMessages($langs->trans("TakeposNeedsCategories"), null, 'errors'); diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php index 46e42c351c7..2ad328b5a88 100644 --- a/htdocs/user/clicktodial.php +++ b/htdocs/user/clicktodial.php @@ -120,7 +120,7 @@ if ($id > 0) if (empty($conf->global->CLICKTODIAL_URL) && empty($object->clicktodial_url)) { $langs->load("errors"); - print ''.$langs->trans("ErrorModuleSetupNotComplete").''; + print ''.$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("ClickToDial")).''; } else { @@ -161,7 +161,7 @@ if ($id > 0) if (empty($url)) { $langs->load("errors"); - print ''.$langs->trans("ErrorModuleSetupNotComplete").''; + print ''.$langs->trans("ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv("ClickToDial")).''; } else { From 9b84987cc1499eaa9fe1e55fe948965d4202fb32 Mon Sep 17 00:00:00 2001 From: John Botella Date: Thu, 1 Aug 2019 12:33:19 +0200 Subject: [PATCH 0415/1148] prepare new dashboard --- htdocs/adherents/class/adherent.class.php | 1 + htdocs/comm/action/class/actioncomm.class.php | 1 + htdocs/comm/propal/class/propal.class.php | 5 +- htdocs/commande/class/commande.class.php | 1 + htdocs/compta/facture/class/facture.class.php | 1 + htdocs/contrat/class/contrat.class.php | 4 + htdocs/core/class/workboardresponse.class.php | 12 + .../class/expensereport.class.php | 2 + .../class/fournisseur.commande.class.php | 1 + .../fourn/class/fournisseur.facture.class.php | 1 + htdocs/holiday/class/holiday.class.php | 1 + htdocs/index.php | 223 +++++++++++++++--- htdocs/langs/en_US/contracts.lang | 3 + htdocs/langs/en_US/main.lang | 3 + htdocs/langs/en_US/members.lang | 3 +- htdocs/projet/class/project.class.php | 1 + .../class/supplier_proposal.class.php | 4 + htdocs/theme/eldy/global.inc.php | 8 + htdocs/theme/eldy/img/title_document.png | Bin 0 -> 570 bytes htdocs/theme/eldy/info-box.inc.php | 114 +++++++++ htdocs/theme/md/img/title_document.png | Bin 0 -> 570 bytes 21 files changed, 359 insertions(+), 30 deletions(-) create mode 100644 htdocs/theme/eldy/img/title_document.png create mode 100644 htdocs/theme/eldy/info-box.inc.php create mode 100644 htdocs/theme/md/img/title_document.png diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index dc894663e4c..12825d9a780 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2315,6 +2315,7 @@ class Adherent extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->adherent->subscription->warning_delay/60/60/24; $response->label=$langs->trans("MembersWithSubscriptionToReceive"); + $response->labelShort=$langs->trans("MembersWithSubscriptionToReceiveShort"); $response->url=DOL_URL_ROOT.'/adherents/list.php?mainmenu=members&statut=1&filter=outofdate'; $response->img=img_object('', "user"); diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 6e4e3fb941b..79ae09c1678 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -1103,6 +1103,7 @@ class ActionComm extends CommonObject $response = new WorkboardResponse(); $response->warning_delay = $conf->agenda->warning_delay/60/60/24; $response->label = $langs->trans("ActionsToDo"); + $response->labelShort = $langs->trans("ActionsToDoShort"); $response->url = DOL_URL_ROOT.'/comm/action/list.php?actioncode=0&status=todo&mainmenu=agenda'; if ($user->rights->agenda->allactions->read) $response->url.='&filtert=-1'; $response->img = img_object('', "action", 'class="inline-block valigntextmiddle"'); diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index c1dde5e2aa4..481f6a5096f 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -3277,21 +3277,24 @@ class Propal extends CommonObject $delay_warning = 0; $statut = 0; - $label = ''; + $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->propal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("PropalsToClose"); + $labelShort = $langs->trans("ToClose"); } if ($mode == 'signed') { $delay_warning=$conf->propal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("PropalsToBill"); // We set here bill but may be billed or ordered + $labelShort = $langs->trans("ToBill"); } $response = new WorkboardResponse(); $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals'; $response->url_late = DOL_URL_ROOT.'/comm/propal/list.php?viewstatut='.$statut.'&mainmenu=commercial&leftmenu=propals&sortfield=p.datep&sortorder=asc'; $response->img = img_object('', "propal"); diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index b1e2262f109..fb246c7e232 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -3411,6 +3411,7 @@ class Commande extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->client->warning_delay/60/60/24; $response->label=$langs->trans("OrdersToProcess"); + $response->labelShort = $langs->trans("ToProcess"); $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders'; $response->img=img_object('', "order"); diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index e5b8c0795ed..00b25b64506 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -3889,6 +3889,7 @@ class Facture extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->client->warning_delay/60/60/24; $response->label=$langs->trans("CustomerBillsUnpaid"); + $response->labelShort=$langs->trans("Unpaid"); $response->url=DOL_URL_ROOT.'/compta/facture/list.php?search_status=1&mainmenu=billing&leftmenu=customers_bills'; $response->img=img_object('', "bill"); diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 0fb460466ef..666b80fb2d4 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -2186,23 +2186,27 @@ class Contrat extends CommonObject if ($mode == 'inactive') { $warning_delay = $conf->contrat->services->inactifs->warning_delay; $label = $langs->trans("BoardNotActivatedServices"); + $labelShort = $langs->trans("BoardNotActivatedServicesShort"); $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=0&sortfield=cd.date_fin_validite&sortorder=asc'; } elseif ($mode == 'expired') { $warning_delay = $conf->contrat->services->expires->warning_delay; $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=4&filter=expired&sortfield=cd.date_fin_validite&sortorder=asc'; $label = $langs->trans("BoardExpiredServices"); + $labelShort = $langs->trans("BoardExpiredServicesShort"); } else { $warning_delay = $conf->contrat->services->expires->warning_delay; $url = DOL_URL_ROOT.'/contrat/services_list.php?mainmenu=commercial&leftmenu=contracts&mode=4&sortfield=cd.date_fin_validite&sortorder=asc'; //$url.= '&op2day='.$arraydatetouse['mday'].'&op2month='.$arraydatetouse['mon'].'&op2year='.$arraydatetouse['year']; //if ($warning_delay >= 0) $url.='&filter=expired'; $label = $langs->trans("BoardRunningServices"); + $labelShort = $langs->trans("BoardRunningServicesShort"); } $response = new WorkboardResponse(); $response->warning_delay = $warning_delay/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = $url; $response->img = img_object('', "contract"); diff --git a/htdocs/core/class/workboardresponse.class.php b/htdocs/core/class/workboardresponse.class.php index 35449693599..3af5feaecbc 100644 --- a/htdocs/core/class/workboardresponse.class.php +++ b/htdocs/core/class/workboardresponse.class.php @@ -37,6 +37,18 @@ class WorkboardResponse */ public $label; + /** + * Short Label of the warning + * @var string + */ + public $labelShort; + + /** + * infoKey of the warning + * @var string + */ + public $infoKey = 'todo'; + /** * URL to list to do items * @var string diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 34f60120925..272125530e3 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2333,12 +2333,14 @@ class ExpenseReport extends CommonObject { $response->warning_delay=$conf->expensereport->approve->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToApprove"); + $response->labelShort=$langs->trans("ToApprove"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=2'; } else { $response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToPay"); + $response->labelShort=$langs->trans("ToPay"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=5'; } $response->img=img_object('', "trip"); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 9d5bfce0189..a77206d5f42 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -2835,6 +2835,7 @@ class CommandeFournisseur extends CommonOrder $response = new WorkboardResponse(); $response->warning_delay=$conf->commande->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SuppliersOrdersToProcess"); + $response->labelShort=$langs->trans("ToProcess"); $response->url=DOL_URL_ROOT.'/fourn/commande/list.php?statut=1,2,3&mainmenu=commercial&leftmenu=orders_suppliers'; $response->img=img_object('', "order"); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 41ac2f126a7..dcafc3bdbf2 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2213,6 +2213,7 @@ class FactureFournisseur extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SupplierBillsToPay"); + $response->labelShort=$langs->trans("ToPay"); $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; $response->img=img_object($langs->trans("Bills"), "bill"); diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 533f6c9c748..b540ba8248e 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -2243,6 +2243,7 @@ class Holiday extends CommonObject $response = new WorkboardResponse(); $response->warning_delay=$conf->holiday->approve->warning_delay/60/60/24; $response->label=$langs->trans("HolidaysToApprove"); + $response->labelShort=$langs->trans("ToApprove"); $response->url=DOL_URL_ROOT.'/holiday/list.php?search_statut=2&mainmenu=hrm&leftmenu=holiday'; $response->img=img_object('', "holiday"); diff --git a/htdocs/index.php b/htdocs/index.php index bce4c521ad5..6276d85f579 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -374,13 +374,15 @@ $dashboardlines=array(); // Do not include sections without management permission require_once DOL_DOCUMENT_ROOT.'/core/class/workboardresponse.class.php'; + + // Number of actions to do (late) if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->read) { include_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; $board=new ActionComm($db); - - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; // deprecated } // Number of project opened @@ -388,7 +390,8 @@ if (! empty($conf->projet->enabled) && $user->rights->projet->lire) { include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; $board=new Project($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of tasks to do (late) @@ -396,7 +399,8 @@ if (! empty($conf->projet->enabled) && empty($conf->global->PROJECT_HIDE_TASKS) { include_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; $board=new Task($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of commercial proposals opened (expired) @@ -404,9 +408,13 @@ if (! empty($conf->propal->enabled) && $user->rights->propale->lire) { include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $board=new Propal($db); - $dashboardlines[] = $board->load_board($user, "opened"); - // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[] = $board->load_board($user, "signed"); + + $workBoard = $board->load_board($user, "opened"); + $dashboardlines[$board->element.'_opened'] = $workBoard; + + $workBoard = $board->load_board($user, "signed"); + $dashboardlines[$board->element.'_signed'] = $workBoard; + } // Number of commercial proposals opened (expired) @@ -414,9 +422,13 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos { include_once DOL_DOCUMENT_ROOT.'/supplier_proposal/class/supplier_proposal.class.php'; $board=new SupplierProposal($db); - $dashboardlines[] = $board->load_board($user, "opened"); + + $workBoard = $board->load_board($user, "opened"); + $dashboardlines[$board->element.'_opened'] = $workBoard; + // Number of commercial proposals CLOSED signed (billed) - $dashboardlines[] = $board->load_board($user, "signed"); + $workBoard = $board->load_board($user, "signed"); + $dashboardlines[$board->element.'_signed'] = $workBoard; } // Number of customer orders a deal @@ -424,7 +436,8 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire) { include_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $board=new Commande($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of suppliers orders a deal @@ -432,7 +445,8 @@ if (! empty($conf->supplier_order->enabled) && $user->rights->fournisseur->comma { include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; $board=new CommandeFournisseur($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of services enabled (delayed) @@ -440,16 +454,20 @@ if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire) { include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php'; $board=new Contrat($db); - $dashboardlines[] = $board->load_board($user, "inactive"); + $workBoard = $board->load_board($user, "inactive"); + $dashboardlines[$board->element.'_inactive'] = $workBoard; + // Number of active services (expired) - $dashboardlines[] = $board->load_board($user, "active"); + $workBoard = $board->load_board($user, "active"); + $dashboardlines[$board->element.'_active'] = $workBoard; } // Number of invoices customers (has paid) if (! empty($conf->facture->enabled) && $user->rights->facture->lire) { include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $board=new Facture($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of supplier invoices (has paid) @@ -457,7 +475,8 @@ if (! empty($conf->supplier_invoice->enabled) && ! empty($user->rights->fourniss { include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; $board=new FactureFournisseur($db); - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } // Number of transactions to conciliate @@ -468,7 +487,8 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s $nb = $board::countAccountToReconcile(); // Get nb of account to reconciliate if ($nb > 0) { - $dashboardlines[] = $board->load_board($user); + $workBoard = $board->load_board($user); + $dashboardlines[$board->element] = $workBoard; } } @@ -477,7 +497,7 @@ if (! empty($conf->banque->enabled) && $user->rights->banque->lire && ! $user->s { include_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php'; $board=new RemiseCheque($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['RemiseCheque'] = $board->load_board($user); } // Number of foundation members @@ -485,7 +505,7 @@ if (! empty($conf->adherent->enabled) && $user->rights->adherent->lire && ! $use { include_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; $board=new Adherent($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['Adherent'] = $board->load_board($user); } // Number of expense reports to approve @@ -493,7 +513,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->appr { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); - $dashboardlines[] = $board->load_board($user, 'toapprove'); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'toapprove'); } // Number of expense reports to pay @@ -501,7 +521,7 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->to_p { include_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php'; $board=new ExpenseReport($db); - $dashboardlines[] = $board->load_board($user, 'topay'); + $dashboardlines['ExpenseReport'] = $board->load_board($user, 'topay'); } // Number of holidays to approve @@ -509,7 +529,7 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->approve) { include_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php'; $board=new Holiday($db); - $dashboardlines[] = $board->load_board($user); + $dashboardlines['Holiday'] = $board->load_board($user); } $object=new stdClass(); @@ -520,15 +540,103 @@ if ($reshook == 0) { $dashboardlines = array_merge($dashboardlines, $hookmanager->resArray); } +/* grouping dashboard stats */ +$dashboardgroup = array ( + 'action' => + array ( + 'groupName' => 'Agenda', + 'stats' => array ('action'), + ), + 'project' => + array ( + 'groupName' => 'Projects', + 'stats' => array ('project','project_task'), + ), + 'propal' => + array ( + 'groupName' => 'Proposals', + 'stats' => + array ('propal_opened','propal_signed'), + ), + 'supplier_proposal' => + array ( + 'groupName' => 'SupplierProposals', + 'stats' => + array ('supplier_proposal_opened','supplier_proposal_signed'), + ), + 'commande' => + array ( + 'groupName' => 'Orders', + 'stats' => + array ('commande'), + ), + 'order_supplier' => + array ( + 'groupName' => 'SuppliersOrders', + 'stats' => + array ('order_supplier'), + ), + 'contrat' => + array ( + 'groupName' => 'Contracts', + 'stats' => + array ('contrat_inactive','contrat_active'), + ), + 'facture' => + array ( + 'groupName' => 'Invoices', + 'stats' => + array ('facture'), + ), + 'invoice_supplier' => + array ( + 'groupName' => 'SupplierInvoices', + 'stats' => + array ('invoice_supplier'), + ), + 'bank_account' => + array ( + 'groupName' => 'BankAccount', + 'stats' => + array ('bank_account','RemiseCheque'), + ), + /*'RemiseCheque' => + array ( + 'groupName' => 'BankChecks', + 'stats' => + array ('RemiseCheque'), + ),*/ + 'Adherent' => + array ( + 'groupName' => 'Members', + 'stats' => + array ('Adherent'), + ), + 'ExpenseReport' => + array ( + 'groupName' => 'ExpenseReport', + 'stats' => + array ('ExpenseReport'), + ), + 'Holiday' => + array ( + 'groupName' => 'Holidays', + 'stats' => + array ('Holiday'), + ), +); + + + // Calculate total nb of late $totallate=$totaltodo=0; //Remove any invalid response //load_board can return an integer if failed or WorkboardResponse if OK $valid_dashboardlines=array(); -foreach($dashboardlines as $tmp) +foreach($dashboardlines as $infoKey => $tmp) { - if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[] = $tmp; + if ($tmp instanceof WorkboardResponse) $valid_dashboardlines[$infoKey] = $tmp; } // We calculate $totallate. Must be defined before start of next loop because it is show in first fetch on next loop @@ -578,14 +686,64 @@ $boxwork.='
'; - foreach($valid_dashboardlines as $board) + foreach($dashboardgroup as $groupKey => $groupElement) { + + $boards = array(); + foreach ($groupElement['stats'] as $infoKey) + { + if(!empty($valid_dashboardlines[$infoKey])) + { + $boards[] = $valid_dashboardlines[$infoKey]; + } + } + + if(!empty($boards)) + { + $groupName = $langs->trans($groupElement['groupName']); + $groupKeyLowerCase = strtolower($groupKey); + + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= ' '."\n"; + $openedDashBoard.= '
'."\n"; + + $openedDashBoard .= ' '.$groupName.'' . "\n"; + + foreach($boards as $board) { + $infoName = !empty($board->labelShort) ? $board->labelShort : $board->label ; + + $textLateTitle = $langs->trans("NActionsLate", $board->nbtodolate); + $textLateTitle.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + + $textLate = img_picto($textLateTitle, "warning_white", 'class="inline-block hideonsmartphone valigntextbottom"').''; + $textLate .= ''; + $textLate .= $board->nbtodolate; + $textLate .= ''; + + $openedDashBoard .= ' '.$infoName.' : '.$board->nbtodo.''.$textLate.'' . "\n"; + } + + + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; + $openedDashBoard.="\n"; + } + + } + + + foreach($valid_dashboardlines as $infoKey => $board) { if (empty($board->nbtodo)) $nbworkboardempty++; - $textlate = $langs->trans("NActionsLate", $board->nbtodolate); - $textlate.= ' ('.$langs->trans("Late").' = '.$langs->trans("DateReference").' > '.$langs->trans("DateToday").' '.(ceil($board->warning_delay) >= 0 ? '+' : '').ceil($board->warning_delay).' '.$langs->trans("days").')'; + + + $boxwork .='
'; $boxwork .= '
'; @@ -611,6 +769,15 @@ if (! empty($valid_dashboardlines)) } $boxwork.='
'; $boxwork .="\n"; + + + + + + + + + } $boxwork .='
'; @@ -638,7 +805,7 @@ $boxwork.='
'; print '
'; -print $boxwork; +print '
'.$openedDashBoard.'
'; print '
'; print '
'; @@ -654,7 +821,7 @@ $boxlist.='
'; $boxlist.='
'; -//$boxlist.=$boxwork; +$boxlist.=$boxwork; $boxlist.=$resultboxes['boxlista']; $boxlist.= '
'; diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang index 129b7d8416a..47572c355ab 100644 --- a/htdocs/langs/en_US/contracts.lang +++ b/htdocs/langs/en_US/contracts.lang @@ -51,6 +51,7 @@ ListOfClosedServices=List of closed services ListOfRunningServices=List of running services NotActivatedServices=Inactive services (among validated contracts) BoardNotActivatedServices=Services to activate among validated contracts +BoardNotActivatedServicesShort=Services to activate LastContracts=Latest %s contracts LastModifiedServices=Latest %s modified services ContractStartDate=Start date @@ -65,7 +66,9 @@ DateEndReal=Real end date DateEndRealShort=Real end date CloseService=Close service BoardRunningServices=Services running +BoardRunningServicesShort=Services running BoardExpiredServices=Services expired +BoardExpiredServicesShort=Services expired ServiceStatus=Status of service DraftContracts=Drafts contracts CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 1cadc32f4ab..7f99a51a064 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -981,3 +981,6 @@ PaymentInformation=Payment information ValidFrom=Valid from ValidUntil=Valid until NoRecordedUsers=No users +ToClose=To close +ToProcess=To process +ToApprove=To approve diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang index acae5aa73fb..5886c598d52 100644 --- a/htdocs/langs/en_US/members.lang +++ b/htdocs/langs/en_US/members.lang @@ -29,6 +29,7 @@ MenuMembersUpToDate=Up to date members MenuMembersNotUpToDate=Out of date members MenuMembersResiliated=Terminated members MembersWithSubscriptionToReceive=Members with subscription to receive +MembersWithSubscriptionToReceiveShort=Subscription to receive DateSubscription=Subscription date DateEndSubscription=Subscription end date EndSubscription=End subscription @@ -197,4 +198,4 @@ SendReminderForExpiredSubscriptionTitle=Send reminder by email for expired subsc SendReminderForExpiredSubscription=Send reminder by email to members when subscription is about to expire (parameter is number of days before end of subscription to send the remind. It can be a list of days separated by a semicolon, for example '10;5;0;-5') MembershipPaid=Membership paid for current period (until %s) YouMayFindYourInvoiceInThisEmail=You may find your invoice attached to this email -XMembersClosed=%s member(s) closed \ No newline at end of file +XMembersClosed=%s member(s) closed diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index eecf314dbf6..6e2b0a73a5e 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1796,6 +1796,7 @@ class Project extends CommonObject $response = new WorkboardResponse(); $response->warning_delay = $conf->projet->warning_delay/60/60/24; $response->label = $langs->trans("OpenedProjects"); + $response->labelShort = $langs->trans("Opened"); if ($user->rights->projet->all->lire) $response->url = DOL_URL_ROOT.'/projet/list.php?search_status=1&mainmenu=project'; else $response->url = DOL_URL_ROOT.'/projet/list.php?search_project_user=-1&search_status=1&mainmenu=project'; $response->img = img_object('', "projectpub"); diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index f3e0315c75f..e871652a56d 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -2281,20 +2281,24 @@ class SupplierProposal extends CommonObject $resql=$this->db->query($sql); if ($resql) { + $label = $labelShort = ''; if ($mode == 'opened') { $delay_warning=$conf->supplier_proposal->cloture->warning_delay; $statut = self::STATUS_VALIDATED; $label = $langs->trans("SupplierProposalsToClose"); + $labelShort = $langs->trans("ToClose"); } if ($mode == 'signed') { $delay_warning=$conf->supplier_proposal->facturation->warning_delay; $statut = self::STATUS_SIGNED; $label = $langs->trans("SupplierProposalsToProcess"); // May be billed or ordered + $labelShort = $langs->trans("ToProcess"); } $response = new WorkboardResponse(); $response->warning_delay = $delay_warning/60/60/24; $response->label = $label; + $response->labelShort = $labelShort; $response->url = DOL_URL_ROOT.'/supplier_proposal/list.php?viewstatut='.$statut; $response->img = img_object('', "propal"); diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d0a0c5958ef..15f87cb6203 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3198,7 +3198,13 @@ span.boxstatsindicator { font-size: 130%; font-weight: normal; line-height: 29px; + flex-grow: 1; + } + + + + span.dashboardlineindicator, span.dashboardlineindicatorlate { font-size: 130%; font-weight: normal; @@ -5750,3 +5756,5 @@ div.tabsElem a.tab { %A_P)R3T1Tlqm)FKby#{*c} zDu|8v1U`WX78Zh~d4L45vP&YQFp$ziaOSeModMvj>-Z*}e=BO$VaQ$wCR>+T&{!AF?Kmr6Q+vncZ( z6A?U#hm~|{(E27B3)ZE|F_X&=JjVA#>fP`fcOG#loe@mi>EMI5S!5X zR#-}tD|i}T>lSH!ll-@WA4h8Ohuz%7d2ATn7lm(lBJnTj7X$X6)0gJvOaK4?07*qo IM6N<$f_KdB8~^|S literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php new file mode 100644 index 00000000000..51d32ebc45f --- /dev/null +++ b/htdocs/theme/eldy/info-box.inc.php @@ -0,0 +1,114 @@ + +/* )', $objectpage->htmlheader); From 91cdb2a5a8c026c0a372860204ba23a745a62ccc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 07:05:06 +0200 Subject: [PATCH 0582/1148] Add more logs --- htdocs/core/lib/website.lib.php | 7 ++++--- htdocs/core/lib/website2.lib.php | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index ebfceab89d9..7e813caa5d6 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -183,15 +183,16 @@ function dolKeepOnlyPhpCode($str) * * @param string $content Content string * @param string $contenttype Content type + * @param string $contentlabel Content label * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html') +function dolWebsiteOutput($content, $contenttype='html', $contentlabel='') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." contentlabel=".$contentlabel." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); @@ -294,7 +295,7 @@ function dolWebsiteOutput($content, $contenttype='html') * * @param string $content Content string * @return void - * @see dolWebsiteOutput + * @see dolWebsiteOutput() */ /* function dolWebsiteSaveContent($content) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index a67c0f9f142..53f9e5f11c9 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -138,7 +138,7 @@ function dolSavePageContent($filetpl, $object, $objectpage) $tplcontent.= ''."\n"; $tplcontent.= 'id.');'."\n"; $tplcontent.= "// END PHP ?>"."\n"; //var_dump($filetpl);exit; From 49e61e237c9593a1938a98aa4b2fbd7c5f854e45 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 07:08:45 +0200 Subject: [PATCH 0583/1148] Better log --- htdocs/core/lib/website.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 7e813caa5d6..4d89210cd44 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -183,16 +183,16 @@ function dolKeepOnlyPhpCode($str) * * @param string $content Content string * @param string $contenttype Content type - * @param string $contentlabel Content label + * @param int $containerid Contenair id * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html', $contentlabel='') +function dolWebsiteOutput($content, $contenttype='html', $containerid='') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." contentlabel=".$contentlabel." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." containerid=".$containerid." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); From 056f51bfc559678c965082d56d616d38fa7271e4 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 13 Aug 2019 07:14:42 +0200 Subject: [PATCH 0584/1148] FIX duplicate css tag, decrease padding-bottom for boxes in eldy theme --- htdocs/theme/eldy/global.inc.php | 10 ++++------ htdocs/theme/md/style.css.php | 9 +++------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index a137b91236f..4df7a6ba014 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3080,6 +3080,10 @@ ul.noborder li:nth-child(even):not(.liste_titre) { .box { overflow-x: auto; min-height: 40px; + padding-right: 0px; + padding-left: 0px; + /*padding-bottom: 25px;*/ + padding-bottom: 10px; } .ficheaddleft div.boxstats, .ficheaddright div.boxstats { border: none; @@ -3266,12 +3270,6 @@ a.valignmiddle.dashboardlineindicator { line-height: 30px; } -.box { - padding-right: 0px; - padding-left: 0px; - padding-bottom: 25px; -} - tr.box_titre { height: 26px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 8999a73aaea..704610eca82 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3344,6 +3344,9 @@ ul.noborder li:nth-child(even):not(.liste_titre) { .box { overflow-x: auto; min-height: 40px; + padding-right: 0px; + padding-left: 0px; + padding-bottom: 12px; } .ficheaddleft div.boxstats, .ficheaddright div.boxstats { border: none; @@ -3470,12 +3473,6 @@ a.valignmiddle.dashboardlineindicator { line-height: 30px; } -.box { - padding-right: 0px; - padding-left: 0px; - padding-bottom: 12px; -} - tr.box_titre { height: 26px !important; From 34579dd4dbdfb80fb1789b35163a04fa35a1df8e Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 13 Aug 2019 07:46:03 +0200 Subject: [PATCH 0585/1148] FIX phpcs --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 510539f7421..b745956d3ca 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -185,7 +185,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html') +function dolWebsiteOutput($content, $contenttype = 'html') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From b443b1b37284812af0d7fb16ec5d3fb7ae659542 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 14:21:43 +0200 Subject: [PATCH 0586/1148] FIX permission check on API intervention --- htdocs/fichinter/class/api_interventions.class.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php index 2702ad6c55e..9e1d717d36a 100644 --- a/htdocs/fichinter/class/api_interventions.class.php +++ b/htdocs/fichinter/class/api_interventions.class.php @@ -80,7 +80,7 @@ class Interventions extends DolibarrApi $result = $this->fichinter->fetch($id); if( ! $result ) { - throw new RestException(404, 'Intervention report not found'); + throw new RestException(404, 'Intervention not found'); } if( ! DolibarrApi::_checkAccessToResource('fichinter', $this->fichinter->id)) { @@ -174,10 +174,10 @@ class Interventions extends DolibarrApi } } else { - throw new RestException(503, 'Error when retrieve fichinter list : '.$db->lasterror()); + throw new RestException(503, 'Error when retrieve intervention list : '.$db->lasterror()); } if( ! count($obj_ret)) { - throw new RestException(404, 'No finchinter found'); + throw new RestException(404, 'No intervention found'); } return $obj_ret; } @@ -200,7 +200,7 @@ class Interventions extends DolibarrApi } if ($this->fichinter->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating fichinter", array_merge(array($this->fichinter->error), $this->fichinter->errors)); + throw new RestException(500, "Error creating intervention", array_merge(array($this->fichinter->error), $this->fichinter->errors)); } return $this->fichinter->id; @@ -301,7 +301,7 @@ class Interventions extends DolibarrApi throw new RestException(404, 'Intervention not found'); } - if( ! DolibarrApi::_checkAccessToResource('commande', $this->fichinter->id)) { + if( ! DolibarrApi::_checkAccessToResource('fichinter', $this->fichinter->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); } From 717ea523e971ecfc36565debdd1d94a4c80afdfb Mon Sep 17 00:00:00 2001 From: ATM john Date: Tue, 13 Aug 2019 15:54:32 +0200 Subject: [PATCH 0587/1148] Fix lang and add size control --- htdocs/index.php | 16 +++++++++++----- htdocs/theme/eldy/info-box.inc.php | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index e56d9652c29..7daed2d4c7e 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -570,7 +570,7 @@ $dashboardgroup = array ( ), 'invoice_supplier' => array ( - 'groupName' => 'SupplierInvoices', + 'groupName' => 'BillsSuppliers', 'stats' => array ('invoice_supplier'), ), @@ -636,6 +636,13 @@ foreach($valid_dashboardlines as $board) } } +$openedDashBoardSize = 'info-box-sm'; // use sm by default +foreach ($dashboardgroup as $dashbordelement){ + if(is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){ + $openedDashBoardSize = ''; // use default info box size : big + } +} + $totalLateNumber = $totallate; $totallatePercentage = !empty($totaltodo) ? round($totallate / $totaltodo * 100, 2) : 0; if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) $totallate = $totallatePercentage; @@ -681,7 +688,6 @@ if (!empty($valid_dashboardlines)) $boxwork.='
'; - foreach($dashboardgroup as $groupKey => $groupElement) { $boards = array(); @@ -703,7 +709,7 @@ if (!empty($valid_dashboardlines)) $groupKeyLowerCase = strtolower($groupKey); $openedDashBoard.= '
'."\n"; - $openedDashBoard.= '
'."\n"; + $openedDashBoard.= '
'."\n"; $openedDashBoard.= ' '."\n"; $openedDashBoard.= '
'."\n"; @@ -760,7 +766,7 @@ if (!empty($valid_dashboardlines)) $weatherDashBoard= '
'."\n"; - $weatherDashBoard.= '
'."\n"; + $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '."\n"; $weatherDashBoard.= '
'."\n"; $weatherDashBoard.= ' '.$langs->trans('GlobalOpenedElemView').'' . "\n"; @@ -858,7 +864,7 @@ $boxwork.='
'; if(!empty($isIntopOpenedDashBoard)) { print '
'; - print '
' . $openedDashBoard . '
'; + print '
' . $openedDashBoard . '
'; print '
'; } diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index f6a3b2027c0..7aa00c2fade 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -15,6 +15,11 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> border-radius: 2px; margin-bottom: 15px; } +.info-box.info-box-sm{ + min-height: 70px; + margin-bottom: 10px; +} + .info-box small { font-size: 14px; } @@ -57,6 +62,12 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> line-height: 90px; background: rgba(0, 0, 0, 0.2); } +.info-box-sm .info-box-icon{ + height: 70px; + width: 70px; + font-size: 25px; + line-height: 70px; +} .info-box-icon > img { max-width: 100%; } @@ -64,6 +75,10 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> padding: 5px 10px; margin-left: 90px; } + +.info-box-sm .info-box-content{ + margin-left: 70px; +} .info-box-number { display: block; font-weight: bold; From 2a068030e5557634f429fecc7aee2e604bd2ebff Mon Sep 17 00:00:00 2001 From: ATM john Date: Tue, 13 Aug 2019 16:01:15 +0200 Subject: [PATCH 0588/1148] Fix : foreach optimized --- htdocs/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/index.php b/htdocs/index.php index 7daed2d4c7e..b7eebe24063 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -640,6 +640,7 @@ $openedDashBoardSize = 'info-box-sm'; // use sm by default foreach ($dashboardgroup as $dashbordelement){ if(is_array($dashbordelement['stats']) && count($dashbordelement['stats'])>2){ $openedDashBoardSize = ''; // use default info box size : big + break; } } From b90815b972eff2168203148421e27e4b638fdef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Tue, 13 Aug 2019 16:36:41 +0200 Subject: [PATCH 0589/1148] FIX require product class (fixes POST /supplierinvoices REST API endpoint) When passing a fk_product field into a supplier invoice line on the POST /supplierinvoices REST API endpoint, we need to require the product class first in fournisseur.facture.class.php to be able to load the Product from the passed id. --- htdocs/fourn/class/fournisseur.facture.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index 41ac2f126a7..132fcbc9e47 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -36,6 +36,7 @@ include_once DOL_DOCUMENT_ROOT.'/core/class/commoninvoice.class.php'; require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php'; +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; /** * Class to manage suppliers invoices From e3bca063a004851de5bf93094aa07a9335d1f5e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Tue, 13 Aug 2019 17:06:46 +0200 Subject: [PATCH 0590/1148] Fix CI code style checks Not my fault but I am disciplined so, if the CI says it is an error ... I just fix it to get green again ;) --- htdocs/core/lib/website.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4d89210cd44..579c5575988 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -33,7 +33,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html') { $nbrep = 0; @@ -187,7 +187,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From 8198276d64856cd7fe9cf27c9d6a9e39c63dce7f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 13 Aug 2019 17:47:30 +0200 Subject: [PATCH 0591/1148] FIX for MAIN_MAXTABS_IN_CARD = $i card --- htdocs/core/lib/functions.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index e9f4301f8f2..a46bd661eb2 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1130,7 +1130,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) { // If active tab is already present - if ($i >= $limittoshow) $limittoshow--; + if ($i > $limittoshow) $limittoshow--; } } @@ -1146,7 +1146,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab $isactive=false; } - if ($i < $limittoshow || $isactive) + if ($i <= $limittoshow || $isactive) { $out.='
'; if (isset($links[$i][2]) && $links[$i][2] == 'image') From 93d64bb84e3278891a52332bae037a31df58329f Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 13 Aug 2019 17:59:19 +0200 Subject: [PATCH 0592/1148] Update functions.lib.php --- htdocs/core/lib/functions.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index a46bd661eb2..9d85ab85048 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1130,7 +1130,7 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab if ((is_numeric($active) && $i == $active) || (! empty($links[$i][2]) && ! is_numeric($active) && $active == $links[$i][2])) { // If active tab is already present - if ($i > $limittoshow) $limittoshow--; + if ($i >= $limittoshow) $limittoshow--; } } From df5382642603a9c3b115ecba0757bdc27c52f9fe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 18:22:18 +0200 Subject: [PATCH 0593/1148] FIX Missing some replacements in website module --- htdocs/core/lib/website.lib.php | 6 +++++- htdocs/website/index.php | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4d89210cd44..3a6a580d43f 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -93,6 +93,9 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content=preg_replace('/(href=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); $content=preg_replace('/(src=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + // Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: ...href="/viewimage.php?modulepart=" + $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + dol_syslog('dolWebsiteReplacementOfLinks end', LOG_DEBUG); return $content; @@ -185,7 +188,7 @@ function dolKeepOnlyPhpCode($str) * @param string $contenttype Content type * @param int $containerid Contenair id * @return void - * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on + * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context. */ function dolWebsiteOutput($content, $contenttype='html', $containerid='') { @@ -228,6 +231,7 @@ function dolWebsiteOutput($content, $contenttype='html', $containerid='') // Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: href="/viewimage.php?modulepart=" => href="/dolibarr/viewimage.php?modulepart=" $content=preg_replace('/(href=")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); $content=preg_replace('/(src=")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); // Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/ $content=preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 35b5444e0b2..8ac8de1a5ca 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3057,9 +3057,10 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') print '
'; print ''; print ''; + print ''; - print ''."\n"; + print ''."\n"; print '

'; print load_fiche_titre($langs->trans("ReplaceWebsiteContent")); From 53b43eb98a7681957c6ddfac94a44cabf9d0ba52 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 13 Aug 2019 19:34:21 +0200 Subject: [PATCH 0594/1148] Fix error message --- htdocs/fichinter/class/api_interventions.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php index 2702ad6c55e..4808d224916 100644 --- a/htdocs/fichinter/class/api_interventions.class.php +++ b/htdocs/fichinter/class/api_interventions.class.php @@ -177,7 +177,7 @@ class Interventions extends DolibarrApi throw new RestException(503, 'Error when retrieve fichinter list : '.$db->lasterror()); } if( ! count($obj_ret)) { - throw new RestException(404, 'No finchinter found'); + throw new RestException(404, 'No intervention found'); } return $obj_ret; } From bc230c2d2517e9a0480b37f2d4ff7024d15e33c6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 01:43:06 +0200 Subject: [PATCH 0595/1148] FIX Bad error management in zip compress and web site export --- htdocs/core/lib/files.lib.php | 24 +++++++++++++++++++--- htdocs/website/class/website.class.php | 15 +++++++++++--- htdocs/website/index.php | 28 +++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 92b739b3190..ac7e97afab2 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1893,6 +1893,8 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") try { + dol_syslog("dol_compress_file mode=".$mode." inputfile=".$inputfile." outputfile=".$outputfile); + $data = implode("", file(dol_osencode($inputfile))); if ($mode == 'gz') { $foundhandler=1; $compressdata = gzencode($data, 9); } elseif ($mode == 'bz') { $foundhandler=1; $compressdata = bzcompress($data, 9); } @@ -1904,9 +1906,25 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") include_once ODTPHP_PATHTOPCLZIP.'/pclzip.lib.php'; $archive = new PclZip($outputfile); - $archive->add($inputfile, PCLZIP_OPT_REMOVE_PATH, dirname($inputfile)); - //$archive->add($inputfile); - return 1; + $result = $archive->add($inputfile, PCLZIP_OPT_REMOVE_PATH, dirname($inputfile)); + + if ($result === 0) + { + global $errormsg; + $errormsg=$archive->errorInfo(true); + dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); + if ($archive->errorCode() == PCLZIP_ERR_WRITE_OPEN_FAIL) + { + dol_syslog("dol_compress_file error PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR); + return -4; + } + return -3; + } + else + { + dol_syslog("dol_compress_file success - ".count($result)." files"); + return 1; + } } } diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index fffa25cf728..4218552c9aa 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -790,7 +790,7 @@ class Website extends CommonObject /** * Generate a zip with all data of web site. * - * @return string Path to file with zip + * @return string Path to file with zip or '' if error */ public function exportWebSite() { @@ -957,9 +957,18 @@ class Website extends CommonObject $filename = $conf->website->dir_temp.'/'.$website->ref.'/website_'.$website->ref.'-'.dol_print_date(dol_now(), 'dayhourlog').'.zip'; dol_delete_file($fileglob, 0); - dol_compress_file($filedir, $filename, 'zip'); + $result = dol_compress_file($filedir, $filename, 'zip'); - return $filename; + if ($result > 0) + { + return $filename; + } + else + { + global $errormsg; + $this->error = $errormsg; + return ''; + } } diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 8ac8de1a5ca..75df4f2552c 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -338,7 +338,7 @@ if ($action == 'addsite') { $db->begin(); - if (GETPOST('virtualhost', 'alpha') && ! preg_match('/^http/', GETPOST('virtualhost', 'alpha'))) + if (GETPOST('virtualhost', 'alpha') && ! preg_match('/^http/', GETPOST('virtualhost', 'alpha'))) { $error++; setEventMessages($langs->trans('ErrorURLMustStartWithHttp', $langs->transnoentitiesnoconv("VirtualHost")), null, 'errors'); @@ -414,6 +414,7 @@ if ($action == 'addcontainer') { include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php'; + //if (! preg_match('/^http/', $urltograb) && ! preg_match('/^file/', $urltograb)) if (! preg_match('/^http/', $urltograb)) { $error++; @@ -427,6 +428,7 @@ if ($action == 'addcontainer') // Clean url to grab, so url can be // http://www.example.com/ or http://www.example.com/dir1/ or http://www.example.com/dir1/aaa $urltograbwithoutdomainandparam = preg_replace('/^https?:\/\/[^\/]+\/?/i', '', $urltograb); + //$urltograbwithoutdomainandparam = preg_replace('/^file:\/\/[^\/]+\/?/i', '', $urltograb); $urltograbwithoutdomainandparam = preg_replace('/\?.*$/', '', $urltograbwithoutdomainandparam); if (empty($urltograbwithoutdomainandparam) && ! preg_match('/\/$/', $urltograb)) { @@ -1674,6 +1676,10 @@ if ($action == 'exportsite') readfile($fileofzip); exit; } + else + { + setEventMessages($object->error, $object->errors, 'errors'); + } } // Import site @@ -3142,6 +3148,7 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa // Ouput page under the Dolibarr top menu $objectpage->fetch($pageid); + $jscontent = @file_get_contents($filejs); $out = ''."\n"; @@ -3156,6 +3163,25 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa $out.="\n\n"; $out.="\n"; $out.=dolWebsiteReplacementOfLinks($object, $objectpage->htmlheader, 1, 'htmlheader'); + + $out.="\n"; + // TODO Keep only the or the '."\n"; print ''."\n"; + print ''."\n"; } // Browser notifications diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 12c23e721e2..6b73907ad70 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2199,7 +2199,53 @@ if (! GETPOST('hide_websitemenu')) print ''."\n"; print '
'; print '
'; + + print ''; + print ''; print $langs->trans("EditInLine"); + print ''; + if ($websitepage->grabbed_from) { //print ''; @@ -2217,6 +2263,7 @@ if (! GETPOST('hide_websitemenu')) print ''.img_picto($langs->trans("EditInLineOn"), 'switch_on', '', false, 0, 0, '', 'nomarginleft').''; } } + print '
'; print '
'; print $langs->trans("ShowSubcontainers"); From 87b2a01a3534c6a8ee521b9afa96688dcefe3a12 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 19:49:07 +0200 Subject: [PATCH 0609/1148] NEW Add less 2 css converter --- htdocs/core/class/lessc.class.php | 3886 +++++++++++++++++++++++++++++ 1 file changed, 3886 insertions(+) create mode 100644 htdocs/core/class/lessc.class.php diff --git a/htdocs/core/class/lessc.class.php b/htdocs/core/class/lessc.class.php new file mode 100644 index 00000000000..34034226497 --- /dev/null +++ b/htdocs/core/class/lessc.class.php @@ -0,0 +1,3886 @@ + + * Licensed under MIT or GPLv3, see LICENSE + */ + + +/** + * The LESS compiler and parser. + * + * Converting LESS to CSS is a three stage process. The incoming file is parsed + * by `lessc_parser` into a syntax tree, then it is compiled into another tree + * representing the CSS structure by `lessc`. The CSS tree is fed into a + * formatter, like `lessc_formatter` which then outputs CSS as a string. + * + * During the first compile, all values are *reduced*, which means that their + * types are brought to the lowest form before being dump as strings. This + * handles math equations, variable dereferences, and the like. + * + * The `parse` function of `lessc` is the entry point. + * + * In summary: + * + * The `lessc` class creates an instance of the parser, feeds it LESS code, + * then transforms the resulting tree to a CSS tree. This class also holds the + * evaluation context, such as all available mixins and variables at any given + * time. + * + * The `lessc_parser` class is only concerned with parsing its input. + * + * The `lessc_formatter` takes a CSS tree, and dumps it to a formatted string, + * handling things like indentation. + */ +class lessc { + static public $VERSION = "v0.5.0"; + + static public $TRUE = array("keyword", "true"); + static public $FALSE = array("keyword", "false"); + + protected $libFunctions = array(); + protected $registeredVars = array(); + protected $preserveComments = false; + + public $vPrefix = '@'; // prefix of abstract properties + public $mPrefix = '$'; // prefix of abstract blocks + public $parentSelector = '&'; + + public $importDisabled = false; + public $importDir = ''; + + protected $numberPrecision = null; + + protected $allParsedFiles = array(); + + // set to the parser that generated the current line when compiling + // so we know how to create error messages + protected $sourceParser = null; + protected $sourceLoc = null; + + static protected $nextImportId = 0; // uniquely identify imports + + // attempts to find the path of an import url, returns null for css files + protected function findImport($url) { + foreach ((array)$this->importDir as $dir) { + $full = $dir.(substr($dir, -1) != '/' ? '/' : '').$url; + if ($this->fileExists($file = $full.'.less') || $this->fileExists($file = $full)) { + return $file; + } + } + + return null; + } + + protected function fileExists($name) { + return is_file($name); + } + + public static function compressList($items, $delim) { + if (!isset($items[1]) && isset($items[0])) return $items[0]; + else return array('list', $delim, $items); + } + + public static function preg_quote($what) { + return preg_quote($what, '/'); + } + + protected function tryImport($importPath, $parentBlock, $out) { + if ($importPath[0] == "function" && $importPath[1] == "url") { + $importPath = $this->flattenList($importPath[2]); + } + + $str = $this->coerceString($importPath); + if ($str === null) return false; + + $url = $this->compileValue($this->lib_e($str)); + + // don't import if it ends in css + if (substr_compare($url, '.css', -4, 4) === 0) return false; + + $realPath = $this->findImport($url); + + if ($realPath === null) return false; + + if ($this->importDisabled) { + return array(false, "/* import disabled */"); + } + + if (isset($this->allParsedFiles[realpath($realPath)])) { + return array(false, null); + } + + $this->addParsedFile($realPath); + $parser = $this->makeParser($realPath); + $root = $parser->parse(file_get_contents($realPath)); + + // set the parents of all the block props + foreach ($root->props as $prop) { + if ($prop[0] == "block") { + $prop[1]->parent = $parentBlock; + } + } + + // copy mixins into scope, set their parents + // bring blocks from import into current block + // TODO: need to mark the source parser these came from this file + foreach ($root->children as $childName => $child) { + if (isset($parentBlock->children[$childName])) { + $parentBlock->children[$childName] = array_merge( + $parentBlock->children[$childName], + $child); + } else { + $parentBlock->children[$childName] = $child; + } + } + + $pi = pathinfo($realPath); + $dir = $pi["dirname"]; + + list($top, $bottom) = $this->sortProps($root->props, true); + $this->compileImportedProps($top, $parentBlock, $out, $parser, $dir); + + return array(true, $bottom, $parser, $dir); + } + + protected function compileImportedProps($props, $block, $out, $sourceParser, $importDir) { + $oldSourceParser = $this->sourceParser; + + $oldImport = $this->importDir; + + // TODO: this is because the importDir api is stupid + $this->importDir = (array)$this->importDir; + array_unshift($this->importDir, $importDir); + + foreach ($props as $prop) { + $this->compileProp($prop, $block, $out); + } + + $this->importDir = $oldImport; + $this->sourceParser = $oldSourceParser; + } + + /** + * Recursively compiles a block. + * + * A block is analogous to a CSS block in most cases. A single LESS document + * is encapsulated in a block when parsed, but it does not have parent tags + * so all of it's children appear on the root level when compiled. + * + * Blocks are made up of props and children. + * + * Props are property instructions, array tuples which describe an action + * to be taken, eg. write a property, set a variable, mixin a block. + * + * The children of a block are just all the blocks that are defined within. + * This is used to look up mixins when performing a mixin. + * + * Compiling the block involves pushing a fresh environment on the stack, + * and iterating through the props, compiling each one. + * + * See lessc::compileProp() + * + */ + protected function compileBlock($block) { + switch ($block->type) { + case "root": + $this->compileRoot($block); + break; + case null: + $this->compileCSSBlock($block); + break; + case "media": + $this->compileMedia($block); + break; + case "directive": + $name = "@" . $block->name; + if (!empty($block->value)) { + $name .= " " . $this->compileValue($this->reduce($block->value)); + } + + $this->compileNestedBlock($block, array($name)); + break; + default: + $this->throwError("unknown block type: $block->type\n"); + } + } + + protected function compileCSSBlock($block) { + $env = $this->pushEnv(); + + $selectors = $this->compileSelectors($block->tags); + $env->selectors = $this->multiplySelectors($selectors); + $out = $this->makeOutputBlock(null, $env->selectors); + + $this->scope->children[] = $out; + $this->compileProps($block, $out); + + $block->scope = $env; // mixins carry scope with them! + $this->popEnv(); + } + + protected function compileMedia($media) { + $env = $this->pushEnv($media); + $parentScope = $this->mediaParent($this->scope); + + $query = $this->compileMediaQuery($this->multiplyMedia($env)); + + $this->scope = $this->makeOutputBlock($media->type, array($query)); + $parentScope->children[] = $this->scope; + + $this->compileProps($media, $this->scope); + + if (count($this->scope->lines) > 0) { + $orphanSelelectors = $this->findClosestSelectors(); + if (!is_null($orphanSelelectors)) { + $orphan = $this->makeOutputBlock(null, $orphanSelelectors); + $orphan->lines = $this->scope->lines; + array_unshift($this->scope->children, $orphan); + $this->scope->lines = array(); + } + } + + $this->scope = $this->scope->parent; + $this->popEnv(); + } + + protected function mediaParent($scope) { + while (!empty($scope->parent)) { + if (!empty($scope->type) && $scope->type != "media") { + break; + } + $scope = $scope->parent; + } + + return $scope; + } + + protected function compileNestedBlock($block, $selectors) { + $this->pushEnv($block); + $this->scope = $this->makeOutputBlock($block->type, $selectors); + $this->scope->parent->children[] = $this->scope; + + $this->compileProps($block, $this->scope); + + $this->scope = $this->scope->parent; + $this->popEnv(); + } + + protected function compileRoot($root) { + $this->pushEnv(); + $this->scope = $this->makeOutputBlock($root->type); + $this->compileProps($root, $this->scope); + $this->popEnv(); + } + + protected function compileProps($block, $out) { + foreach ($this->sortProps($block->props) as $prop) { + $this->compileProp($prop, $block, $out); + } + $out->lines = $this->deduplicate($out->lines); + } + + /** + * Deduplicate lines in a block. Comments are not deduplicated. If a + * duplicate rule is detected, the comments immediately preceding each + * occurence are consolidated. + */ + protected function deduplicate($lines) { + $unique = array(); + $comments = array(); + + foreach ($lines as $line) { + if (strpos($line, '/*') === 0) { + $comments[] = $line; + continue; + } + if (!in_array($line, $unique)) { + $unique[] = $line; + } + array_splice($unique, array_search($line, $unique), 0, $comments); + $comments = array(); + } + return array_merge($unique, $comments); + } + + protected function sortProps($props, $split = false) { + $vars = array(); + $imports = array(); + $other = array(); + $stack = array(); + + foreach ($props as $prop) { + switch ($prop[0]) { + case "comment": + $stack[] = $prop; + break; + case "assign": + $stack[] = $prop; + if (isset($prop[1][0]) && $prop[1][0] == $this->vPrefix) { + $vars = array_merge($vars, $stack); + } else { + $other = array_merge($other, $stack); + } + $stack = array(); + break; + case "import": + $id = self::$nextImportId++; + $prop[] = $id; + $stack[] = $prop; + $imports = array_merge($imports, $stack); + $other[] = array("import_mixin", $id); + $stack = array(); + break; + default: + $stack[] = $prop; + $other = array_merge($other, $stack); + $stack = array(); + break; + } + } + $other = array_merge($other, $stack); + + if ($split) { + return array(array_merge($imports, $vars), $other); + } else { + return array_merge($imports, $vars, $other); + } + } + + protected function compileMediaQuery($queries) { + $compiledQueries = array(); + foreach ($queries as $query) { + $parts = array(); + foreach ($query as $q) { + switch ($q[0]) { + case "mediaType": + $parts[] = implode(" ", array_slice($q, 1)); + break; + case "mediaExp": + if (isset($q[2])) { + $parts[] = "($q[1]: " . + $this->compileValue($this->reduce($q[2])) . ")"; + } else { + $parts[] = "($q[1])"; + } + break; + case "variable": + $parts[] = $this->compileValue($this->reduce($q)); + break; + } + } + + if (count($parts) > 0) { + $compiledQueries[] = implode(" and ", $parts); + } + } + + $out = "@media"; + if (!empty($parts)) { + $out .= " " . + implode($this->formatter->selectorSeparator, $compiledQueries); + } + return $out; + } + + protected function multiplyMedia($env, $childQueries = null) { + if (is_null($env) || + !empty($env->block->type) && $env->block->type != "media" + ) { + return $childQueries; + } + + // plain old block, skip + if (empty($env->block->type)) { + return $this->multiplyMedia($env->parent, $childQueries); + } + + $out = array(); + $queries = $env->block->queries; + if (is_null($childQueries)) { + $out = $queries; + } else { + foreach ($queries as $parent) { + foreach ($childQueries as $child) { + $out[] = array_merge($parent, $child); + } + } + } + + return $this->multiplyMedia($env->parent, $out); + } + + protected function expandParentSelectors(&$tag, $replace) { + $parts = explode("$&$", $tag); + $count = 0; + foreach ($parts as &$part) { + $part = str_replace($this->parentSelector, $replace, $part, $c); + $count += $c; + } + $tag = implode($this->parentSelector, $parts); + return $count; + } + + protected function findClosestSelectors() { + $env = $this->env; + $selectors = null; + while ($env !== null) { + if (isset($env->selectors)) { + $selectors = $env->selectors; + break; + } + $env = $env->parent; + } + + return $selectors; + } + + + // multiply $selectors against the nearest selectors in env + protected function multiplySelectors($selectors) { + // find parent selectors + + $parentSelectors = $this->findClosestSelectors(); + if (is_null($parentSelectors)) { + // kill parent reference in top level selector + foreach ($selectors as &$s) { + $this->expandParentSelectors($s, ""); + } + + return $selectors; + } + + $out = array(); + foreach ($parentSelectors as $parent) { + foreach ($selectors as $child) { + $count = $this->expandParentSelectors($child, $parent); + + // don't prepend the parent tag if & was used + if ($count > 0) { + $out[] = trim($child); + } else { + $out[] = trim($parent . ' ' . $child); + } + } + } + + return $out; + } + + // reduces selector expressions + protected function compileSelectors($selectors) { + $out = array(); + + foreach ($selectors as $s) { + if (is_array($s)) { + list(, $value) = $s; + $out[] = trim($this->compileValue($this->reduce($value))); + } else { + $out[] = $s; + } + } + + return $out; + } + + protected function eq($left, $right) { + return $left == $right; + } + + protected function patternMatch($block, $orderedArgs, $keywordArgs) { + // match the guards if it has them + // any one of the groups must have all its guards pass for a match + if (!empty($block->guards)) { + $groupPassed = false; + foreach ($block->guards as $guardGroup) { + foreach ($guardGroup as $guard) { + $this->pushEnv(); + $this->zipSetArgs($block->args, $orderedArgs, $keywordArgs); + + $negate = false; + if ($guard[0] == "negate") { + $guard = $guard[1]; + $negate = true; + } + + $passed = $this->reduce($guard) == self::$TRUE; + if ($negate) $passed = !$passed; + + $this->popEnv(); + + if ($passed) { + $groupPassed = true; + } else { + $groupPassed = false; + break; + } + } + + if ($groupPassed) break; + } + + if (!$groupPassed) { + return false; + } + } + + if (empty($block->args)) { + return $block->isVararg || empty($orderedArgs) && empty($keywordArgs); + } + + $remainingArgs = $block->args; + if ($keywordArgs) { + $remainingArgs = array(); + foreach ($block->args as $arg) { + if ($arg[0] == "arg" && isset($keywordArgs[$arg[1]])) { + continue; + } + + $remainingArgs[] = $arg; + } + } + + $i = -1; // no args + // try to match by arity or by argument literal + foreach ($remainingArgs as $i => $arg) { + switch ($arg[0]) { + case "lit": + if (empty($orderedArgs[$i]) || !$this->eq($arg[1], $orderedArgs[$i])) { + return false; + } + break; + case "arg": + // no arg and no default value + if (!isset($orderedArgs[$i]) && !isset($arg[2])) { + return false; + } + break; + case "rest": + $i--; // rest can be empty + break 2; + } + } + + if ($block->isVararg) { + return true; // not having enough is handled above + } else { + $numMatched = $i + 1; + // greater than because default values always match + return $numMatched >= count($orderedArgs); + } + } + + protected function patternMatchAll($blocks, $orderedArgs, $keywordArgs, $skip=array()) { + $matches = null; + foreach ($blocks as $block) { + // skip seen blocks that don't have arguments + if (isset($skip[$block->id]) && !isset($block->args)) { + continue; + } + + if ($this->patternMatch($block, $orderedArgs, $keywordArgs)) { + $matches[] = $block; + } + } + + return $matches; + } + + // attempt to find blocks matched by path and args + protected function findBlocks($searchIn, $path, $orderedArgs, $keywordArgs, $seen=array()) { + if ($searchIn == null) return null; + if (isset($seen[$searchIn->id])) return null; + $seen[$searchIn->id] = true; + + $name = $path[0]; + + if (isset($searchIn->children[$name])) { + $blocks = $searchIn->children[$name]; + if (count($path) == 1) { + $matches = $this->patternMatchAll($blocks, $orderedArgs, $keywordArgs, $seen); + if (!empty($matches)) { + // This will return all blocks that match in the closest + // scope that has any matching block, like lessjs + return $matches; + } + } else { + $matches = array(); + foreach ($blocks as $subBlock) { + $subMatches = $this->findBlocks($subBlock, + array_slice($path, 1), $orderedArgs, $keywordArgs, $seen); + + if (!is_null($subMatches)) { + foreach ($subMatches as $sm) { + $matches[] = $sm; + } + } + } + + return count($matches) > 0 ? $matches : null; + } + } + if ($searchIn->parent === $searchIn) return null; + return $this->findBlocks($searchIn->parent, $path, $orderedArgs, $keywordArgs, $seen); + } + + // sets all argument names in $args to either the default value + // or the one passed in through $values + protected function zipSetArgs($args, $orderedValues, $keywordValues) { + $assignedValues = array(); + + $i = 0; + foreach ($args as $a) { + if ($a[0] == "arg") { + if (isset($keywordValues[$a[1]])) { + // has keyword arg + $value = $keywordValues[$a[1]]; + } elseif (isset($orderedValues[$i])) { + // has ordered arg + $value = $orderedValues[$i]; + $i++; + } elseif (isset($a[2])) { + // has default value + $value = $a[2]; + } else { + $this->throwError("Failed to assign arg " . $a[1]); + $value = null; // :( + } + + $value = $this->reduce($value); + $this->set($a[1], $value); + $assignedValues[] = $value; + } else { + // a lit + $i++; + } + } + + // check for a rest + $last = end($args); + if ($last[0] == "rest") { + $rest = array_slice($orderedValues, count($args) - 1); + $this->set($last[1], $this->reduce(array("list", " ", $rest))); + } + + // wow is this the only true use of PHP's + operator for arrays? + $this->env->arguments = $assignedValues + $orderedValues; + } + + // compile a prop and update $lines or $blocks appropriately + protected function compileProp($prop, $block, $out) { + // set error position context + $this->sourceLoc = isset($prop[-1]) ? $prop[-1] : -1; + + switch ($prop[0]) { + case 'assign': + list(, $name, $value) = $prop; + if ($name[0] == $this->vPrefix) { + $this->set($name, $value); + } else { + $out->lines[] = $this->formatter->property($name, + $this->compileValue($this->reduce($value))); + } + break; + case 'block': + list(, $child) = $prop; + $this->compileBlock($child); + break; + case 'mixin': + list(, $path, $args, $suffix) = $prop; + + $orderedArgs = array(); + $keywordArgs = array(); + foreach ((array)$args as $arg) { + $argval = null; + switch ($arg[0]) { + case "arg": + if (!isset($arg[2])) { + $orderedArgs[] = $this->reduce(array("variable", $arg[1])); + } else { + $keywordArgs[$arg[1]] = $this->reduce($arg[2]); + } + break; + + case "lit": + $orderedArgs[] = $this->reduce($arg[1]); + break; + default: + $this->throwError("Unknown arg type: " . $arg[0]); + } + } + + $mixins = $this->findBlocks($block, $path, $orderedArgs, $keywordArgs); + + if ($mixins === null) { + $this->throwError("{$prop[1][0]} is undefined"); + } + + foreach ($mixins as $mixin) { + if ($mixin === $block && !$orderedArgs) { + continue; + } + + $haveScope = false; + if (isset($mixin->parent->scope)) { + $haveScope = true; + $mixinParentEnv = $this->pushEnv(); + $mixinParentEnv->storeParent = $mixin->parent->scope; + } + + $haveArgs = false; + if (isset($mixin->args)) { + $haveArgs = true; + $this->pushEnv(); + $this->zipSetArgs($mixin->args, $orderedArgs, $keywordArgs); + } + + $oldParent = $mixin->parent; + if ($mixin != $block) $mixin->parent = $block; + + foreach ($this->sortProps($mixin->props) as $subProp) { + if ($suffix !== null && + $subProp[0] == "assign" && + is_string($subProp[1]) && + $subProp[1]{0} != $this->vPrefix + ) { + $subProp[2] = array( + 'list', ' ', + array($subProp[2], array('keyword', $suffix)) + ); + } + + $this->compileProp($subProp, $mixin, $out); + } + + $mixin->parent = $oldParent; + + if ($haveArgs) $this->popEnv(); + if ($haveScope) $this->popEnv(); + } + + break; + case 'raw': + $out->lines[] = $prop[1]; + break; + case "directive": + list(, $name, $value) = $prop; + $out->lines[] = "@$name " . $this->compileValue($this->reduce($value)).';'; + break; + case "comment": + $out->lines[] = $prop[1]; + break; + case "import": + list(, $importPath, $importId) = $prop; + $importPath = $this->reduce($importPath); + + if (!isset($this->env->imports)) { + $this->env->imports = array(); + } + + $result = $this->tryImport($importPath, $block, $out); + + $this->env->imports[$importId] = $result === false ? + array(false, "@import " . $this->compileValue($importPath).";") : + $result; + + break; + case "import_mixin": + list(,$importId) = $prop; + $import = $this->env->imports[$importId]; + if ($import[0] === false) { + if (isset($import[1])) { + $out->lines[] = $import[1]; + } + } else { + list(, $bottom, $parser, $importDir) = $import; + $this->compileImportedProps($bottom, $block, $out, $parser, $importDir); + } + + break; + default: + $this->throwError("unknown op: {$prop[0]}\n"); + } + } + + + /** + * Compiles a primitive value into a CSS property value. + * + * Values in lessphp are typed by being wrapped in arrays, their format is + * typically: + * + * array(type, contents [, additional_contents]*) + * + * The input is expected to be reduced. This function will not work on + * things like expressions and variables. + */ + public function compileValue($value) { + switch ($value[0]) { + case 'list': + // [1] - delimiter + // [2] - array of values + return implode($value[1], array_map(array($this, 'compileValue'), $value[2])); + case 'raw_color': + if (!empty($this->formatter->compressColors)) { + return $this->compileValue($this->coerceColor($value)); + } + return $value[1]; + case 'keyword': + // [1] - the keyword + return $value[1]; + case 'number': + list(, $num, $unit) = $value; + // [1] - the number + // [2] - the unit + if ($this->numberPrecision !== null) { + $num = round($num, $this->numberPrecision); + } + return $num . $unit; + case 'string': + // [1] - contents of string (includes quotes) + list(, $delim, $content) = $value; + foreach ($content as &$part) { + if (is_array($part)) { + $part = $this->compileValue($part); + } + } + return $delim . implode($content) . $delim; + case 'color': + // [1] - red component (either number or a %) + // [2] - green component + // [3] - blue component + // [4] - optional alpha component + list(, $r, $g, $b) = $value; + $r = round($r); + $g = round($g); + $b = round($b); + + if (count($value) == 5 && $value[4] != 1) { // rgba + return 'rgba('.$r.','.$g.','.$b.','.$value[4].')'; + } + + $h = sprintf("#%02x%02x%02x", $r, $g, $b); + + if (!empty($this->formatter->compressColors)) { + // Converting hex color to short notation (e.g. #003399 to #039) + if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) { + $h = '#' . $h[1] . $h[3] . $h[5]; + } + } + + return $h; + + case 'function': + list(, $name, $args) = $value; + return $name.'('.$this->compileValue($args).')'; + default: // assumed to be unit + $this->throwError("unknown value type: $value[0]"); + } + } + + protected function lib_pow($args) { + list($base, $exp) = $this->assertArgs($args, 2, "pow"); + return pow($this->assertNumber($base), $this->assertNumber($exp)); + } + + protected function lib_pi() { + return pi(); + } + + protected function lib_mod($args) { + list($a, $b) = $this->assertArgs($args, 2, "mod"); + return $this->assertNumber($a) % $this->assertNumber($b); + } + + protected function lib_tan($num) { + return tan($this->assertNumber($num)); + } + + protected function lib_sin($num) { + return sin($this->assertNumber($num)); + } + + protected function lib_cos($num) { + return cos($this->assertNumber($num)); + } + + protected function lib_atan($num) { + $num = atan($this->assertNumber($num)); + return array("number", $num, "rad"); + } + + protected function lib_asin($num) { + $num = asin($this->assertNumber($num)); + return array("number", $num, "rad"); + } + + protected function lib_acos($num) { + $num = acos($this->assertNumber($num)); + return array("number", $num, "rad"); + } + + protected function lib_sqrt($num) { + return sqrt($this->assertNumber($num)); + } + + protected function lib_extract($value) { + list($list, $idx) = $this->assertArgs($value, 2, "extract"); + $idx = $this->assertNumber($idx); + // 1 indexed + if ($list[0] == "list" && isset($list[2][$idx - 1])) { + return $list[2][$idx - 1]; + } + } + + protected function lib_isnumber($value) { + return $this->toBool($value[0] == "number"); + } + + protected function lib_isstring($value) { + return $this->toBool($value[0] == "string"); + } + + protected function lib_iscolor($value) { + return $this->toBool($this->coerceColor($value)); + } + + protected function lib_iskeyword($value) { + return $this->toBool($value[0] == "keyword"); + } + + protected function lib_ispixel($value) { + return $this->toBool($value[0] == "number" && $value[2] == "px"); + } + + protected function lib_ispercentage($value) { + return $this->toBool($value[0] == "number" && $value[2] == "%"); + } + + protected function lib_isem($value) { + return $this->toBool($value[0] == "number" && $value[2] == "em"); + } + + protected function lib_isrem($value) { + return $this->toBool($value[0] == "number" && $value[2] == "rem"); + } + + protected function lib_rgbahex($color) { + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError("color expected for rgbahex"); + } + + return sprintf("#%02x%02x%02x%02x", + isset($color[4]) ? $color[4] * 255 : 255, + $color[1], + $color[2], + $color[3] + ); + } + + protected function lib_argb($color){ + return $this->lib_rgbahex($color); + } + + /** + * Given an url, decide whether to output a regular link or the base64-encoded contents of the file + * + * @param array $value either an argument list (two strings) or a single string + * @return string formatted url(), either as a link or base64-encoded + */ + protected function lib_data_uri($value) { + $mime = ($value[0] === 'list') ? $value[2][0][2] : null; + $url = ($value[0] === 'list') ? $value[2][1][2][0] : $value[2][0]; + + $fullpath = $this->findImport($url); + + if ($fullpath && ($fsize = filesize($fullpath)) !== false) { + // IE8 can't handle data uris larger than 32KB + if ($fsize/1024 < 32) { + if (is_null($mime)) { + if (class_exists('finfo')) { // php 5.3+ + $finfo = new finfo(FILEINFO_MIME); + $mime = explode('; ', $finfo->file($fullpath)); + $mime = $mime[0]; + } elseif (function_exists('mime_content_type')) { // PHP 5.2 + $mime = mime_content_type($fullpath); + } + } + + if (!is_null($mime)) // fallback if the mime type is still unknown + $url = sprintf('data:%s;base64,%s', $mime, base64_encode(file_get_contents($fullpath))); + } + } + + return 'url("'.$url.'")'; + } + + // utility func to unquote a string + protected function lib_e($arg) { + switch ($arg[0]) { + case "list": + $items = $arg[2]; + if (isset($items[0])) { + return $this->lib_e($items[0]); + } + $this->throwError("unrecognised input"); + case "string": + $arg[1] = ""; + return $arg; + case "keyword": + return $arg; + default: + return array("keyword", $this->compileValue($arg)); + } + } + + protected function lib__sprintf($args) { + if ($args[0] != "list") return $args; + $values = $args[2]; + $string = array_shift($values); + $template = $this->compileValue($this->lib_e($string)); + + $i = 0; + if (preg_match_all('/%[dsa]/', $template, $m)) { + foreach ($m[0] as $match) { + $val = isset($values[$i]) ? + $this->reduce($values[$i]) : array('keyword', ''); + + // lessjs compat, renders fully expanded color, not raw color + if ($color = $this->coerceColor($val)) { + $val = $color; + } + + $i++; + $rep = $this->compileValue($this->lib_e($val)); + $template = preg_replace('/'.self::preg_quote($match).'/', + $rep, $template, 1); + } + } + + $d = $string[0] == "string" ? $string[1] : '"'; + return array("string", $d, array($template)); + } + + protected function lib_floor($arg) { + $value = $this->assertNumber($arg); + return array("number", floor($value), $arg[2]); + } + + protected function lib_ceil($arg) { + $value = $this->assertNumber($arg); + return array("number", ceil($value), $arg[2]); + } + + protected function lib_round($arg) { + if ($arg[0] != "list") { + $value = $this->assertNumber($arg); + return array("number", round($value), $arg[2]); + } else { + $value = $this->assertNumber($arg[2][0]); + $precision = $this->assertNumber($arg[2][1]); + return array("number", round($value, $precision), $arg[2][0][2]); + } + } + + protected function lib_unit($arg) { + if ($arg[0] == "list") { + list($number, $newUnit) = $arg[2]; + return array("number", $this->assertNumber($number), + $this->compileValue($this->lib_e($newUnit))); + } else { + return array("number", $this->assertNumber($arg), ""); + } + } + + /** + * Helper function to get arguments for color manipulation functions. + * takes a list that contains a color like thing and a percentage + */ + public function colorArgs($args) { + if ($args[0] != 'list' || count($args[2]) < 2) { + return array(array('color', 0, 0, 0), 0); + } + list($color, $delta) = $args[2]; + $color = $this->assertColor($color); + $delta = floatval($delta[1]); + + return array($color, $delta); + } + + protected function lib_darken($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[3] = $this->clamp($hsl[3] - $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_lighten($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[3] = $this->clamp($hsl[3] + $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_saturate($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[2] = $this->clamp($hsl[2] + $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_desaturate($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + $hsl[2] = $this->clamp($hsl[2] - $delta, 100); + return $this->toRGB($hsl); + } + + protected function lib_spin($args) { + list($color, $delta) = $this->colorArgs($args); + + $hsl = $this->toHSL($color); + + $hsl[1] = $hsl[1] + $delta % 360; + if ($hsl[1] < 0) { + $hsl[1] += 360; + } + + return $this->toRGB($hsl); + } + + protected function lib_fadeout($args) { + list($color, $delta) = $this->colorArgs($args); + $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) - $delta/100); + return $color; + } + + protected function lib_fadein($args) { + list($color, $delta) = $this->colorArgs($args); + $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) + $delta/100); + return $color; + } + + protected function lib_hue($color) { + $hsl = $this->toHSL($this->assertColor($color)); + return round($hsl[1]); + } + + protected function lib_saturation($color) { + $hsl = $this->toHSL($this->assertColor($color)); + return round($hsl[2]); + } + + protected function lib_lightness($color) { + $hsl = $this->toHSL($this->assertColor($color)); + return round($hsl[3]); + } + + // get the alpha of a color + // defaults to 1 for non-colors or colors without an alpha + protected function lib_alpha($value) { + if (!is_null($color = $this->coerceColor($value))) { + return isset($color[4]) ? $color[4] : 1; + } + } + + // set the alpha of the color + protected function lib_fade($args) { + list($color, $alpha) = $this->colorArgs($args); + $color[4] = $this->clamp($alpha / 100.0); + return $color; + } + + protected function lib_percentage($arg) { + $num = $this->assertNumber($arg); + return array("number", $num*100, "%"); + } + + /** + * Mix color with white in variable proportion. + * + * It is the same as calling `mix(#ffffff, @color, @weight)`. + * + * tint(@color, [@weight: 50%]); + * + * http://lesscss.org/functions/#color-operations-tint + * + * @return array Color + */ + protected function lib_tint($args) { + $white = ['color', 255, 255, 255]; + if ($args[0] == 'color') { + return $this->lib_mix([ 'list', ',', [$white, $args] ]); + } elseif ($args[0] == "list" && count($args[2]) == 2) { + return $this->lib_mix([ $args[0], $args[1], [$white, $args[2][0], $args[2][1]] ]); + } else { + $this->throwError("tint expects (color, weight)"); + } + } + + /** + * Mix color with black in variable proportion. + * + * It is the same as calling `mix(#000000, @color, @weight)` + * + * shade(@color, [@weight: 50%]); + * + * http://lesscss.org/functions/#color-operations-shade + * + * @return array Color + */ + protected function lib_shade($args) { + $black = ['color', 0, 0, 0]; + if ($args[0] == 'color') { + return $this->lib_mix([ 'list', ',', [$black, $args] ]); + } elseif ($args[0] == "list" && count($args[2]) == 2) { + return $this->lib_mix([ $args[0], $args[1], [$black, $args[2][0], $args[2][1]] ]); + } else { + $this->throwError("shade expects (color, weight)"); + } + } + + // mixes two colors by weight + // mix(@color1, @color2, [@weight: 50%]); + // http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#mix-instance_method + protected function lib_mix($args) { + if ($args[0] != "list" || count($args[2]) < 2) + $this->throwError("mix expects (color1, color2, weight)"); + + list($first, $second) = $args[2]; + $first = $this->assertColor($first); + $second = $this->assertColor($second); + + $first_a = $this->lib_alpha($first); + $second_a = $this->lib_alpha($second); + + if (isset($args[2][2])) { + $weight = $args[2][2][1] / 100.0; + } else { + $weight = 0.5; + } + + $w = $weight * 2 - 1; + $a = $first_a - $second_a; + + $w1 = (($w * $a == -1 ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2.0; + $w2 = 1.0 - $w1; + + $new = array('color', + $w1 * $first[1] + $w2 * $second[1], + $w1 * $first[2] + $w2 * $second[2], + $w1 * $first[3] + $w2 * $second[3], + ); + + if ($first_a != 1.0 || $second_a != 1.0) { + $new[] = $first_a * $weight + $second_a * ($weight - 1); + } + + return $this->fixColor($new); + } + + protected function lib_contrast($args) { + $darkColor = array('color', 0, 0, 0); + $lightColor = array('color', 255, 255, 255); + $threshold = 0.43; + + if ( $args[0] == 'list' ) { + $inputColor = ( isset($args[2][0]) ) ? $this->assertColor($args[2][0]) : $lightColor; + $darkColor = ( isset($args[2][1]) ) ? $this->assertColor($args[2][1]) : $darkColor; + $lightColor = ( isset($args[2][2]) ) ? $this->assertColor($args[2][2]) : $lightColor; + $threshold = ( isset($args[2][3]) ) ? $this->assertNumber($args[2][3]) : $threshold; + } + else { + $inputColor = $this->assertColor($args); + } + + $inputColor = $this->coerceColor($inputColor); + $darkColor = $this->coerceColor($darkColor); + $lightColor = $this->coerceColor($lightColor); + + //Figure out which is actually light and dark! + if ( $this->toLuma($darkColor) > $this->toLuma($lightColor) ) { + $t = $lightColor; + $lightColor = $darkColor; + $darkColor = $t; + } + + $inputColor_alpha = $this->lib_alpha($inputColor); + if ( ( $this->toLuma($inputColor) * $inputColor_alpha) < $threshold) { + return $lightColor; + } + return $darkColor; + } + + private function toLuma($color) { + list(, $r, $g, $b) = $this->coerceColor($color); + + $r = $r / 255; + $g = $g / 255; + $b = $b / 255; + + $r = ($r <= 0.03928) ? $r / 12.92 : pow((($r + 0.055) / 1.055), 2.4); + $g = ($g <= 0.03928) ? $g / 12.92 : pow((($g + 0.055) / 1.055), 2.4); + $b = ($b <= 0.03928) ? $b / 12.92 : pow((($b + 0.055) / 1.055), 2.4); + + return (0.2126 * $r) + (0.7152 * $g) + (0.0722 * $b); + } + + protected function lib_luma($color) { + return array("number", round($this->toLuma($color) * 100, 8), "%"); + } + + + public function assertColor($value, $error = "expected color value") { + $color = $this->coerceColor($value); + if (is_null($color)) $this->throwError($error); + return $color; + } + + public function assertNumber($value, $error = "expecting number") { + if ($value[0] == "number") return $value[1]; + $this->throwError($error); + } + + public function assertArgs($value, $expectedArgs, $name="") { + if ($expectedArgs == 1) { + return $value; + } else { + if ($value[0] !== "list" || $value[1] != ",") $this->throwError("expecting list"); + $values = $value[2]; + $numValues = count($values); + if ($expectedArgs != $numValues) { + if ($name) { + $name = $name . ": "; + } + + $this->throwError("${name}expecting $expectedArgs arguments, got $numValues"); + } + + return $values; + } + } + + protected function toHSL($color) { + if ($color[0] === 'hsl') { + return $color; + } + + $r = $color[1] / 255; + $g = $color[2] / 255; + $b = $color[3] / 255; + + $min = min($r, $g, $b); + $max = max($r, $g, $b); + + $L = ($min + $max) / 2; + if ($min == $max) { + $S = $H = 0; + } else { + if ($L < 0.5) { + $S = ($max - $min) / ($max + $min); + } else { + $S = ($max - $min) / (2.0 - $max - $min); + } + if ($r == $max) { + $H = ($g - $b) / ($max - $min); + } elseif ($g == $max) { + $H = 2.0 + ($b - $r) / ($max - $min); + } elseif ($b == $max) { + $H = 4.0 + ($r - $g) / ($max - $min); + } + + } + + $out = array('hsl', + ($H < 0 ? $H + 6 : $H)*60, + $S * 100, + $L * 100, + ); + + if (count($color) > 4) { + // copy alpha + $out[] = $color[4]; + } + return $out; + } + + protected function toRGB_helper($comp, $temp1, $temp2) { + if ($comp < 0) { + $comp += 1.0; + } elseif ($comp > 1) { + $comp -= 1.0; + } + + if (6 * $comp < 1) { + return $temp1 + ($temp2 - $temp1) * 6 * $comp; + } + if (2 * $comp < 1) { + return $temp2; + } + if (3 * $comp < 2) { + return $temp1 + ($temp2 - $temp1)*((2/3) - $comp) * 6; + } + + return $temp1; + } + + /** + * Converts a hsl array into a color value in rgb. + * Expects H to be in range of 0 to 360, S and L in 0 to 100 + */ + protected function toRGB($color) { + if ($color[0] === 'color') { + return $color; + } + + $H = $color[1] / 360; + $S = $color[2] / 100; + $L = $color[3] / 100; + + if ($S == 0) { + $r = $g = $b = $L; + } else { + $temp2 = $L < 0.5 ? + $L * (1.0 + $S) : + $L + $S - $L * $S; + + $temp1 = 2.0 * $L - $temp2; + + $r = $this->toRGB_helper($H + 1/3, $temp1, $temp2); + $g = $this->toRGB_helper($H, $temp1, $temp2); + $b = $this->toRGB_helper($H - 1/3, $temp1, $temp2); + } + + // $out = array('color', round($r*255), round($g*255), round($b*255)); + $out = array('color', $r*255, $g*255, $b*255); + if (count($color) > 4) { + // copy alpha + $out[] = $color[4]; + } + return $out; + } + + protected function clamp($v, $max = 1, $min = 0) { + return min($max, max($min, $v)); + } + + /** + * Convert the rgb, rgba, hsl color literals of function type + * as returned by the parser into values of color type. + */ + protected function funcToColor($func) { + $fname = $func[1]; + if ($func[2][0] != 'list') { + // need a list of arguments + return false; + } + $rawComponents = $func[2][2]; + + if ($fname == 'hsl' || $fname == 'hsla') { + $hsl = array('hsl'); + $i = 0; + foreach ($rawComponents as $c) { + $val = $this->reduce($c); + $val = isset($val[1]) ? floatval($val[1]) : 0; + + if ($i == 0) { + $clamp = 360; + } elseif ($i < 3) { + $clamp = 100; + } else { + $clamp = 1; + } + + $hsl[] = $this->clamp($val, $clamp); + $i++; + } + + while (count($hsl) < 4) { + $hsl[] = 0; + } + return $this->toRGB($hsl); + + } elseif ($fname == 'rgb' || $fname == 'rgba') { + $components = array(); + $i = 1; + foreach ($rawComponents as $c) { + $c = $this->reduce($c); + if ($i < 4) { + if ($c[0] == "number" && $c[2] == "%") { + $components[] = 255 * ($c[1] / 100); + } else { + $components[] = floatval($c[1]); + } + } elseif ($i == 4) { + if ($c[0] == "number" && $c[2] == "%") { + $components[] = 1.0 * ($c[1] / 100); + } else { + $components[] = floatval($c[1]); + } + } else break; + + $i++; + } + while (count($components) < 3) { + $components[] = 0; + } + array_unshift($components, 'color'); + return $this->fixColor($components); + } + + return false; + } + + protected function reduce($value, $forExpression = false) { + switch ($value[0]) { + case "interpolate": + $reduced = $this->reduce($value[1]); + $var = $this->compileValue($reduced); + $res = $this->reduce(array("variable", $this->vPrefix . $var)); + + if ($res[0] == "raw_color") { + $res = $this->coerceColor($res); + } + + if (empty($value[2])) $res = $this->lib_e($res); + + return $res; + case "variable": + $key = $value[1]; + if (is_array($key)) { + $key = $this->reduce($key); + $key = $this->vPrefix . $this->compileValue($this->lib_e($key)); + } + + $seen =& $this->env->seenNames; + + if (!empty($seen[$key])) { + $this->throwError("infinite loop detected: $key"); + } + + $seen[$key] = true; + $out = $this->reduce($this->get($key)); + $seen[$key] = false; + return $out; + case "list": + foreach ($value[2] as &$item) { + $item = $this->reduce($item, $forExpression); + } + return $value; + case "expression": + return $this->evaluate($value); + case "string": + foreach ($value[2] as &$part) { + if (is_array($part)) { + $strip = $part[0] == "variable"; + $part = $this->reduce($part); + if ($strip) $part = $this->lib_e($part); + } + } + return $value; + case "escape": + list(,$inner) = $value; + return $this->lib_e($this->reduce($inner)); + case "function": + $color = $this->funcToColor($value); + if ($color) return $color; + + list(, $name, $args) = $value; + if ($name == "%") $name = "_sprintf"; + + $f = isset($this->libFunctions[$name]) ? + $this->libFunctions[$name] : array($this, 'lib_'.str_replace('-', '_', $name)); + + if (is_callable($f)) { + if ($args[0] == 'list') + $args = self::compressList($args[2], $args[1]); + + $ret = call_user_func($f, $this->reduce($args, true), $this); + + if (is_null($ret)) { + return array("string", "", array( + $name, "(", $args, ")" + )); + } + + // convert to a typed value if the result is a php primitive + if (is_numeric($ret)) { + $ret = array('number', $ret, ""); + } elseif (!is_array($ret)) { + $ret = array('keyword', $ret); + } + + return $ret; + } + + // plain function, reduce args + $value[2] = $this->reduce($value[2]); + return $value; + case "unary": + list(, $op, $exp) = $value; + $exp = $this->reduce($exp); + + if ($exp[0] == "number") { + switch ($op) { + case "+": + return $exp; + case "-": + $exp[1] *= -1; + return $exp; + } + } + return array("string", "", array($op, $exp)); + } + + if ($forExpression) { + switch ($value[0]) { + case "keyword": + if ($color = $this->coerceColor($value)) { + return $color; + } + break; + case "raw_color": + return $this->coerceColor($value); + } + } + + return $value; + } + + + // coerce a value for use in color operation + protected function coerceColor($value) { + switch ($value[0]) { + case 'color': return $value; + case 'raw_color': + $c = array("color", 0, 0, 0); + $colorStr = substr($value[1], 1); + $num = hexdec($colorStr); + $width = strlen($colorStr) == 3 ? 16 : 256; + + for ($i = 3; $i > 0; $i--) { // 3 2 1 + $t = $num % $width; + $num /= $width; + + $c[$i] = $t * (256/$width) + $t * floor(16/$width); + } + + return $c; + case 'keyword': + $name = $value[1]; + if (isset(self::$cssColors[$name])) { + $rgba = explode(',', self::$cssColors[$name]); + + if (isset($rgba[3])) { + return array('color', $rgba[0], $rgba[1], $rgba[2], $rgba[3]); + } + return array('color', $rgba[0], $rgba[1], $rgba[2]); + } + return null; + } + } + + // make something string like into a string + protected function coerceString($value) { + switch ($value[0]) { + case "string": + return $value; + case "keyword": + return array("string", "", array($value[1])); + } + return null; + } + + // turn list of length 1 into value type + protected function flattenList($value) { + if ($value[0] == "list" && count($value[2]) == 1) { + return $this->flattenList($value[2][0]); + } + return $value; + } + + public function toBool($a) { + return $a ? self::$TRUE : self::$FALSE; + } + + // evaluate an expression + protected function evaluate($exp) { + list(, $op, $left, $right, $whiteBefore, $whiteAfter) = $exp; + + $left = $this->reduce($left, true); + $right = $this->reduce($right, true); + + if ($leftColor = $this->coerceColor($left)) { + $left = $leftColor; + } + + if ($rightColor = $this->coerceColor($right)) { + $right = $rightColor; + } + + $ltype = $left[0]; + $rtype = $right[0]; + + // operators that work on all types + if ($op == "and") { + return $this->toBool($left == self::$TRUE && $right == self::$TRUE); + } + + if ($op == "=") { + return $this->toBool($this->eq($left, $right) ); + } + + if ($op == "+" && !is_null($str = $this->stringConcatenate($left, $right))) { + return $str; + } + + // type based operators + $fname = "op_${ltype}_${rtype}"; + if (is_callable(array($this, $fname))) { + $out = $this->$fname($op, $left, $right); + if (!is_null($out)) return $out; + } + + // make the expression look it did before being parsed + $paddedOp = $op; + if ($whiteBefore) { + $paddedOp = " " . $paddedOp; + } + if ($whiteAfter) { + $paddedOp .= " "; + } + + return array("string", "", array($left, $paddedOp, $right)); + } + + protected function stringConcatenate($left, $right) { + if ($strLeft = $this->coerceString($left)) { + if ($right[0] == "string") { + $right[1] = ""; + } + $strLeft[2][] = $right; + return $strLeft; + } + + if ($strRight = $this->coerceString($right)) { + array_unshift($strRight[2], $left); + return $strRight; + } + } + + + // make sure a color's components don't go out of bounds + protected function fixColor($c) { + foreach (range(1, 3) as $i) { + if ($c[$i] < 0) $c[$i] = 0; + if ($c[$i] > 255) $c[$i] = 255; + } + + return $c; + } + + protected function op_number_color($op, $lft, $rgt) { + if ($op == '+' || $op == '*') { + return $this->op_color_number($op, $rgt, $lft); + } + } + + protected function op_color_number($op, $lft, $rgt) { + if ($rgt[0] == '%') $rgt[1] /= 100; + + return $this->op_color_color($op, $lft, + array_fill(1, count($lft) - 1, $rgt[1])); + } + + protected function op_color_color($op, $left, $right) { + $out = array('color'); + $max = count($left) > count($right) ? count($left) : count($right); + foreach (range(1, $max - 1) as $i) { + $lval = isset($left[$i]) ? $left[$i] : 0; + $rval = isset($right[$i]) ? $right[$i] : 0; + switch ($op) { + case '+': + $out[] = $lval + $rval; + break; + case '-': + $out[] = $lval - $rval; + break; + case '*': + $out[] = $lval * $rval; + break; + case '%': + $out[] = $lval % $rval; + break; + case '/': + if ($rval == 0) { + $this->throwError("evaluate error: can't divide by zero"); + } + $out[] = $lval / $rval; + break; + default: + $this->throwError('evaluate error: color op number failed on op '.$op); + } + } + return $this->fixColor($out); + } + + public function lib_red($color){ + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError('color expected for red()'); + } + + return $color[1]; + } + + public function lib_green($color){ + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError('color expected for green()'); + } + + return $color[2]; + } + + public function lib_blue($color){ + $color = $this->coerceColor($color); + if (is_null($color)) { + $this->throwError('color expected for blue()'); + } + + return $color[3]; + } + + + // operator on two numbers + protected function op_number_number($op, $left, $right) { + $unit = empty($left[2]) ? $right[2] : $left[2]; + + $value = 0; + switch ($op) { + case '+': + $value = $left[1] + $right[1]; + break; + case '*': + $value = $left[1] * $right[1]; + break; + case '-': + $value = $left[1] - $right[1]; + break; + case '%': + $value = $left[1] % $right[1]; + break; + case '/': + if ($right[1] == 0) $this->throwError('parse error: divide by zero'); + $value = $left[1] / $right[1]; + break; + case '<': + return $this->toBool($left[1] < $right[1]); + case '>': + return $this->toBool($left[1] > $right[1]); + case '>=': + return $this->toBool($left[1] >= $right[1]); + case '=<': + return $this->toBool($left[1] <= $right[1]); + default: + $this->throwError('parse error: unknown number operator: '.$op); + } + + return array("number", $value, $unit); + } + + + /* environment functions */ + + protected function makeOutputBlock($type, $selectors = null) { + $b = new stdclass; + $b->lines = array(); + $b->children = array(); + $b->selectors = $selectors; + $b->type = $type; + $b->parent = $this->scope; + return $b; + } + + // the state of execution + protected function pushEnv($block = null) { + $e = new stdclass; + $e->parent = $this->env; + $e->store = array(); + $e->block = $block; + + $this->env = $e; + return $e; + } + + // pop something off the stack + protected function popEnv() { + $old = $this->env; + $this->env = $this->env->parent; + return $old; + } + + // set something in the current env + protected function set($name, $value) { + $this->env->store[$name] = $value; + } + + + // get the highest occurrence entry for a name + protected function get($name) { + $current = $this->env; + + $isArguments = $name == $this->vPrefix . 'arguments'; + while ($current) { + if ($isArguments && isset($current->arguments)) { + return array('list', ' ', $current->arguments); + } + + if (isset($current->store[$name])) { + return $current->store[$name]; + } + + $current = isset($current->storeParent) ? + $current->storeParent : + $current->parent; + } + + $this->throwError("variable $name is undefined"); + } + + // inject array of unparsed strings into environment as variables + protected function injectVariables($args) { + $this->pushEnv(); + $parser = new lessc_parser($this, __METHOD__); + foreach ($args as $name => $strValue) { + if ($name{0} !== '@') { + $name = '@' . $name; + } + $parser->count = 0; + $parser->buffer = (string)$strValue; + if (!$parser->propertyValue($value)) { + throw new Exception("failed to parse passed in variable $name: $strValue"); + } + + $this->set($name, $value); + } + } + + /** + * Initialize any static state, can initialize parser for a file + * $opts isn't used yet + */ + public function __construct($fname = null) { + if ($fname !== null) { + // used for deprecated parse method + $this->_parseFile = $fname; + } + } + + public function compile($string, $name = null) { + $locale = setlocale(LC_NUMERIC, 0); + setlocale(LC_NUMERIC, "C"); + + $this->parser = $this->makeParser($name); + $root = $this->parser->parse($string); + + $this->env = null; + $this->scope = null; + + $this->formatter = $this->newFormatter(); + + if (!empty($this->registeredVars)) { + $this->injectVariables($this->registeredVars); + } + + $this->sourceParser = $this->parser; // used for error messages + $this->compileBlock($root); + + ob_start(); + $this->formatter->block($this->scope); + $out = ob_get_clean(); + setlocale(LC_NUMERIC, $locale); + return $out; + } + + public function compileFile($fname, $outFname = null) { + if (!is_readable($fname)) { + throw new Exception('load error: failed to find '.$fname); + } + + $pi = pathinfo($fname); + + $oldImport = $this->importDir; + + $this->importDir = (array)$this->importDir; + $this->importDir[] = $pi['dirname'].'/'; + + $this->addParsedFile($fname); + + $out = $this->compile(file_get_contents($fname), $fname); + + $this->importDir = $oldImport; + + if ($outFname !== null) { + return file_put_contents($outFname, $out); + } + + return $out; + } + + // compile only if changed input has changed or output doesn't exist + public function checkedCompile($in, $out) { + if (!is_file($out) || filemtime($in) > filemtime($out)) { + $this->compileFile($in, $out); + return true; + } + return false; + } + + /** + * Execute lessphp on a .less file or a lessphp cache structure + * + * The lessphp cache structure contains information about a specific + * less file having been parsed. It can be used as a hint for future + * calls to determine whether or not a rebuild is required. + * + * The cache structure contains two important keys that may be used + * externally: + * + * compiled: The final compiled CSS + * updated: The time (in seconds) the CSS was last compiled + * + * The cache structure is a plain-ol' PHP associative array and can + * be serialized and unserialized without a hitch. + * + * @param mixed $in Input + * @param bool $force Force rebuild? + * @return array lessphp cache structure + */ + public function cachedCompile($in, $force = false) { + // assume no root + $root = null; + + if (is_string($in)) { + $root = $in; + } elseif (is_array($in) && isset($in['root'])) { + if ($force || !isset($in['files'])) { + // If we are forcing a recompile or if for some reason the + // structure does not contain any file information we should + // specify the root to trigger a rebuild. + $root = $in['root']; + } elseif (isset($in['files']) && is_array($in['files'])) { + foreach ($in['files'] as $fname => $ftime) { + if (!file_exists($fname) || filemtime($fname) > $ftime) { + // One of the files we knew about previously has changed + // so we should look at our incoming root again. + $root = $in['root']; + break; + } + } + } + } else { + // TODO: Throw an exception? We got neither a string nor something + // that looks like a compatible lessphp cache structure. + return null; + } + + if ($root !== null) { + // If we have a root value which means we should rebuild. + $out = array(); + $out['root'] = $root; + $out['compiled'] = $this->compileFile($root); + $out['files'] = $this->allParsedFiles(); + $out['updated'] = time(); + return $out; + } else { + // No changes, pass back the structure + // we were given initially. + return $in; + } + + } + + // parse and compile buffer + // This is deprecated + public function parse($str = null, $initialVariables = null) { + if (is_array($str)) { + $initialVariables = $str; + $str = null; + } + + $oldVars = $this->registeredVars; + if ($initialVariables !== null) { + $this->setVariables($initialVariables); + } + + if ($str == null) { + if (empty($this->_parseFile)) { + throw new exception("nothing to parse"); + } + + $out = $this->compileFile($this->_parseFile); + } else { + $out = $this->compile($str); + } + + $this->registeredVars = $oldVars; + return $out; + } + + protected function makeParser($name) { + $parser = new lessc_parser($this, $name); + $parser->writeComments = $this->preserveComments; + + return $parser; + } + + public function setFormatter($name) { + $this->formatterName = $name; + } + + protected function newFormatter() { + $className = "lessc_formatter_lessjs"; + if (!empty($this->formatterName)) { + if (!is_string($this->formatterName)) + return $this->formatterName; + $className = "lessc_formatter_$this->formatterName"; + } + + return new $className; + } + + public function setPreserveComments($preserve) { + $this->preserveComments = $preserve; + } + + public function registerFunction($name, $func) { + $this->libFunctions[$name] = $func; + } + + public function unregisterFunction($name) { + unset($this->libFunctions[$name]); + } + + public function setVariables($variables) { + $this->registeredVars = array_merge($this->registeredVars, $variables); + } + + public function unsetVariable($name) { + unset($this->registeredVars[$name]); + } + + public function setImportDir($dirs) { + $this->importDir = (array)$dirs; + } + + public function addImportDir($dir) { + $this->importDir = (array)$this->importDir; + $this->importDir[] = $dir; + } + + public function allParsedFiles() { + return $this->allParsedFiles; + } + + public function addParsedFile($file) { + $this->allParsedFiles[realpath($file)] = filemtime($file); + } + + /** + * Uses the current value of $this->count to show line and line number + */ + public function throwError($msg = null) { + if ($this->sourceLoc >= 0) { + $this->sourceParser->throwError($msg, $this->sourceLoc); + } + throw new exception($msg); + } + + // compile file $in to file $out if $in is newer than $out + // returns true when it compiles, false otherwise + public static function ccompile($in, $out, $less = null) { + if ($less === null) { + $less = new self; + } + return $less->checkedCompile($in, $out); + } + + public static function cexecute($in, $force = false, $less = null) { + if ($less === null) { + $less = new self; + } + return $less->cachedCompile($in, $force); + } + + static protected $cssColors = array( + 'aliceblue' => '240,248,255', + 'antiquewhite' => '250,235,215', + 'aqua' => '0,255,255', + 'aquamarine' => '127,255,212', + 'azure' => '240,255,255', + 'beige' => '245,245,220', + 'bisque' => '255,228,196', + 'black' => '0,0,0', + 'blanchedalmond' => '255,235,205', + 'blue' => '0,0,255', + 'blueviolet' => '138,43,226', + 'brown' => '165,42,42', + 'burlywood' => '222,184,135', + 'cadetblue' => '95,158,160', + 'chartreuse' => '127,255,0', + 'chocolate' => '210,105,30', + 'coral' => '255,127,80', + 'cornflowerblue' => '100,149,237', + 'cornsilk' => '255,248,220', + 'crimson' => '220,20,60', + 'cyan' => '0,255,255', + 'darkblue' => '0,0,139', + 'darkcyan' => '0,139,139', + 'darkgoldenrod' => '184,134,11', + 'darkgray' => '169,169,169', + 'darkgreen' => '0,100,0', + 'darkgrey' => '169,169,169', + 'darkkhaki' => '189,183,107', + 'darkmagenta' => '139,0,139', + 'darkolivegreen' => '85,107,47', + 'darkorange' => '255,140,0', + 'darkorchid' => '153,50,204', + 'darkred' => '139,0,0', + 'darksalmon' => '233,150,122', + 'darkseagreen' => '143,188,143', + 'darkslateblue' => '72,61,139', + 'darkslategray' => '47,79,79', + 'darkslategrey' => '47,79,79', + 'darkturquoise' => '0,206,209', + 'darkviolet' => '148,0,211', + 'deeppink' => '255,20,147', + 'deepskyblue' => '0,191,255', + 'dimgray' => '105,105,105', + 'dimgrey' => '105,105,105', + 'dodgerblue' => '30,144,255', + 'firebrick' => '178,34,34', + 'floralwhite' => '255,250,240', + 'forestgreen' => '34,139,34', + 'fuchsia' => '255,0,255', + 'gainsboro' => '220,220,220', + 'ghostwhite' => '248,248,255', + 'gold' => '255,215,0', + 'goldenrod' => '218,165,32', + 'gray' => '128,128,128', + 'green' => '0,128,0', + 'greenyellow' => '173,255,47', + 'grey' => '128,128,128', + 'honeydew' => '240,255,240', + 'hotpink' => '255,105,180', + 'indianred' => '205,92,92', + 'indigo' => '75,0,130', + 'ivory' => '255,255,240', + 'khaki' => '240,230,140', + 'lavender' => '230,230,250', + 'lavenderblush' => '255,240,245', + 'lawngreen' => '124,252,0', + 'lemonchiffon' => '255,250,205', + 'lightblue' => '173,216,230', + 'lightcoral' => '240,128,128', + 'lightcyan' => '224,255,255', + 'lightgoldenrodyellow' => '250,250,210', + 'lightgray' => '211,211,211', + 'lightgreen' => '144,238,144', + 'lightgrey' => '211,211,211', + 'lightpink' => '255,182,193', + 'lightsalmon' => '255,160,122', + 'lightseagreen' => '32,178,170', + 'lightskyblue' => '135,206,250', + 'lightslategray' => '119,136,153', + 'lightslategrey' => '119,136,153', + 'lightsteelblue' => '176,196,222', + 'lightyellow' => '255,255,224', + 'lime' => '0,255,0', + 'limegreen' => '50,205,50', + 'linen' => '250,240,230', + 'magenta' => '255,0,255', + 'maroon' => '128,0,0', + 'mediumaquamarine' => '102,205,170', + 'mediumblue' => '0,0,205', + 'mediumorchid' => '186,85,211', + 'mediumpurple' => '147,112,219', + 'mediumseagreen' => '60,179,113', + 'mediumslateblue' => '123,104,238', + 'mediumspringgreen' => '0,250,154', + 'mediumturquoise' => '72,209,204', + 'mediumvioletred' => '199,21,133', + 'midnightblue' => '25,25,112', + 'mintcream' => '245,255,250', + 'mistyrose' => '255,228,225', + 'moccasin' => '255,228,181', + 'navajowhite' => '255,222,173', + 'navy' => '0,0,128', + 'oldlace' => '253,245,230', + 'olive' => '128,128,0', + 'olivedrab' => '107,142,35', + 'orange' => '255,165,0', + 'orangered' => '255,69,0', + 'orchid' => '218,112,214', + 'palegoldenrod' => '238,232,170', + 'palegreen' => '152,251,152', + 'paleturquoise' => '175,238,238', + 'palevioletred' => '219,112,147', + 'papayawhip' => '255,239,213', + 'peachpuff' => '255,218,185', + 'peru' => '205,133,63', + 'pink' => '255,192,203', + 'plum' => '221,160,221', + 'powderblue' => '176,224,230', + 'purple' => '128,0,128', + 'red' => '255,0,0', + 'rosybrown' => '188,143,143', + 'royalblue' => '65,105,225', + 'saddlebrown' => '139,69,19', + 'salmon' => '250,128,114', + 'sandybrown' => '244,164,96', + 'seagreen' => '46,139,87', + 'seashell' => '255,245,238', + 'sienna' => '160,82,45', + 'silver' => '192,192,192', + 'skyblue' => '135,206,235', + 'slateblue' => '106,90,205', + 'slategray' => '112,128,144', + 'slategrey' => '112,128,144', + 'snow' => '255,250,250', + 'springgreen' => '0,255,127', + 'steelblue' => '70,130,180', + 'tan' => '210,180,140', + 'teal' => '0,128,128', + 'thistle' => '216,191,216', + 'tomato' => '255,99,71', + 'transparent' => '0,0,0,0', + 'turquoise' => '64,224,208', + 'violet' => '238,130,238', + 'wheat' => '245,222,179', + 'white' => '255,255,255', + 'whitesmoke' => '245,245,245', + 'yellow' => '255,255,0', + 'yellowgreen' => '154,205,50' + ); +} + +// responsible for taking a string of LESS code and converting it into a +// syntax tree +class lessc_parser { + static protected $nextBlockId = 0; // used to uniquely identify blocks + + static protected $precedence = array( + '=<' => 0, + '>=' => 0, + '=' => 0, + '<' => 0, + '>' => 0, + + '+' => 1, + '-' => 1, + '*' => 2, + '/' => 2, + '%' => 2, + ); + + static protected $whitePattern; + static protected $commentMulti; + + static protected $commentSingle = "//"; + static protected $commentMultiLeft = "/*"; + static protected $commentMultiRight = "*/"; + + // regex string to match any of the operators + static protected $operatorString; + + // these properties will supress division unless it's inside parenthases + static protected $supressDivisionProps = + array('/border-radius$/i', '/^font$/i'); + + protected $blockDirectives = array("font-face", "keyframes", "page", "-moz-document", "viewport", "-moz-viewport", "-o-viewport", "-ms-viewport"); + protected $lineDirectives = array("charset"); + + /** + * if we are in parens we can be more liberal with whitespace around + * operators because it must evaluate to a single value and thus is less + * ambiguous. + * + * Consider: + * property1: 10 -5; // is two numbers, 10 and -5 + * property2: (10 -5); // should evaluate to 5 + */ + protected $inParens = false; + + // caches preg escaped literals + static protected $literalCache = array(); + + public function __construct($lessc, $sourceName = null) { + $this->eatWhiteDefault = true; + // reference to less needed for vPrefix, mPrefix, and parentSelector + $this->lessc = $lessc; + + $this->sourceName = $sourceName; // name used for error messages + + $this->writeComments = false; + + if (!self::$operatorString) { + self::$operatorString = + '('.implode('|', array_map(array('lessc', 'preg_quote'), + array_keys(self::$precedence))).')'; + + $commentSingle = lessc::preg_quote(self::$commentSingle); + $commentMultiLeft = lessc::preg_quote(self::$commentMultiLeft); + $commentMultiRight = lessc::preg_quote(self::$commentMultiRight); + + self::$commentMulti = $commentMultiLeft.'.*?'.$commentMultiRight; + self::$whitePattern = '/'.$commentSingle.'[^\n]*\s*|('.self::$commentMulti.')\s*|\s+/Ais'; + } + } + + public function parse($buffer) { + $this->count = 0; + $this->line = 1; + + $this->env = null; // block stack + $this->buffer = $this->writeComments ? $buffer : $this->removeComments($buffer); + $this->pushSpecialBlock("root"); + $this->eatWhiteDefault = true; + $this->seenComments = array(); + + // trim whitespace on head + // if (preg_match('/^\s+/', $this->buffer, $m)) { + // $this->line += substr_count($m[0], "\n"); + // $this->buffer = ltrim($this->buffer); + // } + $this->whitespace(); + + // parse the entire file + while (false !== $this->parseChunk()); + + if ($this->count != strlen($this->buffer)) + $this->throwError(); + + // TODO report where the block was opened + if ( !property_exists($this->env, 'parent') || !is_null($this->env->parent) ) + throw new exception('parse error: unclosed block'); + + return $this->env; + } + + /** + * Parse a single chunk off the head of the buffer and append it to the + * current parse environment. + * Returns false when the buffer is empty, or when there is an error. + * + * This function is called repeatedly until the entire document is + * parsed. + * + * This parser is most similar to a recursive descent parser. Single + * functions represent discrete grammatical rules for the language, and + * they are able to capture the text that represents those rules. + * + * Consider the function lessc::keyword(). (all parse functions are + * structured the same) + * + * The function takes a single reference argument. When calling the + * function it will attempt to match a keyword on the head of the buffer. + * If it is successful, it will place the keyword in the referenced + * argument, advance the position in the buffer, and return true. If it + * fails then it won't advance the buffer and it will return false. + * + * All of these parse functions are powered by lessc::match(), which behaves + * the same way, but takes a literal regular expression. Sometimes it is + * more convenient to use match instead of creating a new function. + * + * Because of the format of the functions, to parse an entire string of + * grammatical rules, you can chain them together using &&. + * + * But, if some of the rules in the chain succeed before one fails, then + * the buffer position will be left at an invalid state. In order to + * avoid this, lessc::seek() is used to remember and set buffer positions. + * + * Before parsing a chain, use $s = $this->seek() to remember the current + * position into $s. Then if a chain fails, use $this->seek($s) to + * go back where we started. + */ + protected function parseChunk() { + if (empty($this->buffer)) return false; + $s = $this->seek(); + + if ($this->whitespace()) { + return true; + } + + // setting a property + if ($this->keyword($key) && $this->assign() && + $this->propertyValue($value, $key) && $this->end() + ) { + $this->append(array('assign', $key, $value), $s); + return true; + } else { + $this->seek($s); + } + + + // look for special css blocks + if ($this->literal('@', false)) { + $this->count--; + + // media + if ($this->literal('@media')) { + if (($this->mediaQueryList($mediaQueries) || true) + && $this->literal('{') + ) { + $media = $this->pushSpecialBlock("media"); + $media->queries = is_null($mediaQueries) ? array() : $mediaQueries; + return true; + } else { + $this->seek($s); + return false; + } + } + + if ($this->literal("@", false) && $this->keyword($dirName)) { + if ($this->isDirective($dirName, $this->blockDirectives)) { + if (($this->openString("{", $dirValue, null, array(";")) || true) && + $this->literal("{") + ) { + $dir = $this->pushSpecialBlock("directive"); + $dir->name = $dirName; + if (isset($dirValue)) $dir->value = $dirValue; + return true; + } + } elseif ($this->isDirective($dirName, $this->lineDirectives)) { + if ($this->propertyValue($dirValue) && $this->end()) { + $this->append(array("directive", $dirName, $dirValue)); + return true; + } + } + } + + $this->seek($s); + } + + // setting a variable + if ($this->variable($var) && $this->assign() && + $this->propertyValue($value) && $this->end() + ) { + $this->append(array('assign', $var, $value), $s); + return true; + } else { + $this->seek($s); + } + + if ($this->import($importValue)) { + $this->append($importValue, $s); + return true; + } + + // opening parametric mixin + if ($this->tag($tag, true) && $this->argumentDef($args, $isVararg) && + ($this->guards($guards) || true) && + $this->literal('{') + ) { + $block = $this->pushBlock($this->fixTags(array($tag))); + $block->args = $args; + $block->isVararg = $isVararg; + if (!empty($guards)) $block->guards = $guards; + return true; + } else { + $this->seek($s); + } + + // opening a simple block + if ($this->tags($tags) && $this->literal('{', false)) { + $tags = $this->fixTags($tags); + $this->pushBlock($tags); + return true; + } else { + $this->seek($s); + } + + // closing a block + if ($this->literal('}', false)) { + try { + $block = $this->pop(); + } catch (exception $e) { + $this->seek($s); + $this->throwError($e->getMessage()); + } + + $hidden = false; + if (is_null($block->type)) { + $hidden = true; + if (!isset($block->args)) { + foreach ($block->tags as $tag) { + if (!is_string($tag) || $tag{0} != $this->lessc->mPrefix) { + $hidden = false; + break; + } + } + } + + foreach ($block->tags as $tag) { + if (is_string($tag)) { + $this->env->children[$tag][] = $block; + } + } + } + + if (!$hidden) { + $this->append(array('block', $block), $s); + } + + // this is done here so comments aren't bundled into he block that + // was just closed + $this->whitespace(); + return true; + } + + // mixin + if ($this->mixinTags($tags) && + ($this->argumentDef($argv, $isVararg) || true) && + ($this->keyword($suffix) || true) && $this->end() + ) { + $tags = $this->fixTags($tags); + $this->append(array('mixin', $tags, $argv, $suffix), $s); + return true; + } else { + $this->seek($s); + } + + // spare ; + if ($this->literal(';')) return true; + + return false; // got nothing, throw error + } + + protected function isDirective($dirname, $directives) { + // TODO: cache pattern in parser + $pattern = implode("|", + array_map(array("lessc", "preg_quote"), $directives)); + $pattern = '/^(-[a-z-]+-)?(' . $pattern . ')$/i'; + + return preg_match($pattern, $dirname); + } + + protected function fixTags($tags) { + // move @ tags out of variable namespace + foreach ($tags as &$tag) { + if ($tag{0} == $this->lessc->vPrefix) + $tag[0] = $this->lessc->mPrefix; + } + return $tags; + } + + // a list of expressions + protected function expressionList(&$exps) { + $values = array(); + + while ($this->expression($exp)) { + $values[] = $exp; + } + + if (count($values) == 0) return false; + + $exps = lessc::compressList($values, ' '); + return true; + } + + /** + * Attempt to consume an expression. + * @link http://en.wikipedia.org/wiki/Operator-precedence_parser#Pseudo-code + */ + protected function expression(&$out) { + if ($this->value($lhs)) { + $out = $this->expHelper($lhs, 0); + + // look for / shorthand + if (!empty($this->env->supressedDivision)) { + unset($this->env->supressedDivision); + $s = $this->seek(); + if ($this->literal("/") && $this->value($rhs)) { + $out = array("list", "", + array($out, array("keyword", "/"), $rhs)); + } else { + $this->seek($s); + } + } + + return true; + } + return false; + } + + /** + * recursively parse infix equation with $lhs at precedence $minP + */ + protected function expHelper($lhs, $minP) { + $this->inExp = true; + $ss = $this->seek(); + + while (true) { + $whiteBefore = isset($this->buffer[$this->count - 1]) && + ctype_space($this->buffer[$this->count - 1]); + + // If there is whitespace before the operator, then we require + // whitespace after the operator for it to be an expression + $needWhite = $whiteBefore && !$this->inParens; + + if ($this->match(self::$operatorString.($needWhite ? '\s' : ''), $m) && self::$precedence[$m[1]] >= $minP) { + if (!$this->inParens && isset($this->env->currentProperty) && $m[1] == "/" && empty($this->env->supressedDivision)) { + foreach (self::$supressDivisionProps as $pattern) { + if (preg_match($pattern, $this->env->currentProperty)) { + $this->env->supressedDivision = true; + break 2; + } + } + } + + + $whiteAfter = isset($this->buffer[$this->count - 1]) && + ctype_space($this->buffer[$this->count - 1]); + + if (!$this->value($rhs)) break; + + // peek for next operator to see what to do with rhs + if ($this->peek(self::$operatorString, $next) && self::$precedence[$next[1]] > self::$precedence[$m[1]]) { + $rhs = $this->expHelper($rhs, self::$precedence[$next[1]]); + } + + $lhs = array('expression', $m[1], $lhs, $rhs, $whiteBefore, $whiteAfter); + $ss = $this->seek(); + + continue; + } + + break; + } + + $this->seek($ss); + + return $lhs; + } + + // consume a list of values for a property + public function propertyValue(&$value, $keyName = null) { + $values = array(); + + if ($keyName !== null) $this->env->currentProperty = $keyName; + + $s = null; + while ($this->expressionList($v)) { + $values[] = $v; + $s = $this->seek(); + if (!$this->literal(',')) break; + } + + if ($s) $this->seek($s); + + if ($keyName !== null) unset($this->env->currentProperty); + + if (count($values) == 0) return false; + + $value = lessc::compressList($values, ', '); + return true; + } + + protected function parenValue(&$out) { + $s = $this->seek(); + + // speed shortcut + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "(") { + return false; + } + + $inParens = $this->inParens; + if ($this->literal("(") && + ($this->inParens = true) && $this->expression($exp) && + $this->literal(")") + ) { + $out = $exp; + $this->inParens = $inParens; + return true; + } else { + $this->inParens = $inParens; + $this->seek($s); + } + + return false; + } + + // a single value + protected function value(&$value) { + $s = $this->seek(); + + // speed shortcut + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "-") { + // negation + if ($this->literal("-", false) && + (($this->variable($inner) && $inner = array("variable", $inner)) || + $this->unit($inner) || + $this->parenValue($inner)) + ) { + $value = array("unary", "-", $inner); + return true; + } else { + $this->seek($s); + } + } + + if ($this->parenValue($value)) return true; + if ($this->unit($value)) return true; + if ($this->color($value)) return true; + if ($this->func($value)) return true; + if ($this->string($value)) return true; + + if ($this->keyword($word)) { + $value = array('keyword', $word); + return true; + } + + // try a variable + if ($this->variable($var)) { + $value = array('variable', $var); + return true; + } + + // unquote string (should this work on any type? + if ($this->literal("~") && $this->string($str)) { + $value = array("escape", $str); + return true; + } else { + $this->seek($s); + } + + // css hack: \0 + if ($this->literal('\\') && $this->match('([0-9]+)', $m)) { + $value = array('keyword', '\\'.$m[1]); + return true; + } else { + $this->seek($s); + } + + return false; + } + + // an import statement + protected function import(&$out) { + if (!$this->literal('@import')) return false; + + // @import "something.css" media; + // @import url("something.css") media; + // @import url(something.css) media; + + if ($this->propertyValue($value)) { + $out = array("import", $value); + return true; + } + } + + protected function mediaQueryList(&$out) { + if ($this->genericList($list, "mediaQuery", ",", false)) { + $out = $list[2]; + return true; + } + return false; + } + + protected function mediaQuery(&$out) { + $s = $this->seek(); + + $expressions = null; + $parts = array(); + + if (($this->literal("only") && ($only = true) || $this->literal("not") && ($not = true) || true) && $this->keyword($mediaType)) { + $prop = array("mediaType"); + if (isset($only)) $prop[] = "only"; + if (isset($not)) $prop[] = "not"; + $prop[] = $mediaType; + $parts[] = $prop; + } else { + $this->seek($s); + } + + + if (!empty($mediaType) && !$this->literal("and")) { + // ~ + } else { + $this->genericList($expressions, "mediaExpression", "and", false); + if (is_array($expressions)) $parts = array_merge($parts, $expressions[2]); + } + + if (count($parts) == 0) { + $this->seek($s); + return false; + } + + $out = $parts; + return true; + } + + protected function mediaExpression(&$out) { + $s = $this->seek(); + $value = null; + if ($this->literal("(") && + $this->keyword($feature) && + ($this->literal(":") && $this->expression($value) || true) && + $this->literal(")") + ) { + $out = array("mediaExp", $feature); + if ($value) $out[] = $value; + return true; + } elseif ($this->variable($variable)) { + $out = array('variable', $variable); + return true; + } + + $this->seek($s); + return false; + } + + // an unbounded string stopped by $end + protected function openString($end, &$out, $nestingOpen=null, $rejectStrs = null) { + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = false; + + $stop = array("'", '"', "@{", $end); + $stop = array_map(array("lessc", "preg_quote"), $stop); + // $stop[] = self::$commentMulti; + + if (!is_null($rejectStrs)) { + $stop = array_merge($stop, $rejectStrs); + } + + $patt = '(.*?)('.implode("|", $stop).')'; + + $nestingLevel = 0; + + $content = array(); + while ($this->match($patt, $m, false)) { + if (!empty($m[1])) { + $content[] = $m[1]; + if ($nestingOpen) { + $nestingLevel += substr_count($m[1], $nestingOpen); + } + } + + $tok = $m[2]; + + $this->count-= strlen($tok); + if ($tok == $end) { + if ($nestingLevel == 0) { + break; + } else { + $nestingLevel--; + } + } + + if (($tok == "'" || $tok == '"') && $this->string($str)) { + $content[] = $str; + continue; + } + + if ($tok == "@{" && $this->interpolation($inter)) { + $content[] = $inter; + continue; + } + + if (!empty($rejectStrs) && in_array($tok, $rejectStrs)) { + break; + } + + $content[] = $tok; + $this->count+= strlen($tok); + } + + $this->eatWhiteDefault = $oldWhite; + + if (count($content) == 0) return false; + + // trim the end + if (is_string(end($content))) { + $content[count($content) - 1] = rtrim(end($content)); + } + + $out = array("string", "", $content); + return true; + } + + protected function string(&$out) { + $s = $this->seek(); + if ($this->literal('"', false)) { + $delim = '"'; + } elseif ($this->literal("'", false)) { + $delim = "'"; + } else { + return false; + } + + $content = array(); + + // look for either ending delim , escape, or string interpolation + $patt = '([^\n]*?)(@\{|\\\\|' . + lessc::preg_quote($delim).')'; + + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = false; + + while ($this->match($patt, $m, false)) { + $content[] = $m[1]; + if ($m[2] == "@{") { + $this->count -= strlen($m[2]); + if ($this->interpolation($inter, false)) { + $content[] = $inter; + } else { + $this->count += strlen($m[2]); + $content[] = "@{"; // ignore it + } + } elseif ($m[2] == '\\') { + $content[] = $m[2]; + if ($this->literal($delim, false)) { + $content[] = $delim; + } + } else { + $this->count -= strlen($delim); + break; // delim + } + } + + $this->eatWhiteDefault = $oldWhite; + + if ($this->literal($delim)) { + $out = array("string", $delim, $content); + return true; + } + + $this->seek($s); + return false; + } + + protected function interpolation(&$out) { + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = true; + + $s = $this->seek(); + if ($this->literal("@{") && + $this->openString("}", $interp, null, array("'", '"', ";")) && + $this->literal("}", false) + ) { + $out = array("interpolate", $interp); + $this->eatWhiteDefault = $oldWhite; + if ($this->eatWhiteDefault) $this->whitespace(); + return true; + } + + $this->eatWhiteDefault = $oldWhite; + $this->seek($s); + return false; + } + + protected function unit(&$unit) { + // speed shortcut + if (isset($this->buffer[$this->count])) { + $char = $this->buffer[$this->count]; + if (!ctype_digit($char) && $char != ".") return false; + } + + if ($this->match('([0-9]+(?:\.[0-9]*)?|\.[0-9]+)([%a-zA-Z]+)?', $m)) { + $unit = array("number", $m[1], empty($m[2]) ? "" : $m[2]); + return true; + } + return false; + } + + // a # color + protected function color(&$out) { + if ($this->match('(#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3}))', $m)) { + if (strlen($m[1]) > 7) { + $out = array("string", "", array($m[1])); + } else { + $out = array("raw_color", $m[1]); + } + return true; + } + + return false; + } + + // consume an argument definition list surrounded by () + // each argument is a variable name with optional value + // or at the end a ... or a variable named followed by ... + // arguments are separated by , unless a ; is in the list, then ; is the + // delimiter. + protected function argumentDef(&$args, &$isVararg) { + $s = $this->seek(); + if (!$this->literal('(')) { + return false; + } + + $values = array(); + $delim = ","; + $method = "expressionList"; + + $isVararg = false; + while (true) { + if ($this->literal("...")) { + $isVararg = true; + break; + } + + if ($this->$method($value)) { + if ($value[0] == "variable") { + $arg = array("arg", $value[1]); + $ss = $this->seek(); + + if ($this->assign() && $this->$method($rhs)) { + $arg[] = $rhs; + } else { + $this->seek($ss); + if ($this->literal("...")) { + $arg[0] = "rest"; + $isVararg = true; + } + } + + $values[] = $arg; + if ($isVararg) { + break; + } + continue; + } else { + $values[] = array("lit", $value); + } + } + + + if (!$this->literal($delim)) { + if ($delim == "," && $this->literal(";")) { + // found new delim, convert existing args + $delim = ";"; + $method = "propertyValue"; + + // transform arg list + if (isset($values[1])) { // 2 items + $newList = array(); + foreach ($values as $i => $arg) { + switch ($arg[0]) { + case "arg": + if ($i) { + $this->throwError("Cannot mix ; and , as delimiter types"); + } + $newList[] = $arg[2]; + break; + case "lit": + $newList[] = $arg[1]; + break; + case "rest": + $this->throwError("Unexpected rest before semicolon"); + } + } + + $newList = array("list", ", ", $newList); + + switch ($values[0][0]) { + case "arg": + $newArg = array("arg", $values[0][1], $newList); + break; + case "lit": + $newArg = array("lit", $newList); + break; + } + + } elseif ($values) { // 1 item + $newArg = $values[0]; + } + + if ($newArg) { + $values = array($newArg); + } + } else { + break; + } + } + } + + if (!$this->literal(')')) { + $this->seek($s); + return false; + } + + $args = $values; + + return true; + } + + // consume a list of tags + // this accepts a hanging delimiter + protected function tags(&$tags, $simple = false, $delim = ',') { + $tags = array(); + while ($this->tag($tt, $simple)) { + $tags[] = $tt; + if (!$this->literal($delim)) break; + } + if (count($tags) == 0) return false; + + return true; + } + + // list of tags of specifying mixin path + // optionally separated by > (lazy, accepts extra >) + protected function mixinTags(&$tags) { + $tags = array(); + while ($this->tag($tt, true)) { + $tags[] = $tt; + $this->literal(">"); + } + + if (!$tags) { + return false; + } + + return true; + } + + // a bracketed value (contained within in a tag definition) + protected function tagBracket(&$parts, &$hasExpression) { + // speed shortcut + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "[") { + return false; + } + + $s = $this->seek(); + + $hasInterpolation = false; + + if ($this->literal("[", false)) { + $attrParts = array("["); + // keyword, string, operator + while (true) { + if ($this->literal("]", false)) { + $this->count--; + break; // get out early + } + + if ($this->match('\s+', $m)) { + $attrParts[] = " "; + continue; + } + if ($this->string($str)) { + // escape parent selector, (yuck) + foreach ($str[2] as &$chunk) { + $chunk = str_replace($this->lessc->parentSelector, "$&$", $chunk); + } + + $attrParts[] = $str; + $hasInterpolation = true; + continue; + } + + if ($this->keyword($word)) { + $attrParts[] = $word; + continue; + } + + if ($this->interpolation($inter, false)) { + $attrParts[] = $inter; + $hasInterpolation = true; + continue; + } + + // operator, handles attr namespace too + if ($this->match('[|-~\$\*\^=]+', $m)) { + $attrParts[] = $m[0]; + continue; + } + + break; + } + + if ($this->literal("]", false)) { + $attrParts[] = "]"; + foreach ($attrParts as $part) { + $parts[] = $part; + } + $hasExpression = $hasExpression || $hasInterpolation; + return true; + } + $this->seek($s); + } + + $this->seek($s); + return false; + } + + // a space separated list of selectors + protected function tag(&$tag, $simple = false) { + if ($simple) { + $chars = '^@,:;{}\][>\(\) "\''; + } else { + $chars = '^@,;{}["\''; + } + $s = $this->seek(); + + $hasExpression = false; + $parts = array(); + while ($this->tagBracket($parts, $hasExpression)); + + $oldWhite = $this->eatWhiteDefault; + $this->eatWhiteDefault = false; + + while (true) { + if ($this->match('(['.$chars.'0-9]['.$chars.']*)', $m)) { + $parts[] = $m[1]; + if ($simple) break; + + while ($this->tagBracket($parts, $hasExpression)); + continue; + } + + if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "@") { + if ($this->interpolation($interp)) { + $hasExpression = true; + $interp[2] = true; // don't unescape + $parts[] = $interp; + continue; + } + + if ($this->literal("@")) { + $parts[] = "@"; + continue; + } + } + + if ($this->unit($unit)) { // for keyframes + $parts[] = $unit[1]; + $parts[] = $unit[2]; + continue; + } + + break; + } + + $this->eatWhiteDefault = $oldWhite; + if (!$parts) { + $this->seek($s); + return false; + } + + if ($hasExpression) { + $tag = array("exp", array("string", "", $parts)); + } else { + $tag = trim(implode($parts)); + } + + $this->whitespace(); + return true; + } + + // a css function + protected function func(&$func) { + $s = $this->seek(); + + if ($this->match('(%|[\w\-_][\w\-_:\.]+|[\w_])', $m) && $this->literal('(')) { + $fname = $m[1]; + + $sPreArgs = $this->seek(); + + $args = array(); + while (true) { + $ss = $this->seek(); + // this ugly nonsense is for ie filter properties + if ($this->keyword($name) && $this->literal('=') && $this->expressionList($value)) { + $args[] = array("string", "", array($name, "=", $value)); + } else { + $this->seek($ss); + if ($this->expressionList($value)) { + $args[] = $value; + } + } + + if (!$this->literal(',')) break; + } + $args = array('list', ',', $args); + + if ($this->literal(')')) { + $func = array('function', $fname, $args); + return true; + } elseif ($fname == 'url') { + // couldn't parse and in url? treat as string + $this->seek($sPreArgs); + if ($this->openString(")", $string) && $this->literal(")")) { + $func = array('function', $fname, $string); + return true; + } + } + } + + $this->seek($s); + return false; + } + + // consume a less variable + protected function variable(&$name) { + $s = $this->seek(); + if ($this->literal($this->lessc->vPrefix, false) && + ($this->variable($sub) || $this->keyword($name)) + ) { + if (!empty($sub)) { + $name = array('variable', $sub); + } else { + $name = $this->lessc->vPrefix.$name; + } + return true; + } + + $name = null; + $this->seek($s); + return false; + } + + /** + * Consume an assignment operator + * Can optionally take a name that will be set to the current property name + */ + protected function assign($name = null) { + if ($name) $this->currentProperty = $name; + return $this->literal(':') || $this->literal('='); + } + + // consume a keyword + protected function keyword(&$word) { + if ($this->match('([\w_\-\*!"][\w\-_"]*)', $m)) { + $word = $m[1]; + return true; + } + return false; + } + + // consume an end of statement delimiter + protected function end() { + if ($this->literal(';', false)) { + return true; + } elseif ($this->count == strlen($this->buffer) || $this->buffer[$this->count] == '}') { + // if there is end of file or a closing block next then we don't need a ; + return true; + } + return false; + } + + protected function guards(&$guards) { + $s = $this->seek(); + + if (!$this->literal("when")) { + $this->seek($s); + return false; + } + + $guards = array(); + + while ($this->guardGroup($g)) { + $guards[] = $g; + if (!$this->literal(",")) break; + } + + if (count($guards) == 0) { + $guards = null; + $this->seek($s); + return false; + } + + return true; + } + + // a bunch of guards that are and'd together + // TODO rename to guardGroup + protected function guardGroup(&$guardGroup) { + $s = $this->seek(); + $guardGroup = array(); + while ($this->guard($guard)) { + $guardGroup[] = $guard; + if (!$this->literal("and")) break; + } + + if (count($guardGroup) == 0) { + $guardGroup = null; + $this->seek($s); + return false; + } + + return true; + } + + protected function guard(&$guard) { + $s = $this->seek(); + $negate = $this->literal("not"); + + if ($this->literal("(") && $this->expression($exp) && $this->literal(")")) { + $guard = $exp; + if ($negate) $guard = array("negate", $guard); + return true; + } + + $this->seek($s); + return false; + } + + /* raw parsing functions */ + + protected function literal($what, $eatWhitespace = null) { + if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault; + + // shortcut on single letter + if (!isset($what[1]) && isset($this->buffer[$this->count])) { + if ($this->buffer[$this->count] == $what) { + if (!$eatWhitespace) { + $this->count++; + return true; + } + // goes below... + } else { + return false; + } + } + + if (!isset(self::$literalCache[$what])) { + self::$literalCache[$what] = lessc::preg_quote($what); + } + + return $this->match(self::$literalCache[$what], $m, $eatWhitespace); + } + + protected function genericList(&$out, $parseItem, $delim="", $flatten=true) { + $s = $this->seek(); + $items = array(); + while ($this->$parseItem($value)) { + $items[] = $value; + if ($delim) { + if (!$this->literal($delim)) break; + } + } + + if (count($items) == 0) { + $this->seek($s); + return false; + } + + if ($flatten && count($items) == 1) { + $out = $items[0]; + } else { + $out = array("list", $delim, $items); + } + + return true; + } + + + // advance counter to next occurrence of $what + // $until - don't include $what in advance + // $allowNewline, if string, will be used as valid char set + protected function to($what, &$out, $until = false, $allowNewline = false) { + if (is_string($allowNewline)) { + $validChars = $allowNewline; + } else { + $validChars = $allowNewline ? "." : "[^\n]"; + } + if (!$this->match('('.$validChars.'*?)'.lessc::preg_quote($what), $m, !$until)) return false; + if ($until) $this->count -= strlen($what); // give back $what + $out = $m[1]; + return true; + } + + // try to match something on head of buffer + protected function match($regex, &$out, $eatWhitespace = null) { + if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault; + + $r = '/'.$regex.($eatWhitespace && !$this->writeComments ? '\s*' : '').'/Ais'; + if (preg_match($r, $this->buffer, $out, null, $this->count)) { + $this->count += strlen($out[0]); + if ($eatWhitespace && $this->writeComments) $this->whitespace(); + return true; + } + return false; + } + + // match some whitespace + protected function whitespace() { + if ($this->writeComments) { + $gotWhite = false; + while (preg_match(self::$whitePattern, $this->buffer, $m, null, $this->count)) { + if (isset($m[1]) && empty($this->seenComments[$this->count])) { + $this->append(array("comment", $m[1])); + $this->seenComments[$this->count] = true; + } + $this->count += strlen($m[0]); + $gotWhite = true; + } + return $gotWhite; + } else { + $this->match("", $m); + return strlen($m[0]) > 0; + } + } + + // match something without consuming it + protected function peek($regex, &$out = null, $from=null) { + if (is_null($from)) $from = $this->count; + $r = '/'.$regex.'/Ais'; + $result = preg_match($r, $this->buffer, $out, null, $from); + + return $result; + } + + // seek to a spot in the buffer or return where we are on no argument + protected function seek($where = null) { + if ($where === null) return $this->count; + else $this->count = $where; + return true; + } + + /* misc functions */ + + public function throwError($msg = "parse error", $count = null) { + $count = is_null($count) ? $this->count : $count; + + $line = $this->line + + substr_count(substr($this->buffer, 0, $count), "\n"); + + if (!empty($this->sourceName)) { + $loc = "$this->sourceName on line $line"; + } else { + $loc = "line: $line"; + } + + // TODO this depends on $this->count + if ($this->peek("(.*?)(\n|$)", $m, $count)) { + throw new exception("$msg: failed at `$m[1]` $loc"); + } else { + throw new exception("$msg: $loc"); + } + } + + protected function pushBlock($selectors=null, $type=null) { + $b = new stdclass; + $b->parent = $this->env; + + $b->type = $type; + $b->id = self::$nextBlockId++; + + $b->isVararg = false; // TODO: kill me from here + $b->tags = $selectors; + + $b->props = array(); + $b->children = array(); + + $this->env = $b; + return $b; + } + + // push a block that doesn't multiply tags + protected function pushSpecialBlock($type) { + return $this->pushBlock(null, $type); + } + + // append a property to the current block + protected function append($prop, $pos = null) { + if ($pos !== null) $prop[-1] = $pos; + $this->env->props[] = $prop; + } + + // pop something off the stack + protected function pop() { + $old = $this->env; + $this->env = $this->env->parent; + return $old; + } + + // remove comments from $text + // todo: make it work for all functions, not just url + protected function removeComments($text) { + $look = array( + 'url(', '//', '/*', '"', "'" + ); + + $out = ''; + $min = null; + while (true) { + // find the next item + foreach ($look as $token) { + $pos = strpos($text, $token); + if ($pos !== false) { + if (!isset($min) || $pos < $min[1]) $min = array($token, $pos); + } + } + + if (is_null($min)) break; + + $count = $min[1]; + $skip = 0; + $newlines = 0; + switch ($min[0]) { + case 'url(': + if (preg_match('/url\(.*?\)/', $text, $m, 0, $count)) + $count += strlen($m[0]) - strlen($min[0]); + break; + case '"': + case "'": + if (preg_match('/'.$min[0].'.*?(?indentLevel = 0; + } + + public function indentStr($n = 0) { + return str_repeat($this->indentChar, max($this->indentLevel + $n, 0)); + } + + public function property($name, $value) { + return $name . $this->assignSeparator . $value . ";"; + } + + protected function isEmpty($block) { + if (empty($block->lines)) { + foreach ($block->children as $child) { + if (!$this->isEmpty($child)) return false; + } + + return true; + } + return false; + } + + public function block($block) { + if ($this->isEmpty($block)) return; + + $inner = $pre = $this->indentStr(); + + $isSingle = !$this->disableSingle && + is_null($block->type) && count($block->lines) == 1; + + if (!empty($block->selectors)) { + $this->indentLevel++; + + if ($this->breakSelectors) { + $selectorSeparator = $this->selectorSeparator . $this->break . $pre; + } else { + $selectorSeparator = $this->selectorSeparator; + } + + echo $pre . + implode($selectorSeparator, $block->selectors); + if ($isSingle) { + echo $this->openSingle; + $inner = ""; + } else { + echo $this->open . $this->break; + $inner = $this->indentStr(); + } + + } + + if (!empty($block->lines)) { + $glue = $this->break.$inner; + echo $inner . implode($glue, $block->lines); + if (!$isSingle && !empty($block->children)) { + echo $this->break; + } + } + + foreach ($block->children as $child) { + $this->block($child); + } + + if (!empty($block->selectors)) { + if (!$isSingle && empty($block->children)) echo $this->break; + + if ($isSingle) { + echo $this->closeSingle . $this->break; + } else { + echo $pre . $this->close . $this->break; + } + + $this->indentLevel--; + } + } +} + +/** + * Class for compressed result + */ +class lessc_formatter_compressed extends lessc_formatter_classic { + public $disableSingle = true; + public $open = "{"; + public $selectorSeparator = ","; + public $assignSeparator = ":"; + public $break = ""; + public $compressColors = true; + + public function indentStr($n = 0) { + return ""; + } +} + +/** + * Class for lessjs + */ +class lessc_formatter_lessjs extends lessc_formatter_classic { + public $disableSingle = true; + public $breakSelectors = true; + public $assignSeparator = ": "; + public $selectorSeparator = ","; +} \ No newline at end of file From 1d2c2f855128bf54444646c1600b411142c25d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Wed, 14 Aug 2019 23:00:40 +0200 Subject: [PATCH 0610/1148] NEW Add payments GET and POST REST API endpoints for supplierinvoices. --- htdocs/core/lib/website.lib.php | 4 +- .../class/api_supplier_invoices.class.php | 756 +++++++++++------- 2 files changed, 453 insertions(+), 307 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4d89210cd44..579c5575988 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -33,7 +33,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html') { $nbrep = 0; @@ -187,7 +187,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php index 416f7e11e94..56eeb2c17b5 100644 --- a/htdocs/fourn/class/api_supplier_invoices.class.php +++ b/htdocs/fourn/class/api_supplier_invoices.class.php @@ -19,357 +19,503 @@ use Luracast\Restler\RestException; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php'; +require_once DOL_DOCUMENT_ROOT . '/fourn/class/paiementfourn.class.php'; /** * API class for supplier invoices * + * @property DoliDB db * @access protected * @class DolibarrApiAccess {@requires user,external} */ class SupplierInvoices extends DolibarrApi { - /** - * - * @var array $FIELDS Mandatory fields, checked when create and update object - */ - static $FIELDS = array( - 'socid', - ); + /** + * + * @var array $FIELDS Mandatory fields, checked when create and update object + */ + static $FIELDS = array( + 'socid', + ); - /** - * @var FactureFournisseur $invoice {@type FactureFournisseur} - */ - public $invoice; + /** + * @var FactureFournisseur $invoice {@type FactureFournisseur} + */ + public $invoice; - /** - * Constructor - */ - public function __construct() - { - global $db, $conf; - $this->db = $db; - $this->invoice = new FactureFournisseur($this->db); - } + /** + * Constructor + */ + public function __construct() + { + global $db; + $this->db = $db; + $this->invoice = new FactureFournisseur($this->db); + } - /** - * Get properties of a supplier invoice object - * - * Return an array with supplier invoice information - * - * @param int $id ID of supplier invoice - * @return array|mixed data without useless information - * - * @throws RestException - */ - public function get($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { - throw new RestException(401); - } + /** + * Get properties of a supplier invoice object + * + * Return an array with supplier invoice information + * + * @param int $id ID of supplier invoice + * @return array|mixed data without useless information + * + * @throws RestException + */ + public function get($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $this->invoice->fetchObjectLinked(); - return $this->_cleanObjectDatas($this->invoice); - } + $this->invoice->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->invoice); + } - /** - * List invoices - * - * Get a list of supplier invoices - * - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @param int $limit Limit for list - * @param int $page Page number - * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} - * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled - * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" - * @return array Array of invoice objects - * - * @throws RestException - */ - public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') - { - global $db, $conf; + /** + * List invoices + * + * Get a list of supplier invoices + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} + * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" + * @return array Array of invoice objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') + { + global $db; - $obj_ret = array(); + $obj_ret = array(); - // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + // case of external user, $thirdparty_ids param is ignored and replaced by user's socid + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; - // If the internal user must only see his customers, force searching by him - $search_sale = 0; - if (! DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) $search_sale = DolibarrApiAccess::$user->id; + // If the internal user must only see his customers, force searching by him + $search_sale = 0; + if (! DolibarrApiAccess::$user->rights->societe->client->voir) $search_sale = DolibarrApiAccess::$user->id; - $sql = "SELECT t.rowid"; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) - $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; + $sql = "SELECT t.rowid"; + // We need these fields in order to filter by sale (including the case where the user can only see his prospects) + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale + // We need this table joined to the select in order to filter by sale + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; - if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; - if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; - if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale + $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; + if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; + if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale - // Filter by status - if ($status == 'draft') { - $sql.= " AND t.fk_statut IN (0)"; - } - if ($status == 'unpaid') { - $sql.= " AND t.fk_statut IN (1)"; - } - if ($status == 'paid') { - $sql.= " AND t.fk_statut IN (2)"; - } - if ($status == 'cancelled') { - $sql.= " AND t.fk_statut IN (3)"; - } - // Insert sale filter - if ($search_sale > 0) { - $sql .= " AND sc.fk_user = ".$search_sale; - } - // Add sql filters - if ($sqlfilters) - { - if (! DolibarrApi::_checkFilters($sqlfilters)) - { - throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); - } - $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; - $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; - } + // Filter by status + if ($status == 'draft') { + $sql.= " AND t.fk_statut IN (0)"; + } + if ($status == 'unpaid') { + $sql.= " AND t.fk_statut IN (1)"; + } + if ($status == 'paid') { + $sql.= " AND t.fk_statut IN (2)"; + } + if ($status == 'cancelled') { + $sql.= " AND t.fk_statut IN (3)"; + } + // Insert sale filter + if ($search_sale > 0) { + $sql .= " AND sc.fk_user = ".$search_sale; + } + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } - $sql.= $db->order($sortfield, $sortorder); - if ($limit) { - if ($page < 0) - { - $page = 0; - } - $offset = $limit * $page; + $sql.= $db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) + { + $page = 0; + } + $offset = $limit * $page; - $sql.= $db->plimit($limit + 1, $offset); - } + $sql.= $db->plimit($limit + 1, $offset); + } - $result = $db->query($sql); - if ($result) { - $i = 0; - $num = $db->num_rows($result); - $min = min($num, ($limit <= 0 ? $num : $limit)); - while ($i < $min) - { - $obj = $db->fetch_object($result); - $invoice_static = new FactureFournisseur($db); - if($invoice_static->fetch($obj->rowid)) { - $obj_ret[] = $this->_cleanObjectDatas($invoice_static); - } - $i++; - } - } - else { - throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); - } - if ( ! count($obj_ret)) { - throw new RestException(404, 'No supplier invoice found'); - } - return $obj_ret; - } + $result = $db->query($sql); + if ($result) { + $i = 0; + $num = $db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) + { + $obj = $db->fetch_object($result); + $invoice_static = new FactureFournisseur($db); + if($invoice_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($invoice_static); + } + $i++; + } + } + else { + throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); + } + if ( ! count($obj_ret)) { + throw new RestException(404, 'No supplier invoice found'); + } + return $obj_ret; + } - /** - * Create supplier invoice object - * - * @param array $request_data Request datas - * @return int ID of supplier invoice - */ - public function post($request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401, "Insuffisant rights"); - } - // Check mandatory fields - $result = $this->_validate($request_data); + /** + * Create supplier invoice object + * + * @param array $request_data Request datas + * + * @return int ID of supplier invoice + * + * @throws 401 + * @throws 500 + */ + public function post($request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401, "Insuffisant rights"); + } + // Check mandatory fields + $result = $this->_validate($request_data); - foreach($request_data as $field => $value) { - $this->invoice->$field = $value; - } - if(! array_keys($request_data, 'date')) { - $this->invoice->date = dol_now(); - } - /* We keep lines as an array - if (isset($request_data["lines"])) { - $lines = array(); - foreach ($request_data["lines"] as $line) { - array_push($lines, (object) $line); - } - $this->invoice->lines = $lines; - }*/ + foreach($request_data as $field => $value) { + $this->invoice->$field = $value; + } + if(! array_keys($request_data, 'date')) { + $this->invoice->date = dol_now(); + } - if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); - } - return $this->invoice->id; - } + if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); + } + return $this->invoice->id; + } - /** - * Update supplier invoice - * - * @param int $id Id of supplier invoice to update - * @param array $request_data Datas - * @return int - */ - public function put($id, $request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } + /** + * Update supplier invoice + * + * @param int $id Id of supplier invoice to update + * @param array $request_data Datas + * + * @return int + * + * @throws 401 + * @throws 404 + */ + public function put($id, $request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - foreach($request_data as $field => $value) { - if ($field == 'id') continue; - $this->invoice->$field = $value; - } + foreach($request_data as $field => $value) { + if ($field == 'id') continue; + $this->invoice->$field = $value; + } - if($this->invoice->update($id, DolibarrApiAccess::$user)) - return $this->get($id); + if($this->invoice->update($id, DolibarrApiAccess::$user)) + return $this->get($id); - return false; - } + return false; + } - /** - * Delete supplier invoice - * - * @param int $id Supplier invoice ID - * @return type - */ - public function delete($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + /** + * Delete supplier invoice + * + * @param int $id Supplier invoice ID + * + * @return array + * + * @throws 401 + * @throws 404 + * @throws 500 + */ + public function delete($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) - { - throw new RestException(500); - } + if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) + { + throw new RestException(500); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Supplier invoice deleted' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Supplier invoice deleted' + ) + ); + } + + /** + * Validate an order + * + * @param int $id Order ID + * @param int $idwarehouse Warehouse ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/validate + * + * @return array + * + * @throws 304 + * @throws 401 + * @throws 404 + * @throws 405 + * @throws 500 + */ + public function validate($id, $idwarehouse = 0, $notrigger = 0) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } + + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already validated'); + } + if ($result < 0) { + throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); + } + + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' + ) + ); + } + + /** + * Get list of payments of a given supplier invoice + * + * @param int $id Id of SupplierInvoice + * + * @url GET {id}/payments + * + * @return array + * @throws 400 + * @throws 401 + * @throws 404 + * @throws 405 + */ + public function getPayments($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } + + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } + + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } + + $result = $this->invoice->getListOfPayments(); + if( $result < 0) { + throw new RestException(405, $this->invoice->error); + } + + return $result; + } - /** - * Validate an order - * - * @param int $id Order ID - * @param int $idwarehouse Warehouse ID - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * - * @url POST {id}/validate - * - * @return array - * FIXME An error 403 is returned if the request has an empty body. - * Error message: "Forbidden: Content type `text/plain` is not supported." - * Workaround: send this in the body - * { - * "idwarehouse": 0, - * "notrigger": 0 - * } - */ - public function validate($id, $idwarehouse = 0, $notrigger = 0) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + /** + * Add payment line to a specific supplier invoice with the remain to pay as amount. + * + * @param int $id Id of invoice + * @param string $datepaye {@from body} Payment date {@type timestamp} + * @param int $paiementid {@from body} Payment mode Id {@min 1} + * @param string $closepaidinvoices {@from body} Close paid invoices {@choice yes,no} + * @param int $accountid {@from body} Account Id {@min 1} + * @param string $num_paiement {@from body} Payment number (optional) + * @param string $comment {@from body} Note (optional) + * @param string $chqemetteur {@from body} Payment issuer (mandatory if paiementcode = 'CHQ') + * @param string $chqbank {@from body} Issuer bank name (optional) + * + * @url POST {id}/payments + * + * @return int Payment ID + * @throws 400 + * @throws 401 + * @throws 404 + */ + public function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement = '', $comment = '', $chqemetteur = '', $chqbank = '') + { + global $conf; - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(403); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } - $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); - if ($result == 0) { - throw new RestException(304, 'Error nothing done. May be object is already validated'); - } - if ($result < 0) { - throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' - ) - ); - } + if (! empty($conf->banque->enabled)) { + if(empty($accountid)) { + throw new RestException(400, 'Account ID is mandatory'); + } + } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore - /** - * Clean sensible object datas - * - * @param Object $object Object to clean - * @return array Array of cleaned object properties - */ - protected function _cleanObjectDatas($object) - { - // phpcs:enable - $object = parent::_cleanObjectDatas($object); + if(empty($paiementid)) { + throw new RestException(400, 'Paiement ID or Paiement Code is mandatory'); + } - unset($object->rowid); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); - return $object; - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - /** - * Validate fields before create or update object - * - * @param array $data Datas to validate - * @return array - * - * @throws RestException - */ - private function _validate($data) - { - $invoice = array(); - foreach (SupplierInvoices::$FIELDS as $field) { - if (!isset($data[$field])) - throw new RestException(400, "$field field missing"); - $invoice[$field] = $data[$field]; - } - return $invoice; - } + // Calculate amount to pay + $totalpaye = $this->invoice->getSommePaiement(); + $totaldeposits = $this->invoice->getSumDepositsUsed(); + $resteapayer = price2num($this->invoice->total_ttc - $totalpaye - $totaldeposits, 'MT'); + + $this->db->begin(); + + $amounts = array(); + $multicurrency_amounts = array(); + + $resteapayer = price2num($resteapayer, 'MT'); + $amounts[$id] = $resteapayer; + + // Multicurrency + $newvalue = price2num($this->invoice->multicurrency_total_ttc, 'MT'); + $multicurrency_amounts[$id] = $newvalue; + + // Creation of payment line + $paiement = new PaiementFourn($this->db); + $paiement->datepaye = $datepaye; + $paiement->amounts = $amounts; // Array with all payments dispatching with invoice id + $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching + $paiement->paiementid = $paiementid; + $paiement->paiementcode = dol_getIdFromCode($this->db, $paiementid, 'c_paiement', 'id', 'code', 1); + $paiement->num_payment = $num_paiement; + $paiement->note_public = $comment; + + $paiement_id = $paiement->create(DolibarrApiAccess::$user, ($closepaidinvoices=='yes'?1:0)); // This include closing invoices + if ($paiement_id < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Payment error : '.$paiement->error); + } + + if (! empty($conf->banque->enabled)) { + $result=$paiement->addPaymentToBank(DolibarrApiAccess::$user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, $chqemetteur, $chqbank); + if ($result < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Add payment to bank error : '.$paiement->error); + } + } + + $this->db->commit(); + + return $paiement_id; + } + + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param Object $object Object to clean + * @return array Array of cleaned object properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); + + unset($object->rowid); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); + + return $object; + } + + /** + * Validate fields before create or update object + * + * @param array $data Datas to validate + * @return array + * + * @throws RestException + */ + private function _validate($data) + { + $invoice = array(); + foreach (SupplierInvoices::$FIELDS as $field) { + if (!isset($data[$field])) + throw new RestException(400, "$field field missing"); + $invoice[$field] = $data[$field]; + } + return $invoice; + } } From 003642fe10bea2e870bd45cef6cd3e08a7385562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Wed, 14 Aug 2019 23:07:18 +0200 Subject: [PATCH 0611/1148] Preserve spaces instead of tabs for indentation. --- .../class/api_supplier_invoices.class.php | 854 +++++++++--------- 1 file changed, 427 insertions(+), 427 deletions(-) diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php index 56eeb2c17b5..a4cdadc8265 100644 --- a/htdocs/fourn/class/api_supplier_invoices.class.php +++ b/htdocs/fourn/class/api_supplier_invoices.class.php @@ -30,492 +30,492 @@ require_once DOL_DOCUMENT_ROOT . '/fourn/class/paiementfourn.class.php'; */ class SupplierInvoices extends DolibarrApi { - /** - * - * @var array $FIELDS Mandatory fields, checked when create and update object - */ - static $FIELDS = array( - 'socid', - ); + /** + * + * @var array $FIELDS Mandatory fields, checked when create and update object + */ + static $FIELDS = array( + 'socid', + ); - /** - * @var FactureFournisseur $invoice {@type FactureFournisseur} - */ - public $invoice; + /** + * @var FactureFournisseur $invoice {@type FactureFournisseur} + */ + public $invoice; - /** - * Constructor - */ - public function __construct() - { - global $db; - $this->db = $db; - $this->invoice = new FactureFournisseur($this->db); - } + /** + * Constructor + */ + public function __construct() + { + global $db; + $this->db = $db; + $this->invoice = new FactureFournisseur($this->db); + } - /** - * Get properties of a supplier invoice object - * - * Return an array with supplier invoice information - * - * @param int $id ID of supplier invoice - * @return array|mixed data without useless information - * - * @throws RestException - */ - public function get($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { - throw new RestException(401); - } + /** + * Get properties of a supplier invoice object + * + * Return an array with supplier invoice information + * + * @param int $id ID of supplier invoice + * @return array|mixed data without useless information + * + * @throws RestException + */ + public function get($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $this->invoice->fetchObjectLinked(); - return $this->_cleanObjectDatas($this->invoice); - } + $this->invoice->fetchObjectLinked(); + return $this->_cleanObjectDatas($this->invoice); + } - /** - * List invoices - * - * Get a list of supplier invoices - * - * @param string $sortfield Sort field - * @param string $sortorder Sort order - * @param int $limit Limit for list - * @param int $page Page number - * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} - * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled - * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" - * @return array Array of invoice objects - * - * @throws RestException - */ - public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') - { - global $db; + /** + * List invoices + * + * Get a list of supplier invoices + * + * @param string $sortfield Sort field + * @param string $sortorder Sort order + * @param int $limit Limit for list + * @param int $page Page number + * @param string $thirdparty_ids Thirdparty ids to filter invoices of. {@example '1' or '1,2,3'} {@pattern /^[0-9,]*$/i} + * @param string $status Filter by invoice status : draft | unpaid | paid | cancelled + * @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')" + * @return array Array of invoice objects + * + * @throws RestException + */ + public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $status = '', $sqlfilters = '') + { + global $db; - $obj_ret = array(); + $obj_ret = array(); - // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; + // case of external user, $thirdparty_ids param is ignored and replaced by user's socid + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; - // If the internal user must only see his customers, force searching by him - $search_sale = 0; - if (! DolibarrApiAccess::$user->rights->societe->client->voir) $search_sale = DolibarrApiAccess::$user->id; + // If the internal user must only see his customers, force searching by him + $search_sale = 0; + if (! DolibarrApiAccess::$user->rights->societe->client->voir) $search_sale = DolibarrApiAccess::$user->id; - $sql = "SELECT t.rowid"; - // We need these fields in order to filter by sale (including the case where the user can only see his prospects) - if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; - $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; + $sql = "SELECT t.rowid"; + // We need these fields in order to filter by sale (including the case where the user can only see his prospects) + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; + $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as t"; - // We need this table joined to the select in order to filter by sale - if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + // We need this table joined to the select in order to filter by sale + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; - if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; - if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; - if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale + $sql.= ' WHERE t.entity IN ('.getEntity('supplier_invoice').')'; + if (!DolibarrApiAccess::$user->rights->societe->client->voir || $search_sale > 0) $sql.= " AND t.fk_soc = sc.fk_soc"; + if ($socids) $sql.= " AND t.fk_soc IN (".$socids.")"; + if ($search_sale > 0) $sql.= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale - // Filter by status - if ($status == 'draft') { - $sql.= " AND t.fk_statut IN (0)"; - } - if ($status == 'unpaid') { - $sql.= " AND t.fk_statut IN (1)"; - } - if ($status == 'paid') { - $sql.= " AND t.fk_statut IN (2)"; - } - if ($status == 'cancelled') { - $sql.= " AND t.fk_statut IN (3)"; - } - // Insert sale filter - if ($search_sale > 0) { - $sql .= " AND sc.fk_user = ".$search_sale; - } - // Add sql filters - if ($sqlfilters) - { - if (! DolibarrApi::_checkFilters($sqlfilters)) - { - throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); - } - $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; - $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; - } + // Filter by status + if ($status == 'draft') { + $sql.= " AND t.fk_statut IN (0)"; + } + if ($status == 'unpaid') { + $sql.= " AND t.fk_statut IN (1)"; + } + if ($status == 'paid') { + $sql.= " AND t.fk_statut IN (2)"; + } + if ($status == 'cancelled') { + $sql.= " AND t.fk_statut IN (3)"; + } + // Insert sale filter + if ($search_sale > 0) { + $sql .= " AND sc.fk_user = ".$search_sale; + } + // Add sql filters + if ($sqlfilters) + { + if (! DolibarrApi::_checkFilters($sqlfilters)) + { + throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters); + } + $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)'; + $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")"; + } - $sql.= $db->order($sortfield, $sortorder); - if ($limit) { - if ($page < 0) - { - $page = 0; - } - $offset = $limit * $page; + $sql.= $db->order($sortfield, $sortorder); + if ($limit) { + if ($page < 0) + { + $page = 0; + } + $offset = $limit * $page; - $sql.= $db->plimit($limit + 1, $offset); - } + $sql.= $db->plimit($limit + 1, $offset); + } - $result = $db->query($sql); - if ($result) { - $i = 0; - $num = $db->num_rows($result); - $min = min($num, ($limit <= 0 ? $num : $limit)); - while ($i < $min) - { - $obj = $db->fetch_object($result); - $invoice_static = new FactureFournisseur($db); - if($invoice_static->fetch($obj->rowid)) { - $obj_ret[] = $this->_cleanObjectDatas($invoice_static); - } - $i++; - } - } - else { - throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); - } - if ( ! count($obj_ret)) { - throw new RestException(404, 'No supplier invoice found'); - } - return $obj_ret; - } + $result = $db->query($sql); + if ($result) { + $i = 0; + $num = $db->num_rows($result); + $min = min($num, ($limit <= 0 ? $num : $limit)); + while ($i < $min) + { + $obj = $db->fetch_object($result); + $invoice_static = new FactureFournisseur($db); + if($invoice_static->fetch($obj->rowid)) { + $obj_ret[] = $this->_cleanObjectDatas($invoice_static); + } + $i++; + } + } + else { + throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror()); + } + if ( ! count($obj_ret)) { + throw new RestException(404, 'No supplier invoice found'); + } + return $obj_ret; + } - /** - * Create supplier invoice object - * - * @param array $request_data Request datas - * - * @return int ID of supplier invoice - * - * @throws 401 - * @throws 500 - */ - public function post($request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401, "Insuffisant rights"); - } - // Check mandatory fields - $result = $this->_validate($request_data); + /** + * Create supplier invoice object + * + * @param array $request_data Request datas + * + * @return int ID of supplier invoice + * + * @throws 401 + * @throws 500 + */ + public function post($request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401, "Insuffisant rights"); + } + // Check mandatory fields + $result = $this->_validate($request_data); - foreach($request_data as $field => $value) { - $this->invoice->$field = $value; - } - if(! array_keys($request_data, 'date')) { - $this->invoice->date = dol_now(); - } + foreach($request_data as $field => $value) { + $this->invoice->$field = $value; + } + if(! array_keys($request_data, 'date')) { + $this->invoice->date = dol_now(); + } - if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { - throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); - } - return $this->invoice->id; - } + if ($this->invoice->create(DolibarrApiAccess::$user) < 0) { + throw new RestException(500, "Error creating order", array_merge(array($this->invoice->error), $this->invoice->errors)); + } + return $this->invoice->id; + } - /** - * Update supplier invoice - * - * @param int $id Id of supplier invoice to update - * @param array $request_data Datas - * - * @return int - * - * @throws 401 - * @throws 404 - */ - public function put($id, $request_data = null) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } + /** + * Update supplier invoice + * + * @param int $id Id of supplier invoice to update + * @param array $request_data Datas + * + * @return int + * + * @throws 401 + * @throws 404 + */ + public function put($id, $request_data = null) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - foreach($request_data as $field => $value) { - if ($field == 'id') continue; - $this->invoice->$field = $value; - } + foreach($request_data as $field => $value) { + if ($field == 'id') continue; + $this->invoice->$field = $value; + } - if($this->invoice->update($id, DolibarrApiAccess::$user)) - return $this->get($id); + if($this->invoice->update($id, DolibarrApiAccess::$user)) + return $this->get($id); - return false; - } + return false; + } - /** - * Delete supplier invoice - * - * @param int $id Supplier invoice ID - * - * @return array - * - * @throws 401 - * @throws 404 - * @throws 500 - */ - public function delete($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Supplier invoice not found'); - } + /** + * Delete supplier invoice + * + * @param int $id Supplier invoice ID + * + * @return array + * + * @throws 401 + * @throws 404 + * @throws 500 + */ + public function delete($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->supprimer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Supplier invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) - { - throw new RestException(500); - } + if( $this->invoice->delete(DolibarrApiAccess::$user) < 0) + { + throw new RestException(500); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Supplier invoice deleted' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Supplier invoice deleted' + ) + ); + } - /** - * Validate an order - * - * @param int $id Order ID - * @param int $idwarehouse Warehouse ID - * @param int $notrigger 1=Does not execute triggers, 0= execute triggers - * - * @url POST {id}/validate - * - * @return array - * - * @throws 304 - * @throws 401 - * @throws 404 - * @throws 405 - * @throws 500 - */ - public function validate($id, $idwarehouse = 0, $notrigger = 0) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(401); - } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + /** + * Validate an order + * + * @param int $id Order ID + * @param int $idwarehouse Warehouse ID + * @param int $notrigger 1=Does not execute triggers, 0= execute triggers + * + * @url POST {id}/validate + * + * @return array + * + * @throws 304 + * @throws 401 + * @throws 404 + * @throws 405 + * @throws 500 + */ + public function validate($id, $idwarehouse = 0, $notrigger = 0) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(401); + } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); - if ($result == 0) { - throw new RestException(304, 'Error nothing done. May be object is already validated'); - } - if ($result < 0) { - throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); - } + $result = $this->invoice->validate(DolibarrApiAccess::$user, '', $idwarehouse, $notrigger); + if ($result == 0) { + throw new RestException(304, 'Error nothing done. May be object is already validated'); + } + if ($result < 0) { + throw new RestException(500, 'Error when validating Invoice: '.$this->invoice->error); + } - return array( - 'success' => array( - 'code' => 200, - 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' - ) - ); - } + return array( + 'success' => array( + 'code' => 200, + 'message' => 'Invoice validated (Ref='.$this->invoice->ref.')' + ) + ); + } - /** - * Get list of payments of a given supplier invoice - * - * @param int $id Id of SupplierInvoice - * - * @url GET {id}/payments - * - * @return array - * @throws 400 - * @throws 401 - * @throws 404 - * @throws 405 - */ - public function getPayments($id) - { - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { - throw new RestException(401); - } - if(empty($id)) { - throw new RestException(400, 'Invoice ID is mandatory'); - } + /** + * Get list of payments of a given supplier invoice + * + * @param int $id Id of SupplierInvoice + * + * @url GET {id}/payments + * + * @return array + * @throws 400 + * @throws 401 + * @throws 404 + * @throws 405 + */ + public function getPayments($id) + { + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->lire) { + throw new RestException(401); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - $result = $this->invoice->getListOfPayments(); - if( $result < 0) { - throw new RestException(405, $this->invoice->error); - } + $result = $this->invoice->getListOfPayments(); + if( $result < 0) { + throw new RestException(405, $this->invoice->error); + } - return $result; - } + return $result; + } - /** - * Add payment line to a specific supplier invoice with the remain to pay as amount. - * - * @param int $id Id of invoice - * @param string $datepaye {@from body} Payment date {@type timestamp} - * @param int $paiementid {@from body} Payment mode Id {@min 1} - * @param string $closepaidinvoices {@from body} Close paid invoices {@choice yes,no} - * @param int $accountid {@from body} Account Id {@min 1} - * @param string $num_paiement {@from body} Payment number (optional) - * @param string $comment {@from body} Note (optional) - * @param string $chqemetteur {@from body} Payment issuer (mandatory if paiementcode = 'CHQ') - * @param string $chqbank {@from body} Issuer bank name (optional) - * - * @url POST {id}/payments - * - * @return int Payment ID - * @throws 400 - * @throws 401 - * @throws 404 - */ - public function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement = '', $comment = '', $chqemetteur = '', $chqbank = '') - { - global $conf; + /** + * Add payment line to a specific supplier invoice with the remain to pay as amount. + * + * @param int $id Id of invoice + * @param string $datepaye {@from body} Payment date {@type timestamp} + * @param int $paiementid {@from body} Payment mode Id {@min 1} + * @param string $closepaidinvoices {@from body} Close paid invoices {@choice yes,no} + * @param int $accountid {@from body} Account Id {@min 1} + * @param string $num_paiement {@from body} Payment number (optional) + * @param string $comment {@from body} Note (optional) + * @param string $chqemetteur {@from body} Payment issuer (mandatory if paiementcode = 'CHQ') + * @param string $chqbank {@from body} Issuer bank name (optional) + * + * @url POST {id}/payments + * + * @return int Payment ID + * @throws 400 + * @throws 401 + * @throws 404 + */ + public function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement = '', $comment = '', $chqemetteur = '', $chqbank = '') + { + global $conf; - if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { - throw new RestException(403); - } - if(empty($id)) { - throw new RestException(400, 'Invoice ID is mandatory'); - } + if(! DolibarrApiAccess::$user->rights->fournisseur->facture->creer) { + throw new RestException(403); + } + if(empty($id)) { + throw new RestException(400, 'Invoice ID is mandatory'); + } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } - if (! empty($conf->banque->enabled)) { - if(empty($accountid)) { - throw new RestException(400, 'Account ID is mandatory'); - } - } + if (! empty($conf->banque->enabled)) { + if(empty($accountid)) { + throw new RestException(400, 'Account ID is mandatory'); + } + } - if(empty($paiementid)) { - throw new RestException(400, 'Paiement ID or Paiement Code is mandatory'); - } + if(empty($paiementid)) { + throw new RestException(400, 'Paiement ID or Paiement Code is mandatory'); + } - $result = $this->invoice->fetch($id); - if( ! $result ) { - throw new RestException(404, 'Invoice not found'); - } + $result = $this->invoice->fetch($id); + if( ! $result ) { + throw new RestException(404, 'Invoice not found'); + } - // Calculate amount to pay - $totalpaye = $this->invoice->getSommePaiement(); - $totaldeposits = $this->invoice->getSumDepositsUsed(); - $resteapayer = price2num($this->invoice->total_ttc - $totalpaye - $totaldeposits, 'MT'); + // Calculate amount to pay + $totalpaye = $this->invoice->getSommePaiement(); + $totaldeposits = $this->invoice->getSumDepositsUsed(); + $resteapayer = price2num($this->invoice->total_ttc - $totalpaye - $totaldeposits, 'MT'); - $this->db->begin(); + $this->db->begin(); - $amounts = array(); - $multicurrency_amounts = array(); + $amounts = array(); + $multicurrency_amounts = array(); - $resteapayer = price2num($resteapayer, 'MT'); - $amounts[$id] = $resteapayer; + $resteapayer = price2num($resteapayer, 'MT'); + $amounts[$id] = $resteapayer; - // Multicurrency - $newvalue = price2num($this->invoice->multicurrency_total_ttc, 'MT'); - $multicurrency_amounts[$id] = $newvalue; + // Multicurrency + $newvalue = price2num($this->invoice->multicurrency_total_ttc, 'MT'); + $multicurrency_amounts[$id] = $newvalue; - // Creation of payment line - $paiement = new PaiementFourn($this->db); - $paiement->datepaye = $datepaye; - $paiement->amounts = $amounts; // Array with all payments dispatching with invoice id - $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching - $paiement->paiementid = $paiementid; - $paiement->paiementcode = dol_getIdFromCode($this->db, $paiementid, 'c_paiement', 'id', 'code', 1); - $paiement->num_payment = $num_paiement; - $paiement->note_public = $comment; + // Creation of payment line + $paiement = new PaiementFourn($this->db); + $paiement->datepaye = $datepaye; + $paiement->amounts = $amounts; // Array with all payments dispatching with invoice id + $paiement->multicurrency_amounts = $multicurrency_amounts; // Array with all payments dispatching + $paiement->paiementid = $paiementid; + $paiement->paiementcode = dol_getIdFromCode($this->db, $paiementid, 'c_paiement', 'id', 'code', 1); + $paiement->num_payment = $num_paiement; + $paiement->note_public = $comment; - $paiement_id = $paiement->create(DolibarrApiAccess::$user, ($closepaidinvoices=='yes'?1:0)); // This include closing invoices - if ($paiement_id < 0) - { - $this->db->rollback(); - throw new RestException(400, 'Payment error : '.$paiement->error); - } + $paiement_id = $paiement->create(DolibarrApiAccess::$user, ($closepaidinvoices=='yes'?1:0)); // This include closing invoices + if ($paiement_id < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Payment error : '.$paiement->error); + } - if (! empty($conf->banque->enabled)) { - $result=$paiement->addPaymentToBank(DolibarrApiAccess::$user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, $chqemetteur, $chqbank); - if ($result < 0) - { - $this->db->rollback(); - throw new RestException(400, 'Add payment to bank error : '.$paiement->error); - } - } + if (! empty($conf->banque->enabled)) { + $result=$paiement->addPaymentToBank(DolibarrApiAccess::$user, 'payment_supplier', '(SupplierInvoicePayment)', $accountid, $chqemetteur, $chqbank); + if ($result < 0) + { + $this->db->rollback(); + throw new RestException(400, 'Add payment to bank error : '.$paiement->error); + } + } - $this->db->commit(); + $this->db->commit(); - return $paiement_id; - } + return $paiement_id; + } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore - /** - * Clean sensible object datas - * - * @param Object $object Object to clean - * @return array Array of cleaned object properties - */ - protected function _cleanObjectDatas($object) - { - // phpcs:enable - $object = parent::_cleanObjectDatas($object); + // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore + /** + * Clean sensible object datas + * + * @param Object $object Object to clean + * @return array Array of cleaned object properties + */ + protected function _cleanObjectDatas($object) + { + // phpcs:enable + $object = parent::_cleanObjectDatas($object); - unset($object->rowid); - unset($object->barcode_type); - unset($object->barcode_type_code); - unset($object->barcode_type_label); - unset($object->barcode_type_coder); + unset($object->rowid); + unset($object->barcode_type); + unset($object->barcode_type_code); + unset($object->barcode_type_label); + unset($object->barcode_type_coder); - return $object; - } + return $object; + } - /** - * Validate fields before create or update object - * - * @param array $data Datas to validate - * @return array - * - * @throws RestException - */ - private function _validate($data) - { - $invoice = array(); - foreach (SupplierInvoices::$FIELDS as $field) { - if (!isset($data[$field])) - throw new RestException(400, "$field field missing"); - $invoice[$field] = $data[$field]; - } - return $invoice; - } + /** + * Validate fields before create or update object + * + * @param array $data Datas to validate + * @return array + * + * @throws RestException + */ + private function _validate($data) + { + $invoice = array(); + foreach (SupplierInvoices::$FIELDS as $field) { + if (!isset($data[$field])) + throw new RestException(400, "$field field missing"); + $invoice[$field] = $data[$field]; + } + return $invoice; + } } From f7537998104a96b12b06ace9c6a47687c538c387 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 23:27:34 +0200 Subject: [PATCH 0612/1148] FIX Support #tag into url of website module --- htdocs/core/lib/website.lib.php | 14 +++++++++----- ...rate.jpg => website_template-corporate.jpg} | Bin .../websites/website_template-stellar.png | Bin 0 -> 280585 bytes htdocs/website/index.php | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) rename htdocs/install/doctemplates/websites/{website-template-corporate.jpg => website_template-corporate.jpg} (100%) create mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.png diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4696e2adc8f..388c047499b 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -30,14 +30,16 @@ * @param string $content Content to replace * @param int $removephppart 0=Replace PHP sections with a PHP badge. 1=Remove completely PHP sections. * @param string $contenttype Content type + * @param int $containerid Contenair id * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html', $containerid='') { $nbrep = 0; - dol_syslog('dolWebsiteReplacementOfLinks start (contenttype='.$contenttype." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')', LOG_DEBUG); + dol_syslog('dolWebsiteReplacementOfLinks start (contenttype='.$contenttype." containerid=".$containerid." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'')." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'').')', LOG_DEBUG); + //if ($contenttype == 'html') { print $content;exit; } // Replace php code. Note $content may come from database and does not contains body tags. $replacewith='...php...'; @@ -72,8 +74,9 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Replace relative link / with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); - // Replace relative link /xxx.php with dolibarr URL - $content = preg_replace('/(href=")\/?([^:\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep); + // Replace relative link /xxx.php#aaa or /xxx.php with dolibarr URL (we discard param ?...) + // TODO To support replacement of /xxx.php?bbb=ccc we must be able to replace only if link is not already DOL_URL_ROOT.'/website/index.php + $content = preg_replace('/(href=")\/?([^:\"]*)\.php(\?[^\"<>#]*)?(#[^\"<>]*)?\"/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2\4"', $content, -1, $nbrep); // Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/ $content = preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); @@ -97,6 +100,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); dol_syslog('dolWebsiteReplacementOfLinks end', LOG_DEBUG); + //if ($contenttype == 'html') { print $content;exit; } return $content; } @@ -196,7 +200,7 @@ function dolWebsiteOutput($content, $contenttype='html', $containerid='') global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; - dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." containerid=".$containerid." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')'); + dol_syslog("dolWebsiteOutput start (contenttype=".$contenttype." containerid=".$containerid." USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'')." USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'').')'); // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); diff --git a/htdocs/install/doctemplates/websites/website-template-corporate.jpg b/htdocs/install/doctemplates/websites/website_template-corporate.jpg similarity index 100% rename from htdocs/install/doctemplates/websites/website-template-corporate.jpg rename to htdocs/install/doctemplates/websites/website_template-corporate.jpg diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.png b/htdocs/install/doctemplates/websites/website_template-stellar.png new file mode 100644 index 0000000000000000000000000000000000000000..718fc808b456e9004389ddd875f618e4409b81c4 GIT binary patch literal 280585 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�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±UQ+p((qovo(zby45@!--#qg{g)rM{5N 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
`{|Ly^+Bm=<9fM;gJI2~rFdF{@we!9~R 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 FngCid)."\n"; //$out.=$newcontent; $out.=''; From c739b9566609afdf1cd71a64cdf6730dad8e43e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Wed, 14 Aug 2019 23:33:06 +0200 Subject: [PATCH 0613/1148] Fix codestyle lessc.class.php should be excluded from ruleset as it is an external lib --- dev/setup/codesniffer/ruleset.xml | 1 + htdocs/core/lib/files.lib.php | 2 +- htdocs/fourn/class/api_supplier_invoices.class.php | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index daf73e5b2a7..89ea98a051b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -6,6 +6,7 @@ build/html build/aps documents + htdocs/core/class/lessc.class.php htdocs/custom htdocs/includes htdocs/install/doctemplates/websites diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 79b0badf0ff..a5bbd68a736 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1911,7 +1911,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE)!==true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php index a4cdadc8265..a2da7a77494 100644 --- a/htdocs/fourn/class/api_supplier_invoices.class.php +++ b/htdocs/fourn/class/api_supplier_invoices.class.php @@ -362,9 +362,9 @@ class SupplierInvoices extends DolibarrApi throw new RestException(400, 'Invoice ID is mandatory'); } - if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { - throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } + if( ! DolibarrApi::_checkAccessToResource('fournisseur', $this->invoice->id, 'facture_fourn', 'facture')) { + throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); + } $result = $this->invoice->fetch($id); if( ! $result ) { From 2b805cc63df86c9d9824e5d2ab49f4648a1d1dbe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 23:47:01 +0200 Subject: [PATCH 0614/1148] Add tooltip help in CSS edition --- htdocs/langs/en_US/website.lang | 3 ++- htdocs/website/index.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index f01494fcdac..a05ead24df7 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -106,4 +106,5 @@ DeleteAlsoJs=Delete also all javascript files specific to this website? DeleteAlsoMedias=Delete also all medias files specific to this website? MyWebsitePages=My website pages SearchReplaceInto=Search | Replace into -ReplaceString=New string \ No newline at end of file +ReplaceString=New string +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. \ No newline at end of file diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 04642d0dc84..3624843dba7 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2557,7 +2557,8 @@ if ($action == 'editcss') // CSS file print '
'; - print $langs->trans('WEBSITE_CSS_INLINE'); + $htmlhelp=$langs->trans("CSSContentTooltipHelp"); + print $form->textwithpicto($langs->trans('WEBSITE_CSS_INLINE'), $htmlhelp, 1, 'help', '', 0, 2, 'csstooltip'); print ''; $doleditor=new DolEditor('WEBSITE_CSS_INLINE', $csscontent, '', '220', 'ace', 'In', true, false, 'ace', 0, '100%', ''); From b2f1cb22e8459a2085efc2fd737dfda6bcba9693 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 14 Aug 2019 23:57:44 +0200 Subject: [PATCH 0615/1148] Add tooltip in website module --- htdocs/langs/en_US/website.lang | 3 ++- htdocs/website/index.php | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index a05ead24df7..ec8bc0c2232 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -107,4 +107,5 @@ DeleteAlsoMedias=Delete also all medias files specific to this website? MyWebsitePages=My website pages SearchReplaceInto=Search | Replace into ReplaceString=New string -CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. \ No newline at end of file +CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. +LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page. \ No newline at end of file diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 3624843dba7..8797020a717 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -2578,9 +2578,12 @@ if ($action == 'editcss') // Common HTML header print '
'; + print $langs->trans('WEBSITE_HTML_HEADER'); $htmlhelp=$langs->trans("Example").' :
'; $htmlhelp.=dol_htmlentitiesbr($htmlheadercontentdefault); - print $form->textwithpicto($langs->trans('WEBSITE_HTML_HEADER'), $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip'); + $textwithhelp = $form->textwithpicto('', $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip'); + $htmlhelp2=$langs->trans("LinkAndScriptsHereAreNotLoadedInEditor").'
'; + print $form->textwithpicto($textwithhelp, $htmlhelp2, 1, 'warning', '', 0, 2, 'htmlheadertooltip2'); print '
'; $doleditor=new DolEditor('WEBSITE_HTML_HEADER', $htmlheadercontent, '', '220', 'ace', 'In', true, false, 'ace', 0, '100%', ''); From dfe2c3de74ec1bea1b1ab03af7095e804b3a5c80 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 00:31:37 +0200 Subject: [PATCH 0616/1148] Add template stellar --- .../websites/website_template-stellar.zip | Bin 0 -> 197145 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.zip diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip new file mode 100644 index 0000000000000000000000000000000000000000..b7fdfc1bd375876648ed59f349e8642918064161 GIT binary patch literal 197145 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 literal 0 HcmV?d00001 From f81463af0cfefcd7f19adf5fdcf8e86e63af72b0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 00:55:47 +0200 Subject: [PATCH 0617/1148] Update templates --- htdocs/core/lib/website2.lib.php | 20 ++++++ .../websites/website_template-corporate.zip | Bin 2297082 -> 2297147 bytes .../websites/website_template-stellar.zip | Bin 197145 -> 197333 bytes htdocs/langs/en_US/website.lang | 2 + htdocs/website/index.php | 59 ++++++++++++++++++ 5 files changed, 81 insertions(+) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index f45df83700a..e622b79bd2c 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -322,6 +322,26 @@ function dolSaveManifestJson($file, $content) return $result; } +/** + * Save content of a page on disk + * + * @param string $file Full path of filename to generate + * @param string $content Content of file + * @return boolean True if OK + */ +function dolSaveReadme($file, $content) +{ + global $conf, $pathofwebsite; + + dol_syslog("Save README.md file into ".$file); + + dol_mkdir($pathofwebsite); + $result = file_put_contents($file, $content); + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + return $result; +} /** diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip index 6ee933a0c7bff29d44b2352e7e3d9ed557da39d5..620f2d379c4b371c74801f5dad724329fda7296b 100644 GIT binary patch delta 115553 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Ʒ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

wj{I>B&yFlWj>eP|Jlh#ehpRyH`w=;n5!lL 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 delta 116679 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%0AuYMOLC@z46H>eANXP|~8JT&kZ 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 diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip index b7fdfc1bd375876648ed59f349e8642918064161..0ef1302528fed7b6d4d62ea515a7b408a859d2be 100644 GIT binary patch delta 940 zcmZXSYer0sBaG@W9$O|eN(zobBYHd>svgtPMJeysl7tZ-T&;S3N_j%8G&&><6(K?yT ztQRAqCGYn*d?1P?8C zPLv4cJ_?LQP;B7=E3qNOdK*&7aM@rHDM&hx{!lPehbb8;<1H|Of^<7hg{-z4$cP~2 z^KCe(hTU->k%U(cltojp?J3d(aw?wT3kl{Do7 z@DamDS+(U%=}Ak)>6(;0ZDy81n_N|1qtguK4(F>>{V4;vI>W)7M~9}R-+rWOG-lPH zURPi}SJ>N^YaHBa9L<*+4F$a_wOZ9V@^)C&Hz*{H4Cpnl>(%ce`F*ldezFSFJLhZ{ z9?+gxYd6N|^BQ{4vWWuaM>I;wdH6Ntu&Zt~QNG@TX)0Le#of@3Iwp}GMUM9;b`UrE zu$y?)hb-cK9}L9rK7Nv%2WG>0%OXE4a{F9ZuU+KO9L!X|!H-?UB0n;TxBSQ_PWy3~ zs0$#6crAcJqB{`ovo{#lF9wl8`pY2Fi1R^Y6SL>TyfP2EKx||_T(4ZfKFW`AF8}Wj zvBwKguKe?7%z6Pa61uH)rmU5lD0i`*1*qs96Fe8?Jz(wKh_SB~>AKj}qEeW#XNy!} zxANqYy-7@vQmaodqFiip0dZNeZv1-{swymJldUJLOZzEIGl|uW#k_kdAF+J=eS&VV zRyX2Uk`QXk(gjf|UiN^cc(6vk^hK@Mg%XC3#-O?vNdO)AlN*i&+%j7)5)C?=1+ze?Q^%g>YHg^h23Wk(fE)$_4e&`C>o4JrWlS_-+)m|tE6PD5za3sH)YFN=I4a+| zVKPVE>BAZduli7(KqK=J@(e~ikMWa&djM?|%n=g-D{}8CDk%5^=w(}#GK3Kd7)Gm$ zM#ooNvoVtX+lr|8Ae!lS2Jwdp*GF;JYMM2U{CGxAhOm+B4q*%VF@zmt+9dXn-bwv3 znuAf_J{8dqNBJPi$tX+1a5Mi_7`f!TFp5a$H1?6Fr*V*cIgL_s(F_ido|(vV24*b1 zV-|&!x6LAtJU5G-~P9t;?>dJ>%KnukkNz@Fcr&{}GoEVV5D6 z$BJoO7@F6huKv8&qnw6xa=1)GrW%XYE<>)O>(?&2eyJOVOsC(^@MZPZkQpmErgwAk z?Pt2@n7-#fB}pxTT+5mQ$W$3O3e`1=w5)}5{_T}TB3_6W$wH)Xyx6)w2DNn@E7UNg QEipsrOMjm)|DZGe1Kdvz1^@s6 diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index ec8bc0c2232..7ecb94e3fec 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -15,6 +15,8 @@ WEBSITE_HTML_HEADER=Addition at bottom of HTML Header (common to all pages) WEBSITE_ROBOT=Robot file (robots.txt) WEBSITE_HTACCESS=Website .htaccess file WEBSITE_MANIFEST_JSON=Website manifest.json file +WEBSITE_README=README.md file +EnterHereLicenseInformation=Enter here meta data or license information to fille a README.md file. if you distribute your website as a template, the file will be included into the temptate package. HtmlHeaderPage=HTML header (specific to this page only) PageNameAliasHelp=Name or alias of the page.
This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "%s" to edit this alias. EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container. diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 8797020a717..d16e8661390 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -184,6 +184,7 @@ $filetpl=$pathofwebsite.'/page'.$pageid.'.tpl.php'; $fileindex=$pathofwebsite.'/index.php'; $filewrapper=$pathofwebsite.'/wrapper.php'; $filemanifestjson=$pathofwebsite.'/manifest.json.php'; +$filereadme=$pathofwebsite.'/README.md'; // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); @@ -855,6 +856,11 @@ if ($action == 'addcontainer') $result=dolSaveManifestJson($filemanifestjson, $manifestjsoncontent); } + if (! dol_is_file($filereadme)) + { + $readmecontent = "Website generated by Dolibarr ERP CRM"; + $result=dolSaveReadme($filereadme, $readmecontent); + } $action = 'preview'; } @@ -1153,6 +1159,33 @@ if ($action == 'updatecss') } + // README.md file + $readmecontent =''; + + /*$readmecontent.= "\n";*/ + + $readmecontent.= trim(GETPOST('WEBSITE_README', 'none'))."\n"; + + /*$readmecontent.= '"."\n";*/ + + $result = dolSaveReadme($filereadme, $readmecontent); + if (! $result) + { + $error++; + setEventMessages('Failed to write file '.$filereadme, null, 'errors'); + } + + // Message if no error if (! $error) { @@ -2529,6 +2562,21 @@ if ($action == 'editcss') //$manifestjsoncontent.=""; } + if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + { + $readmecontent = @file_get_contents($filereadme); + // Clean the readme file to remove php code and get only html part + $readmecontent = preg_replace('/<\?php \/\/ BEGIN PHP[^\?]*END PHP \?>\n*/ims', '', $readmecontent); + } + else + { + $readmecontent = GETPOST('WEBSITE_README'); + } + if (! trim($readmecontent)) + { + //$readmecontent.=""; + } + dol_fiche_head(); print ''."\n"; @@ -2623,6 +2671,17 @@ if ($action == 'editcss') print '

'; + $htmlhelp=$langs->trans("EnterHereLicenseInformation"); + print $form->textwithpicto($langs->trans('WEBSITE_README'), $htmlhelp, 1, 'help', '', 0, 2, 'readmetooltip'); + print ''; + + $doleditor=new DolEditor('WEBSITE_README', $readmecontent, '', '220', 'ace', 'In', true, false, 'ace', 0, '100%', ''); + print $doleditor->Create(1, '', true, $langs->trans("File").' README.md', 'text'); + + print '
'; dol_fiche_end(); From bb35d9be0ca7e8aec537075740a618d2e25f0bfe Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 01:50:01 +0200 Subject: [PATCH 0618/1148] Fix copy of templates during activation of module --- htdocs/core/modules/modWebsite.class.php | 22 +++++++++++++++++- .../websites/website_template-stellar.jpg | Bin 0 -> 106795 bytes .../websites/website_template-stellar.png | Bin 280585 -> 0 bytes 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.jpg delete mode 100644 htdocs/install/doctemplates/websites/website_template-stellar.png diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php index 24a929c82a0..cf4623fdb3b 100644 --- a/htdocs/core/modules/modWebsite.class.php +++ b/htdocs/core/modules/modWebsite.class.php @@ -158,7 +158,7 @@ class modWebsite extends DolibarrModules // Remove permissions and default values $this->remove($options); - // Copy flags and octicons directoru + // Copy flags and octicons directory $dirarray=array('common/flags', 'common/octicons'); foreach($dirarray as $dir) { @@ -179,6 +179,26 @@ class modWebsite extends DolibarrModules } } + // Website templates + $srcroot=DOL_DOCUMENT_ROOT.'/install/doctemplates/websites'; + $destroot=DOL_DATA_ROOT.'/doctemplates/websites'; + + dol_mkdir($destroot); + + $docs=dol_dir_list($srcroot, 'files', 0, 'website_.*(\.zip|\.jpg)$'); + foreach($docs as $cursorfile) + { + $src=$srcroot.'/'.$cursorfile['name']; + $dest=$destroot.'/'.$cursorfile['name']; + + $result=dol_copy($src, $dest, 0, 0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile', $src, $dest); + } + } + $sql = array(); return $this->_init($sql, $options); diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.jpg b/htdocs/install/doctemplates/websites/website_template-stellar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66867384b58e4b7ba3cfde11f8141db4a48772bc GIT binary patch literal 106795 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�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±UQ+p((qovo(zby45@!--#qg{g)rM{5N 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
`{|Ly^+Bm=<9fM;gJI2~rFdF{@we!9~R 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 FngC Date: Thu, 15 Aug 2019 01:58:22 +0200 Subject: [PATCH 0619/1148] Add shadow style --- htdocs/core/lib/website2.lib.php | 4 ++-- htdocs/theme/eldy/global.inc.php | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index e622b79bd2c..48d192843d8 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -345,7 +345,7 @@ function dolSaveReadme($file, $content) /** - * Show list of themes. Show all thumbs of themes + * Show list of themes. Show all thumbs of themes/skins * * @param Website $website Object website to load the tempalte into * @return void @@ -421,7 +421,7 @@ function showWebsiteTemplates(Website $website) $url=DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg"; if (! file_exists($file)) $url=DOL_URL_ROOT.'/public/theme/common/nophoto.png'; - print ''.$title.''; + print ''.$title.''; print '
'; print $subdir.' ('.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).')'; print '
ref.'&templateuserfile='.$subdir.'" class="button">'.$langs->trans("Load").''; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index d0a0c5958ef..b05968356ce 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -3020,11 +3020,15 @@ table.noborder.paymenttable { height: 22px; } -/* Disable shadows */ +/* Disable-Enable shadows */ .noshadow { -webkit-box-shadow: 0px 0px 0px #DDD !important; box-shadow: 0px 0px 0px #DDD !important; } +.shadow { + -webkit-box-shadow: 2px 2px 5px #CCC !important; + box-shadow: 2px 2px 5px #CCC !important; +} div.tabBar .noborder { -webkit-box-shadow: 0px 0px 0px #DDD !important; From c92488986bd356a3394a3580783df813e9b25519 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 02:32:07 +0200 Subject: [PATCH 0620/1148] NEW Can have a preview of website template when loading a template --- htdocs/core/js/lib_head.js.php | 3 ++- htdocs/core/lib/website2.lib.php | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index cf8557de961..d177e7d99c1 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -856,7 +856,8 @@ function newpopup(url, title) { } /** - * Function show document preview. Use the "dialog" function. + * Function show document preview. It uses the "dialog" function. + * The a tag around the img must have the src='', class='documentpreview', mime='image/xxx', target='_blank' from getAdvancedPreviewUrl(). * * @param string file Url * @param string type Mime file type ("image/jpeg", "application/pdf", "text/html") diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index 48d192843d8..cf6082f3bd8 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -417,11 +417,25 @@ function showWebsiteTemplates(Website $website) print '
'; - $file=$dirtheme."/".$subdirwithoutzip.".jpg"; + $file = $dirtheme."/".$subdirwithoutzip.".jpg"; $url=DOL_URL_ROOT.'/viewimage.php?modulepart=doctemplateswebsite&file='.$subdirwithoutzip.".jpg"; if (! file_exists($file)) $url=DOL_URL_ROOT.'/public/theme/common/nophoto.png'; + + $originalfile = basename($file); + $entity = $conf->entity; + $modulepart = 'doctemplateswebsite'; + $cache = ''; + $title = $file; + + $ret=''; + $urladvanced=getAdvancedPreviewUrl($modulepart, $originalfile, 1, '&entity='.$entity); + if (! empty($urladvanced)) $ret.=''; + else $ret.=''; + print $ret; print ''.$title.''; + print ''; + print '
'; print $subdir.' ('.dol_print_size(dol_filesize($dirtheme."/".$subdir), 1, 1).')'; print '
ref.'&templateuserfile='.$subdir.'" class="button">'.$langs->trans("Load").''; From 14030affe59a5ed349dd3ed793c0eaaf1d2aed5a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 02:57:00 +0200 Subject: [PATCH 0621/1148] Update website templates --- .../websites/website_template-corporate.zip | Bin 2297147 -> 1721234 bytes .../websites/website_template-stellar.zip | Bin 197333 -> 197324 bytes htdocs/website/class/website.class.php | 4 ++++ 3 files changed, 4 insertions(+) diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip index 620f2d379c4b371c74801f5dad724329fda7296b..e86e11df2885d4590449673680bfd555722e92d4 100644 GIT binary patch delta 361812 zcmV)3K+C_onv4OGhiME@O9KQ7000000Ol5v3?l;O7LhS20_GNxTr>{m77tI*9k63r z0RR9y0++Cn10J!waRCD67PBt`_yPjv7LzFj#{%XSv+@OI0T1RD4^L5*v(ymo0RS5B z0hM789hPGn3zLrr3V;1&RODga5aF z8N}BL2@MGe0Raj7{W}yiJS;ps94s6h0wO9h0wM|`92_zxGJgshItB&?JQ5Z*COS4M zItKcG7XkbBbq)k13?w8BIszO5`v2eduNQy<4etN#&o?j>05}TRHx#gc{Q!Ib01Wa! zZ~tEd2YlTM66!nj*HK)s|7-u>VKDIjj{aK(z<&b+fFplH{(9;5mv~+Bc}A7G&`Cb) zFO6A7@(DK0#eYOCb7|V;@p@{Vy7WR;V@l*;viSCwZ#|{dQat(uQFAWr)n@w*M>HEx z9TnAghYv>_ca={Ai@x5u`uJx@8ykt7HItoh9{uBV?WxkVOt)QJVPUZG3XN0_`AYc0 zeKB%e!CVTv$iYnW(|g}!*uV(H>VPmfI56PqWDW~D%1hYzJkBln+L_SD&P$GMfiQabUQ~`JJIDEoh{R#YyZDYnVWnZv zj)Tba`G3$VeK80UW{Gq~l@uaY(9zKmMrNp}sP!rm3gHsd5>p+HcL&2e|GRzv|M3D^ z6t%d6#q;ykr*v*9Z6ca-u?tGiZBt+80gH8JYR3EeF7CUhyv9;Z(1Acejt`|(<`h}Z zrhX5bM6i{)FJ5I)Kwq4ta7e*$hzRlyBG)b~@_&68Az`=&2_lKo|Ly{d?Io2k2rUF5 z3=d5P{)J00z0rq9ETmM}5n$l|jRp!zliTVN24c@22fy$j-wQ62`av*w0PP z-z%dnGq@wMtR8FDcr#Po7eiC;{8jSeo{s(Iy1~{AUI#jkJo~|9Le>S@6c&AfrD00Q z!hdtI$il(sTzheHBt!TP`6oO7`Lh?UQm+z*CKnqn97_^R0?yP2PJ&1gkT&(3>%CgO zR7T)w)+Z}V2swQGtrG5Q@vd~c$sFy-TS#|-qa~)WaqdVtF0fRd}I4c z<9xWf~@BkNEC$*0-k4dwf$T``I95tssS5y?~l#Gr+ z<&b>Ri%%T*-!u+=%^tMl5IX-?y!yXlF-V{w5r!`eO%e^S19RBSTQJ;prqD0z* zQ=>&w-806lNwhBNLT^-IkrbpjOWa5*(q$G=Adf*`m&@3EbLY^pHQwdx!6HmB=6{Mv z9vgUu)*~?1Lr6Kay6*ya?D61uK3^rxH+e0D9C6UY$udIMJSri98@~gAEJ*zwQWQ4J zpcnruVkG@vNZ$(=gcgoQEpl8S{oh1|Vhck%_QN!IswR=w;bOScLYp|vRK8iwyETPi zR(9$~{KZDGSm6kU8C|*W$vhJBd4D^8^aQpkJ+YSf4slI3w}i~)${z2Hc)V$*UDQ2x zfj_6T8C7|0*U;6M$f3{IFI$8KGu9`~=Q<)pBFCK3-sqFWK zgIC%{ahe^KBhKzh_tqtiI&B_YQ9R}B()`@qb5LsusmD9GVui#S*Ro>C$Z&AL`idBM zW^^^F6I6C!vP^CyE%@bGZ!q|UrjBPYRAj;+$^yj zx6ZOVmo=r=DRHv0rnnjff++{4NTaFxM+L7cjAG15jNfK}N1%(Mu;K=aiGwpyS?xC& zS!q*HXi9#AksuC)CVv@14#O5g-u;j0!m-40`P?3VAOTviu+VVEWq%aNET{kw7*;5u z*oG*-sjcqU-vx4~QlqbWrj)l3QX1Mb4i_*$W0(zm9a&ujVzv?ax^7UTT1^bpV^DWL z{8&&kpk{T&Q|i;{K;*8yi@(VuK>%bLst5xTQWSh<2qjQ9gnukGNM?&1))Lwugz4!^K);22tW%r8WNl*c7}{hK@B_@B}r6<=?|c8Q9G{Z`sVgY zpYrT@N86sas@h==bojSYuIpFs%6wtgV6pFR1^*?_jy+_y+F6WVryF^93dyXJNIi&L zwa|tw6dQ<9*?)AQrYVF#Yy~=Ea1vv#OTG`aYFE>`9aJL;H)>Rs5M*HIkWkrM-UTlK zk^`aXiAa@@g`l-aZh2mX!@}v21vUOEEfpk^16 z(IgfNtqn$YCE*#DsRyARU*9_@-cJ!>f3x^AO$DBB0RRsm^v?qjH})yOL;s;wK%wWY z;`8{56MquLmVFxg#q^L=3&umbSps5Re)eN0zt-zS*?!|jU_CNjj^^v_WlOIo9l7aX z`(ab%?v1n3tI(c4*z!BG|AiA0%c9(h&`^b^AjG=kN4uTVyaVSe$zC=C3XV-tb6CQt#Xa~%!Q?}Qd2uhy@9Kn>95zFB>{jqaR%Yws8h4db^SZYIKyoLo1F^M|>T1 zgvH*ZU}k4y>OSSC0e;fuz-n+=bvYT*N)ntP|S`IZK*Z(g3BjNZ&rab;qZR7 zxb8#B`jZKLl$a{8t}Njg)t@-v_kTBdXnGd#aCY1Py*4-j(9YeR?ejmtFX6Q5l63sK zY-#htn+NUrYO}%0T1~4_tKs(BQ_jgzbsRqQKzLPA0JY9eG3!~*(Ny6#lEr-6Pl+2onEqr5vV53AhP&XNy*9%Qy{q@eMz;m zEg6_hVUt4_Ga99|&;qMy3zkmPC^?nl%CeEW` z3;n$jsooJv-GtDZaUxoV#6BfsV|~^wfPxJbj1meyjq~%%9YIJje`FOllmIeC1&G*X z^_clrwA4wj=cUq?Z+`@#*`(4jUg}74PA4l;vjd4vk9E>K4bI=~bVd6|^rfP5+RBY; zV!)Ku4xOvAmehb0(lAt#R5J0xC^Yj-(+OvJL-c%y{UAZ%UN}nR$PWa0NF>0aWEqr>}T<;&=TV5w&oqHq$N{PnUmO5yz-I-j_WqX-$xcLRh#PY{R(!EPW0lA#P}p z7%UP+K`7ZYm4Aihhy#~VPLsSER9%gH=G~d%!xj-N03`z%SqoXLQ4H|K-Jg(J{*cIm z(*O%F07hji&%qVWjU&(2DC?G_lIjw@ju$^ss*e)QN=l{ve7o~WetG^k-n(Id_>&eZcGsl zAlzUCWQXfuc4&0}BI!hsDPf?v4wAh51U9?SC`?j1tdL{h9m5#`Y&LkC^~A z{2R(K0)QBWk*wlE^JO*l2O0mna~X?5N+j%DUCLdTj%@ZetcUNmq)@6#hg{&;1M%Du9Hh z0r-noK?4AdwxAb&GtYOuR{@`#L6X+#A$^sjEq~DOMcX4Ka&Nk|FxKfc;~tp%05CS$ ztg-Q7iG*mH#uT7oa`ah|L<$|+H?4!U+T{CtIiC(62l8ZynKUO&x!E@!J=9W z)CxKi|H23sAy{Z+ORz#D1bGNZKJn5?uczy@Q}JbdA5v)I3Mz1xaN-JZ=n1AjF+X9$ ziGQ^K(?0>z7Q}RLqgR90RtAETmbix(4e%-M$Gl#wbef@02fpY*R8sf5O z1bAXC!vNe65wJ3J02x?*ejb^g-Pz35Mw z9fpb!z){9s#vieE!$aZX3sN%2e}Yu*H=%Yv|}5D0O@k*yF&7BZ=R zOC*r@^}W8nTe(v?pZf`rD1Sg;U?5|}tEh-U;98i)_bLCJ4y=SGE(?T&jSPT^s=6oe zAsEY@a9%o4F6j~Y*yPzoJ=K^j3J)r8cmArtUFHc;mZ+$##~HVe&XYp0$dU918|Ive zUdrv^S^d?_9?`l*>*f{4jcI3DSBLVfKuKingt=mCOIssJrEw4@g@28abfSuuuysio z&}AODg3pJ*O&Fv&?~=lkN+!*>#p?d#`F?CXv_fc)Y*h>RN;}Z7e;U8i4gy;*wt;1U z8uk|oAaJqa$|BXaANI~$Mh+*pSoaq4W4rXcg%M0v=2tUxxi=S$@*-1Eycm=v7p}qz z^yyEMNOton9m7n|yc!S@6|c6Mq4c zm~D}%H<>CNB^a7!ewvMmBm9qlowlk+mA=K*T|w%8r#H>ry?<-#>232}MW@c9NMIfX zJ$XEWuJird{<@Rl03z4lFFDWEiybG`v1qNcR>R8U)Ydu48Ih@L)}|FXQqnY+KgIv( z#ha5I8;}XV)}KOi0wg^mi{%P~z>N|s9HkG2JFj7k;=43q!}Q!8u(EAlEk(-rrdSJt>d^SMJG-)x&R<5GTlGn$`8 z2l3$%EBCT59lU=M$f(KU5}<`6|0fvX*&$&FtF%2=<}#<`#O&iI+gLg^>IWp+Ri|0k zw3rsmC>qCCow4`Lx*p86 z3Wpm66BjuO_m+ksUzfw;8-6KTL1+)5{~jU1nt%4U4`-g3(aZd`jUFjVB!$Jt^)Lv) zP+#pnSDV``N(f>w(mBXY7r7TF9|9%xe|y-- zuoFi1F1(&ydN1$U$2-nv(;%r(!p2K}BtN_MTNg)Y7e_>{u;5sdogwrud7a-+vh%ec z7Jo*F92SV}LFKpu&&G}n6e;XeKtw@YaFrX?-sn8U$eFaE%I-ydNf(0D z`Z3XDrc&s)hO&Koxps&wUVI!+!vWxP;6MyhlwhXd0X#P=6?_ z^uI9R3-`srbL}Eu2lEk2@igyyc!kFoH{#CBJ34dot(e?RW`7!Nl@H-NUobL8vx@)( z75@uC0SP?Q=pHO?8fGxEAdU!RfYlOrb=H%f?~pvF%2+H3p~=OR`HUfJLuG_p)0Df; ztFP0!M&rm=2AJLPi@M9@MIm(SJ`a79C$eT@A4k)Az6@=yEl{z@qkrcm5vlkn zy|5z0`8yC)j);6DL&0Bu>T zoqe?~ecZYvlSjg^e)hoFbAQfb=qr5Xm`MevKl)c6kd2EkvD4MX1B z{|_Bu_zJt|U-=sc>nBHLy`-sHNy1=-XA+OqBGA>CiEQt3OPnN$WMS?ijxpYX9?Ty{ zRKqY7Ik=K3KTkzeSZEq~Ol!T%I^x9E_23vQ`gj!R3VsK-kCu0Grhj#`VvfDijgr$^ z(|>*|vQ^XBu#Q-)cs$y&jtwM+DvQK?VQ}x?@bbGkk#lF|OL4vJ z_T^|vyYsY(?kX+0;zIKsyqjM?ld;gr5d&6a&rQjkU#t%L&#B#YIL=w;6f(r3^YHO; z?Gi!@5s@N);rzc43ZZlLMVmDNlX4_E#Vk(*ypFJvHn+<0b&*o%ac!@06dM;K`Yz?Y#JYO@A!^Fc zJUjJI+v8Yj{-V>JBMAY=;ezKs059?5s$8aBpK{wG`=MKjiJ1t9Bqh{KJ)8PSvD#8E zO0&aU*3$*iE`J0P+Hq$)EEs_g`TBYnc{dn21PL|)C&8WWy9mo_8+041Y{$xguC*{u zv8$IkuU3vc-d4q5*M)wPA%V@?7pTAh5o9sQBBnlgmSzb96&kqT?mEp)qpsQNdb)HY zWVFPq->JHVIT5@rUml$)S$8xq{_N?Ri`4ZwlUm*TC4WW^);r^0@W@23!!Jr>oDwik znClX5JPZjy($5q0*23J?_2T0nzMIxo_`J`K^uLXdAjJg2m_C)7Zb5au8!*K^%;r@CToqsC~ofy%)MpfxMc~YsXn`!~4zn0Y7oiDDqA)x=P;d&1Vt0=5%zrXilhHpS#_Cx)&bLa7~)gX)oVTGB7|XFBDz8auIqtRpvy^aXa03l;w08 zmw*0H>3mQ=TzB7h?(sMqn!!G;>%Vp78ww26Fg>iXbJk^You_YB50n{LN?UL~v1dr+ zO882g!CYaXrD534xl3C7?27K@H12Bq7}HZcw#Raw?I*>|dYUp5*3vj5E-&Bw+RMW5 z9pc*fx|tz=5-387ew8u+x>UOeffcy7C?!3Yu``X`Vl^NZAH)VrR_t`^*}1bF-Xr?1T3_+SqC7-ZgT1 z3Dw@uM+}C4_pf&ZrB1J}Z_-_Zx?5LI#?LCREkt#xG8%B_2-ps$C(WoFzfceTEr07| zm4H^)-Z*iAqmea`_42W9j90rSYq5EMQmkDweYf;i^3w{edI7%kwD!-IHio|mv4<~OV+ z9)$d{q`#PlbvBM=2FqC0K%B&a)mbv0P4t)NNvWJ<~0%XvL(^eeY8yUymEmd~ISV>UU4 zu~y$VMDi|{@+ogtnX@lU;dJ*vW*AO4>5!9M#xce+2`YlmK>5d%Nj+(1Y=2>OZQo~C zx1Aj^uSK~EZMT32?`v}%O46% zN~(9L|L<)os<>9!3z;PsML408*>^qcfk_r%_jzCj$Jw zSoIc`Gc5z!Q0rl{5Pstl?~ZKzBY*ob=g#Pj3zS+A7^?#WtH&<^N2c7=1 zdx6$MMx@F7DV>WP*6hia#zmi_loq!qz0UUcJvHZ~3`rn}h%78HkkGPsr1vYKfAzZC z9bR0Q*}YZdE9oaiEMpYSnq%$x>{ZNj+=hA?HZloG1Z-vuGCOA_hn@;cvNleouBBNf z_9Z2bYS#Pe(?=y5j(?Rkj`sWre#bjI;7lqsyhg-Uu}$OFrErTER|I|zd(Z~9R)6^1 zc@N@*Px!_5%=TGc-UvK>*1WRS)|YtWzEM=yxX(J^r%#(SZMtTe)8Z~9>dT!KZNIE% zWxF-;6P0i=cptJD#Kzg@zuvB=&8DSDDp>-90t1Khx5JW(J%31U|Cx?kbc`x}Sj)ZPvg@GZ|Sp9P0a`)NM(&^TKN=EC?j-aehlR8m+?Do)QUS>4wDd*+6 z=z`MGjA&*iQh(|GVMd{INCV3&2YM{cy;(3(tZFHG$dMiV3q3bC_j)wSby_5=#OT}U zbtU7%igjq3o)n*9Cc#A)3Hu*0Muq}|xxVC($5G)LVxz^FApr`PB@OHecZP=KZ1Q5Y zBMZNwUZP|vYhu;;UY6SgP^%`L+CV5J*w*E zNUqjp%I3(LSqVo_Z1`eZ>sIDZjnWD4TDE1DrqB0W8Ls(-_4)q6`UWt1b?b$YsL5SP zVS*YpGo4Gs%AC}d^z@-U#URRGv-Vb=-wD8oAJ$!RHoCnNv49B_>G28Vk}Q0YaHRjo z`LM5^0Dn1-;q2tD>-AN8bRe-mg?L2ij-@!oR7zIDs!nbLC(>QB!9mwX&Y7IHD%yEq zOE!A9{&do_eKoX(VXES9L)&*0T~f2N0)d^oX9KN_Hr$h=4<2Jzx4E2Xf0iP=pSIj3 zo!$&qyxlbl4UPePzwq`-iemU{Z)<2JmE?|^3V-ppxZ!c{KPU#X9%VN>UTXW z=TTPf6PFN1{Ri6b>5rDY_T0G|SY^v?<|oO45jcrtL1Dvzff-*tL;hFk4K_IY#qsdU zpHt_GC`mI4L$75f(d6iwQKfCBQeoFQ=(`v^Y3!DsmTxO|Z-(7Hp*lb5#M$vOz*_?| z)qgPIekGZAjQ?|GIFIem#>lEr3=#jCzOMf!WDJd=i5|XxDxUVnV!x3d^Jo__vGW#3K zhGxR0xn$W`bg-thJ431_ESi>K(C-Nga};f%(@SRp@G*=BnD%Ab6#75#+q48xA^uMlSR^*rhfdexd26`m=`3>#fR}3-mV<%MGV>;thsGb9!c? zlm~a=B??n-(vrToJ_>>9+J2&*Hy&F;t$R3Q--4Gt3uNfw|p&nbD!q@7a+{$3m+l~Z#r zgWD@70Z%Gx*+F0xiy-}35G80LvB+eEp?G}Twuj|-0a!yJ_f#4^(|_JR2CkQ0Y8wuF zC-d6LJ)JN{v=Rc<8&V*ZrEUuB2KqLBcp3@ z4=w6lkv^eFD zOebV1W^8g~$+f$%`F=8Zkk$`oO5-Kv%($fPCe3Ix-LA&P*ne4NSdGK&@to6VEgD?g zD6!!*XA>*9r9w@J|JUsH3wNvu2?6Hj(i(3Ak4?KNC;3RQgainc1T;b_jXFXqAq|Y+ z5Kl0~WeGRzvNT(`~Dvdtyles+!W*kq#6)o$4ADO=FRON}8H- zT7 zaMYgv0r>A6ZM|f$mmiy04n4=*{3(mvo%ohJ_bTFaf0=MQy~m>z|Gt;I z#7Z9R7eZNb@n+PyFvqGCGZr<>55=Lu`Es6>giaC|L4QpL8lfXZ`i_KpB#O@Nr@J+q z-5saVgYmn5G*uB?OB#y&3XT!pDChP7>mO7AHyNPKAj9)eN zAnWbKnl(_2#+Z`pn7vsbILl{riz*!H=jlB^`yt)Ppvq&aIPy<0D6ygbe{cWWg?05eF_V!qD;(~1!O(d)SLgLymZo7XCQx@uo zt1LPy7p>exP0j8T$B(W`F1ZSzs_SrvQ-S$*MStU%cdRXwXmgM$zo~>ZX?Dl$btg1E z52hsN?z^*FeoiJ$k}qL!9&{SuX45Gt^qZnL**h=ZX{L2<_cw3Nxl8jp<5$}`W5-4n z-y_D6-&N!Xx^!vtbP_>>Ba0WhdAS`9dal%^GE0RMuf($msj!Hokee*p9E!xJAfy}V zM1R7OrRb>howfY>c64>(&QORc39^PTO`t1!)G#}hHBHazvK5?Xjq$#~bE$pc~NSZB=Nl^{znH~P-9%7U_^X70V5$f!4XMJ>x~uoPTKZFn`&m<~h5Vy_hD(85AD%h%-&)8e?CR0B?R98*%MliqJ-l~*QYcYnEf z9NfLX;v?4YpP}#vP%DVVRx+RXa-FmKnJ3r}wXOT~R`IXCs7CaXur)WTMrtifuLLg{XZd2zm!bx6jV$%|~EqDV_2 zfhr*(2`s7{`;W8|lB__<1d;bikAEY5^Ki$9OUs_(5yp8-W)wRRS5yif^IDywu61R( z*}*}|X#J{m<%&7=oH1WsdmZ_qqwAbL-_e(#H0B;}9`E5k+DM)QgG9!3H3m(HCjTxZ zJXxB`S^CaMGRoSZmI_*nfScy%IKf z*BW1lWqZYsNE^h+6oX(zHQzA%CRaUSIVr?GWl>2S9|+H30-pec2T4k5#;1P4=nFgs z1vbDw(AnA{p}yGdgH{UF$bNX8y4}wtkrDC;##0zXYfIaB<)7N>to_5(xW{$h)SN-Y z3tdc(YG=w^Q|+-^SvMEObARcTc@l1eiKuiXK3~%7#m`QT)voJ%bA{2%KL8&fjKkd< zVT)%kEy6PI;>2s+&M653R(IiEpe21Q^&o*x+itT^=}H{zubK#{S4YL=NAaSonFLFb z+Je!~|C~03XJb*41d^L6>5QNXX(9k4oN_b1QXTDyk#XryODk!$qJPjL{My8#c4^?_ zPYa!JMa0Sx)D6?f$90fUAGhqKoH1%~iPf1BdGx5)f@T#58*41BUL4Al+op^NsgHlCFn6#RN6SuXb5_>zZU+Tp3Ffe0U607^d)6N+Ub)a^b zQg`v`&7&npgwz#c>3_u6yK*ai-Xsi~*rY~bHAr0Zo5{#GNf;PlQbIZmD}|(xqzP3= z|JY8KZ@1;pQgeo?DfxG$#%5G4mV+@6nEIv73a07;+9|Uksk$^ss|~ekv2(y?0~4{q z?mjJ*d*VxL?S?iLGaqU`yreW@GMiM&%GHnXt3>-8VH%6Og@2mL3?dIc$+~Dcycc^S zAI4sJ&fYvH)hqRpt4uGPwy$zIuP>}blhs}Pu6KT)1y>Kw#=NS0%yj0FX%!Aewj^Z} zQE#LN0$G$q;^Vo=fo4KFBT7ON9CnV<_*nY#Q$D`0pqPG7~fWAM$X;e(s2j$JlSxCw3O zM2MqSyAu``Eo)fwM#Z5WKqACJLGgcx%WPFl!cEG75`Un4(4mA>u+|a%UAp$xxaX^E z_WAq+U39+MeyS33RJkEpxz!v^2C=qRC=du^vtrHsy&U#fCJWMHT&0~VnXJrqaf(Z8 zV)5Oauu?9~r&4jgsL7;EJwlxoZT;2rWu=F2u=RX|ozZUhF1aXWjyO@>?J^C&$OwgG z)pgM)Yk!F9J{k1TJ+g6-We4T-)pcKbZ^^IEjkh=n#|8(N#D*dp9%5S z^jJMJIH9%lK6HljdLfqTck|o=hGnXxXxMp4t$z@3s+7Iyr_o(av!X>>J^qm>mcNj8 zpBL0Db=X4mYfF#KWU;$>fw9(?SNEMyT&FYQEbS6rNZ!Y|HshV!2b7i5Or+2!IJww)@oGdJ79~{>pT%x62-N`2w~q%)>)PqCOQE0? zvVYQr6hl=?ItelWE9-}f%PG=(m#kj~_^sZj*iH_VE43#)KpEl-8?&)!DlBt}QXOx@ zmRO+sNw%%rBON)imC`v4jR`(!+<80K`hI?hag3M*%4^Ek*?+?k zzkWV2phEhbFjW}WW^ydtAxIpWIMAdQp05v@jj7K}A_R~MIZGWAjg)Mps87YD%y{jZ;^mXsnNw6URb)36_DZe=)+Q9NvL?U>5Dlwk@_}F9Su1XW)%G-K|ftC2}zL=Hpi3sZ2&?J69kKv_qH>G;!ag4pWfu7h5>wpnntKxqdpYk&E;=O!e0 zV$Xzy+!Y~qafvY@ml%l>HT-P^3z5^C(N%eDPMSd9UmH(f{+d0>4frgS1p??zGBz~?P(adbkpv35G zz9YQ-I~tND%{jfqwklk@3gjI`)UUr_WWn!Q@q(ejxY&lMERMt$hQlTSaB5l$V9f z%My|NkF6x3$bUU)cO`7_6^vwZ_`I5b{QwSR02l-~7z6+U5(4}i;A;f~{P&?E6jUf= zG!k@TQf3S?CYGP9Y=R2kftch%6vFHxqW@L_&|qKyFi7x=f?!l`Ry-?F^>6Xs;^HO; z%=d_*Be^&GCtZ-b5nVVDR&m8l`QmeFgJsvXb*uzjvVX;%egu|d*9HgAkSysT`M9xk+lqQyoBZ}J2y7*bEu&ZCTW&6JN36=7HEEQwGL60f= zXU#Xo%757yj^t-=l%Xa+e6+gZy+}9iv27i!-Zl^XXa=!1Aqb6Dblk|*Ri{T}T5BnR ztU-2GIMMR7;nj2@l~s=TAx-_@&YHgk!bmC5GTyRFr5gDByQUp~)UvE#~$1u5pmK%9H(hjB6byG@ug zhB-0CcbbsZ2Ft(+zo2c_sH%+5^st<+%BH|EwZ(muVBOd=>Kb_t5N=`oIz9Z+w(lux zlYfQZAZa+=IRK0c->Z=Bm0}u7J{di?k0U;ut`ICJ#sRWQZbr=eSLLZKzFpYb+IPR% zzr4QOH#Ro5Rx!{9Zg*PuWBHTm7V{J;m$x)F)FTf?d_Ut6tCPdqN%BS?W%k2 zA3(9VxJYPkt(@6@bkB>U_!Rxqm`o^@Tn+Mvh7oP~uYDP9^qyOe`E2);1j+fAm4EpZ zmXw74cB64xt@P+wJNAlgL!(>O2(2EC{*|csDl=0C)VYEaoz&e{@+Is`G+S^j?GL)Y zM{^!TZs~9JpUXw={{T^OE&l+AeOA(Rw%?ZSL?2Pm6eWnrV#tHI4IySb)rKYznPP5cxJkX&-tD>}_uA9-rPL@U#(&78ZSPWw5( zt^jSU(T#{nDXj*4FBYRTC)JPCO#XFYrXReO%vp-Y<5!`~oJ=NTY^<#m6C2rdo$k8O zl=jN-chfdXwWz|v3(K!N>Ex?fY9Z>Nyez{{n)(O089Wn`A1>M^E7t9%>woNdD)6em zdi_BszrDkQR>O0b&m^SK8I`f$#vl#aZ~p(ambG6Li~j)PzAf*zkAA|eJnZ#oHGiTb zvU#y(dYQ{xn}eBeLat|+c_hf>M^%md+|ZrT_&uGR8T;y4N#>@U?B$kV(jpT|79)R5 z!~E6G+Py_^@TmJn*XK-iu79KH-TNq*>nTv3_?K7HTk-kI|-0o0g2}*CRRU*0STAT&!8pt ziSPdn;%g+<|C#UO*BEZ?yZ-^?eOq3=uXbX}x-lvDtp{^6f+@{_PJho8w>7~dGCkng zCtaMVW~dctmV&su;QVo?o7I#-1uRgPFs?bQ$zjILez0mCss8|RhKKMysrK+2eVx`A zVfLtn9uew|66H|Ry~{2Hgo#3T-NXMf|}#Ee`*3c=z0&N`{&BThOgUx-&s$YdBmIM7sYmZOL5a!!JDMx z3e8_T3NnND=a7im#%Yr|6}YCjGf=$#s6UK^qI7op#WF3c(SNqK*Eq>t5SB-fDyXk_ zd{~|hI)5^dIOq{aQ(p+79$aS%{l2#JP>=9X55WE-hbw}vrQX!SNFwAEl0;8pL1OY1 zb=7^HCGv^?>-+!gzufU3{+s`|_vyU;9%6~I{6s4)@wjB`v*nt0q^VXr=DI%p_&~@v zm+QC3BPaL;vVZIyQBXaab4uFPdrrUY&;xe+i}S)B2!9^QaI|C0Xn(NZZolGV^;4$h zG?+3+wB{e6t2T1C(_0KVL>--qf9!fTJBr~)sKf#RX*5_~H~U0!Z-YmdKV@x_0l5#e zK76(=HcE(xVu(j-cnyjciA@bz;By!RJvW>voP-v%CV#XHRuUuWVO#b8#SiGeGE(*U zzirif#|MHtiFF;pu-2Dd6&Kfl#)ULqVRzh^UAuX+@;O(2*nR*@h?M-6{sH7l7bv0* zLJ^od3u>>N`h_v9;Z+ItaRhgZWqWeIA2pRhkU1x5Jhh3(S_n0OI|KCC2cUHhuG^J{ zh|sivmVa-^+&(<)ss3c(Ok}#a$BX*VioatVy74L1pe-Zir9Rq0ff3`K&eRQqcVT-Sab8IfY_qM^~vmw&HxZ zo{6Pvk*MMcz!qt~vNiW(w)Del&*r0H^ascMq<`g|v{{#I^Bhu)Sp;L%sQ~1nQPFK- z*&qdbjLtNru_?5q?C&T|T;II;7oCSb(2aj1_&4j&r3fCNp_2`RP@6ttCkYQzHf#z| zYdeCvPLd`J``{WtsVr9%!)9@Tt0k7fHuF1MUvioe^_u&n2_GxE$&q$hC-N5KkOYrU zp?|fT>WkH1sj02n8g$r3U-f_N{Z;D)X;^4>$(Ekp=fG^+C7Bs(Eord2eDEDu_jx%b z$ooiiGW~g2f%Xs3;oj!NYgmD%E2EAghA%ln^oD{!r*UAK&{~6fL-Dt9bu0+Gr~}8yp_M=NKU{=mYr;iU-dgb-}?zTjhk z>~H*{%EfXr`8dn#ny}R{)RQRY=!g=3>gDO|*vE5wbjQzZk#ei&zCCge_2_DHU+K)i zyH>_X61Z?3p=F^lg)9=PFXD`Vx4hzNy|BgE`eb~dme^C=BlIBIH4VPxc42<>^nXVL z&AbtY)Joz}q6^C%^ber%StrUzRq2N^Ps{ytzfLnHz_oPx5vhK&Z(XD2 za`lqtSILs_VrmUm zix7fXX3NC3ntfxCoU`1c9A}qSR)+_VNt^N*O~C z*S%>^kG@nS9WfOEEkM%0LMY|u^kcf-Gk>^ZFe6~Ps)?LQ*%FaOajyIO+_4R=zy$d< z9uc^UMYcf3vr;q!BaEuAU&N)ib#s48kFY+82wj(aWclpNkAZ9Js=8bR(_FKUmA8!W z_d(9vx}J@$cF<9U@CDQRv)mfYy33=jp8NFRZ9}YgCTmwI0fV>V8$t}&02ZLlmI;fZ zH%M4*aVZJHCghOZBKa?b4hs26lca1+<;94twS}1bu8ulF9$O^6JlxJBAFh9F#rRSs znR#3Svwx?c2S={HV4-zjEmsg+R;EUvfe`xhw3$ByMG5-j1$%ea;>is=Hm)>HU<^r# z(mt@D8*aX_FMCjI_bRBjM_AYu`4*HV50WTxg;J3fOW$LUV z?@GW;kH9$oP{}qOh$oJ#O3GMRt==~VDQh+kyL699YiaAd=Ao@;VlEYpb|$&3&g_Ws zlVP!L-;>FKK?^GJ%0D~Z(j)_U3)J0Wke82y&moKlNDOw*CQ(Kh|?NJn0aI z6h2ib9TmRGEz#&pGsPTy!v+5bfbjS9rYC1EgLtBB9F8XDuvo<#UIDblr4p;hFu)Pa?|w97luH|XAI0lY z!OEJOc#;+bQ`qwC;?H0b-?9oDa#9yQH0t-*#xJ(PYW>88kh6MG1U|cq1@SEO?2xMt za{YNE8F!c)JBxolMHJ+e5jAE~Oe<~O5oI0E@(&@_OuT$jK@|GHbH-EU3#ZWD zlHohuKYk`1-7VuwXhTo2k~1C07cK zF`1XQH*URmdS#w(bunHtG$`>!6xnr?w#<%}hJ1mg>M>9~bd2$FS^okz$X`jeQLiMP z^vZE`ATNLN#*za(ukcs|H_M~y0xF+yI!t<6i$RCiNmx1!x-|)Q70xn$ib(}tkn^jb zxq6K|4(9DR_uJax?#?Fs8z&|9!C*k!cWLq5Li`UvUiaxAVu!+}3u%+(barl68Rq4_ zs=xB6($hMOc38swyFL-$FYKaW=(A$gLwoNg1#y2Z#Qp=-BaC;giyB4=Rr0Ht`Y7w3 za>g>V&$VNQHd=C@Ou|&d6n`h&jHf-3^MD(b!lOO+rwyF_AyuV4u8D`8v608Vrn~Oa znP0|u`(%mOS9j6$)dKJQ^3OhRB}LKSd$*J(oUWF-_SGa1SG_zS{xE)pME7%E*)cYM zr~QAeuC{PzWIK;x({Vw0zrc9O*rIH_H6Y%+XfR#t(QpMItg&n<`mCm1KqMdYw{$Ni z(Qowif6Yet&c{i(SPjLtQSwUUy0dDdrNaw#!t--pZ@0S$F`fzneEDZE5*Y@j{lH)5 zc3Hb=BE}7e?+w{`QmY3I-D_V^Tryr~Y}0>tuIkX6GHQL@xqndk2SA8~cKb2#gXAT0 za?xe}`UUF1F%E3v6yLL$E@(ctF;2yIr4@{cRrO1m$uZhwt}EugX5HKIrigZ57{`{U z`-|z8o5Ec-jm#KtkVH0+=%u703D{+<^WbO;^Lu;#Ty`ySqC-{<5T@8k6MU7byqt02zNBKozpfMNKigxfo_ln5a8^;kWOGe6GIC zd9nQX!+@Wn=CfxkfiR{G(`9); zLTPMmp7?lmUDO=?d*j1@%TCjE&*~mFWs`n6d~~OD zjdVF|``>?MW?C(+rzdjzhB$w7x9@Z6{{Z?Q{HPIgERO<|WbX}kNosnzgL5Z7U#gs? zy@BA`?fd=I#n3OWtK((6%UqXLx9JKmC0@&|P6Xc5_5Ba$ z*RXqNB~Ig_N*_eqFG(;N@LqEh{rQmBUJ-ZL|9$6%pz)llOX{jYyY|SJS#&^bf>BoV zZyDF9iy%tdNHl`Z{a1hEe&-2R3-IYoj3Yy*w_t@T>!N7my_4D*5r#@lz``Pi-POv_ z`I*%&b|=HAlZEd0Mo{{#--=^|=b-6u_V(_ltt0K}O2T(rg4?H!%_VfTr41tC7J_OL z$z$J4lw~7_d!aM!A4s7@$FNIIS(vIv1g14ec4pxtdn_^nzixk`iJlDI@;sju>4zdZe@8djCSVqwSoZX^SaX{uqE@+Cbb_izZE};Jd!R(U{|i0{dvEz* z!`A#QA6eEPeDMTr_|?igLfP!pxKcQ)n8_q2+iw9spyD+YdoKSl9p$IvPbYo9DGwu- z3jsZ?!QyYyeIDG!LQ-IKrh-) zp}L2E0N{J+;jDxDSroF1?vZA1@}kB+Kxjja#$1KYXC`4X*ccJkIZ@{atK_+Ooc94C zm$6SA*>LB2A{hg7qloZ4inN)`FS%wmfW?czsTRhel0kn(7caykb=~8tU)fTdvf+01 z&R+X_H(1*1`2HNGF}bSXqC2Uo*Da)a<&9J1i&e8Y%Rb(K@0&DbOm%98PnD5PM|?Je z=+EgVRD8|meC)-p8<>%cecYg*5Z?6EYqCH@35-wW1Z`gTI$|1*WK^E*_SK9}O8=r;gMOhDXI4E%_y+(RUv+g*SzazhyDz3z z%?W=AIUN$xG|DV-!We%rg%)SC-aTjcaiE>j9fppqvHB22(lWEA`ms;s`Z|WfQs@`c z;_M^K3eh*!oIA`KxjFpO80oa>|MuO9VMh2wr!`$}E<0~ZMj$gYcgK;zo$~$Y;Kv9F z7cKn$W@KG&xvp*8&1&9b6sf`!>|`=?RSbWxsc-y>tl4xpI~Kur3)MjDsUep&V!`~v z=6`^Y;y;YYVt}GT`~ts}e4e`Lrku)qg!sz)Sh4n;tfn|Dc8>X*{CKD5GW`6UOv8$t zQFWE})pfZ6v)`u1F8(ENqQw=N9MG#Pn;&{~06>52 z4|Tn@Yr~$|6XY!P0AbD@Uy1hW(o`HwQf%O>u};>*SmcbCjh8H8vvO>bO^W;UiJcYf z&0^e3mO6wHq@*kej-NKRvGUhYW0Bggy|&(l8BHn-i%LTiPDhTdsNVaFX5*VCW|UZ< zSWDB`w0W1sRrg|-b>ytwNaE$u308mL?N=2*OmZyAE&oll_76a|vXMLUW0FJy)2Xz7 zw%0^V9rK!SOo1og_=7WXOba*by8jG6HDQhKA^NYpgVK!TzTXCF+&SpUyRW<0;6$Ex#E!1m$|%$tM02|wo*S;i2Q_&|(VZeM>C8LqY4 z3Jy)!qia)w@sH1}Qd%0#a_vBt$`zBFE^g*e*oP)b>v3% zWd`zN&OxL+fj;kp7A!C0F4+q&8r1FG>HNpRhC5+lIEh%k;KPNh_hM z+p4O@4o_ykx#iaSBPhEckwM?IajOoGo^S9UfMweO<(5>xETE)!1K@v`)6{ak{Nvsf zHJ1wZQH!QBqz(Uc;Qm6#IAw8(ylI~4<+ieS#R1zhjZWlPVQ}z-q$8y)?~K>s_l9Y7 zR-YL!-PTyoLo?B&$XvmZ?ZB!mF{1DgGM(UL9j$grT}S$@|DfM+SIehJ(@XBL6oY)C z)TU@Wdkce^ZtRKI!)AYTa~p%@U1%X~;^#+z(sT_==J&>T)z+vpF|3^%_G|sIIphc5 zGz_`QL2X$NXZO!$O%djK1`~UC@~M;X;3J#HmN-iO%f&ON-6!PL!rM{^F@9(rb*KV8U37;s8#C zvtnx5%||9pHZ)M>Tx14@EQj>faWXyDRa|Y{+^W7uN2vVB!UXdlU_nd3(e=7 z+9F9OLeu6!M`C~E(AH#;6TzIW&i98hYGH{U%Z8{j45o4!of(2MFP+AyuvoT0Q7}z< zstnnfI&~}(!G1nO#WmM^Tm?<`^#tp+YE_D{{azwZ5Tl6NnUoSuI_}c1IcefhuJ4$m zy(TEo^CH7XR}S2g#L5&&#(Pru?P4P4p*uC%0B( zsiqopTz55E(u=0!oZsWB=Id_D=ViU@)FT7eIRwO+YvhWCzAJcx1^$%vSf~6mn=UT* zp)x+GRd0W;Hg8ptSmA2_0YAwy#oBx*-uRe{FLT48PETC~ZyD|oll#aWlf#fId9^<9 zuCBR!ZTREoKLC8v(TTJHyGg_JJj(3wVG1vrHs)ML%oeXfEy8iw;clQ+t=h?yp+< zrajvdH+UpY-lH*9G4(gzFBYPl34ez>vhsfucs9c#Y=poET2_i4>fh465*7UNmvWv@ z^sj%%Nwci09zH_kgw!UuwY9akrk{6pl%`B;NaT9gt*jexdC*ac>?l#QTN?PAeui_I zPJm-ZiD0zXp!p;q`}!~l4Q!x`shC@!Gs%swUA*&Lc0+@N5^Gk{;_ITPxfx+=BAko~ z`v;)!JfU_KH5KQ1gGq1g4eVC~ho%%;DinWWJB_8`bBs?!NS%OJ05Hs6J;PtWl{a-4?pxT7E2hEr62O7qHb{vAA&`T zPPx^#p7lLLGEe*Xv3c++sD<_E>KNu6y<`N6D*W~r6WJ#Vwr#8 z!)|Q*_(PP&8+S!&3Ma;MW)>*(#5qedvDyx5hhUZ=%P@1e`qUn;3ZPt41^eg$aBqTMV9M&HZ z!51lxlieL8DxZj{ROSZf8mT+jXU7v*Mv*hce2rj2p-M`@!@HbZh{ z5Q)u7+bycfN#0RYK+FqAQF0wC?cz_IBbVDf98ITsDRhS{b|aeK#V0S(ndkP8-lZ7Q0%m#k@6=r#n_^EQ=M+ZG z`?fF8<X&=?yh& z=w0y<;Pfc|UPvo-^^Qxg(0PBtPlys}q$PjRQb*Rqsk3yZ;8>(7Fu*rXWcrf||?A=8?x8Dz1h%kvC8PKUcSaZ z)LUsaeF}Aimdx5=dE{#97q?bAQ6_LEe6ubMw?QGX{1c_~Rxp%RzZ=Snn(ELJ} zNIl+N&o62ndvze znSV};{Fj>9Iib$Er646QDtn1tOVdt%*Za}^C^?TTbyXSIo%Lk z<<@?=AY(9lff%h%5Q3A(qlo87~>Oa1M}|~ItO?bT)c-plq@#`ot{CMiF>G> zAJP%5BAc+9e2#l*8Y>%RG)U$ru?V3O*Tdx^gQDLTj6a1NUV5q(MN0XlP1sGm0%=B) z>TwE%(X{br(Lo#(BS{E)SSIM~nmVYZbp#%_T}FDvNh5z0tfh4Ou|F{Mafd5-MA^&A zMZZ#;Es1HBEe)E!FPsWfa^(oyER~IiD89=Jbt&D6)SS#4DvMYX2>ED_xtRrZ>y)ZY z3rxbJ`opdiihsLAksb4q9;2KO9=!->y9d@uGqAYK&utI&*|Y5Vzv z{i?U_5veLr&MhX7r6tP>&HD#fK8)ps)C(Ko6S9BE8x%)=BXz0YP}hs>NvKNzCBxxh z?Y0}i(r`sb1-puwSFC{L{%~8aklrhC!=$rnN%4)x8JV=Hr5ZEwesyXV;9V(|CE~0K z(aTEN_%8R(G=4~&k&i3uX~oFkhE^g#?uzIo4SG6x&GlECbcKH@HyG0_v3@uh6lbIy z5iWnNF#!(j?)3iEYJor&MA~&lS+5Qi4?sCUm$$JoAgN-IcWz}n8GlW%M2rcz9*eGF z!cHdxb+9N&@^;d>%rgDtDlfQ`_(9&Qr&M>AC}HT5@=-0D(dXJmxJRqn@!=4xv}YFV%dI6cglFVK+y~2fbrg_s`Y>NRDYE}SG(wN)xD;zNw;8Q%#tl`O;Ko> zuw0$!5(zuAWa8>lwPmWovLS0sYFPh_!RND-Elnv5L;li((s+oO=aLsXDJO+&>3@L8OGGWjuFLe;RibRC zr#WqotFXUYzd)CDb2xKX+QMPwDqQQSj>*6b| zcF@6M={&Y);m28U*hs5xs*&d}1P)CcNYqOyO`d@Rx4wMD1$lkpJ?2p&_B4!*e~JH1 zODDV9*3!w)Ss{(D)r;4{DX_xGGNHyhXL@B*pICUch4PR&6uTr*CX!#2OjuJk%h=gh zZMI&M%xiEcGH8m@%_{SPXzPFd7bub(i*lsc?2goSGT-H@CLm>RyNbZ=iN85(dnV;{ z*owC0sQb0?u>D6Gv(C+l0OTdP^fSFWTg-^)l?^{Ck=n|_qxNDmSARf zBaYdPA*1Xm9lw=V#?$EJGs91IrsX6Q1x`V@_LEZM$Pbs##vrA}8<+eaASHM!728se z(XqBx94CE{g*=79<{to=&1o4HfaLGR7DjAjP*Xg4Nrewt%FZw*r8R1Ki=f1xfDr{YuLlCWLm}pYok0l0=Tv>94%{< z*;O%i@?~`UQG(8OzVyJ;Dv96qJRNHF$cj<)3sY$wl>DKygP*{Yx`!L6LBYpt)_i() zJ#54jieOarwlrg5GFDPJqy(ed+^BElggJid4DTJ!gcFwDWxId0#@h3m0U)o~zFj#- z$G-cg{ubtWJ&m#T%Uw;K&72cwo|tY`bR&*(#y;4`ycG zwRF}aSmZhCcy@m$lZKY*PPf7}lF|>q`i7(Sp58YO`$qmi=lha+?0SA-0@t0cG*>zq z^vv6g}W>k^E+1fzvB z{ct%Aaf?EbyGn&L?)%18KRKBM0jhK?FYKFaOPUQc*u;M#u?g9E?ZPkQHa8o0d0LL* zF4l^!nEf*4ccFe=PHourNjIIsj(~>QCqt&)P%Z#Y#6 zH5N$QUAr8v6s9YkA=rL7KLo=QTEsR*D2Bn&z|$_O*a6drewOYOU>r$4(g(jNm-bE5 zQtAnMDYJjuLjv|+ah1;$RISNswH5`TR`w87yGuJ#&cRPe-6@2d>DE83eWz9(@B7xQ z$+9BLe52aJlzK%q!D_OvY;4C|ZCn>R8gzZV>eu`ji&s!1iKj>Z29ak55fMyQHPAJm zXHG^T7`a|w8_l=KwhUt{=Q|@iS`F+Owm?=Uv4?+Qjdlf7(8RLdaQfjX!#eQ`v9L#z zTkF<&XgWc8C)If@-75(GNHoRJ3tyA4{A5Q<62R zHNE+Vo($P36%B3-$15XB;CR6%##_H;ab=T!NbPa?JJdyak5u{uJzt=Caes;JZ*g1e zlW2d`qqc#aSn7^gGO~=k8GX;TWV-Pf_WY_P;L)`SS!UJ+H9M{AsU1)ld(Q}~q&AhK z575CJhGx5dL`8C*%=Cb?u$co>MHf>^#BpEmE2xjZp5rwrIRQC@H|M0ON;M!`r^YCs z!V^92Y8Ti4E_{?Eak{*F*f$@q7U-64veJ1(XZ7cNV~(#3l~-wK%=7S`%S=Fg zC27IoXM90o=Gxpn)!(E^p6TuF;3AT}__-5nb@XPd`*9AN5j(x>pKmNX4$MaB=nUC^ zEPaz2aH7OfmfgWDv4fIY%S`BFFW3nkXUbTRH9iCi##@j?LmnvuI^pe{5NA{LWMh9h zx!;AeNGuQ_07vXNel>E=bGRzRXb)KRXk^9VZ0fH;gPD5*3T(oSC63nAH_W3Rq5ubn zL@D8eW?aHf!@xqFBEy~e*=L8T$4}Zw3-Q&uljIDKYaKt~TkTe=`w>N7J{GaA?|-dk7d6{nCG$YpW1Jo**;S885VrdC<3+PXAzx? zNctImmRU%eiUvQsI&9SKVn3lp?=&Nl}`;Xx+)r8o=9!vXuWCfTRm8uJ7xcr0<+#oto=a))!0gS)Cp>) zIB0K*uTVE@eWo2TT%JrvP!xY!?pICDyq+^tF5lv=#owP5>it8;-J#h0t*fkeKJ&CsjQ9CJaEeOg8mz9Qqs zLwX&a-s_3arYltxjKhDSyNHhRXW-h*O_?c;4NWu-?()-hbf;JpjUS$HQgF$yAqQn_YGpt``7c;ro(_m^3(P|8RQF!27m5L{u#mT_crz-f_-5dD}e12qsfO7h4q< zhKIi)%ldbZggIfgNt1pApS|4+?ghsQ^*zl7J^lM%I9h*k2z*}dzX4M$31_XB$bu06 zt-^-{)oZ3SFEWX@OWOhC$mb>TCHQ|}iY&bBpNXWb;#N18An}Rmy?w&`l=fEwY#6M= zoz(^G;?94n2?XHFMgO|>9e=)`))^F}F&r?ySUf#yt-euQ zh~LXHo=1Q5$UJJoIeq9XFI3d8`zUmq8}rx->c&G?pcW-3XQrIy&GVg{ z2m8$CQ}%BNsrZ@<932lZ-kO*ybNbFlZVg_27dL3QRf}I7gT66A=qS@ct(@ zk`O0(2n@40DXXC7yAqKIB5o*|aA!=fhLoNezT7iMi|eT5O~I)mKeb2gQp=O>;T zHoXa&#t8~!NCR?SNGicUK-@C~cdG?0=-p-@r0eE6Rg=`LS@(Y_+$VT#;l9QwuuPb4iJW$NW5h+h5oJf8 zZncEUq0^qVFLM3+w!EKB+XQd94e^mq=3XGSL2PZ{&dI&5GMm2scOW1JT$3-c0`}?xhU7~M)Kx!cljZJiI?KiY=aw5)u=18Q;vW8 z(H>eko*Z;#*HmhQ89lN(Xg&yi+}4|8%XE~tn}dISeGrF0jl)>=J*!2(|Iwz1 zMkQ2mE1)kH>vl5xdwiy;L!`>O%M{mTma~{LlgW!lA6c!h04aibg4mxwxs+fHBro3$ z*WHMSU;Y7xl}1U;q^sd<+z{I1>^OsmdR8 zuzFJcf#vuh2YW!OGfWakwkH{J*j% z2qB<&)}rP5JtBc!wPs}9gMxnmC2x`U)SH`hZlo}h5=5`VA6m0Y3Z;HK?VL)EH>{7Y z;34Y({h{R1Xnen0WY4`khX+hoe?;*+Ad*6QU_6r8l(pU@eEC7qEvFyR>f#U6opy5$ z)(e(5RcDvzmo~K#A4;1paoTKG4!Hu;&6h@qt^)M(8L!5_y=^*CH{O3DX@jI$tPvPX zhe?oziE2beecZDeK!|RM9`U_n#M8^hvA5DVT4mn1-o+Gq+KqK#u=i>LHb08%!yv5P z>Uw>b3>oOez0-#=`a5V?IMmD)U0fImE6IhlaR;OGOM zvD&4q#qXVgYgsMmTh77^)L8*3jinWrhuxutgv*3siJ#76NeX}M=Hl=gkE@+;6kO2} z6Ld5%aJhsujZB-PjCRxw+~rwxxEo9_7*PsFWOas*L|fzAt87Ir>}s%0d%>Ln)we@e z_q|_QnBc2)1%C6b(y-NVPUkeO7AKtWXbe&oXUV2P_(|%Q!p2@nTmXJ>++juG2yx!E zO&{1azAa0V%tvmm^8o3u?aDylNbr`LYx>kNwz{!;@;fcKfC`#oBq z6E)p=+rwb;I#401G9=JfT!Y9{RL`SccHm+;$;d2nlC6J?OfCEi_$H?)y(h;P*>99h z*Jcw%QcRZh*`t_MK^z#x&JtBT=;@=@%V#93IB1V6~@BAr4EavoW|4Q`y3_|@v{C&E135o!D)xMy_jpd9{*Oe z-fH>XlJk`LgVtMHxhF9%YH(Hu(@qZ%T~g~ zzDa*{yR9#RfnF2Y{UCzKNB2RNwKXdlevaLRrDtS?5!%M;+k5X%UOs;kjX*xiJ^Br!LnZtIPD!vauE!M*UsPBi zxGj+`FWv__&fYlDJ9*zP`zF)2mb`+Eihr<+x5O_tD-K%1Xu|NNnm8^-jq4@q!35-} z{&jpjESRFb7|GY8Um>rLO0zh^YWEyhnn__r6wrigRkCSlS4x{SQ-gA=k?4}OtYv?{ zV&q@$y%R?Gn+~5DXZuREiINN_KriW=W6{SP)rS{ft+uK?f>~Z+UW>HpQo@ew z?_|7TKr~VAWIdfVEx0Oylkg-7TN$@4-iF>eYRYW*kV0#Vr>=ql@qJ{R}CKWZ7*SmYESpQT(b|XwOPGemEa!+b>>_oXApgrpd>$T-5)Ni-ychO!mJB+;qBTW|FwT(IS7;-}4s|qEq^%d)vx3 zPDGBQjr|f#@ps|^t;sH13neQ~y8Yr{AK8ip>DHCj9}i2^Fsn9>Dg zwQt>mgH`G)ew>)Al_ox8IQ@QkA7Hm}IhqhMr#5Xl5`~J5d5XNkv*xvOsh2tm&=zD@ zjkdFdb8!&9B?W(tt%b+z3jxq=9DIb;x5Bh^ROXE`FsFvuT||^m`GuT( z)aSZ>-n6Ab+!E9(SyDSRLR5_NKsXv|$TyAv^vY`FtkcqZ5ic5pEU)Jfc}0=Qj);lk z)e<7YOH-DM205$#Ztv@%33jt>@9W?&!kQy}R_9jjA7g(l+gnjg7#eTt6hA?lC1Mgj zcw;CUkG!!Nea^^WgBJ8%VjzAan_k@vd)d#tK(h8xF8W#ZDrm``6&EK#>cT!TZkBT2 zcEMZ$g2X!Z+n=hVzC1LtN1>MC`<8j&CizKoIg={8_vhx8TVRN!HfIQ`Eyh~+Pg-0J zW9z}nE^L3`n@&()kBFDzva^cYxA}#_Ed7(k;p**u|Mt!pcE_5e30A6l%WT$e9Smpc z?csSxCwhCLIifxy3bi*YLBF$_m6-CFX{}Xyt^0j`2FYTiaw5U<{O^vCYhQv2(Xv`w za81^(qsPug@dRyvpp89CoxSPc=dJ7oU6wXr#ZiCuHJfrJcCJDBQxQ1AkcR6fXymY8 zXcq3tX#IjiX;u)hNjkfD7Ufphd6b%8)y?>|D9z$WqSmH%5lX}fD~q26pQM`7TS&7*Ki2(%Z!I}5(o@&E zxQ<6R!acG0KVX*7-Ze$ag2f_KU{*MFwb2;qwx|dFD5lJg5(G zzamHH7soiNPbH%AN!%Zw>A1TjmB?X(hw>LSd;*vpltOUtwl^FCl55}o^#f>70N{UM z;85US_U-@v9witGIPy1CViG3ipMnaCXe^|LLI#cy|NE%;H!!dtU~}nYEUbmMWIyiB ze~DQ|Pn}PEBz}M*#Ef}a1t138Xj$q58W8>g$guKV7=n4LMk9c^@&C1g(A`SxT`c3{ zx#!7`Qsg*2h0N)ok?S(&d;<6}{&as;GU|`Wo@8=*`mom|(9coWoLB1Se*m3Y!K6{~ zYzTHMd<)@vntJ`=ve7jQDlNbLNa!w zW&Lt#1+xn;X$9lzLgRJn%0EC#&ycd*1WiZ1sQqH{XN;)A=&BEnCaCa+^*VnF;$7n1 z5=TO-WXh=+aoKKMxJ&IHfcM9I-^YL?roGZXfLIVMi;5qGABsV~AsH!40YVi|QMSj} zMwwqQGvelu>Dy{`H2E6x`2*vHO?EIe#H`^Io&$2p_d7_#)`a8~*+Bc3Xa<55Gp!K^J{U-kQVmVE z^Q$MJT&f#w2AIfUN#9>uNDY!743U~1x>o)S3C~}HEt?OUQ9o4>hdY0Zlq4q>lB7?t+yQx*%?&^}$PYEu&hr{_W4XKe673pB zK6Eu>Y3ZwFN&@3e_p+TWf!WHxC4o7Xl)KC-yoL+k>om9CWf<<+sbbh&Br~Q>uif^u zJtJmVEq4RiM}RNK{Yrn89cV2pm!Hu@%UZyQ`esTI4pXv$Z0A2Ktd@<51z)~dQU*ek zj!m7H3pXL!glu$06~fiQj!Dzpl&U0FO9E}OVKz`Dfv1_09Er?7;G(-$LunZ<+nL^w zLrKEjD*|mX1EJ?%4rk3MW+gc?B{@NUVofw-W{QiU4AIP1MooYEP~-h)nX>yJnL%Ub zv~h`Ccpm~Qg4&!=FQ)r0c&~z+YRLsY+ad5nkR&TkbpNUgW8k3Ph48wZ&5#vaoo<|n zXVr_6Y*7M>T{mpi!pZ4)MTOyw>Ifg&@K!c(Q{)p3MYst*A=$+j+xJw9h|L2b^Bool z%K1dYkjhkCkvo4j)zyl9&V{(W_?wm+(s#APiyLLwCXD@o?*8|3JVtr@F9ecd8`(~6 zHx`a?rXh2*UnK8#+&=S*swy7sBfI;x3RUTjBl?^bFNNaqz2e4V^77CGgv0RKFZA{U zJy|P)a&N-) zMwDGzer)MqVdYXy3^?*K_l8fd`I^@YT16f)Q5c1HaHt6?U1*jI-_@*c<;ted-`UN0 zcU;FilZ>d`3aa7?kvggn{+#AO&C(3KE~V!ivEGuXe+AtZO2w1_-lb72qzyBw%leOT zH__P*_HTb%;jjB|XfvJeRA4ZKDOaTOVv^*fF4xD4rAiSJ(0S-DU!U^aOU=G_cavO( zHDHeGmxp-@`>?B((^M_&NK{y8RK5@G7iH+z14HdNq#7ysc;tuf$D0s+3wv-Z@@4f= zqqPjz5R%x*jD6_;sxdAll9uNi&4)w}M0TZ@n;?HrjQ3ZV7QYe_&8X6QP$LV^1-9fy z_A6BhW5FjIeIQKz0;7A6)~M7dn-Jz;iDRL$U3q3Lg|WTSO{Q|ozg7(|rzu~!!TBwI zVEkLRDE-=Zl|HPAb~hnP?y;{zRh7n@rr*9MOU=!T=Q+u*D|v~dw9ej5HR^=m{dPep zqnm%SdbCa;^hgxZUa9<1e5!&To5m_PG)h%V__wRV_IUKMtmaPP4Pt1wZMODwa(ZyH z{f>ca5zpEZ`1Eh{eGJQ0q#{tu=3c6jM`E_lIjHn=pU9R^l{Zf--*s*11c%%b~@4rE0#7SwQ9J*n7mHeayR`rss%#c zi>AWZQDyiuI;gmcJN-qYj@pRyn(u$V)8mE|mqJ?z7mcP{u*1xhN@kAzq(uIlZbwN1 zKVald#3{Y-Hc@c#?DI>=NfoWK&Up&$AXbkxn&2>CN@SnNy$R48u0N0vi^TciHq!}` z%dsn)oA4IHw&K1E|33C2z2*FVPU8uT>ms-(_lsM-t~||7U|yp6LSPgMs(gP#huyE4 zxu4g5VPQ)9-nN$Q9V^<4VGFgG7tb^1imVo(?;m=MWF{Z5adiyxFQt#u>j*8&zlEIL zj`Dl-;B!IwMkFfPd4ZDTtn~2j`Z6vmO|xCc+0bRWvE$nHrHqdEhPLt%5ICWSFLI&x z9UQ_Y;vs1H4c^M~&9wZ3A0B^WDEWL#K}PiH1?CO^yMTu)Z3`X=LcBmfyQxWNKMTmj zlvgPwwr$&%q$M9=lTC&oGQopRip{+qHOf@&_}qTDmt4#CAHeQ{!p!VVcnme9?HgLK zo7dMcitW`(Hiz~lE^#}+fl=luNVUOC$=Q^9kc61Yeb15BA2{Z7C6A+bxqBcbNb2tP}z1h zUHD@7Vx)#5LsuRv%%Xqbyo7G(*%efB+eY#4UMcI!W*5nIvr93e+*vTdd?dL?s~I4H zeuayjG{u-i&8-hofawvu!xfnr9hI?sB|!DYO&;ltP0hP!%RMZb}1}O zOx1G+*PGZ#82Jg6V0t-pgdlz@{{dHDsJ-ZTqHi%BgHk8awS<3bjb}TN`Caq*GfZ0N zS>;zsa{e{1AX>St2{W&tR7Qfjm!|B74|9n`0@V$rxY_DjLhHfgFRYcsW0$5OQSO}N zKC;Gv?2_ZMM;6HX#$@PTWrh3hkb%u~3X$OO1&U2{D`WSwbd?dAv3p^yT`B6(*8N0g zjwliP!C~ZngO7hx^J;904K0!InVuhB6f=L9w<3R=6tHd2e99~DL_G@PVvseg&Z@4E z;(STD7#XjkY3*PmTa5eX*(kGM(e{1R)dlL-PX##`@xBIAMlkZJY4Z zNJ**wVuFX*OJQUG+-d~j6-Dj=!&-L}A)-Ysv7T)*yUBlch>zjJQ$s~4b>b`_UT`74 zpJYWJ@)yZd)uu}WRrvODHXfb_i1TnqF?}ks^76d7UH$Y~+LDMa-nIC-1Eu$Up-m3; z5tyn2r#!<`B-~O#(m_&>{6?iH56q62-MzDz!)LB&sPgq(*6`cnox^%CH?7A*CCsUA zF|Xz(UY&p0mJj39(<8u1OY)?XFoC^17iM}g)uVHehrgN1N=j0M8`IWZK^#GZv;hiG z_F;l-G2?K0e!zxr-0(BTigry86h|&g+esW`%B3})fh1?6<8$=L4H0#j) zIwOXc5}Mm6w=GLK254z|o(=|!R4q`>Qe@L1Jf?qknL6&s)YUSJt-NUtqNLFX%MUXL z9-sMW_+PGq3QYQFj-t#sOi+gSSPOh2D1#6qNckSgrq9F7NMqvPv6~Hnl4V{s%kU=<2bGWwrn0RK-iG_t}m zsraq^u)j6XmqGtvngCZosJ|6@7T->LHvR{=H`f1uz&>G~yZ#v7A?i?kOa35G6}T&P z6H-(@E~r#DCC4ZFeF&-#%U>QaiM*%MyLEFJ`3DG2>!D!3|LFHSpuDUJyZl62FB?*y zncwn5?NVF%I;G+_t&HTKHXPYR+I@NX`z)DU3WD-3DG|D)62E^n8j z@N43K-f_BKLlRu=Y?kh-YG{TA6M`Ir00RU${r&GBC-gB(4_bM62~KGL0b|!q#%6}+7>(28#2@;)uuv(DB3qnsPNiz1hCm>Tzq(p?(5soz zs>qEV4gIIK=pnRzOy~R_ONiq%9*(`8v!pcQ)A$l$#Bo0Jyg%A7-e`J6$&ToGk;TJ* zfR_Wi(}ED*Gz%#ev@NDSCL#x=qq!7c7vZ;F9O;`{QU8W1Ia~$d(Xjs)!e$^Z5c)p3 z%9gByhlt$A#4|NUK*mN80tLj+Z!N8Sdu~KTu479-Of~|t=ggek*Me?DvADPFBgl>) zZCx$x1^M8M93_5f1<=K|Bez&hM7YIN-CbQz*||$j{!a_0xLs_$>WRYD z#_!!Lmg_>^CDVpX5luP}8?T@9|HHyJMOV^x-R{`7ZQHhO+qP}n+OeGuI~}__>DXq+ zc23^!KX?10#;Aq4=9;s1)x&>(W62+v@>+PIu_fuwBzo&g>i{lsPaI;AVqhqPvT{Ws zSYWW$z;NxQrN8-+&hL?HJ@*f%!#12wjdFfS6#Z6mQ z5hWQ4b*wxQPDJt?&#|e0)U~)(ZEDf}S!R|W%Bgu8O7wq@Dn_X9cY@5s?6QS^0h4CC z9x}y+&lH#hXWZ}b4ne6uH6e8EDNNq=vkjAxYVUpWu=x$AjX`tLYd!7!uih9?IJwL% zIGCBHRBQBCYH^$rMHKwL+8Cts>?oPYrzBhQqIN5Mqe{PqS#(~1r7=iltkUDvtcvrG z!zJbAhm~q|Z6z|gI+_^mGpbvUpiYd{J7~>JKEv>Qac#nW3R@rNp;PX`Cu7tUmFsypd-69SMx* zJ8V+fXtbkab&s zV&>k8>Ve07L;5xCf2~QMU#G1lowMaM3nSVwEl(j-z<0dqu1lwrEWIWUQER8VH%WBh z^nm$QZJ(?B@UtDpgs^u_yzFmE$9Oxf0u6z}Hgu|l?t!fRdwAuTPjv&Lzww%A8SMFX2XL)V>?-sADhnmDsBY5h4(AF`r^gCYI!P-WW9bI zgPdG(I$C{dP$!+GSwSS~=AxMh;23S}J^4$ho*w$JKAuk4Y;#c)K-i7pmFIvQ#i-%gX=uhCbZdq_cXrl^tAN*=_2 z&CBPz_@JgTmn`z|V6dcE=J86&ZI_!ErTAQX?bOa>2)W9NC#k5dQy{*_rgzc$U@)Xs z&mP1v$kSkG{hbKTkj2aY4_7j!%v8Tl?HptMtoY!5`E34tR=b@{u?d8FZuw4-XCin6 z-+bu5h<}>PN+_b%RLtAjq*g-lpr%lNUzg1#-7kxk)Scy+J@+nKm`9C;k*d;~k-rn9 z;>Fb?O31rvsIS?l=c+~?Q-ZY1#BAXx2(;96>)5C=Vam(r8j*dlKhu`ar#+W=U-L)% z*!~N&uX@W^mHxPmXPYy{ zEWb)41=gGL-L0c}^D-6bv%K-@G@gMD2bAAG<8B#{6$eSKBHLx@we0!S`)c$w*Zx2!pOQ4Wr^*oZjqz>r$gEWLQRZ z6_C$}ZRz7Fx$#n&6j)^|MY{e=nYWS=h5F8*+Mv1XKH8LK#nU`t6&HztJ>SqiJr?E$ehn)9{XuD}!Y5j#kx~iwBL^1C56{Mnpp`!`4LZPxV^5hWcxv?Wz^%w|wEo z%VTh?ew9b#(O~9nDYv{+llQsUbUDj-?fzk9hG~_SLeg6;10+y?m6Wx?8#J{dH?JrX z-dH2|_08?1;q5&<_d`Gy`L(geSj{fxX43{+R9XX*H^FLxnk0OgZY%$q8|zS>Q5M(i zz&9~ojW^v!pp(jbci>fyA=syOphG!lWrM}%ESw%Ayro_yL$V~`S}vGEL+jjU^wId+ z=GtI(xNOJK^;b22slaz_mKSGjY^eC3kxg2}e{Grf(Ml*9)z*e4#E?;v`eWs&otnyS z*!-iVncyL`!4UPkmUuzE|07nU{eo#j2~Bz%^sVs~kpUo}VBnAtFc1(>V4zTd{~aZZ zLIRG;qJoS@Dq`Y7Ovb7j0>LaSs%+|-Qi9H=);vJ&7CLu-EoN+%3T)YB4;xIo5m$FF zZ5`VC|3}P13W3grmT?h5v|2?6MW~K{0Wh9Wk2E|SZuC5}i5;tc-<5l%qn>>fqlWm(mX?qzJm_yv9}YcXmE0g5~_ zYE!oljI9Zr9xyp-y4!a1v0piUr!yTCn(VNzbK(epr>q&X^WkvNHQMO_ihFS}^%SvI zLljX+vU~fY+l5^g)H_}7;l2Zvz5r^%5~97-uwl4pa^R}?FJWqZSaRkI#H-`zIDCUA z)YN00k3IJvnk~!dq7G+HR2HI~T37}?jNr2B@Ul%;}1=3z`2-r?ZsTE590nB|?! z(sw6+a%(H}n1pr+0?AGHiQW9%MtHvzBP`no+QhAM?76~#@MeIyEYUKFN)M33(SklYZok5&na_f z>*2?-&AO7)tQYDE>y)`P(j7O$C34X!-Ld zrk0^kp~H`<7+Ac9-dHlo)#$-K-sJ8naZWeawT>YnnB22r>uoqJm4lUr=jkjh^AM;# z_vH_BZlj*a?myIP+t+!ubxRT-`$s>2FG9>1MVx4VNDXUkiQ%WfyD)7^kZ80*96zhz z_Jqa2&fskOLW~z7m(1BDmt@ozNs4~~9*PR1Qz!WL43&6PBym=OUx4RH*vWvQmx@~z zAGVJHbZ&_cG^U)h>`_Fm&^US!4ffgND6Oa`)&|&STz<{P@*)oDAD_tGwd~e^MT6b7 z;6F*Lt0NxtJfDz4YU|q8Ox=9z_{O&AT1KDg14S%ry+#7|K`*de;Y`u;yKA}TRI&u) z>e}Q+JTjvQMKtfaGNj>eYF4eCNGjG3?pERj=a32!KiI|E`kO&Etu6~%z70rGXbjx> zrCUj7TaF60ik`>YU^GVFW^|o@LjkEQ&VjYN4ia;2d450pX^v{N*vxX;@R=lj3QxL8 z;xw=KiPsa;l^73W%PQJ{!%wo8j3=`ZPvN=Hjhe@Xjio8LEG;WKOM-2PcFe2Te+)zv zZO1$Tv;0fboJmL=X1BqggOtm^tPh~8XvwKV?fvBRxiMgxBTnM;q4GC>CIj@`zW}K2 zE6gTEH3H7uKDHnpdD4i)Px!aKjK5DMj;$G zv=WHDGr!7-`>OH__yux*s%&%Od;vg9%X+w?AP7;wx%qMESSE?z7rVN2NrO78gosXZ zOZ;^~yJzK}AP}02F+0Biwyy?abyT?*G6YSBn*@6miZ3$!0zmRea?(w8o)CWXQqd@c zX+I_hC^aO>u{Asu*>xX5I+z+}T6SM?Ii9y#J4!*$FTiM08|1csN6Ok;SDWWpoLsse zU&0N-I^(pX5Dk6$P^KWwAHUq=&grhz8wvwd=VOW0A_~vbo)lW&3j9WfY-US=Mao%M zgPMl9Yn>z?<>m;S9%~$w*cI!(92FU#YDI#h2-{u1hr3Rjp+9CH!x8ooPaRg#r30c# z@W1gTquQ>iLn&c@EuCdrdY$Ye@8|advd6lF9T2nJrYJg4alaEQjFVvY#5Kd?2 zf%x2KbO)d)tQqdcd~y0iE*!GgIe9h4gIiR1}U zAc9aTWgI(yDVkX>O%v#U0qPcHlx0M$JW*U*ozXOZ{TcbRvy&viJ*g}hFqtdXlS9CE zXFgT->D3gRW{i?Ur%mX4GfL<~gcEcdht=X$p4lL&0Acb7}ZFb7(H_@2B}y%U4n(c+AA-D@TsYu8pn z7+}}X7O-pFrO$=ts1xwBo6HWzK}5zvM8;$IU(ykoWH{cM^*0B05dFG(dA}Epp8EnQ z&szv#*%G~m_s4K$M)~U+6uZ)V0Y1cnI4q&?#%>iiL%mV6ojC>s&$n6i3pm^3d-w3| zc&i+L`q+F+bSa|A4khRtBCMYiV^4t>byg?Zv@d5I3TFzieT;OW116;qQLXlz(%eVs2mwFoPj*(Db)AhsO@CgZ`Af-y?umP~z|P zd`t$OAzZf6ty<&%IRf5&ptlB{;a%4x`jscV~8K;Jw*Qtw?{ir@$xDv!z*Ks(1H zO4s`W3=OY8Bfx^IV_3HgpO2W>q8O5YKLcHayb+ea099yvC`XY=5PQY%vPf4(pNH@% zEN%}EibYu9JVz0sl=EMuNJ=r1 zgx?U(JrPlrcZc8p(Y*2f$8r)CqKO~Xg{@JSw7plN4&n z3U~{uT*H0)K$zwW2C`6x z&vh$MlBXP{T1O%R5(v25sJE$!#+k}v9;zO$z;Z(C8{4BihFxT@1}>~5ISf*}*+E-J zU}avTqKLvu4U%!X+MlNUzm(9a3C2G8a`>X#I~+s}(T&z+-oCpxLl;4R#ebgJ(UFxG zTI^y&2A__i9(pU?Xwf<+*iwzGw);XiJg#A=cof!uLR{r-oEJ4Cf-@tI*T5l~DI1%8)Ng?A4rrNc!SMA^*YSy~ zAMwa=P1Eq75umP2xU6g@)RC_HhwV!8%|4%t!6_-*58}9?@dDR`#)R5KLWiuM;K&Nf zFQs0d`u)4y8Sm1Sx5|O&Yt%CP8?flt-PIzqt9p_m%I<8Zqa4Q{Gltkx64H4HpFGPRDNaGpc7mK#IZ2DOOeo{Ar zZ^@)qQ*eKC!i2c(r_dbwA-uD^0uMlCZxPzBn}Q=}!eN${t7OEyiWmLmBz=iPjn;1& z{U6W~`X>!}!H5cfD88`nx&$k%u#B4IZ+!QRDA^2E{q%b!1<*mmaLJ=2(-nsmF~$Xn zX9FN}#MAZbiWF5x3I7n5i8v@ZOPYf4_0RxcDlBfLbtlpUPcO9C9?hg&w7d!;y23tj z@Sv=Mn(wM@&YS=~CN6ougf6`~2D`!(L52hax`zGYrvCANfT45m7htM{WHyt4mgXci zH}kg9x~QbH>guU44in2;Ew@$DYb(T+YM9zx(ij!l)c*70P2q)4=MLuIfT-5(_nwiB zVVKCDcu#ASz>l?!4yr>(%W*oZ4qwvOa;L3xH?8JEr zYX;SE9p%S{&7fQb#?DQB0gx-R?j$&~LxKJz91@z0ViKCVtU4JQvJJE~<~7RJIjUQ= zs%4w}?0HiNI5pMz=neF3)2Ep+@ah$Yt@~L%R~r&Eiiga4(6%;M#k~JkQd7rn>wQ(K7?{2 z_}3%pG9EO!_|!qvMvr1z4+X5Nv76%Oh2}h*PlPN2#K=ek^%#pTUX*2x^F9)kj4Hc~ zOU*x$p_rK#1BZ;6XZYEF@?=*Li@GGkJNQ-Tn}!j`#*Jv>w5APB%f3A{@k@9hN+2VD zT7fZ_>T@#n)phKqRT_5lASzZR0|jpk6t&~3%XP`M zB)$k$^GE{@`j&*wsEfWv8R6--P_BGXUsz8l!r+c`#;MO|qq94!28Q}8SB9qHc^AKl zwaZ_|YmCby5V`{GE`J@0d$<%KD56_`4inxk42S+}&Ht6V<}_n`bZg`%6i+*3)`dgc ze*W6fKz#!|t49&uIb6aV`Pj$0z!buERCU|a`SbJ7K_%>_Rovxv$_q`l#gMau=F0jM zg-0K-Ar^nuOopenC0SdUrU;mf%cjrET@yph>jR91IToREO+sFBd=ztF{`oq8y^He` z7Tr4_IsuW8mL6*{1y@&d+v#%q=7;$QW6yK)vuwz~A0034>S82S-4-H$9-PxGon zg9a0a0jGl|Kg?;DcUezAx%Iby&S$iz92 zuc^UUrin+9Et`^I{T3?x*;W4PyyPZ8Nz#Sdxy`63v4ghtQ9-kSi30 zEPn5m2GEq82B+aQz7JNRUpcI-3T~boFb5$q4|5TiY_$CnE3jp*lIP)nEs}v8TEs(r zJB@3I&6}H(!qUEyu!_cB%(a%*&(?_z3%0-!l3MWzB9)1bRu> zyaJJqLzhoFIeU&VzPv1dKm*TC@ zcy*9ie`DgxW}r}#_`FUbC)i|#Fu*<1WCs===YV|D{RN;ngM89|*=7Rv!T0aFtHMUF z0GfKxyt|D!*3uyC`joe}$RlUi)Bx%Fh}1dvRT}E^?%en&^(vn4i}0bj+rSwx$}K^m zH$Pf3z4ehY%etk4E6e3?>!GeIKA;%v(#k)$?}bTpn-c`PpR7@QqD<4fc@(y}D0;<* zHclhz;MKVokQB;)yG~B!(nA`y(>|-uSFXQ=<)Y1*Q;kfu1^dtWDWz!6YDhjY*ScDV z)D_lJ)++Ge!RsiGgo8!~GhbQd@XS6yAYG$p;uz)wh((rk3dA?koZZxUUT@njKYFe~ z!r(G(0!~*C7vs=nN)wMSk?@f~cSHr$%;ohk90*jVXt2+Jg)iBKg8eH+q+<9 z8NJkHj=QyXQ#OF1&LHpo6XQ&Z2KGVHk#Y4Q%o8r>GOb+;Kqg`EW6*TL&{L>GvQgvChxmII_P0PUvRW3IFte$Oz}3=WMUwyOqO9d|soXraVNP z4m!%X6+DF|)qw+CiVj+1s$RT=bk#qyfBANV`2CChs2L>nd-Mv7dZ}%Q{m1s!yzccc zv>%p?w6%9k-cMc(8=+F}^ut*VR+_ULZd2w;y#3enjPzscjHlx!`yPtKR$WTB2>(Kv z1iQ|E`CY-1{BzM4pvW}!7=W=3&e-Vhoo@VTE!oy{(UEwsIOW4tK1SSfav_F4f~A3} zPl&a-{gkIc)p7Hb*@E!QbTz~!dv?+N_{4xvw2blQl=f%L%KZ!QHz+r2O&rV1%s$Xv zBX_i~_7Dq5xq>Kf30UsH&JaxyQ}{sh80ruXrE;Rw;qAg3;- zhINhh;;forQowrN?eLs8-S|ZirA^4M$;>C6^hJ_tZ7+}zd40DJG8jw};O+{i1?h6Q z?&nN20~sBOxA|O3fThiZA6jsfU9hJ1|zWhh2|l+5u_y0~wh?d29bH&10L)$f5Gdr&G^!dsqYZk>&{5=68KPZVL-S_D518LG#iWXQ%T8!?Eeh!BSUxJ! zysCJ!**R)8en~a*lhOOCcIWt-zzKwZrR;=$3)t~TMS_kXLpbw+_N40qD*yCDflEn>ZVyVaFjI#!q5`F@mB@xW_zp zJ~^qnnY0gY8mTDU$*X`?B8dg5D6B98BQu`M0if+&K2wj)ucK^`hL<3th4g`FC@^su zvJh78Z9W;bt%LTQ*V})W)<~h{_xmulqgIOp*?J`OTgBYH$Cjxj zItu&^k86Z-dl1?P0c0qbHVh+|=ix^$0zZOB>AnEM1-P@PBLkevxQnoV5a~OwsXpK* zf{G@=LsC*+Tm566A%R}rltZneE`dis(CM2uraU?wvDrfSmUXP$sl3jAXU)lEjyrt; z5dSjrc+3(ZZ8^>w=xg?b|C?O{)Tio9*votYB$n7CsMxt(jJ%xRY9EcLM-VPY*NHTi zb&S{6^QrWOH0b2HAH_a@$!P8kB!Kva2p$39W2ZIJPm=S9x;Amns^bGRQ$3h}5GXgUFTfyj-E|lg zylfx#)CQdLNl8@a01p+=!_97jNGFrxX`Sr$=+2mo>zER!?ktLz^*{3eNR2m{KZ{P3vHr-;l|; zLAyk&U-QUg?J~)Kn$C9XPg|`A$8P{;H;T31s@Z)3rhC}%(KG&1a@P!W`b`5r(k5MU z`I)T;0?>BEP zx-d2Mf$&GLcepWCzrXxrKyFbF}?0`p6R=G9%b(#*cU*d zXvPjWw$x7}tDnrJutj1VQA1Gyk4Mwcly2;QLsNnLP>=XF_AS5a66K|cbk-ni;P#X{ zDRZ!eR9_}#&xvTfb@jydLSjJg_^uUy zcFGZ{`!?AHa5m7UsZ^R-QS_J__4}@k(b_}xQC2rY`|vZ_Li1Msa?z~pONKBFd7w9P zE^Y9RN`D|@PW`Vf#bxVix|jbRW%Hz+cTX%XOLZw#{0&m~eS6Y=wEZnnxM1U;-4R3- z28D`+A4aGon3V41sW+Zcn6`_*f~i!09i=NA%#Cd zyI8T9iCd-cZ0;9;R`6b4BA3A8hRnV(F?k z?u;#2;s!W#IdUnS#bwv63DfbW&^FNO&q{Z0sARQjPsX^QNF}E|n#Hq#U|p?TPpIkb zQMH)q8Mn-xL5-P-<)r`{L&(;D@GT{2ck=0|2MPUUu|TXdoCwY+fU_RTz*rIPLMrl= zkt|*KF(MY~c)PJ)jH9jaEB84MCwt3;6%0>?g6lhqHa&Le#emJ(?iB{-gP0awQXO2r z#@yrt*tKnc>1sWC7UQ?+HCW{f`MymL*ld!asG=xKyvOY+ujN}+rW-AP$GE(zrd0L; zc_auf&Ps1Jm^$$G-|v|wEUoFkU4;?G0W5UBk!!QRgVe>$iF$mKl-CUGe^5ucf8eKT zR*Vi=$6f9q#~ot-_yP<#LbKw5;c_8hHA5$Cf{uFJywz*fvyjist~KcFPULNNLG{}0 zdnJOX!Oyvnnqlz)3J}MC+JewOqs2W+<}MIx6L-S#_^5I|ZQ=Al;pN=&v?fFB$oPl7 z(BaBP-%9KSpTOa;;V~aKKF6U4Z}lNXxv_5>L-VC__x3d?yPv16-z-|#<@g!d`zEjn z6++hqidZ=dMwEmBsID*_f9UoCFUMK<=Q)fAL*Qka?mOTijeK5z5bZR;;iNJQH>)b4 z{nMo+`f&M`^fP?cRer!{0_o+hA^C)AqF}Er?mTZq1*-Sv&^78ar)2xFTDyLFI)+o_ zS!*1L^MehZ8xkHWo8=y{d6Qw(Mn!M)WBg@u)hb+VXin&6#gJH%Q@3Nr2Ano5;ORm6 zMg%UKCO~aj_hM;(*_hvc_k<0ff6j#!M3Ak@K=%@dW^evBHG7SUVcc*i_9%C2s-V~U zD6G*i%?k$Rj}$=V)7lTHed1pB*j>W%17w>&o!hOp;!sFp#C9hPm&v2%qnok@YnMeo z44&Bb+0u*1Youc&pQCObo8XKUVJQp$qJiI@4kHjJ?z-M7 zy@2teAj)Q9)&x?xHH8Er%rkk#fyre9t-eq>T{;2Hp)e@74`YEK6CO8y4IgQaQz2!` zO%xsyJBf#X+L^<7-$%To0bu}pDGR%S`y|!RjODfB3t&A@GJ&a6674p8MRT)?F%x^1 zv&b#DY=uH0iKZ@7Eeg+kjP;tZ6#<;1&KwHf_${Y{H}Erzs*T$PIui^&KbE2qh1sFkpsP)sKM&KX21S=eWD0yO;Fk2@S_r^7Qm*Ocbc0;(@ zHdY^8nlQmMV}u7U3Qz4h&I+kpZDNAoa`KN3}<1FUHO>K1-c^ zX<^tCLG+I?g1a*L$&-p-;W77~Y&XC~x3y(|Ker#f1sq;pieT#er?h>~V-#!`cJt#N zk&enX$0}9ovTna+3%p#Fejeg9E(tv22{Zj|jO{CnL>w+z0d~RLJc)>9^RcUO6i7m% zhe^Cu4engov z>vmE(In#dpr2d#o_*_w?=+}J zOm4M|J6aCVeI@a2W*SsZZ_8f zZyUQC@1s?Td4N^YJ_y8B3r^WwP`kg?OU|2Fd3_(BI@Hna|CPkDVqUj#mjj7@*ZCs!m8O7 z%fcqIz(}!PawSu>T&|{6e=S*)@&z#-tyvkrgN9XYlc9If_LT1D)h>&9O0uJmY3%Q% z#mowOPMO7Bg1ThR7cCb4Yc5#}hy$NiuxcjCV6rGW?xffy>IIaX60lBx9Pm({0a89! z-YX>pTCB%bsf*%Kq20p#j={)`Gn0VaQ3Fa+447=}00jh;@mz4CGyZ#>iLa_6SM4YdQY1RNFXCy|ol2DetwKFZv9aWRU zA*EnFjC~&@-N`y>%En9KlJJ6HYtj6@GG2+&2EjvbU16m!%7~F_EyNC{NV7U&r{SXL zv7vrUzWZto8BrQ2J=u${Ov8+gF4prW^$CF4FgzG=+ukvjJ;$nlYTeCiaZ`xBMLpOI zS9$}>=oc@QKkI_qsgu#P+S98k#x6fLtP*9h<`sZB951KHrd#F5$W83v!jZHIQ**pI zh%M#_Z2-(4z-NckXmOVE^sbjk_?9(8Sk_r{4lpjzQXVDo!FE2p7>S5YSMgqz!;E?P zRt8+e9eEqhuypo+H+s06G=_U|d#J|*$I=m27W*$$!l4%d?H{F`R1)#GPx<$9Z4EQ5 z^xF0IXa)tR9d>k%ZHzpx^4Y%8?)cs%oHHs_c%x4o^qQ>3JBiYZhUp8zslyR#FTm}Z zG(}$83d_A<4mD^tkeE5~jcWxn&Dm`B5f1KLt^oC?o)PYU9{3|5ULKo*UDF>5n1YmEatCQ`5Z7j8-v`9(77k=p*Na@F{DBxdbR ziudb8X@_;*Yq4?pPTW_#RJ3H|WKwzbLmx6t#BojQ5+tWWrlGzoVfINHHJ^IPJhfAa zhpdS^?y?q2;Lxfiu#c#F{ zCeqexzAMp4rGk8C0h&i@`x3SJma^D#5_^?@Asg|-%jWG$2-wvTq1(h|6daN>2G|+0 z40YI+nYDJP~4 zZQFq&3db5SDy^PY(^w_*Xl z9?Crg1E@_F$qY7i>1oj@!1;6sD-!gaRDlF`P51KABZKK7SrT8SE3lz^o2D>KF)?3&i1~44@kBLvv6-~O zb56iDXfW0C%-EAmISdVv&~oyajo>YJM}G8U1};4*l3cEu9@Sj(VM6Ne=q{iI$8(BY zjibXN&U&+A!)MC8mi$54FO$I;L(la)K~qOo=%Ln&evUx4iJgWa``Lg}n^n4hI{Pk~ zVM#}@(6dL~u)Q1sFoYkGwl0YsTpk`}k&brC$j2PYRq=XC>T~_B^k+^iFzmm#6!V1^3hE_@cyjr!q5{RynS-1< zsVt;D$y3F+b3S9vqI0%&1~U_X@^i6b5~C))HSV;O6%b>Vi;I#=T-^_J@=$Ei1NP#C zLFdQ>ZGqQG6H30&Gx9YxIM>?s8R1J9bDVQ>&N_`g3hEWfr@@`X&{+B5qha?(h`bd2 zBFTB3CA=7mKgG!R5Rln&RJP?2VK&Kz6kB+f1Z04Q#?#wD?zG(p{Gn-o;*&@TP16}G z4)_Z*poe{!!nLguHyiqgEvpRXZncr^%sC_x2gkqf?>Fo>2cXtXVV*F?)q|N4=EO?P zWqLN^`4~6M)}kw(3|+R=I%(0DdJQ4qB+Bnc_ZEJg)$Kd0rRdxl{0+<1s}*cn{FQE} zGx9=)N*9;!3yROV<)XWP0=##-*D8vX)n)8RxZ{8|*7tNUP65<{myI>v?UByi=}=!-_*r8GC~HcYr7}Q;gQ00BI9)jC zNMlUMA>&92_25*2!YQ7Hn>!_9H^A5-oe~^!)5@2NElzV&BfVRH2nOagYj_1q;tQl| zqUka4FZ!-bI>s=07>t;AgwH0P;ItuonDhna<&h3pY^{~r|Xy``4*qv+Z3c#etMQD zYAJrFskcu>BNZxth1_At>ll4U*`|P9v>MAy>~&IU5hyFwRtA$>r30aW4M9OcL9T%@ zp(TJZVB9=MFTN0xtmR||47L7Sh42rrtYT5Riuo4pG>L^Pc{ZL;aK2Rw*qh;rXBoD? zaL~})qUH%(#(}BxY5Oj<A>6*ir(G#_e)W@8H>tYD_Q5#N2zr1=L zrUkI*2VxH>96~ZHQrf=V%Qt$>+G1IrPBYdp?51TIKqr#e^ZN4=nTB4Ztdrder?1sn z_bm=!(bPnL@JtoU&{``=V5pC)X`fWkUOup>9y%>a9h-)qu^=CJ~6V)L7>)K;Ap#!YROin5&O#hSmtk{OvgCz%DaWL;zBc zMuFYYWysB5=Qy;%ODd}Tlujbz;HFiO7?W}N%IuBG&z?NLEST_3RX3F8C%J5Mp56^| z1gIx6a^jQc_Lk+*bKa)4zzhn9B|CEyV0!KdyQ2tb1#TmCihkkgo|5$SDH_Tyrtqqx zts@(Moka^yu^|(WOo_ty1-LkyM@=I+U9rrR4#ooP0YfBBymD^^fd+}{&p9HCF1osv z$eM~}hK?-*?Q7jBWk^a{<=0Lh2sJ_5HaaUCnWhcdW!-4TjRoxiPeSRO@l*K7)r>%L zpf2Kp0rEU!v|GfAv}oue+jk;Ee~mDXguzdL8qRm-lGSY2=49z@YuB_-hf2LqQ&8t( zM@_yXr@g7>#bwc>v%&K1b~=hM2NEo+b)%|EXxP_O_l}c}WAN0@5z3~4&-y#1c8^YI zxJo3~sPFOGhRTuTo;?CB;|#4eC+0=umu8m)0Gr8N?u!Epn zv*w&pl9{ykV(f^irZ6CV*q)kUXzWJF)A!=qgYwW~;pA8Z`~sAA=S@kPTYq!rvenhJ zty8mPWpyn|F$73&wu}Fu;|E$B3}{I^9(riG5<5v%%mJ-umi01YIt^@#8)B=mNLMUt zYJ?RGWBt+dS{5ZDgIPrBb@4OCLH}ugfG=9NYDwTXj``;{h*-t4P#H#?a{Cg$mnJX*=*q6w}2i%G14y0J`&8gANxpT5IdQjyAbU4U*Y^^z_6;SYOBB zR&5PKUKaIPNVw4Sll+}RH|kRm0*Z0E5e?Ha^rIeHa|76aENWE6j5RTR<{KFp?vVTJ zq$BCyz7ht0Sx2MAefqqW!xJ0PwU3AXe$)6y&Ak9aVKm1YSOr`ifkDV$*rI%3ixT~r zzAsQez)LU2>WjupUFI@>$Cw16#KmxS3nC+ft{BE4fEBHD5F>();i5XL3@dFOr){ae zA>Rf=QkOz|PU|lIsN3DeGwC>{Ae$!o^R>^6@}R2B9Wr;u&UBm%5pqiXW-d1q0*d>b zK_3STc$`xhu{mylKEsi^rj=C5b6J+ccD5cRD{JdZHJh18=ulICta zM{yaH%T0?dSJNY(<)S2{wd|%mgP^2IE460GSp7DO8Pt9x4(jx=<(kk+7PY1lCt23O z94%c+&7YjK!V|g7YO^aToVu6|a5XWWymp}#&}tTtZ4Pw5?@u!xtu6Cj*-upDPbzY% z5#wLIGSnkuOJ?DJ5+mC|aw%ktyNVBmJ5(6w5PB-A7P#a%ax|RiUrBkE_?)2c>pFS=2P-e#7G=6+9usBece9e%xk_x^tm` zeU3wjLx{^u`VL}^u{vSW0;CIkVQxeNjYAOD5l=!CdefGF4gEw~!!WvGsQ6?ae#uc| zh%tDpJ;l1+8MOE8bWP2)_XVpOmJNt|al&7lJeYI;#1Gu_^m0E08b+}loy59O!_SHX zy{MC1QUEtV$iE|3X-Lt8(Ps&r!6czGBUZJgX?!QUZGcXt8spy8x%cGYlS?DIRRJk; z$wM4#SY`2V0yyBLe**fBgaZKfDPG=k9Q5fJ_nv(Uk z5aVZX8-BD^>{m#5*xqZ@M#SdKiPtRug+Vs($R7virr8bJbE2Vb9$lw1LR&;YZ0SyPt8+@t? z+X}Wj&B@)Jf0k$ktu8DHteLtOSsy!!xUzL^Y{enHvi%#WHIEhyRok;q?8yLLiE+7y zQ6TL!M-84;R27)bG^B$VWrk)Q^dKsB*cyXz*1Sw=@XkGc@=QMY%*-VYOuQzHdLGuu0R&ka8}i zfrX|dnFX96_$$&?nkMSjDI=?HYm+ivJ5NscM`$nx_Wm7xN)ti_BB`)SEtN~uMSxgZ z6}$Soe-P~o?As@Q?_u06%Obq$E-Ue8%^M;u8+vkCxhsCKLmoQw;nJIL!Aja$jQU`x z%#KO$AKJ#)vclHS(JQ-!rinH-9mU~##^!9F+uX;RdL9hqdfF=X`LTNiCk{`%(p-6< z>D`Hk5I5r9>LFgc(tQmBXplhwpr9aN|2xFue}BhVfB;ZPSVWLjOk6@zN{E{W=B{^d zn1%oU*J~g`B-N@HRBHhSJooa4bSpL1Nuo+?TX95X=GJZJLO|QiOAD*2{Wq)MLLb*m zVNCZ*7fw(3Hv7+yL99~uMF)pR*v)+lfyayD!q!>`X@m7dU9RU;TwW5qsRjoBUezoxFU+h-99bxIs#HYywKAualo3Q7W|y~As4k@n zbBshi@yOu)qrp0bnTaaHoPl{pdX-mRXQWXsf;Pd~T_k`Dhwo&)MACThf@G4-pw*Ji zc*ZZ~QIb+1VqyI;e629x;z)&lGUhDde?kaqQjjHny=PhOuK*|3o$g2yt%FRKBaGb@ z7*XMiz1*lg6U3X84y|^I!u$9G4-_TqIy4}S>+vP0!Ep8d27n**?AZ463qW__kAgw| zHjnKF`L^kn<0l$6lWCISL>HHds$yd_U8!wgmo~iAN~7^q{;RLEoErhsVCtoqe_BmQ zEq2}b5i46n?JsHR6KXSlMBMn?t<&Y+{A}73(`6r!PtUiCu4-!p z0PtPHu#Ly>dfBHz0=80l^9#V2)Y-6m0wRK^1(Y)(tSGTTEpUen-x0q!+KtyK!8)f55A?*K-4^ z-VnJ-SXc`kbAd*m1nUGY1ziOr3FV1E<|;t<1*m=`@}>Al8S)yLrtUFv(trqLsf9Fq z{sd6WDSQDIX_$-o1G15~DVvGxvPRHIFYf3X;S0-8<}c>MN4O#M%OQnY1-0&@nb6uy za|2ArIMhz53yzU2`eRgIf1s~O&g-m<;I=*_sda)eYjWGLy8q=|WeoXQ%b za<;21W4)yt^<;lCRT-J*6St@KZ%0wY{~B6My$gpz5`Z!RFO4Mb^*dP)r#8A=?-=#_ zhYGV83A`99QM+%LuB%ljWHaW9RPQN|?OER!<@5;qGiGETO#YpKe_%=^3dONR`~2CE zdp7@b$I-W0bi*a$7c}!*mD}ZkQKYBWRzSzC)sJWLX|=^aS*a-dLsYASR(~KVV)BfU z2HY8!+o-DkigKIgpVrminc*Z$d6E6vse>GEFoB?eO88&DOQS;a*GUj}08cQq_d+?I z21Q-HA@L_FZy8puf1f*L(R^MEVEEYTvRZU6CEg-b@@4ZkY<1WI^1Rud6*9&M_J5Pq3E?8S6lu=y+*O zv`xh`uwLRcf1n6Bs*GaCrm5UL0mw<0>uXky>)}Wi(+yL}ti{xr+;o@g;dev#XHNs* z*N6u9i9i;%9zM;_%~Vcez5uvRX302}gm-bi#EpBE7jt|XN2yD_7MlsHuM1@rJ{zx< ztV!?jGW{dQQ)xh%KiBZ41KRmhxVNt8Da&5IEn5eJe+)#$NPBd5Y3%1pH|A*H48kto zW3nCURN&~F|GA0$qLZ(tnnUST+~HYm>E~{L2dz)pgqm+C>3eF~uXchUkzR71>`0s% z)k`xb>aGiY1Obhh3jN#EC-xu=nis8V4O!;-+G6M$E{h3x_@LkWUl;X7S`6HcBsO$B z812gMe{ll9oKM&9@)~mkn8!{`g??0`3X;6vf%O(mO%xZ-3L=SsOOq{?MyFPkyVqFg z!0M?!W%6n%!j_cW1T`lN2EsQ4h;`Qe%H9xXZ}G<{KN&$1tWfvwcanp>I)e*};KFG> z12?i_8G7%E+|f2na|{xQ5^rSS6blUG17S&U~sm*o&( z-6C1fkFKif9O8^!{Qc@WiwOldf%KtB*%0<6#~y?c0^^;_o_ZI(TXcP8G$b99n0iN4 zHoa$(J9T}<75Z!5XUNs^$)SMyn896@LL5piO)7#4omws%4_=kpjbQQAcysyqeA@6& zfAW%W(rkfRWDoRoM7~6%=+XsZj3o)=6RDF6uu_&YfsT7l7|B&-CQV)Ke5@F zZSY^7-sf_Yt_vC2okKdVL}9XL69pn9px|AnlrJ@6?ig<5YUsA74~Wr@WP*6F_@?3( zzc}2mDhkaneLL;YSovgTz2UJKi-`Lze{d-gsT^@cMEXl{aktrsBaq-L7~)hV!Jc{Y zuwsd+>hPgbrUCtzK<1IDtQgnBZ822n6jBkw5aJkA=zDO**pq5C13DHO=Ek1KiIcS7 zlfUSLvDK5ve>5!lP$#L$+)|j22O+&7AhKc0X=SB?4R&qH_5MLwv-(z^3j!Hze}$R4 zB}c||X_2b=c@btpFfWbKaX=>WDh>uW6=N5sRn3k&Y zlQUZNL4ofdpe^B9vCe&6NUL+{E?|G3=&+z|d=(I1qMDHGGWs59f7EHtr@c^0+zS?; z$Gl4X<0LymQ2Jo_EI+S;?`=L{dyoD2MPtpmDtssB2tT0Hdg=TH7=(*lfA}pGJ8T>k z^EhmbhMb~@0eu;412RgfXtJh=2?`;WZJ|^~c}O=rjN=I*n;^UgK2p6GJrWOP%}6Fs zSg;{SW<#b4^o(|)_sV$6^aa2lklsOMk25jz{qjn`LgI$@5xah`*yQ_Uwqexo6-hry zmQ=4AB{w0JL@OQUDKyrAaleRzs9to^@z)v1ZRs;}fxJrBK+0z+TG(MKucv8NKA4Xs@K4(BpeRcOWCN1ttKvLH zg7Sqe!&%mFGdf<2NCUJFMfYzoy3kB=ikW3%lEajwpowUhEgACBfBJIPr6RK7RR1=Z zx^TNCD^6-^>eKFAvH&e@i5Fb^RtAUp!Wj08Z^U=`tj}qN-J<)zwAs!hZ3^9?%Jrd& z%d_QC8Bqqwax{I9{HH5x%l>sl_`;LA%czh_Vt>zE4F2$m0PH)2cvWh-By<`*7o@4$ zcvDcY{bL5lO3^9$e{}Ov@K{XcM1}Q}W%gwpQKrd1NWAk*d0gsaaKrtzFF=>#7vKe_ zs29)n*9Xf`#uTkjY)0^b2X%b^wO>D)zMJ6K9j#}`-iqYy7eHRB^dzRtIygthQuCNC zdV6+5$GBupoeMRV;u_75aSzoSHHBWO>`-i%@j!v}=9ftXe``VUW7rz5C9Pdq4B!SX z8l`&Q3LnrGJ1Q@QvWhyno8F42!Dh?0F7Cmwrh;;qi7-mm8RdbM%|ANqhE^pG)r+Jm zE1p41ZYqf_ok9jmZVHq=`A%ItLxl~SLev});t6cNBspo#>E##>k?45NHRI2tJD8-! zzh$|0e>sn}^M;7n-{Vu8`304`dcpV2y^Q}xMwaAPrgF0p5A4(@GflEO+r+Ln z&&{ZGU#fCZ`N3yIJcXg}kV%nrvbxjV3UkIyL1RYdUC9urkzHb{#CH^>^IJx3InzfW z7RrRvB?~+t(PyUpqVt$_mn;;Fb7xNZFi>46f1S!!k#j(?Q_?H#01r%X!c_>GpHb0>TzQlE$a8 z(@tF?e?{6Ynd48Ak$hwxCEc^Bpxt=a8=^>x1m*C`FMv8s8h9jUy25!*7Cqy94@hvj zLsj%V^p9+mViHCa$ek16l>l4ICT@(Hm7$>Si$}Rgpk^(JSn% zxtJJLpgXy7%xp@V359HYRe=mDvwKuwkmsMyN67u4-x_cCBUzJ5QKKf8Nl;#_DJko( zxrIW}Mug5UEndryYC-4MchokjW2JOdnAL7yfL7k!&w1$#!X%_1i6T=I|13DV?Yg!- ze<(;jtPR-E-8n+&GPob*WT93ar6~At1V-scCFmp*Gst$9O@Bn2I(7%pupRw(L6V@; zhuB=r68(t}CXGm<6^rxb-B^^FWy68Upu=-ijTjz;?BEM69m1j60>E8we;$sZ)e@PDDtDCY5i|Pr1>ioFo^D)3dB3~CJ0^qF_Dv>t>t3#X4>lq z^BU_P(%6Y*CrZRx-99v-%gIP~vP?M4C!ohRuyOQF#+pglde}6iA z+O@%AB2e5(s>-=X!ooLi=w_-L%?UQCl72U2C2<5&%1n|Cr4~MHS5~*M zWLB%j&D850W8H~`i5qDksb;|3u3QGc2ZW$tvFWlk5`eJll+eqhW7Yly!ssSs)k%NC zOQ*zJNPffjBxTr_yjq0}m06y3f0UZ}80>mf9wTOYP1115X+3au=@@bRB>+|b!_ZN# z?I}|#PBv#`yUJ-!uGS~0mwoHTuSz67!Q|78@e6Rj@cTNEU#fBD;2{evxW7x|_rE8i zTA~1aHJt=F8GY2>1^jPrbc{759$k?XRqOPmdK}^SRzo6rWi|?>9(L4%e=wo4gV@NJ z(YvCD?6i!?oULsl<}a3=8+f|GKBf!CIdjg1yo9R7phUtK(b|s6P|)-{u~Br3nna zM-i;JFgl@T5zP%u;RO5gwiI);apxkOf5T|-F0+X0HI?jB?S}+u( z3F98%B))|OqvU3U@rsG1FxV-i;{T&0UUFa7;;huYoj{>0r)n2kF6+tIFTmgAeLmFY zie3@5HK)fz-3DZ4T& zRM}jjNrx+}m$4X~Yf#N69DHP%{v>Ib7+2yWJfAb47 z7|YBC%=@Ugs4L8eoZSpQmwUq2hkbpg`^T(n=X0K~K<6x-_=V)lxvgejTg(|zwX>&# z=0PVD4#C(WB&w-;FcF zP9Z~OEk)H~+8Do~5mdNn4pK5@VOFke3)|$cMy6^Dfb;PeamMbtML*IftX!jJ0Mcz? z{}f6UL}Kb?Mzs7}3`nOU?e8SrksA4<2^(grH^6vxet{Rc(SAy&!5%KofjWen6`VP; zPeS~}f0F2^tT=jD8*4Jk0mfr8YifYz&{ZMLQ2*<)+77v`cVH0HT*$fCVz|eix;B{d z(EU;_(<0lTM}drfQU`sVHQqI%1PiqWG{y^ub_kA^6=i`v8bvqXCp|BH7?-1Ug5f~` zJ0(d=K>NF6*pu-D-^gT%na$2j-E#2L&#M32f5aOWzpD9pZ;TU^c3ya(<1aTCfHb9( zoqGPE_XS{Xl-{1fpszYs>fwZgcuO!Tu*&Av){MJB-&!&w=HvLsq(ypI(D(&V9-f+B zbV^r!ev;FLjTuNs0>_}(wn;bP$+HBI`!Altwe*?!uCwZHM}tWSYZlYJ&m@p`>Y;5J zf0S;`Q1T7?lH@CLIYZuH4=%7U{1`w5AG2x3k4J`1ae*qwlK`eRgV1A5A)@9n3omZq zo^<^Iy1T?-MuNkI6Kt%nWcQUu+Dl^pRXzx(GC?1tQkzTCDqSRXmmX!IM4=S`myMSm z#Uq6*gS-v@0=Ur_g9w0}qpiUS(-6wYf3&3i@cAbR23Z&Tv8t8a6)gv+v7Bv_I+jwz z#GK#r`2|p^g2Mh>srQMX%k5plK{_M$i?Vt610tB1pGYr(}1lSi)PVfBX>D zO7eTAfMKt-7>zgd(gwZtrCnlf=HfY3mW+yC03E{%)<`5+nKII(%_*K^(hI-hi_k(m zoJPH2U}Y^Hmsd=MS8yX#?qM`g-=sbb@PLkwFk}5?Nzz?*+PFX+&O4^`Rhw4l< zNe^EXRhiL+8*ji&5Y;R~PhI}kP5t;T&|D&>QEF3@M zvPu2vHzm0_@IZhSBIMGw<|p}-)!PbP^2bbU}9~*(~vAd_7&LE98k1<*= z6phx-6;q@Zvx2t3?yq`hWmblwdNL_<110RNQl6a%HdLLAS<6Eh{xlcBf5M`q^22tS z=h&05>lk+SNTyVyY?zvB{^4z=yW%|Kt|AA9oPBq!=Ix=0Kd4DqjQd2FlRa&NH0J0T zSwtpjCH)fasRl?Cnx#62s3mvRoT-HXW1<vGH^3+Gwge9`HyVx zJtMHfY}DF*qTWJ^6Q~W{e=YSMgYxGbf4*Kx5Q_c|tUJc|1K;`gX`gMNsqYt{$%j^` zS}dtqyj2XY_;{0V@l_d7Kzz10r7QSTBc1j!t{!GfeGvVQI$)Fv6V3d= z^*2dWw&_o8s6R0{WIuu^mDT($d28*^4N8HDuX0G7F?CE>e~`ufK4A(&E(8L3>Y{(u z^C!hnm|^JBMce+Su-O=MA8{wL3uw0)kZunYcDajq`B-qe3_3Z!O_8NV|FgeHmzkMj zE*PfP_rX!mlU--c%V41x5fk&S78W?}%IRM-J+!AEGEvsWkLP8HnTt1!4?-jSo(b%+ zl6V;n?9^_oe-vCbB77q)c>1xu!@2C*U%GzODJkqv=vGaJsoIrmplQ}$~7 zT?|$hYMzL1q@~ctuNXhFf7MEM*IBPmE0GX~#56}Jf8GNG$B1TisC!q;q3zBn5E@|O z+S9&Zj`J4E!i0mof8DAW%H+wM$;{d3n9yxahbgds(2F-(KN>kaN5ykaXByuipF>nD zKT{4VYGOe{)_@*5njn?c65KH%by|0+(MX!l?g^5K+PLgQEYwiA`owUla8q=9pU^HO z_x|I%e{Hm8E#JVNk*Xz{h!28f?fzbVohiiegjZ`Bs--4wy1!=M|58$5iOu9pl;yMj3d#1H3S@yuUai!(WTF=;a4%xh}*>rZM1P5 zdgkxG4cC{2*hTpmJnexF$q_l5fN{$Ai}$-H84gCychdgyrPQ8_c$#-aNC! zn@Va)vc®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

BC%l`B85n3peI>j&L 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

m7(!n1WtR=hKR5
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
nCSo9Eh0RPs*B4anAn-$p@r~

delta 942246
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

f3jZaf1l%}`7-#9lMS1(ck6tsiqK+YKEjwO zm;dCdJ-5ebg*$6{n1<+7C6sO&;>VoW?n�c`qx4E8kEak?PbqxjVfVG7-EPvqli7 zCt*P7ysQU19s$9m1U6K@xIn%YmkXvI+|@bJTnv4UHm%0RtmV!MvhFp;<9lUXdr$9=VrQ31At(S-t z1I$luIb3qu+Y0P=V%PLht#2F{w+j0I8Sc`T`Zcm|4~QN6%WWXk3e>Q=)iV}{6UFL>w~8vOd#i^r1}7UHP-jmV`=5k zW-pT`JkXYRfpyjxIg0o`XG+CS7wmiM5p|d?lQs%L3 zw~X}yBVtd4j-b;M^Ws=``;&eN6@-UZfes8XN8)G3^_SalA3l0Qxw8fpp7) zczaS5_iz(uZ_z57)^4%22T{ity&S)cQ$0TBG@}c91@Px<1+AZ6#;7 zk6O{>s!gOX0cLqZCr4phvYXXRN`KT!mP5o?#7{~I%x$w=*JU33S|gsH&gn6B>&uIC z9M+#^rxD)pcV|Js^#DhvAs6*UKrCZE0-7?U8r8*?dJadMZ;GM+6bu>k|#~)*gL~lOD zerCBJ!XJX;7xcVp`ze^Vc~T?CuXXcpHBDiq8z6|Dc*WN?LHSejO^qIZb@^$Hv&A%m z$^h?L^#f8wu~d(6PJhMPC(+Y#Q{i$(+5Mm^A%PZ^T+UVpFe$B048RA*=n+c}c(XNT z_PYEXf$mB{oDu>n(M6l7b|rU!M(={DBwYPMqym-7&l{-D&)Qky?M@#%<3`byu*G%F z$C10av){8j29aU3h%9A)92JS=uy0WGW&{OAPLwsf>xE{aYN!zUE7OAJ5TCC(1(X2a zMH3{eF-{kE(gr5>jHM1#rjAh!O1Wpn7I0*JYH3&SR>cMdTF==O?S3{N4SB`m3DH@{ zQ+ah!W4`TwQA)eKZ^F5y$80O$u+bNTGtKfq{CB-5@q z`*RbJL1od?A5LB73IVr%nI4#7FrFp$Q=A==_G97aD1gm zSmFa6kn~bf`e`mR!gfdPcNU{GhXnCi`@LLsFnU+nv4sv5DmLT3$L&7i%nt5XbQ}gc zN*t2=!0ZWs#)!j>wOlBA9(wWLWY+(YCL|X9gnyDYc4^yzfkmB2_SUmKt`X%+$@p1Z zw1*;u=rmkU3SL2wl96Hyr`GVgBSw}(=6MZ-aNnJ)=rsFe{VX!i$E;IkPtW|O=7XQDd>AK-z>%Y_?IY-)hnEaCfabj2!BrUKoA$U$kolj_+3x1Gn--fD zm|kmt0$!(o2Y-&xxd>w7l=Ng@WmP22s!AfTA2EIetv$w{XxfgeeIFs#5bl5tw0#u~ z^JkV2m6K^xhAyG<2bmz5P{L6m9|fbRUlB9!ZpB@({%UF$ z7dusG^5`YL1(s+M@xhVQY z!N(6u!hg;iB1u1{b-?~QQ8W^+*++<+^z45 zZB#6|5`0&C1E#*fG;k`-fYr-(vB-3PZ4qw>upH#cz#NBU?^+2I175;D8-*Aor1++G&++->MM= z$*0)Sr>NUzx63|T*xgPVM4G)_?xrI4v{1NEL;@P)Ko&2X85ZrVtj<#RAu~jOU(1I9 z{}b%he7i$yIiTc?5p(tTJ3<~C9>@7_t!`y2ZUae}V2Ym{jBc5`#zXdtaGBEnQwm5T z58H9m`5MOAZaGXju{vlymw8WDB03&l58@8im=}`FRC_P{z!de!wOr-e3JMJh7@i)^ zg95SIv+yrj^zV7B{2&a!QNmS!Pb@XLr=S}`j_Ywu@7s3t^B@QG>c2~+(K^X5X}tdZ_ppHB+o0NeZ=^xr zHHJY(wr+ib3KcC7{E1UA^U{x#m&T=x`UV&@>qJKEq=z_9{c~DhU98`K&J0VxZVSnV zalaCfYse-%3%`!1j>P0XhgFH9D!|tQV>YTP>VHo?PCMV!DKyq-9^hbOR>^VzMnW!M z8R3Wh8hV_R!+V=qh*vc_gi%HL-VMzsB4#$x&j7xdHw<=m;u2Bc*kw24zU={sk_984 z^lWt|e2&u4+;CHzWD<<<&#cTGj6Wyz{KIFTh6x+)Sn1)|8r5`C0kZo+56_|fPV zee^ib39M`>nCHNt;#0nroWgYFNI-q{eebLl9)g{W-E_?0kwF5zRtyU`LR7++rV

e@M2kDPbn%%H}I* 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%0D~Il$Pv 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 z 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

7wcT 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%0D^8kIwzSm$5+&RIgTy8N-Q8!9 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

;yi6_w6^xS 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≪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

*s%~1Eu32?r1~x(;CD+gZ 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�?` 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 diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 4218552c9aa..31b10401c8c 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -931,6 +931,10 @@ class Website extends CommonObject $stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_small, "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__", $stringtoexport); $stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_mini, "file=logos%2Fthumbs%2F__LOGO_MINI_KEY__", $stringtoexport); $stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo, "file=logos%2Fthumbs%2F__LOGO_KEY__", $stringtoexport); + + // When we have a link src="image/websiteref/file.png" into html content + $stringtoexport = str_replace('="image/'.$website->ref.'/', '="image/__WEBSITE_KEY__/', $stringtoexport); + $line.= "'".$this->db->escape($stringtoexport)."'"; // Replace \r \n to have record on 1 line $line.= ");"; $line.= "\n"; From f37b8c78c86783ed7e16dbbaa213fdf3cd3cb56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 15:18:09 +0200 Subject: [PATCH 0622/1148] NEW Add POST /bankaccounts/transfer REST API endpoint. This allow internal transfers between two bankaccounts. --- .../bank/class/api_bankaccounts.class.php | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/htdocs/compta/bank/class/api_bankaccounts.class.php b/htdocs/compta/bank/class/api_bankaccounts.class.php index 72ba4c82db1..8103d6b0b4f 100644 --- a/htdocs/compta/bank/class/api_bankaccounts.class.php +++ b/htdocs/compta/bank/class/api_bankaccounts.class.php @@ -23,6 +23,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; /** * API class for accounts * + * @property DoliDB db * @access protected * @class DolibarrApiAccess {@requires user,external} */ @@ -166,6 +167,140 @@ class BankAccounts extends DolibarrApi return $account->id; } + /** + * Create an internal wire transfer between two bank accounts + * + * @param int $bankaccount_from_id BankAccount ID to use as the source of the internal wire transfer {@from body}{@required true} + * @param int $bankaccount_to_id BankAccount ID to use as the destination of the internal wire transfer {@from body}{@required true} + * @param string $date Date of the internal wire transfer (UNIX timestamp) {@from body}{@required true}{@type timestamp} + * @param string $description Description of the internal wire transfer {@from body}{@required true} + * @param float $amount Amount to transfer from the source to the destination BankAccount {@from body}{@required true} + * @param float $amount_to Amount to transfer to the destination BankAccount (only when accounts does not share the same currency) {@from body}{@required false} + * + * @url POST /transfer + * + * @return array + * + * @status 201 + * + * @throws 401 Unauthorized: User does not have permission to configure bank accounts + * @throws 422 Unprocessable Entity: Refer to detailed exception message for the cause + */ + public function transfer($bankaccount_from_id = 0, $bankaccount_to_id = 0, $date = null, $description = "", $amount = 0.0, $amount_to = 0.0) + { + if (! DolibarrApiAccess::$user->rights->banque->configurer) { + throw new RestException(401); + } + + if ($bankaccount_from_id === $bankaccount_to_id) { + throw new RestException(422, 'bankaccount_from_id and bankaccount_to_id must be different !'); + } + + require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + + $accountfrom = new Account($this->db); + $resultAccountFrom = $accountfrom->fetch($bankaccount_from_id); + + if ($resultAccountFrom === 0) { + throw new RestException(404, 'The BankAccount for bankaccount_from_id provided does not exist.'); + } + + $accountto = new Account($this->db); + $resultAccountTo = $accountto->fetch($bankaccount_to_id); + + if ($resultAccountTo === 0) { + throw new RestException(404, 'The BankAccount for bankaccount_to_id provided does not exist.'); + } + + if ($accountto->currency_code == $accountfrom->currency_code) + { + $amount_to = $amount; + } + else + { + if (!$amount_to || empty($amount_to)) + { + throw new RestException(422, 'You must provide amount_to value since bankaccount_from and bankaccount_to does not share the same currency.'); + } + } + + $this->db->begin(); + + $error = 0; + $bank_line_id_from = 0; + $bank_line_id_to = 0; + $result = 0; + $user = DolibarrApiAccess::$user; + + // By default, electronic transfert from bank to bank + $typefrom='PRE'; + $typeto='VIR'; + + if ($accountto->courant == Account::TYPE_CASH || $accountfrom->courant == Account::TYPE_CASH) + { + // This is transfer of change + $typefrom='LIQ'; + $typeto='LIQ'; + } + + /** + * Creating bank line records + */ + + if (!$error) { + $bank_line_id_from = $accountfrom->addline($date, $typefrom, $description, -1*price2num($amount), '', '', $user); + } + if (!($bank_line_id_from > 0)) { + $error++; + } + + if (!$error) { + $bank_line_id_to = $accountto->addline($date, $typeto, $description, price2num($amount_to), '', '', $user); + } + if (!($bank_line_id_to > 0)) { + $error++; + } + + /** + * Creating links between bank line record and its source + */ + + $url = DOL_URL_ROOT.'/compta/bank/line.php?rowid='; + $label = '(banktransfert)'; + $type = 'banktransfert'; + + if (!$error) { + $result = $accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, $url, $label, $type); + } + if (!($result > 0)) { + $error++; + } + + if (!$error) { + $result = $accountto->add_url_line($bank_line_id_to, $bank_line_id_from, $url, $label, $type); + } + if (!($result > 0)) { + $error++; + } + + if (! $error) + { + $this->db->commit(); + + return array( + 'success' => array( + 'code' => 201, + 'message' => 'Internal wire transfer created successfully.' + ) + ); + } + else + { + $this->db->rollback(); + throw new RestException(500, $accountfrom->error.' '.$accountto->error); + } + } + /** * Update account * From 6edf5494c3aa70dd942c59c977f30c44daf5d783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 15:29:37 +0200 Subject: [PATCH 0623/1148] Added @throws annotations for possible exceptions --- htdocs/compta/bank/class/api_bankaccounts.class.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/compta/bank/class/api_bankaccounts.class.php b/htdocs/compta/bank/class/api_bankaccounts.class.php index 8103d6b0b4f..ba21b6c09c1 100644 --- a/htdocs/compta/bank/class/api_bankaccounts.class.php +++ b/htdocs/compta/bank/class/api_bankaccounts.class.php @@ -184,7 +184,9 @@ class BankAccounts extends DolibarrApi * @status 201 * * @throws 401 Unauthorized: User does not have permission to configure bank accounts + * @throws 404 Not Found: Either the source or the destination bankaccount for the provided id does not exist * @throws 422 Unprocessable Entity: Refer to detailed exception message for the cause + * @throws 500 Internal Server Error: Error(s) returned by the RDBMS */ public function transfer($bankaccount_from_id = 0, $bankaccount_to_id = 0, $date = null, $description = "", $amount = 0.0, $amount_to = 0.0) { @@ -283,7 +285,7 @@ class BankAccounts extends DolibarrApi $error++; } - if (! $error) + if (!$error) { $this->db->commit(); From 08f99b42724cc1e78364bcb352bfd15810102664 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Thu, 15 Aug 2019 15:39:49 +0200 Subject: [PATCH 0624/1148] Fix codestyle lessc.class.php should be excluded from ruleset as it is an external lib --- dev/setup/codesniffer/ruleset.xml | 1 + htdocs/core/lib/files.lib.php | 2 +- htdocs/core/lib/website.lib.php | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index daf73e5b2a7..89ea98a051b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -6,6 +6,7 @@ build/html build/aps documents + htdocs/core/class/lessc.class.php htdocs/custom htdocs/includes htdocs/install/doctemplates/websites diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 79b0badf0ff..a5bbd68a736 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1911,7 +1911,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE)!==true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4696e2adc8f..bc1e08353cb 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -33,7 +33,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html') { $nbrep = 0; @@ -191,7 +191,7 @@ function dolKeepOnlyPhpCode($str) * @return void * @see dolWebsiteReplacementOfLinks() for function used to replace content in the backoffice context. */ -function dolWebsiteOutput($content, $contenttype='html', $containerid='') +function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') { global $db, $langs, $conf, $user; global $dolibarr_main_url_root, $dolibarr_main_data_root; From 107e6be6d93ad7afe729079c64ef7b47fa9c17aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Thu, 15 Aug 2019 15:40:55 +0200 Subject: [PATCH 0625/1148] Fix code style issue. --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 716cf891084..456580124d8 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -34,7 +34,7 @@ * @return boolean True if OK * @see dolWebsiteOutput() for function used to replace content in a web server context */ -function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype='html', $containerid='') +function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $contenttype = 'html', $containerid = '') { $nbrep = 0; From a66560ee935cf97e3e6cbd82db811da9ffd88685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Thu, 15 Aug 2019 16:22:02 +0200 Subject: [PATCH 0626/1148] Update ruleset.xml --- dev/setup/codesniffer/ruleset.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml index daf73e5b2a7..89ea98a051b 100644 --- a/dev/setup/codesniffer/ruleset.xml +++ b/dev/setup/codesniffer/ruleset.xml @@ -6,6 +6,7 @@ build/html build/aps documents + htdocs/core/class/lessc.class.php htdocs/custom htdocs/includes htdocs/install/doctemplates/websites From fd8cbd9a938ac7e3882fd59392c35de183c3c1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= <613615+jtraulle@users.noreply.github.com> Date: Thu, 15 Aug 2019 16:23:01 +0200 Subject: [PATCH 0627/1148] Update files.lib.php --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 79b0badf0ff..a5bbd68a736 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1911,7 +1911,7 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") dol_syslog("Class ZipArchive is set so we zip using ZipArchive to zip into ".$outputfile.' rootPath='.$rootPath); $zip = new ZipArchive; - if ($zip->open($outputfile, ZipArchive::CREATE)!==TRUE) { + if ($zip->open($outputfile, ZipArchive::CREATE)!==true) { $errormsg="Failed to open file ".$outputfile."\n"; dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -6; From 46ceb1168535eb55547aa9d255c82b112283ed04 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 16:58:36 +0200 Subject: [PATCH 0628/1148] Replace special chars in name of website page --- htdocs/website/index.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index d16e8661390..97bcdecc0af 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3073,7 +3073,10 @@ if ($action == 'editmeta' || $action == 'createcontainer') jQuery("#WEBSITE_TITLE").keyup(function() { if (disableautofillofalias == 0) { - var valnospecial = jQuery("#WEBSITE_TITLE").val().replace(/[^\w]/gi, \'-\').toLowerCase(); + var valnospecial = jQuery("#WEBSITE_TITLE").val(); + valnospecial = valnospecial.replace(/[éèê]/g, \'e\').replace(/[à]/g, \'a\').replace(/[ù]/g, \'u\').replace(/[î]/g, \'i\'); + valnospecial = valnospecial.replace(/[ç]/g, \'c\').replace(/[ö]/g, \'o\'); + valnospecial = valnospecial.replace(/[^\w]/gi, \'-\').toLowerCase(); valnospecial = valnospecial.replace(/\-+/g, \'-\').replace(/\-$/, \'\'); console.log("disableautofillofalias=0 so we replace WEBSITE_TITLE with "+valnospecial); jQuery("#WEBSITE_PAGENAME").val(valnospecial); From b5d72edebc0cdfc74c8948129c06734bd3e251ff Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 15 Aug 2019 18:07:36 +0200 Subject: [PATCH 0629/1148] Can add more samples of pages. Add an exemple of page with dynamic content. --- htdocs/core/class/html.formwebsite.class.php | 16 +- htdocs/core/lib/website.lib.php | 269 +++++++++--------- htdocs/langs/en_US/website.lang | 5 +- htdocs/website/index.php | 2 +- .../samples/page-sample-corporatehome.html | 15 - .../samples/page-sample-dynamiccontent.html | 44 +++ htdocs/website/samples/page-sample-empty.html | 6 +- 7 files changed, 207 insertions(+), 150 deletions(-) delete mode 100644 htdocs/website/samples/page-sample-corporatehome.html create mode 100644 htdocs/website/samples/page-sample-dynamiccontent.html diff --git a/htdocs/core/class/html.formwebsite.class.php b/htdocs/core/class/html.formwebsite.class.php index 3cefeaef99c..42c3b36025b 100644 --- a/htdocs/core/class/html.formwebsite.class.php +++ b/htdocs/core/class/html.formwebsite.class.php @@ -176,7 +176,21 @@ class FormWebsite $langs->load("admin"); - $arrayofsamples=array('empty'=>'EmptyPage', 'corporatehome'=>'CorporateHomePage'); + $listofsamples = dol_dir_list(DOL_DOCUMENT_ROOT.'/website/samples', 'files', 0, '^page-sample-.*\.html$'); + + $arrayofsamples = array(); + $arrayofsamples['empty']='EmptyPage'; // Always this one first + foreach($listofsamples as $sample) + { + $reg = array(); + if (preg_match('/^page-sample-(.*)\.html$/', $sample['name'], $reg)) + { + $key = $reg[1]; + $labelkey = ucfirst($key); + if ($key == 'empty') $labelkey = 'EmptyPage'; + $arrayofsamples[$key] = $labelkey; + } + } $out = ''; $out .= '
'; print $langs->trans('WEBSITE_PAGE_EXAMPLE'); print ''; - print $formwebsite->selectSampleOfContainer('sample', (GETPOST('sample', 'alpha')?GETPOST('sample', 'alpha'):'corporatehomepage')); + print $formwebsite->selectSampleOfContainer('sample', (GETPOSTISSET('sample')?GETPOST('sample', 'alpha'):'empty')); print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'; // Show filemanager tree (will be filled by a call of ajax /ecm/tpl/enablefiletreeajax.tpl.php, later, that executes ajaxdirtree.php) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 880978a13e5..1775ab266bb 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -705,6 +705,7 @@ DateOfSignature=Date of signature HidePassword=Show command with password hidden UnHidePassword=Show real command with clear password Root=Root +RootOfMedias=Root of public medias (/medias) Informations=Information Page=Page Notes=Notes From 7580efbd4ebbe9b2a2c4a19643e228c854cebba8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 04:32:06 +0200 Subject: [PATCH 0654/1148] Fix link replacement --- htdocs/core/lib/website.lib.php | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 9805801b4b5..e7f86a153d7 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -153,6 +153,10 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Protect the link styles.css.php to any replacement that we make after. $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); + $content = str_replace('href="http', 'href="!~!~!~http', $content); + $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); + $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Replace relative link '/' with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); @@ -167,9 +171,9 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // ]*src=")(medias\/)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + $content = preg_replace('/(]*src=")\/?medias\//', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); // ]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT, '/').'\/viewimage))/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + $content = preg_replace('/(]*src=")\/?([^:\"\!]+)\"/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=\2"', $content, -1, $nbrep); // ]*src=")(\/?viewimage\.php)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content, -1, $nbrep); @@ -183,6 +187,8 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: ...href="/viewimage.php?modulepart=" $content=preg_replace('/(url\(")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1!~!~!~'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep); + // Fix relative URL + $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); @@ -230,6 +236,10 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') // Protect the link styles.css.php to any replacement that we make after. $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); + $content = str_replace('href="http', 'href="!~!~!~http', $content); + $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); + $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Replace relative link / with dolibarr URL: ...href="/"... $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'"', $content, -1, $nbrep); @@ -253,16 +263,19 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content = preg_replace('/url\((["\']?)medias\//', 'url(\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); $content = preg_replace('/data-slide-bg=(["\']?)medias\//', 'data-slide-bg=\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); - // ]*src=")(medias\/)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + // ]*src=")\/?medias\//', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); // ]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT, '/').'\/viewimage))/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep); + $content = preg_replace('/(]*src=")\/?([^:\"\!]+)\"/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=\2"', $content, -1, $nbrep); // ]*src=")(\/?viewimage\.php)/', '\1!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content, -1, $nbrep); // action="newpage.php" => action="dolibarr/website/index.php?website=...&pageref=newpage $content = preg_replace('/(action=")\/?([^:\"]*)(\.php\")/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep); + // Fix relative URL + $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); } @@ -277,7 +290,11 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $nbrep=0; if (! $symlinktomediaexists) { - $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); + // ]*src=")\/?image\//', '\1/wrapper.php?modulepart=medias&file=medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)\/?image\//', '\1/wrapper.php?modulepart=medias&file=medias/image/', $content, -1, $nbrep); + + $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); @@ -291,6 +308,10 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') } else { + // ]*src=")\/?image\//', '\1medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)\/?image\//', '\1medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); From d5ce7fbaaf6a279df750738a9aa20fe9d42ae5eb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:01:54 +0200 Subject: [PATCH 0655/1148] Fix links --- htdocs/core/lib/website.lib.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index e7f86a153d7..455d28c84e8 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -155,8 +155,12 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); $content = str_replace('href="http', 'href="!~!~!~http', $content); $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="/document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="'.DOL_URL_ROOT.'/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Replace relative link '/' with dolibarr URL $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageid='.$website->fk_default_home.'"', $content, -1, $nbrep); @@ -189,6 +193,7 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart = 0, $c // Fix relative URL $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="!~!~!~/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); @@ -238,8 +243,12 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content = str_replace('href="styles.css.php', 'href="!~!~!~styles.css.php', $content); $content = str_replace('href="http', 'href="!~!~!~http', $content); $content = str_replace('href="//', 'href="!~!~!~//', $content); + $content = str_replace('src="viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="/viewimage.php', 'src="!~!~!~/viewimage.php', $content); $content = str_replace('src="'.DOL_URL_ROOT.'/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="/document.php', 'href="!~!~!~/document.php', $content); + $content = str_replace('href="'.DOL_URL_ROOT.'/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Replace relative link / with dolibarr URL: ...href="/"... $content = preg_replace('/(href=")\/\"/', '\1!~!~!~'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'"', $content, -1, $nbrep); @@ -276,6 +285,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') // Fix relative URL $content = str_replace('src="!~!~!~/viewimage.php', 'src="!~!~!~'.DOL_URL_ROOT.'/viewimage.php', $content); + $content = str_replace('href="!~!~!~/document.php', 'href="!~!~!~'.DOL_URL_ROOT.'/document.php', $content); // Remove the protection tag !~!~!~ $content = str_replace('!~!~!~', '', $content); } @@ -313,6 +323,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content=preg_replace('/(url\(["\']?)\/?image\//', '\1medias/image/', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); From 9a455cf1d6089392a2613241d720332799b0b472 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:03:48 +0200 Subject: [PATCH 0656/1148] Fix link --- htdocs/core/lib/website.lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 455d28c84e8..e4db83140cd 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -305,6 +305,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content=preg_replace('/(url\(["\']?)\/?image\//', '\1/wrapper.php?modulepart=medias&file=medias/image/', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep); From 62438b61f04873f9a0fc3e1105c8eab0aa4b20bd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:14:20 +0200 Subject: [PATCH 0657/1148] Better error message --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index c7573af557a..5d408f3bdd2 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2927,7 +2927,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, { if (empty($conf->$modulepart->dir_output)) // modulepart not supported { - dol_print_error('', 'Error call dol_check_secure_access_document with not supported value for modulepart parameter ('.$modulepart.')'); + dol_print_error('', 'Error call dol_check_secure_access_document with not supported value for modulepart parameter ('.$modulepart.'). The module for this modulepart value may not be activated.'); exit; } From 63520e1d9b08e4431388e62ad2ebcaa65cdb0c22 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:32:24 +0200 Subject: [PATCH 0658/1148] Fix link --- htdocs/core/lib/website.lib.php | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index e4db83140cd..13dcd9499ed 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -316,25 +316,33 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)hashp=([^\)]*)(["\']?\))/', '\1/wrapper.php\2hashp\3\4', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=mycompany([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=mycompany\3file=\4\5', $content, -1, $nbrep); + + // If some links to documents or viewimage remains, we replace with wrapper + $content=preg_replace('/(]*src=")\/?viewimage\.php/', '\1/wrapper.php', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")\/?documents\.php/', '\1/wrapper.php', $content, -1, $nbrep); } else { // ]*src=")\/?image\//', '\1medias/image/', $content, -1, $nbrep); - $content=preg_replace('/(url\(["\']?)\/?image\//', '\1medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")\/?image\//', '\1/medias/image/', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)\/?image\//', '\1/medias/image/', $content, -1, $nbrep); - $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep); - $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/', '\1medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/medias/\4\5', $content, -1, $nbrep); + $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/', '\1/medias/\4\5', $content, -1, $nbrep); $content=preg_replace('/(]*href=")[^\"]*viewimage\.php([^\"]*)hashp=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2hashp=\3\4', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)hashp=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2hashp=\3\4', $content, -1, $nbrep); $content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)hashp=([^\)]*)(["\']?\))/', '\1/wrapper.php\2hashp=\3\4', $content, -1, $nbrep); $content=preg_replace('/(]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=mycompany([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=mycompany\3file=\4\5', $content, -1, $nbrep); + + // If some links to documents or viewimage remains, we replace with wrapper + $content=preg_replace('/(]*src=")\/?viewimage\.php/', '\1/wrapper.php', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")\/?documents\.php/', '\1/wrapper.php', $content, -1, $nbrep); } } From 318b27e0848e2df018feb19e0fdd32722b81b178 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 05:33:45 +0200 Subject: [PATCH 0659/1148] Fix link --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 13dcd9499ed..74c06201507 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -342,7 +342,7 @@ function dolWebsiteOutput($content, $contenttype = 'html', $containerid = '') // If some links to documents or viewimage remains, we replace with wrapper $content=preg_replace('/(]*src=")\/?viewimage\.php/', '\1/wrapper.php', $content, -1, $nbrep); - $content=preg_replace('/(]*href=")\/?documents\.php/', '\1/wrapper.php', $content, -1, $nbrep); + $content=preg_replace('/(]*href=")\/?document\.php/', '\1/wrapper.php', $content, -1, $nbrep); } } From 1f2eb31e41cb7e0f145b8e1b4cdc569d7827d9f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:06:36 +0200 Subject: [PATCH 0660/1148] Set utf-8 in lowercase --- htdocs/core/lib/website2.lib.php | 2 +- htdocs/main.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/website2.lib.php b/htdocs/core/lib/website2.lib.php index 357c050afd5..1d4f1fdb37f 100644 --- a/htdocs/core/lib/website2.lib.php +++ b/htdocs/core/lib/website2.lib.php @@ -113,7 +113,7 @@ function dolSavePageContent($filetpl, $object, $objectpage) $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''.dol_string_nohtmltag($objectpage->title, 0, 'UTF-8').''."\n"; - $tplcontent.= ''."\n"; + $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; $tplcontent.= ''."\n"; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 58fe4008a28..7c11e6d10a7 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1217,7 +1217,7 @@ function top_htmlhead($head, $title = '', $disablejs = 0, $disablehead = 0, $arr if (GETPOST('dol_basehref', 'alpha')) print ''."\n"; // Displays meta - print ''."\n"; + print ''."\n"; print ''."\n"; // Do not index print ''."\n"; // Scale for mobile device print ''."\n"; From e61f883561a3d1b9a823e408d3d48ef906f8a53e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:25:58 +0200 Subject: [PATCH 0661/1148] Color --- htdocs/theme/eldy/theme_vars.inc.php | 2 +- htdocs/theme/md/theme_vars.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 6b8ac64a2ec..652ece12837 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,7 +32,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index b200746c330..0800f92b74b 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -28,7 +28,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') From 23b1c24bf7fb049b8c611d1ef357dfa54c9db001 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:28:25 +0200 Subject: [PATCH 0662/1148] Fix template --- .../websites/website_template-stellar.zip | Bin 197324 -> 191327 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/htdocs/install/doctemplates/websites/website_template-stellar.zip b/htdocs/install/doctemplates/websites/website_template-stellar.zip index 728b9f37b35f955bb766cc70df8c494c6a434834..b4d55a83e7314ffbc3a3deb243081f17395ff972 100644 GIT binary patch delta 20286 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 delta 26552 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 From b8cc00eb66a37cc841b99826d4f73673028942bb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:41:07 +0200 Subject: [PATCH 0663/1148] Colors for graph are same by defaul than flashy, but less flashy. --- htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- htdocs/theme/md/theme_vars.inc.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 652ece12837..2120a2e4793 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,12 +32,12 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250, 190, 30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); } else { diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index 0800f92b74b..ebc085e5279 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -28,12 +28,12 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(0, 147, 183), array(136,102,136), array(0,130,110), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(250,190,30), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') { - $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0,166,90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); + $theme_datacolor = array(array(157, 56, 191), array(0, 147, 183), array(250,190,30), array(221, 75, 57), array(0, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); } else { From 63e590810b94c65f1d492ef0c2d228c23a521c71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 06:51:32 +0200 Subject: [PATCH 0664/1148] Still too agressive --- htdocs/theme/eldy/theme_vars.inc.php | 2 +- htdocs/theme/md/theme_vars.inc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 2120a2e4793..2f0d0d8a692 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -32,7 +32,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') diff --git a/htdocs/theme/md/theme_vars.inc.php b/htdocs/theme/md/theme_vars.inc.php index ebc085e5279..5daaf7c08cc 100644 --- a/htdocs/theme/md/theme_vars.inc.php +++ b/htdocs/theme/md/theme_vars.inc.php @@ -28,7 +28,7 @@ global $theme_bordercolor, $theme_datacolor, $theme_bgcolor, $theme_bgcoloronglet; $theme_bordercolor = array(235,235,224); -$theme_datacolor = array(array(137, 56, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); +$theme_datacolor = array(array(137, 86, 161), array(60, 147, 183), array(250, 190, 80), array(191, 75, 57), array(80, 166, 90), array(140,140,220), array(190,120,120), array(190,190,100), array(115,125,150), array(100,170,20), array(150,135,125), array(85,135,150), array(150,135,80), array(150,80,150)); if (!empty($conf->global->MAIN_OPTIMIZEFORCOLORBLIND)) // user is loaded by dolgraph.class.php { if ($conf->global->MAIN_OPTIMIZEFORCOLORBLIND == 'flashy') From d850b8a2624744bd2330c60d55b1c6050bf3e2bc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 07:02:10 +0200 Subject: [PATCH 0665/1148] More neutral color --- htdocs/theme/eldy/theme_vars.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 2f0d0d8a692..cbf1ab000be 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -51,9 +51,9 @@ $theme_bgcoloronglet = array(hexdec('DE'),hexdec('E7'),hexdec('EC')); // Colors $colorbackhmenu1='60,70,100'; // topmenu -$colorbackvmenu1='249,250,252'; // vmenu +$colorbackvmenu1='250,250,250'; // vmenu $colortopbordertitle1='200,200,200'; // top border of title -$colorbacktitle1='233,234,238'; // title of tables,list +$colorbacktitle1='233,234,237'; // title of tables,list $colorbacktabcard1='255,255,255'; // card $colorbacktabactive='234,234,234'; $colorbacklineimpair1='255,255,255'; // line impair From e0310b5d9ba5aee2c9f25730f350ca6bfef67598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Fri, 16 Aug 2019 11:38:42 +0200 Subject: [PATCH 0666/1148] Fix #11682 Missing origin object ref and thirdparty ref in future bank entries --- htdocs/compta/bank/treso.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index f17e622210e..f9231f4f247 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -267,9 +267,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $parameters = array('obj' => $obj); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ - $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : ''; - $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : ''; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : 0; + $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; + $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; + $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; } $total_ttc = $obj->total_ttc; From 13604b3571bd6febe92b8541bb88d51f59b29fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean=20Traull=C3=A9?= Date: Fri, 16 Aug 2019 11:55:40 +0200 Subject: [PATCH 0667/1148] Fix code style / CI. --- htdocs/admin/pdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php index e2a99441ea8..56c6f977827 100644 --- a/htdocs/admin/pdf.php +++ b/htdocs/admin/pdf.php @@ -283,7 +283,7 @@ if ($action == 'edit') // Edit //Invert sender and recipient print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'; - print $langs->trans('Label') . ': '; + print $langs->trans('Label') . ': '; print '' . dol_print_date(dol_now(), "dayhour", "tzuser") . ''; print img_picto('', 'object_globe').' '; print ''; - print $link->label; + print dol_escape_htmltag($link->label); print ''; print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'.$langs->trans("SwapSenderAndRecipientOnPDF").''; - print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT',(! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0,1); + print $form->selectyesno('MAIN_INVERT_SENDER_RECIPIENT', (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT))?$conf->global->MAIN_INVERT_SENDER_RECIPIENT:0, 1); print '
'; print ''; print ""; -print '"; +print '"; print ""; print ""; -print ''; +print ''; print ''; $production_mode=(empty($conf->global->API_PRODUCTION_MODE)?false:true); if ($production_mode) { - print ''; } else { - print ''; } print ''; print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + print '
".$langs->trans("Parameter")."'.$langs->trans("Value")."'.$langs->trans("Value")." 
'.$langs->trans("ApiProductionMode").''; + print ''; print img_picto($langs->trans("Activated"), 'switch_on'); print ''; + print ''; print img_picto($langs->trans("Disabled"), 'switch_off'); print ' 
'.$langs->trans("RestrictApiToIps").''; +print '
'; print '

'; +print ''; + + // Define $urlwithroot $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root)); $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file diff --git a/htdocs/api/index.php b/htdocs/api/index.php index 9d42b9995f6..1f1235571cc 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -206,6 +206,21 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || // Call one APIs or one definition of an API if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $reg[2] != '/resources.json' && preg_match('/^\/(swagger|resources)\.json\/(.+)$/', $reg[2], $regbis) && $regbis[2] != 'root'))) { + // Restrict API to some IPs + if (! empty($conf->global->API_RESTICT_ON_IP)) + { + $allowedip=explode(' ', $conf->global->API_RESTICT_ON_IP); + $ipremote = getUserRemoteIP(); + if (! in_array($ipremote, $allowedip)) + { + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTICT_ON_IP); + print 'API not allowed from the IP '.$ipremote; + header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); + //print $conf->global->API_RESTICT_ON_IP; + exit(0); + } + } + $module = $reg[1]; if ($module == 'explorer') // If we call page to explore details of a service { diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index d408cddc5c8..c95c9fe05cc 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,3 +1932,4 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined +RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. \ No newline at end of file From d21e5571007d2052a6b5f80a67b6f4cac693584a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 16 Aug 2019 16:41:53 +0200 Subject: [PATCH 0683/1148] FIX #11671 CVE-2019-15062 --- htdocs/core/actions_linkedfiles.inc.php | 8 +++----- htdocs/core/class/html.formfile.class.php | 4 ++-- htdocs/user/card.php | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php index 25ef74127bf..463795b66e9 100644 --- a/htdocs/core/actions_linkedfiles.inc.php +++ b/htdocs/core/actions_linkedfiles.inc.php @@ -125,8 +125,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') { require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $link = new Link($db); - $link->id = $linkid; - $link->fetch(); + $link->fetch($linkid); $res = $link->delete($user); $langs->load('link'); @@ -160,8 +159,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php'; $langs->load('link'); $link = new Link($db); - $link->id = GETPOST('linkid', 'int'); - $f = $link->fetch(); + $f = $link->fetch(GETPOST('linkid', 'int')); if ($f) { $link->url = GETPOST('link', 'alpha'); @@ -169,7 +167,7 @@ elseif ($action == 'confirm_updateline' && GETPOST('save','alpha') && GETPOST('l { $link->url = 'http://' . $link->url; } - $link->label = GETPOST('label', 'alpha'); + $link->label = GETPOST('label', 'alphanohtml'); $res = $link->update($user); if (!$res) { diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php index 679989a75a0..05708691fab 100644 --- a/htdocs/core/class/html.formfile.class.php +++ b/htdocs/core/class/html.formfile.class.php @@ -1758,7 +1758,7 @@ class FormFile print $langs->trans('Link') . ': '; print '
'; - print $langs->trans('Label') . ': '; + print $langs->trans('Label') . ': '; print '' . dol_print_date(dol_now(), "dayhour", "tzuser") . ''; print img_picto('', 'object_globe').' '; print ''; - print $link->label; + print dol_escape_htmltag($link->label); print ''; print ''; - print $langs->trans('Label') . ': '; + print $langs->trans('Label') . ': '; print '' . dol_print_date(dol_now(), "dayhour", "tzuser") . ''; print img_picto('', 'object_globe').' '; print ''; - print $link->label; + print dol_escape_htmltag($link->label); print ''; print '
'.img_object('', $delay['img']).'
'.img_object('', $delay['img']).''; print $bankaccount->getNomUrl(1); - if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; - else $other+=$objp->amount; + if ($cashcontrol->posmodule=="takepos"){ + if ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$cashcontrol->posnumber}==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$cashcontrol->posnumber}==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$cashcontrol->posnumber}==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } + else{ + if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } print "
'.$langs->trans("AccountancyJournal").''; - if ($object->fk_accountancy_journal > 0) { - $accountingjournal = new AccountingJournal($db); - $accountingjournal->fetch($object->fk_accountancy_journal); + if ($object->fk_accountancy_journal > 0) { + $accountingjournal = new AccountingJournal($db); + $accountingjournal->fetch($object->fk_accountancy_journal); - print $accountingjournal->getNomUrl(0, 1, 1, '', 1); - } + print $accountingjournal->getNomUrl(0, 1, 1, '', 1); + } print '
"; print ''; // TODO Replace this with mass delete action -print '
' . "\n"; -print '' . $langs->trans("DeleteMvt") . ''; -print '
'; - +if ($user->rights->mouvements->creer) +{ + print '
' . "\n"; + print '' . $langs->trans("DeleteMvt") . ''; + print '
'; +} print ''; From 4fd68798a3fb373669d4f61fc109f900d97e3313 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:38:51 +0200 Subject: [PATCH 0702/1148] Fix phpcs --- htdocs/core/lib/functions2.lib.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 72bdce0f524..c22a8da5cee 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2345,10 +2345,10 @@ function colorLighten($hex, $percent) /** - * @param string $hex color in hex - * @param float $alpha 0 to 1 to add alpha channel - * @param bool $return Array set to 1 to return an array instead of string - * @return string|array String or array + * @param string $hex color in hex + * @param float $alpha 0 to 1 to add alpha channel + * @param bool $returnArray Array set to 1 to return an array instead of string + * @return string|array String or array */ function colorHexToRgb($hex, $alpha = false, $returnArray = false) { From f27bea94976c4a3719626b1ca3cac717e79caf89 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 18 Aug 2019 20:39:02 +0200 Subject: [PATCH 0703/1148] Fix phpcs --- htdocs/compta/bank/class/account.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php index 5724178e9de..da136313393 100644 --- a/htdocs/compta/bank/class/account.class.php +++ b/htdocs/compta/bank/class/account.class.php @@ -749,7 +749,6 @@ class Account extends CommonObject $sql.= ",fk_pays = ".$this->country_id; $sql.= " WHERE rowid = ".$this->id; - $sql.= " AND entity = ".$conf->entity; dol_syslog(get_class($this)."::update", LOG_DEBUG); $result = $this->db->query($sql); From bbc1dfb0f7588e452548df03c84735f8dc42a88d Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sun, 18 Aug 2019 09:33:02 +0200 Subject: [PATCH 0704/1148] Cashcontrol TakePOS fixes --- htdocs/compta/cashcontrol/cashcontrol_card.php | 15 +++------------ htdocs/compta/cashcontrol/report.php | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/htdocs/compta/cashcontrol/cashcontrol_card.php b/htdocs/compta/cashcontrol/cashcontrol_card.php index 378d6087cc7..1fa95eb0b46 100644 --- a/htdocs/compta/cashcontrol/cashcontrol_card.php +++ b/htdocs/compta/cashcontrol/cashcontrol_card.php @@ -88,7 +88,7 @@ if (empty($backtopage)) $backtopage = dol_buildpath('/compta/cashcontrol/cashcon $backurlforlist = dol_buildpath('/compta/cashcontrol/cashcontrol_list.php', 1); $triggermodname = 'CACHCONTROL_MODIFY'; // Name of trigger action code to execute when we modify record -if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH)) +if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) && empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH1)) { setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors'); } @@ -132,16 +132,7 @@ elseif ($action=="add") $error=0; foreach($arrayofpaymentmode as $key=>$val) { - if (GETPOST($key.'_amount', 'alpha') == '') - { - setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv($val)), null, 'errors'); - $action='start'; - $error++; - } - else - { - $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); - } + $object->$key = price2num(GETPOST($key.'_amount', 'alpha')); } if (! $error) @@ -235,7 +226,7 @@ if ($action=="create" || $action=="start") $posmodule = GETPOST('posmodule', 'alpha'); $terminalid = GETPOST('posnumber', 'alpha'); $terminaltouse = $terminalid; - if ($terminaltouse == '1') $terminaltouse = ''; + if ($terminaltouse == '1' && $posmodule=='cashdesk') $terminaltouse = ''; // Calculate $initialbalanceforterminal for terminal 0 foreach($arrayofpaymentmode as $key => $val) diff --git a/htdocs/compta/cashcontrol/report.php b/htdocs/compta/cashcontrol/report.php index 6584af5db98..ce0cdeed9fb 100644 --- a/htdocs/compta/cashcontrol/report.php +++ b/htdocs/compta/cashcontrol/report.php @@ -196,10 +196,18 @@ if ($resql) // Bank account print '
'; print $bankaccount->getNomUrl(1); - if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; - elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; - else $other+=$objp->amount; + if ($cashcontrol->posmodule=="takepos"){ + if ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CASH'.$cashcontrol->posnumber}==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CB'.$cashcontrol->posnumber}==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->{'CASHDESK_ID_BANKACCOUNT_CHEQUE'.$cashcontrol->posnumber}==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } + else{ + if ($conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->id) $cash+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->id) $bank+=$objp->amount; + elseif ($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE==$bankaccount->id) $cheque+=$objp->amount; + else $other+=$objp->amount; + } print "
'; - $text=''; - if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate", $totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')'; - else $text=$langs->transnoentitiesnoconv("NoItemLate"); - $text.='. '.$langs->transnoentitiesnoconv("LateDesc"); - //$text.=$form->textwithpicto('',$langs->trans("LateDesc")); - $options='height="64px"'; - $boxwork.=showWeather($totallate, $text, $options); - $boxwork.='
'; print ''; print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; -print ''; +for($i = 1; $i <= 12; $i++) +{ + print ''; +} +print ''; print ''; $sql = "SELECT bk.numero_compte AS 'compte',"; diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index f0a01d1ae04..efeffeb9b8c 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -130,21 +130,6 @@ $AccCat = new AccountancyCategory($db); * View */ -$months = array( - $langs->trans("JanuaryMin"), - $langs->trans("FebruaryMin"), - $langs->trans("MarchMin"), - $langs->trans("AprilMin"), - $langs->trans("MayMin"), - $langs->trans("JuneMin"), - $langs->trans("JulyMin"), - $langs->trans("AugustMin"), - $langs->trans("SeptemberMin"), - $langs->trans("OctoberMin"), - $langs->trans("NovemberMin"), - $langs->trans("DecemberMin"), -); - llxHeader(); $form=new Form($db); diff --git a/htdocs/compta/resultat/result.php b/htdocs/compta/resultat/result.php index 317531884c0..9bbf0501dbd 100644 --- a/htdocs/compta/resultat/result.php +++ b/htdocs/compta/resultat/result.php @@ -143,18 +143,18 @@ $AccCat = new AccountancyCategory($db); */ $months = array( - $langs->trans("JanuaryMin"), - $langs->trans("FebruaryMin"), - $langs->trans("MarchMin"), - $langs->trans("AprilMin"), - $langs->trans("MayMin"), - $langs->trans("JuneMin"), - $langs->trans("JulyMin"), - $langs->trans("AugustMin"), - $langs->trans("SeptemberMin"), - $langs->trans("OctoberMin"), - $langs->trans("NovemberMin"), - $langs->trans("DecemberMin"), + $langs->trans("MonthShort01"), + $langs->trans("MonthShort02"), + $langs->trans("MonthShort03"), + $langs->trans("MonthShort04"), + $langs->trans("MonthShort05"), + $langs->trans("MonthShort06"), + $langs->trans("MonthShort07"), + $langs->trans("MonthShort08"), + $langs->trans("MonthShort09"), + $langs->trans("MonthShort10"), + $langs->trans("MonthShort11"), + $langs->trans("MonthShort12"), ); llxheader('', $langs->trans('ReportInOut')); diff --git a/htdocs/projet/jsgantt_language.js.php b/htdocs/projet/jsgantt_language.js.php index 99123cc45ef..322b1c03c28 100644 --- a/htdocs/projet/jsgantt_language.js.php +++ b/htdocs/projet/jsgantt_language.js.php @@ -48,8 +48,8 @@ var vLangs={'getDefaultLang(1);?>': 'notes':'transnoentities('NotePublic'); ?>', 'january':'transnoentities('January'); ?>','february':'transnoentities('February'); ?>','march':'transnoentities('March'); ?>','april':'transnoentities('April'); ?>','maylong':'transnoentities('May'); ?>','june':'transnoentities('June'); ?>','july':'transnoentities('July'); ?>', 'august':'transnoentities('August'); ?>','september':'transnoentities('September'); ?>','october':'transnoentities('October'); ?>','november':'transnoentities('November'); ?>','december':'transnoentities('December'); ?>', - 'jan':'transnoentities('JanuaryMin'); ?>','feb':'transnoentities('FebruaryMin'); ?>','mar':'transnoentities('MarchMin'); ?>','apr':'transnoentities('AprilMin'); ?>','may':'transnoentities('MayMin'); ?>','jun':'transnoentities('JuneMin'); ?>','jul':'transnoentities('JulyMin'); ?>', - 'aug':'transnoentities('AugustMin'); ?>','sep':'transnoentities('SeptemberMin'); ?>','oct':'transnoentities('OctoberMin'); ?>','nov':'transnoentities('NovemberMin'); ?>','dec':'transnoentities('DecemberMin'); ?>', + 'jan':'transnoentities('MonthShort01'); ?>','feb':'transnoentities('MonthShort02'); ?>','mar':'transnoentities('MonthShort03'); ?>','apr':'transnoentities('MonthShort04'); ?>','may':'transnoentities('MonthShort05'); ?>','jun':'transnoentities('MonthShort06'); ?>','jul':'transnoentities('MonthShort07'); ?>', + 'aug':'transnoentities('MonthShort08'); ?>','sep':'transnoentities('MonthShort09'); ?>','oct':'transnoentities('MonthShort10'); ?>','nov':'transnoentities('MonthShort11'); ?>','dec':'transnoentities('MonthShort12'); ?>', 'sunday':'transnoentities('Sunday'); ?>','monday':'transnoentities('Monday'); ?>','tuesday':'transnoentities('Tuesday'); ?>','wednesday':'transnoentities('Wednesday'); ?>','thursday':'transnoentities('Thursday'); ?>','friday':'transnoentities('Friday'); ?>','saturday':'transnoentities('Saturday'); ?>', 'sun':'transnoentities('SundayMin'); ?>','mon':'transnoentities('MondayMin'); ?>','tue':'transnoentities('TuesdayMin'); ?>','wed':'transnoentities('WednesdayMin'); ?>','thu':'transnoentities('ThursdayMin'); ?>','fri':'transnoentities('FridayMin'); ?>','sat':'transnoentities('SaturdayMin'); ?>' } From cb0bb55b3aacfd1d0e8684700e728bd29e94100b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 10:29:59 +0200 Subject: [PATCH 0712/1148] Label centered --- htdocs/projet/tasks.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index b1b802ee25c..8f20d8ff3c4 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2018 Laurent Destailleur + * Copyright (C) 2004-2019 Laurent Destailleur * Copyright (C) 2005-2017 Regis Houssin * * This program is free software; you can redistribute it and/or modify @@ -96,8 +96,6 @@ $planned_workloadhour=(GETPOST('planned_workloadhour', 'int')?GETPOST('planned_w $planned_workloadmin=(GETPOST('planned_workloadmin', 'int')?GETPOST('planned_workloadmin', 'int'):0); $planned_workload=$planned_workloadhour*3600+$planned_workloadmin*60; -$userAccess=0; - $arrayfields=array( 't.ref'=>array('label'=>$langs->trans("RefTask"), 'checked'=>1, 'position'=>80), 't.label'=>array('label'=>$langs->trans("LabelTask"), 'checked'=>1, 'position'=>80), @@ -481,7 +479,7 @@ if ($id > 0 || ! empty($ref)) } // Categories - if($conf->categorie->enabled) { + if ($conf->categorie->enabled) { print '"; @@ -781,7 +779,7 @@ elseif ($id > 0 || ! empty($ref)) print_liste_field_titre("TimeSpent", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); print_liste_field_titre("ProgressCalculated", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); print_liste_field_titre("ProgressDeclared", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); - print_liste_field_titre("TaskProgressSummary", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); + print_liste_field_titre("TaskProgressSummary", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center '); if ($object->bill_time) { print_liste_field_titre("TimeToBill", $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'right '); From 99fcab80d8f57afd52e3343cf3e8d1273865dbe5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 12:52:41 +0200 Subject: [PATCH 0713/1148] Fix icon size --- htdocs/theme/eldy/info-box.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index c5bd978144c..395a3909b96 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -66,7 +66,7 @@ if (! defined('ISLOADEDBYSTEELSHEET'))  die('Must be call by steelsheet'); ?> height: 80px; width: 80px; font-size: 25px; - line-height: 70px; + line-height: 80px; } .info-box-icon > img { max-width: 100%; From 15a765a79a04c0e375dc381972731bf9fb2409b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 13:28:24 +0200 Subject: [PATCH 0714/1148] Fix responsive --- htdocs/user/home.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/user/home.php b/htdocs/user/home.php index 9a7d0ab94fd..711eb94500c 100644 --- a/htdocs/user/home.php +++ b/htdocs/user/home.php @@ -124,8 +124,9 @@ if ($resql) { $num = $db->num_rows($resql); print '
' . $langs->trans("Label") . '' . $langs->trans("JanuaryMin") . '' . $langs->trans("FebruaryMin") . '' . $langs->trans("MarchMin") . '' . $langs->trans("AprilMin") . '' . $langs->trans("MayMin") . '' . $langs->trans("JuneMin") . '' . $langs->trans("JulyMin") . '' . $langs->trans("AugustMin") . '' . $langs->trans("SeptemberMin") . '' . $langs->trans("OctoberMin") . '' . $langs->trans("NovemberMin") . '' . $langs->trans("DecemberMin") . 'Total' . $langs->trans("MonthShort".sprintf("%02s", $i)) . ''.$langs->trans("Total").'
'.$langs->trans("Categories").''; print $form->showCategories($object->id, 'project', 1); print "
'; - print ''; + print ''; print ''; + print ''; print ''; $i = 0; @@ -194,7 +195,7 @@ if ($resql) print ($entitystring?' ('.$entitystring.')':''); print ''; - print ''; + print ''; print ''; From 7f6c29fd6599e15bccf7806f37a32c751c6a86ad Mon Sep 17 00:00:00 2001 From: BENKE Charlene <1179011+defrance@users.noreply.github.com> Date: Mon, 19 Aug 2019 15:27:21 +0200 Subject: [PATCH 0715/1148] bad converting on php 7 is totalpaid is null display a warning error --- htdocs/expensereport/card.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php index 07318bc0571..9917682f265 100644 --- a/htdocs/expensereport/card.php +++ b/htdocs/expensereport/card.php @@ -2058,7 +2058,8 @@ else $totalpaid += $objp->amount; $i++; } - $totalpaid = price2num($totalpaid); // Round $totalpaid to fix floating problem after addition into loop + if ( !is_null($totalpaid)) + $totalpaid = price2num($totalpaid); // Round $totalpaid to fix floating problem after addition into loop $remaintopay = price2num($object->total_ttc - $totalpaid); $resteapayeraffiche = $remaintopay; From 998c25f8d6c6723a128a762c30f034a3dbfcc13a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 17:08:58 +0200 Subject: [PATCH 0716/1148] Translation --- htdocs/langs/en_US/website.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index d9bc082de09..c43dfc3ebae 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -112,4 +112,5 @@ SearchReplaceInto=Search | Replace into ReplaceString=New string CSSContentTooltipHelp=Enter here CSS content. To avoid any conflict with the CSS of the application, be sure to prepend all declaration with the .bodywebsite class. For example:

#mycssselector, input.myclass:hover { ... }
must be
.bodywebsite #mycssselector, .bodywebsite input.myclass:hover { ... }

Note: If you have a large file without this prefix, you can use 'lessc' to convert it to append the .bodywebsite prefix everywhere. LinkAndScriptsHereAreNotLoadedInEditor=Warning: This content is output only when site is accessed from a server. It is not used in Edit mode so if you need to load javascript files also in edit mode, just add your tag 'script src=...' into the page. -Dynamiccontent=Sample of a page with dynamic content \ No newline at end of file +Dynamiccontent=Sample of a page with dynamic content +ImportSite=Import site \ No newline at end of file From def0311f9da7f0df2b082cd58a92b6143b269d2e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 17:26:13 +0200 Subject: [PATCH 0717/1148] Fix translation --- htdocs/compta/facture/card.php | 4 ++-- htdocs/compta/facture/fiche-rec.php | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php index d19e925843e..203d2f22a78 100644 --- a/htdocs/compta/facture/card.php +++ b/htdocs/compta/facture/card.php @@ -3237,8 +3237,8 @@ if ($action == 'create') '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans("TextPreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%B').')', '__INVOICE_MONTH_TEXT__' => $langs->trans("TextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%B').')', '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans("TextNextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'm'), '%B').')', - '__INVOICE_PREVIOUS_YEAR__' => $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')', - '__INVOICE_YEAR__' => $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')', + '__INVOICE_PREVIOUS_YEAR__' => $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')', + '__INVOICE_YEAR__' => $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')', '__INVOICE_NEXT_YEAR__' => $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'y'), '%Y').')' ); diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php index 9b50e782454..3544aaa1049 100644 --- a/htdocs/compta/facture/fiche-rec.php +++ b/htdocs/compta/facture/fiche-rec.php @@ -1015,8 +1015,8 @@ if ($action == 'create') $substitutionarray['__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans("TextPreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'm'), '%B').')'; $substitutionarray['__INVOICE_MONTH_TEXT__'] = $langs->trans("TextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date, '%B').')'; $substitutionarray['__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans("TextNextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'm'), '%B').')'; - $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'y'), '%Y').')'; - $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date, '%Y').')'; + $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, -1, 'y'), '%Y').')'; + $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date, '%Y').')'; $substitutionarray['__INVOICE_NEXT_YEAR__'] = $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'y'), '%Y').')'; // Only on template invoices $substitutionarray['__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans("DateNextInvoiceBeforeGen").' ('.$langs->trans("Example").': '.dol_print_date($object->date_when, 'dayhour').')'; @@ -1357,8 +1357,8 @@ else $substitutionarray['__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans("TextPreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%B').')'; $substitutionarray['__INVOICE_MONTH_TEXT__'] = $langs->trans("TextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%B').')'; $substitutionarray['__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans("TextNextMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'm'), '%B').')'; - $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')'; - $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')'; + $substitutionarray['__INVOICE_PREVIOUS_YEAR__'] = $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'y'), '%Y').')'; + $substitutionarray['__INVOICE_YEAR__'] = $langs->trans("YearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample, '%Y').')'; $substitutionarray['__INVOICE_NEXT_YEAR__'] = $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'y'), '%Y').')'; // Only on template invoices $substitutionarray['__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans("DateNextInvoiceBeforeGen").' ('.$langs->trans("Example").': '.dol_print_date(($object->date_when?$object->date_when:dol_now()), 'dayhour').')'; From 28c18afbb6c2d7e50508adc5dc990beb534a3684 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:06:27 +0200 Subject: [PATCH 0718/1148] Enhance export of website --- htdocs/website/class/website.class.php | 31 ++++++++++++++++++++------ 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index 8d90aae370a..b659edb7d16 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -823,30 +823,47 @@ class Website extends CommonObject return ''; } - $arrayreplacement=array(); + $arrayreplacementinfilename=array(); + $arrayreplacementincss=array(); + $arrayreplacementincss['modulepart=medias&file=image/'.$website->ref.'/'] = "file=image/__WEBSITE_KEY__/"; + $arrayreplacementincss['modulepart=medias&file=js/'.$website->ref.'/'] = "file=js/__WEBSITE_KEY__/"; + $arrayreplacementincss['medias/image/'.$website->ref.'/'] = "medias/image/__WEBSITE_KEY__/"; + $arrayreplacementincss['medias/js/'.$website->ref.'/'] = "medias/js/__WEBSITE_KEY__/"; + $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo_small] = "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__"; + $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo_mini] = "file=logos%2Fthumbs%2F__LOGO_MINI_KEY__"; + $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo] = "file=logos%2Fthumbs%2F__LOGO_KEY__"; $srcdir = $conf->website->dir_output.'/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/containers'; + // Create containers dir + dol_syslog("Create containers dir"); + dol_mkdir($conf->website->dir_temp.'/'.$website->ref.'/containers'); + + // Copy files into medias dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); $srcdir = DOL_DATA_ROOT.'/medias/image/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/image/websitekey'; dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); $srcdir = DOL_DATA_ROOT.'/medias/js/'.$website->ref; $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/js/websitekey'; + // Copy containers files dol_syslog("Copy content from ".$srcdir." into ".$destdir); - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); + + $cssindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/styles.css.php'; + dolReplaceInFile($cssindestdir, $arrayreplacementincss, '', 0, 0, 0); + + $htmldeaderindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/htmlheader.html'; + dolReplaceInFile($htmldeaderindestdir, $arrayreplacementincss, '', 0, 0, 0); // Build sql file - dol_syslog("Create containers dir"); - dol_mkdir($conf->website->dir_temp.'/'.$website->ref.'/containers'); - $filesql = $conf->website->dir_temp.'/'.$website->ref.'/website_pages.sql'; $fp = fopen($filesql, "w"); if (empty($fp)) From 6d60b53dbb18d2ba1b8039de1fccf63059042463 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:25:27 +0200 Subject: [PATCH 0719/1148] Enhance export/import of web sites --- htdocs/website/class/website.class.php | 30 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index b659edb7d16..337f054c7c9 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -825,8 +825,8 @@ class Website extends CommonObject $arrayreplacementinfilename=array(); $arrayreplacementincss=array(); - $arrayreplacementincss['modulepart=medias&file=image/'.$website->ref.'/'] = "file=image/__WEBSITE_KEY__/"; - $arrayreplacementincss['modulepart=medias&file=js/'.$website->ref.'/'] = "file=js/__WEBSITE_KEY__/"; + $arrayreplacementincss['file=image/'.$website->ref.'/'] = "file=image/__WEBSITE_KEY__/"; + $arrayreplacementincss['file=js/'.$website->ref.'/'] = "file=js/__WEBSITE_KEY__/"; $arrayreplacementincss['medias/image/'.$website->ref.'/'] = "medias/image/__WEBSITE_KEY__/"; $arrayreplacementincss['medias/js/'.$website->ref.'/'] = "medias/js/__WEBSITE_KEY__/"; $arrayreplacementincss['file=logos%2Fthumbs%2F'.$mysoc->logo_small] = "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__"; @@ -858,10 +858,10 @@ class Website extends CommonObject dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacementinfilename); $cssindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/styles.css.php'; - dolReplaceInFile($cssindestdir, $arrayreplacementincss, '', 0, 0, 0); + dolReplaceInFile($cssindestdir, $arrayreplacementincss); $htmldeaderindestdir = $conf->website->dir_temp.'/'.$website->ref.'/containers/htmlheader.html'; - dolReplaceInFile($htmldeaderindestdir, $arrayreplacementincss, '', 0, 0, 0); + dolReplaceInFile($htmldeaderindestdir, $arrayreplacementincss); // Build sql file $filesql = $conf->website->dir_temp.'/'.$website->ref.'/website_pages.sql'; @@ -1029,9 +1029,24 @@ class Website extends CommonObject return -1; } + $arrayreplacement = array(); + $arrayreplacement['__WEBSITE_ID__'] = $object->id; + $arrayreplacement['__WEBSITE_KEY__'] = $object->ref; + $arrayreplacement['__N__'] = $this->db->escape("\n"); // Restore \n + $arrayreplacement['__LOGO_SMALL_KEY__'] = $this->db->escape($mysoc->logo_small); + $arrayreplacement['__LOGO_MINI_KEY__'] = $this->db->escape($mysoc->logo_mini); + $arrayreplacement['__LOGO_KEY__'] = $this->db->escape($mysoc->logo); + // Copy containers dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/containers', $conf->website->dir_output.'/'.$object->ref, 0, 1); // Overwrite if exists + // Make replacement into css and htmlheader file + $cssindestdir = $conf->website->dir_output.'/'.$object->ref.'/styles.css.php'; + $result=dolReplaceInFile($cssindestdir, $arrayreplacement); + + $htmldeaderindestdir = $conf->website->dir_output.'/'.$object->ref.'/htmlheader.html'; + $result = dolReplaceInFile($htmldeaderindestdir, $arrayreplacement); + // Now generate the master.inc.php page $filemaster=$conf->website->dir_output.'/'.$object->ref.'/master.inc.php'; $result = dolSaveMasterFile($filemaster); @@ -1046,13 +1061,6 @@ class Website extends CommonObject $sqlfile = $conf->website->dir_temp.'/'.$object->ref.'/website_pages.sql'; - $arrayreplacement = array(); - $arrayreplacement['__WEBSITE_ID__'] = $object->id; - $arrayreplacement['__WEBSITE_KEY__'] = $object->ref; - $arrayreplacement['__N__'] = $this->db->escape("\n"); // Restore \n - $arrayreplacement['__LOGO_SMALL_KEY__'] = $this->db->escape($mysoc->logo_small); - $arrayreplacement['__LOGO_MINI_KEY__'] = $this->db->escape($mysoc->logo_mini); - $arrayreplacement['__LOGO_KEY__'] = $this->db->escape($mysoc->logo); $result = dolReplaceInFile($sqlfile, $arrayreplacement); $this->db->begin(); From fb8e66a66272123f4e361905631128a659c8baa7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:34:54 +0200 Subject: [PATCH 0720/1148] Trans --- htdocs/admin/website.php | 4 ++-- htdocs/langs/en_US/website.lang | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php index 5096563ad76..8bcc6cc5417 100644 --- a/htdocs/admin/website.php +++ b/htdocs/admin/website.php @@ -618,14 +618,14 @@ if ($id) // Active print '
"; // Modify link print ''; // Delete link - if ($iserasable) print ''; + if ($iserasable) print ''; else print ''; print "\n"; diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index c43dfc3ebae..6b5c0a300e8 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -2,7 +2,7 @@ Shortname=Code WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them. DeleteWebsite=Delete website -ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. +ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed. The files uploaded (like into the medias directory, the ECM module, ...) will remain. WEBSITE_TYPE_CONTAINER=Type of page/container WEBSITE_PAGE_EXAMPLE=Web page to use as example WEBSITE_PAGENAME=Page name/alias From 5dee861f7d2092664b6ec57f496eebad1625565b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 19 Aug 2019 18:39:40 +0200 Subject: [PATCH 0721/1148] Fix typo --- htdocs/website/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 28c61aca5cd..2dbc3bb3574 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -656,7 +656,7 @@ if ($action == 'addcontainer') elseif ($tmpgeturl['http_code'] != '200') { $errorforsubresource++; - setEventMessages('Error getting link tag url'.$urltograbbis.': '.$tmpgeturl['http_code'], null, 'errors'); + setEventMessages('Error getting link tag url '.$urltograbbis.': '.$tmpgeturl['http_code'], null, 'errors'); dol_syslog('Error getting '.$urltograbbis.': '.$tmpgeturl['curl_error_msg']); $action='createcontainer'; } From 54234e011f22cfffbc434eb1e2d05a8a343a83fd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 13:26:56 +0200 Subject: [PATCH 0722/1148] Add version of Sabre lib, add log on login errors. Add compatibility with twoauth --- htdocs/admin/dav.php | 12 +++++++++--- htdocs/dav/fileserver.php | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php index 6ac210c1ddb..005394739f0 100644 --- a/htdocs/admin/dav.php +++ b/htdocs/admin/dav.php @@ -68,7 +68,6 @@ $head=dav_admin_prepare_head(); dol_fiche_head($head, 'webdav', '', -1, 'action'); - if ($action == 'edit') { print '
'; @@ -76,7 +75,7 @@ if ($action == 'edit') print ''; print '
'.$langs->trans("LastUsersCreated", min($num, $max)).'
'.$langs->trans("LastUsersCreated", min($num, $max)).''.$langs->trans("FullList").'
'.dol_print_date($db->jdate($obj->datec), 'dayhour').''.dol_print_date($db->jdate($obj->datec), 'dayhour').''; print $fuserstatic->getLibStatut(3); print ''; - print ''.$actl[($obj->status?1:0)].''; + print ''.$actl[($obj->status?1:0)].''; print "'.img_edit().''.img_delete().''.img_delete().''.img_delete($langs->trans("DisableSiteFirst"), 'class="opacitymedium"').'
'; - print ''; + print ''; foreach($arrayofparameters as $key => $val) { @@ -112,7 +111,7 @@ if ($action == 'edit') else { print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - print ''; + print ''; foreach($arrayofparameters as $key => $val) { @@ -177,6 +176,13 @@ if (! empty($conf->global->DAV_ALLOW_PUBLIC_DIR)) } print $message; +print '


'; + +require_once DOL_DOCUMENT_ROOT.'/includes/sabre/autoload.php'; +$version = Sabre\DAV\Version::VERSION; +print ''.$langs->trans("BaseOnSabeDavVersion").' : '.$version.''; + + // End of page llxFooter(); $db->close(); diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index 4e99cf92613..143f48d2033 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -72,15 +72,25 @@ $authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $p global $dolibarr_main_authentication; if (empty($user->login)) + { + dol_syslog("Failed to authenticate to DAV, login is not provided", LOG_WARNING); return false; + } if ($user->socid > 0) + { + dol_syslog("Failed to authenticate to DAV, use is an external user", LOG_WARNING); return false; + } if ($user->login != $username) + { + dol_syslog("Failed to authenticate to DAV, login does not match the login of loaded user", LOG_WARNING); return false; + } // Authentication mode - if (empty($dolibarr_main_authentication)) - $dolibarr_main_authentication='http,dolibarr'; + if (empty($dolibarr_main_authentication)) $dolibarr_main_authentication='dolibarr'; + $dolibarr_main_authentication = preg_replace('/twoauth/', 'dolibarr', $dolibarr_main_authentication); + $authmode = explode(',', $dolibarr_main_authentication); $entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : (!empty($conf->entity) ? $conf->entity : 1)); From 65d11704bb4b0fdccd094e2337aebd5a7f2a764c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 13:46:15 +0200 Subject: [PATCH 0723/1148] Fix Protect DAV when $dolibarr_main_authentication is forceuser Compatibility with twoauth --- htdocs/api/class/api_login.class.php | 8 ++++++-- htdocs/dav/fileserver.php | 13 ++++++++++++- htdocs/langs/en_US/admin.lang | 3 ++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/htdocs/api/class/api_login.class.php b/htdocs/api/class/api_login.class.php index 2bf464f7296..b2b1f08f8b6 100644 --- a/htdocs/api/class/api_login.class.php +++ b/htdocs/api/class/api_login.class.php @@ -57,12 +57,15 @@ class Login */ public function index($login, $password, $entity = '', $reset = 0) { - global $conf, $dolibarr_main_authentication, $dolibarr_auto_user; - // Authentication mode + // TODO Remove the API login. The token must be generated from backoffice only. + + // Authentication mode if (empty($dolibarr_main_authentication)) $dolibarr_main_authentication = 'http,dolibarr'; + $dolibarr_main_authentication = preg_replace('/twoauth/', 'dolibarr', $dolibarr_main_authentication); + // Authentication mode: forceuser if ($dolibarr_main_authentication == 'forceuser') { @@ -73,6 +76,7 @@ class Login throw new RestException(403, "Your instance is set to use the automatic login '".$dolibarr_auto_user."' that is not the requested login. API usage is forbidden in this mode."); } } + // Set authmode $authmode = explode(',', $dolibarr_main_authentication); diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php index 143f48d2033..b056ac9730c 100644 --- a/htdocs/dav/fileserver.php +++ b/htdocs/dav/fileserver.php @@ -69,7 +69,7 @@ $tmpDir = $conf->dav->multidir_output[$entity]; // We need root dir, not a d $authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $password) { global $user; global $conf; - global $dolibarr_main_authentication; + global $dolibarr_main_authentication, $dolibarr_auto_user; if (empty($user->login)) { @@ -91,6 +91,17 @@ $authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $p if (empty($dolibarr_main_authentication)) $dolibarr_main_authentication='dolibarr'; $dolibarr_main_authentication = preg_replace('/twoauth/', 'dolibarr', $dolibarr_main_authentication); + // Authentication mode: forceuser + if ($dolibarr_main_authentication == 'forceuser') + { + if (empty($dolibarr_auto_user)) $dolibarr_auto_user='auto'; + if ($dolibarr_auto_user != $username) + { + dol_syslog("Warning: your instance is set to use the automatic forced login '".$dolibarr_auto_user."' that is not the requested login. DAV usage is forbidden in this mode."); + return false; + } + } + $authmode = explode(',', $dolibarr_main_authentication); $entity = (GETPOST('entity', 'int') ? GETPOST('entity', 'int') : (!empty($conf->entity) ? $conf->entity : 1)); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index c95c9fe05cc..ee3da865377 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1932,4 +1932,5 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined -RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. \ No newline at end of file +RestrictApiToIps=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. +BaseOnSabeDavVersion=Based on the library SabreDAV version \ No newline at end of file From c60fc6c3d42ed065b19ffd3a102cb8d28669193d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 13:57:25 +0200 Subject: [PATCH 0724/1148] Add param logcontext on dol_syslog --- htdocs/core/lib/functions.lib.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 87f5b0a771f..75729cbb4f9 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -995,10 +995,11 @@ function dol_strtoupper($utf8_string) * On Linux LOG_ERR=3, LOG_WARNING=4, LOG_INFO=6, LOG_DEBUG=7 * @param int $ident 1=Increase ident of 1, -1=Decrease ident of 1 * @param string $suffixinfilename When output is a file, append this suffix into default log filename. - * @param string $restricttologhandler Output log only for this log handler + * @param string $restricttologhandler Force output of log only to this log handler + * @param array|null $logcontext If defined, an array with extra informations (can be used by some log handlers) * @return void */ -function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename = '', $restricttologhandler = '') +function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename = '', $restricttologhandler = '', $logcontext = null) { global $conf, $user, $debugbar; From f98d3c5c48d6ee8d3d7eb42d1804df659599a22a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 20 Aug 2019 14:08:30 +0200 Subject: [PATCH 0725/1148] FIX Do not show tooltip if tooltip is empty --- htdocs/modulebuilder/template/admin/setup.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/modulebuilder/template/admin/setup.php b/htdocs/modulebuilder/template/admin/setup.php index fea88479abf..fd3ff41c799 100644 --- a/htdocs/modulebuilder/template/admin/setup.php +++ b/htdocs/modulebuilder/template/admin/setup.php @@ -103,7 +103,8 @@ if ($action == 'edit') foreach($arrayofparameters as $key => $val) { print ''; } print '
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'.$langs->trans("Parameter").''.$langs->trans("Value").'
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print '
'; @@ -125,7 +126,8 @@ else foreach($arrayofparameters as $key => $val) { print '
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print '' . $conf->global->$key . '
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print ''; if ($key == 'DAV_ALLOW_PRIVATE_DIR') { @@ -116,7 +120,8 @@ else foreach($arrayofparameters as $key => $val) { print '
'; - print $form->textwithpicto($langs->trans($key), $langs->trans($key.'Tooltip')); + $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); + print $form->textwithpicto($langs->trans($key), $tooltiphelp); print ''; if ($key == 'DAV_ALLOW_PRIVATE_DIR') { diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index 0ca6786b9b2..979ce497ab1 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -130,7 +130,7 @@ print ' 
'.$langs->trans("RestrictApiToIps").''.$langs->trans("RESTICT_API_ON_IP").''; print '
'; $tooltiphelp = (($langs->trans($key.'Tooltip') != $key.'Tooltip') ? $langs->trans($key.'Tooltip') : ''); - print $form->textwithpicto($langs->trans($key), $tooltiphelp); + $label = $langs->trans($key); + if ($key == 'DAV_RESTICT_ON_IP') $label = $langs->trans("RESTRICT_ON_IP"); + print $form->textwithpicto($label, $tooltiphelp); print ''; if ($key == 'DAV_ALLOW_PRIVATE_DIR') { diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php index 979ce497ab1..cbf18f92222 100644 --- a/htdocs/api/admin/index.php +++ b/htdocs/api/admin/index.php @@ -80,7 +80,7 @@ if ($action == 'setproductionmode') if ($action == 'save') { - dolibarr_set_const($db, 'API_RESTICT_ON_IP', GETPOST('API_RESTICT_ON_IP', 'alpha')); + dolibarr_set_const($db, 'API_RESTRICT_ON_IP', GETPOST('API_RESTRICT_ON_IP', 'alpha')); } @@ -130,8 +130,8 @@ print ' 
'.$langs->trans("RESTICT_API_ON_IP").''.$langs->trans("RESTRICT_API_ON_IP").''; print '
'; +print $langs->trans('DirectPaymentButton'); +print ''; +print $form->selectyesno("TAKEPOS_DIRECT_PAYMENT", $conf->global->TAKEPOS_DIRECT_PAYMENT, 1); +print "
'; - print '
'; print '
'; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index da28ec88538..1b4badc39b5 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1935,4 +1935,5 @@ AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be de RESTRICT_API_ON_IP=Allow available APIs to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can use the available APIs. RESTRICT_ON_IP=Allow access to some host IP only (wildcard not allowed, use space between values). Empty means every hosts can access. BaseOnSabeDavVersion=Based on the library SabreDAV version -NotAPublicIp=Not a public IP \ No newline at end of file +NotAPublicIp=Not a public IP +MakeAnonymousPing=Make an anonymous Ping '+1' to the Dolibarr foundation server (done 1 time only after installation) to allow the foundation to count the number of Dolibarr installation. \ No newline at end of file diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 375c7e4ea23..620a4b4e7f6 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2205,7 +2205,7 @@ if (! function_exists("llxFooter")) */ function llxFooter($comment = '', $zone = 'private', $disabledoutputofmessages = 0) { - global $conf, $langs, $user, $object; + global $conf, $db, $langs, $user, $object; global $delayedhtmlcontent; global $contextpage, $page, $limit; @@ -2334,65 +2334,62 @@ if (! function_exists("llxFooter")) // Add code for the asynchronous anonymous first ping (for telemetry) if (($_SERVER["PHP_SELF"] == DOL_URL_ROOT.'/index.php') || GETPOST('forceping', 'alpha')) { + //print ''; if (empty($conf->global->MAIN_FIRST_PING_OK_DATE) - || (! empty($conf->file->instance_unique_id) && (md5($conf->file->instance_unique_id) != $conf->global->MAIN_FIRST_PING_OK_ID)) + || (! empty($conf->file->instance_unique_id) && (md5($conf->file->instance_unique_id) != $conf->global->MAIN_FIRST_PING_OK_ID) && ($conf->global->MAIN_FIRST_PING_OK_ID != 'disabled')) || GETPOST('forceping', 'alpha')) { - print "\n".''."\n"; - print "\n\n"; - ?> - - file->instance_unique_id)])) + { + print "\n".''."\n"; + print "\n\n"; + $hash_unique_id = md5('dolibarr'.$conf->file->instance_unique_id); + ?> + + \n"; + include_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; + dolibarr_set_const($db, 'MAIN_FIRST_PING_OK_DATE', dol_print_date($now, 'dayhourlog', 'gmt')); + dolibarr_set_const($db, 'MAIN_FIRST_PING_OK_ID', 'disabled'); + } } } print "\n"; print "\n"; - - ?> - - - Date: Sat, 24 Aug 2019 12:44:23 +0200 Subject: [PATCH 0785/1148] FIX wrong parameters (same error in branch 9, 10, develop) --- htdocs/compta/paiement.php | 2 +- htdocs/projet/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/paiement.php b/htdocs/compta/paiement.php index 4888b758cc1..aa344c3df2e 100644 --- a/htdocs/compta/paiement.php +++ b/htdocs/compta/paiement.php @@ -530,7 +530,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie $sql = 'SELECT f.rowid as facid, f.facnumber, f.total_ttc, f.multicurrency_code, f.multicurrency_total_ttc, f.type,'; $sql.= ' f.datef as df, f.fk_soc as socid'; $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f'; - $sql.= ' WHERE f.entity IN ('.getEntity('facture', $conf->entity).')'; + $sql.= ' WHERE f.entity IN ('.getEntity('facture').')'; $sql.= ' AND (f.fk_soc = '.$facture->socid; // Can pay invoices of all child of parent company if(!empty($conf->global->FACTURE_PAYMENTS_ON_DIFFERENT_THIRDPARTIES_BILLS) && !empty($facture->thirdparty->parent)) { diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index 906cb3783f1..4c4ae4c71cf 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -258,7 +258,7 @@ $sql = "SELECT COUNT(p.rowid) as nb, SUM(p.opp_amount)"; $sql.= ", s.nom as name, s.rowid as socid"; $sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid"; -$sql.= " WHERE p.entity IN (".getEntity('project', $conf->entity).")"; +$sql.= " WHERE p.entity IN (".getEntity('project').")"; $sql.= " AND p.fk_statut = 1"; if ($mine || empty($user->rights->projet->all->lire)) $sql.= " AND p.rowid IN (".$projectsListId.")"; // If we have this test true, it also means projectset is not 2 if ($socid) $sql.= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".$socid.")"; From 73a6b45e23ac22c070ab69c4d37e5ade23bf6c51 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 13:26:01 +0200 Subject: [PATCH 0786/1148] Fix load langs in takepos --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index ed3e5def318..68c7cf0ef55 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -29,7 +29,7 @@ require '../main.inc.php'; // Load $user and permissions require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; -$langs->loadLangs(array("bills", "cashdesk")); +$langs->loadLangs(array("companies","commercial","bills", "cashdesk")); $id = GETPOST('id','int'); $action = GETPOST('action','alpha'); From 686d43a12230b9673fe23b378e212999c94b533b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 13:44:21 +0200 Subject: [PATCH 0787/1148] NEW display membership in takepos if member link to thirdparty For some business or cases (ie: fundation), we need to know if customer is a member and membership is up to date. --- htdocs/takepos/invoice.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 17805a6b060..08822d46c6d 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -692,6 +692,29 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep print '

'; print $langs->trans("Customer").': '.$soc->name; print '

'; + + // Module Adherent + if (! empty($conf->adherent->enabled)) + { + require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; + $langs->load("members"); + print '

'; + print $langs->trans("Member").': '; + $adh=new Adherent($db); + $result=$adh->fetch('', '', $invoice->socid); + if ($result > 0) + { + $adh->ref=$adh->getFullName($langs); + print $adh->getFullName($langs); + print '
'.$langs->trans("Type").': '.$adh->type; + print '
'.$langs->trans("SubscriptionEndDate").': '.dol_print_date($adh->datefin, 'day'); + } + else + { + print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; + } + print '

'; + } } if ($action == "search") From cc1de15438d646e83c73facef96afaeaee0a61d1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 13:52:40 +0200 Subject: [PATCH 0788/1148] Update invoice.php --- htdocs/takepos/invoice.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 08822d46c6d..c628daa44ad 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -707,7 +707,18 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep $adh->ref=$adh->getFullName($langs); print $adh->getFullName($langs); print '
'.$langs->trans("Type").': '.$adh->type; - print '
'.$langs->trans("SubscriptionEndDate").': '.dol_print_date($adh->datefin, 'day'); + if ($adh->datefin) + { + print dol_print_date($adh->datefin, 'day'); + if ($adh->hasDelay()) { + print " ".img_warning($langs->trans("Late")); + } + } + else + { + print $langs->trans("SubscriptionNotReceived"); + if ($adh->statut > 0) print " ".img_warning($langs->trans("Late")); // displays delay Pictogram only if not a draft and not terminated + } } else { From bb763ecb59bfafde02b8095ef4a8721dba358b86 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 14:02:25 +0200 Subject: [PATCH 0789/1148] Fix lang in takepos --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index e09c31664cd..4737ecbde27 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -367,7 +367,7 @@ if ($action=="valid" || $action=="history") } else { - if ($invoice->paye) $sectionwithinvoicelink.=''.$langs->trans("Payed").''; + if ($invoice->paye) $sectionwithinvoicelink.=''.$langs->trans("Paid").''; else $sectionwithinvoicelink.=$langs->trans('BillShortStatusValidated'); } $sectionwithinvoicelink.=''; From 361bb724486c81e090b704f08134fd00b5074157 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 14:17:58 +0200 Subject: [PATCH 0790/1148] Update invoice.php --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index c628daa44ad..663c7d4d006 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -725,7 +725,7 @@ if ($invoice->socid != $conf->global->{'CASHDESK_ID_THIRDPARTY'.$_SESSION["takep print ''.$langs->trans("ThirdpartyNotLinkedToMember").''; } print '

'; - } + } } if ($action == "search") From d2ff37ae723fc37295b6066f0927d1fe57a285fd Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:00:49 +0200 Subject: [PATCH 0791/1148] NEW email template for Takepos (sending invoice) --- htdocs/takepos/admin/setup.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php index 6d33b8a19c2..23e6eb05c48 100644 --- a/htdocs/takepos/admin/setup.php +++ b/htdocs/takepos/admin/setup.php @@ -80,6 +80,7 @@ if (GETPOST('action', 'alpha') == 'set') $res = dolibarr_set_const($db, "TAKEPOS_NUMPAD", GETPOST('TAKEPOS_NUMPAD', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_NUM_TERMINALS", GETPOST('TAKEPOS_NUM_TERMINALS', 'alpha'), 'chaine', 0, '', $conf->entity); $res = dolibarr_set_const($db, "TAKEPOS_DIRECT_PAYMENT", GETPOST('TAKEPOS_DIRECT_PAYMENT', 'int'), 'int', 0, '', $conf->entity); + $res = dolibarr_set_const($db, "TAKEPOS_EMAIL_TEMPLATE_INVOICE", GETPOST('TAKEPOS_EMAIL_TEMPLATE_INVOICE', 'alpha'), 'chaine', 0, '', $conf->entity); if ($conf->global->TAKEPOS_ORDER_NOTES==1) { @@ -231,6 +232,30 @@ print '
'; print $form->selectyesno("TAKEPOS_DIRECT_PAYMENT", $conf->global->TAKEPOS_DIRECT_PAYMENT, 1); print "
'; +print $langs->trans('EmailTemplate'); +print ''; +include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; +$formmail = new FormMail($db); +$nboftemplates = $formmail->fetchAllEMailTemplate('facture_send', $user, null, -1); // We set lang=null to get in priority record with no lang +//$arraydefaultmessage = $formmail->getEMailTemplate($db, $tmp[1], $user, null, 0, 1, ''); +$arrayofmessagename=array(); +if (is_array($formmail->lines_model)) +{ + foreach($formmail->lines_model as $modelmail) + { + //var_dump($modelmail); + $moreonlabel=''; + if (! empty($arrayofmessagename[$modelmail->label])) $moreonlabel=' ('.$langs->trans("SeveralLangugeVariatFound").')'; + $arrayofmessagename[$modelmail->label]=$langs->trans(preg_replace('/\(|\)/', '', $modelmail->label)).$moreonlabel; + } +} +//var_dump($arraydefaultmessage); +//var_dump($arrayofmessagename); +print $form->selectarray('TAKEPOS_EMAIL_TEMPLATE_INVOICE', $arrayofmessagename, $conf->global->TAKEPOS_EMAIL_TEMPLATE_INVOICE, 'None', 1, 0, '', 0, 0, 0, '', '', 1); +print "
' . $langs->trans('ReductionShort') . '' . $langs->trans('Qty') . '' . $langs->trans('TotalHTShort') . '' . $langs->trans('Total') . '
'; - print $thirdpartystatic->getNomUrl(1, 'customer'); + if ($contextpage == 'poslist') + { + print $thirdpartystatic->name; + } + else + { + print $thirdpartystatic->getNomUrl(1, 'customer'); + } print '
'."\n"; @@ -1237,7 +1237,7 @@ if ($resql) // Action column print ''; - $texte.= ''; + $texte.= ''; $texte.= '
'; - if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + if (($massactionbutton || $massaction) && $contextpage != 'poslist') // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined { $selected=0; if (in_array($obj->id, $arrayofselected)) $selected=1; From 7b5c9818f7b25b623a68b472f7f79a3083d1898d Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 15:58:33 +0200 Subject: [PATCH 0795/1148] Fix context display with takepos societe/list.php --- htdocs/societe/list.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index daff9aec557..8f352a21b28 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -670,7 +670,7 @@ if ($moreforfilter) $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage; $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields -if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); +if ($massactionbutton && $contextpage != 'poslist') $selectedfields.=$form->showCheckAddButtons('checkforselect', 1); if (empty($arrayfields['customerorsupplier']['checked'])) print ''; @@ -1287,7 +1287,7 @@ while ($i < min($num, $limit)) // Action column print ''; - if ($massactionbutton || $massaction) // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined + if (($massactionbutton || $massaction) && $contextpage != 'poslist') // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined { $selected=0; if (in_array($obj->rowid, $arrayofselected)) $selected=1; From dbcead47e1eaf8c972b0850704eafe7409341cd1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Sat, 24 Aug 2019 16:05:21 +0200 Subject: [PATCH 0796/1148] Update list.php --- htdocs/societe/list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index daff9aec557..ebf03cb2d3d 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -199,7 +199,7 @@ $arrayfields=array( 's.idprof5'=>array('label'=>"ProfId5Short", 'checked'=>$checkedprofid5), 's.idprof6'=>array('label'=>"ProfId6Short", 'checked'=>$checkedprofid6), 's.tva_intra'=>array('label'=>"VATIntraShort", 'checked'=>0), - 'customerorsupplier'=>array('label'=>'Nature', 'checked'=>1), + 'customerorsupplier'=>array('label'=>'Type', 'checked'=>1), 's.fk_prospectlevel'=>array('label'=>"ProspectLevelShort", 'checked'=>$checkprospectlevel), 's.fk_stcomm'=>array('label'=>"StatusProsp", 'checked'=>$checkstcomm), 's2.nom'=>array('label'=>'ParentCompany', 'checked'=>0), From 5d0dbea920d8f794df01f92cf8976498d77bb9a9 Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sat, 24 Aug 2019 16:44:06 +0200 Subject: [PATCH 0797/1148] Control errors before validate invoice in TakePOS --- htdocs/langs/en_US/cashdesk.lang | 2 ++ htdocs/takepos/invoice.php | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang index 628de17efcc..856cf1de0d2 100644 --- a/htdocs/langs/en_US/cashdesk.lang +++ b/htdocs/langs/en_US/cashdesk.lang @@ -72,3 +72,5 @@ BasicPhoneLayout=Use basic layout for phones SetupOfTerminalNotComplete=Setup of terminal %s is not complete DirectPayment=Direct payment DirectPaymentButton=Direct cash payment button +InvoiceIsAlreadyValidated=Invoice is already validated +NoLinesToBill=No lines to bill diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 17805a6b060..0176330db0a 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -161,7 +161,17 @@ if ($action == 'valid' && $user->rights->facture->creer) $invoice->update($user); } - if (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") + if ($invoice->statut != Facture::STATUS_DRAFT) + { + dol_syslog("Sale already validated"); + dol_htmloutput_errors($langs->trans("InvoiceIsAlreadyValidated", "TakePos"), null, 1); + } + else if (count($invoice->lines)==0) + { + dol_syslog("Sale without lines"); + dol_htmloutput_errors($langs->trans("NoLinesToBill", "TakePos"), null, 1); + } + else if (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") { $invoice->validate($user, '', $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION["takeposterminal"]}); } From 07244f002b7c8e37f690fb20201b67106ffda0df Mon Sep 17 00:00:00 2001 From: andreubisquerra Date: Sat, 24 Aug 2019 18:11:47 +0200 Subject: [PATCH 0798/1148] else if to elseif --- htdocs/takepos/invoice.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 0176330db0a..c03ec826d6d 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -166,12 +166,12 @@ if ($action == 'valid' && $user->rights->facture->creer) dol_syslog("Sale already validated"); dol_htmloutput_errors($langs->trans("InvoiceIsAlreadyValidated", "TakePos"), null, 1); } - else if (count($invoice->lines)==0) + elseif (count($invoice->lines)==0) { dol_syslog("Sale without lines"); dol_htmloutput_errors($langs->trans("NoLinesToBill", "TakePos"), null, 1); } - else if (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") + elseif (! empty($conf->stock->enabled) && $conf->global->{'CASHDESK_NO_DECREASE_STOCK'.$_SESSION["takeposterminal"]} != "1") { $invoice->validate($user, '', $conf->global->{'CASHDESK_ID_WAREHOUSE'.$_SESSION["takeposterminal"]}); } From 4040693823c01ded9f86f065de5d659926ce37d1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 24 Aug 2019 18:12:20 +0200 Subject: [PATCH 0799/1148] FIX Use a SCA ready workflow with Stripe module --- htdocs/core/class/conf.class.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 3088d8a95ce..d64033d969d 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -569,6 +569,9 @@ class Conf // By default, we show state code in combo list if (! isset($this->global->MAIN_SHOW_STATE_CODE)) $this->global->MAIN_SHOW_STATE_CODE=1; + // Use a SCA ready workflow with Stripe module + if (! isset($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_NEW_CHECKOUT=1; + // Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal" if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog'; // '' means 'all'. Note that contact is added here as it should be a module later. if (! empty($this->modules_parts['moduleforexternal'])) // Module part to include an external module into the MAIN_MODULES_FOR_EXTERNAL list From 6a906a6064b89cb7bf770ef9480f44a6a115c70c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:38:09 +0200 Subject: [PATCH 0800/1148] Rename module_part parameter into modulepart into document APIs --- htdocs/api/class/api_documents.class.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php index 48d6bf5b903..1b98ad5f2ec 100644 --- a/htdocs/api/class/api_documents.class.php +++ b/htdocs/api/class/api_documents.class.php @@ -56,7 +56,7 @@ class Documents extends DolibarrApi * Note that, this API is similar to using the wrapper link "documents.php" to download a file (used for * internal HTML links of documents into application), but with no need to have a session cookie (the token is used instead). * - * @param string $module_part Name of module or area concerned by file download ('facture', ...) + * @param string $modulepart Name of module or area concerned by file download ('facture', ...) * @param string $original_file Relative path with filename, relative to modulepart (for example: IN201701-999/IN201701-999.pdf) * @return array List of documents * @@ -67,11 +67,11 @@ class Documents extends DolibarrApi * * @url GET /download */ - public function index($module_part, $original_file = '') + public function index($modulepart, $original_file = '') { global $conf, $langs; - if (empty($module_part)) { + if (empty($modulepart)) { throw new RestException(400, 'bad value for parameter modulepart'); } if (empty($original_file)) { @@ -81,7 +81,7 @@ class Documents extends DolibarrApi //--- Finds and returns the document $entity=$conf->entity; - $check_access = dol_check_secure_access_document($module_part, $original_file, $entity, DolibarrApiAccess::$user, '', 'read'); + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, DolibarrApiAccess::$user, '', 'read'); $accessallowed = $check_access['accessallowed']; $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; $original_file = $check_access['original_file']; @@ -98,6 +98,7 @@ class Documents extends DolibarrApi if (! file_exists($original_file_osencoded)) { + dol_syslog("Try to download not found file ".$original_file_osencoded, LOG_WARNING); throw new RestException(404, 'File not found'); } @@ -111,7 +112,7 @@ class Documents extends DolibarrApi * * Test sample 1: { "module_part": "invoice", "original_file": "FA1701-001/FA1701-001.pdf", "doctemplate": "crabe", "langcode": "fr_FR" }. * - * @param string $module_part Name of module or area concerned by file download ('invoice', 'order', ...). + * @param string $modulepart Name of module or area concerned by file download ('invoice', 'order', ...). * @param string $original_file Relative path with filename, relative to modulepart (for example: IN201701-999/IN201701-999.pdf). * @param string $doctemplate Set here the doc template to use for document generation (If not set, use the default template). * @param string $langcode Language code like 'en_US', 'fr_FR', 'es_ES', ... (If not set, use the default language). @@ -126,11 +127,11 @@ class Documents extends DolibarrApi * * @url PUT /builddoc */ - public function builddoc($module_part, $original_file = '', $doctemplate = '', $langcode = '') + public function builddoc($modulepart, $original_file = '', $doctemplate = '', $langcode = '') { global $conf, $langs; - if (empty($module_part)) { + if (empty($modulepart)) { throw new RestException(400, 'bad value for parameter modulepart'); } if (empty($original_file)) { @@ -147,7 +148,7 @@ class Documents extends DolibarrApi //--- Finds and returns the document $entity=$conf->entity; - $check_access = dol_check_secure_access_document($module_part, $original_file, $entity, DolibarrApiAccess::$user, '', 'write'); + $check_access = dol_check_secure_access_document($modulepart, $original_file, $entity, DolibarrApiAccess::$user, '', 'write'); $accessallowed = $check_access['accessallowed']; $sqlprotectagainstexternals = $check_access['sqlprotectagainstexternals']; $original_file = $check_access['original_file']; @@ -166,7 +167,7 @@ class Documents extends DolibarrApi $templateused=''; - if ($module_part == 'facture' || $module_part == 'invoice') + if ($modulepart == 'facture' || $modulepart == 'invoice') { require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; $this->invoice = new Facture($this->db); @@ -181,7 +182,7 @@ class Documents extends DolibarrApi throw new RestException(500, 'Error generating document'); } } - elseif ($module_part == 'commande' || $module_part == 'order') + elseif ($modulepart == 'commande' || $modulepart == 'order') { require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php'; $this->order = new Commande($this->db); @@ -195,7 +196,7 @@ class Documents extends DolibarrApi throw new RestException(500, 'Error generating document'); } } - elseif ($module_part == 'propal' || $module_part == 'proposal') + elseif ($modulepart == 'propal' || $modulepart == 'proposal') { require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; $this->propal = new Propal($this->db); From c8078f1195220c884b7f49e8ed9cdbdfd93fb648 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:39:15 +0200 Subject: [PATCH 0801/1148] Rename module_part parameter into modulepart into document APIs --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 62d791a670a..6ca4df10d38 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,7 @@ Following changes may create regressions for some external modules, but were nec * Properties ->libelle_incoterms were renamed into ->label_incoterms * Removed the method liste_array() of project class. It was not used by core code. * The function show_theme() hase been renamed into showSkins() +* Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency. ***** ChangeLog for 10.0.1 compared to 10.0.0 ***** From 6328585395b06519ba8a1b3c57cbbab015948db9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:40:21 +0200 Subject: [PATCH 0802/1148] Fix: the API_RESTRICT_ON_IP must be at lower level (also on explorer) --- htdocs/api/index.php | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/htdocs/api/index.php b/htdocs/api/index.php index c63a376e806..dd9ff7aadcb 100644 --- a/htdocs/api/index.php +++ b/htdocs/api/index.php @@ -24,6 +24,8 @@ * \file htdocs/api/index.php */ +use Luracast\Restler\Format\UploadFormat; + if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); // Do not check anti CSRF attack test if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not check anti POST attack test if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu @@ -117,6 +119,21 @@ $api->r->addAuthenticationClass('DolibarrApiAccess', ''); UploadFormat::$allowedMimeTypes = array('image/jpeg', 'image/png', 'text/plain', 'application/octet-stream'); +// Restrict API to some IPs +if (! empty($conf->global->API_RESTRICT_ON_IP)) +{ + $allowedip=explode(' ', $conf->global->API_RESTRICT_ON_IP); + $ipremote = getUserRemoteIP(); + if (! in_array($ipremote, $allowedip)) + { + dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP); + print 'APIs are not allowed from the IP '.$ipremote; + header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); + //print $conf->global->API_RESTRICT_ON_IP; + exit(0); + } +} + // Call Explorer file for all APIs definitions (this part is slow) if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || $reg[2] == '/swagger.json/root' || $reg[2] == '/resources.json' || $reg[2] == '/resources.json/root')) @@ -136,6 +153,7 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || { while (($file = readdir($handle))!==false) { + $regmod=array(); if (is_readable($dir.$file) && preg_match("/^mod(.*)\.class\.php$/i", $file, $regmod)) { $module = strtolower($regmod[1]); @@ -165,6 +183,7 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || { if ($file_searched == 'api_access.class.php') continue; + $regapi = array(); if (is_readable($dir_part.$file_searched) && preg_match("/^api_(.*)\.class\.php$/i", $file_searched, $regapi)) { $classname = ucwords($regapi[1]); @@ -204,23 +223,9 @@ if (! empty($reg[1]) && $reg[1] == 'explorer' && ($reg[2] == '/swagger.json' || } // Call one APIs or one definition of an API +$regbis = array(); if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $reg[2] != '/resources.json' && preg_match('/^\/(swagger|resources)\.json\/(.+)$/', $reg[2], $regbis) && $regbis[2] != 'root'))) { - // Restrict API to some IPs - if (! empty($conf->global->API_RESTRICT_ON_IP)) - { - $allowedip=explode(' ', $conf->global->API_RESTRICT_ON_IP); - $ipremote = getUserRemoteIP(); - if (! in_array($ipremote, $allowedip)) - { - dol_syslog('Remote ip is '.$ipremote.', not into list '.$conf->global->API_RESTRICT_ON_IP); - print 'API not allowed from the IP '.$ipremote; - header('HTTP/1.1 503 API not allowed from your IP '.$ipremote); - //print $conf->global->API_RESTRICT_ON_IP; - exit(0); - } - } - $module = $reg[1]; if ($module == 'explorer') // If we call page to explore details of a service { @@ -268,7 +273,6 @@ if (! empty($reg[1]) && ($reg[1] != 'explorer' || ($reg[2] != '/swagger.json' && $api->r->addAPIClass($classname); } -// TODO If not found, redirect to explorer //var_dump($api->r->apiVersionMap); //exit; From 69b2d03c470fc145ad92c435520629a7a8afbfad Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:41:59 +0200 Subject: [PATCH 0803/1148] FIX Api of documents work with value 'thirdparty' --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index a852c78d08b..5861ad07a72 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2452,7 +2452,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping for third parties - elseif (($modulepart == 'company' || $modulepart == 'societe') && !empty($conf->societe->dir_output)) + elseif (($modulepart == 'company' || $modulepart == 'societe' || $modulepart == 'thirdparty') && !empty($conf->societe->dir_output)) { if (empty($entity) || empty($conf->societe->multidir_output[$entity])) return array('accessallowed'=>0, 'error'=>'Value entity must be provided'); if ($fuser->rights->societe->{$lire} || preg_match('/^specimen/i', $original_file)) From 60c3cefc53040eaaf3f311a73b4bc5db03cf7aaa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 16:41:59 +0200 Subject: [PATCH 0804/1148] FIX Api of documents work with value 'thirdparty' --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 1012b825254..c6a5cb14426 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2445,7 +2445,7 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity, } // Wrapping for third parties - elseif (($modulepart == 'company' || $modulepart == 'societe') && !empty($conf->societe->dir_output)) + elseif (($modulepart == 'company' || $modulepart == 'societe' || $modulepart == 'thirdparty') && !empty($conf->societe->dir_output)) { if (empty($entity) || empty($conf->societe->multidir_output[$entity])) return array('accessallowed'=>0, 'error'=>'Value entity must be provided'); if ($fuser->rights->societe->{$lire} || preg_match('/^specimen/i', $original_file)) From 7cb68d6438530e80f8aa6270b34baeb6fb016b85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 25 Aug 2019 18:02:10 +0200 Subject: [PATCH 0805/1148] NEW Default for Stripe is STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION --- htdocs/core/class/conf.class.php | 4 ++-- htdocs/public/payment/newpayment.php | 32 +++++++++++++++++----------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index d64033d969d..f94c95ff246 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -569,8 +569,8 @@ class Conf // By default, we show state code in combo list if (! isset($this->global->MAIN_SHOW_STATE_CODE)) $this->global->MAIN_SHOW_STATE_CODE=1; - // Use a SCA ready workflow with Stripe module - if (! isset($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_NEW_CHECKOUT=1; + // Use a SCA ready workflow with Stripe module (STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION by default if nothing defined) + if (! isset($this->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) && empty($this->global->STRIPE_USE_NEW_CHECKOUT)) $this->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION=1; // Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal" if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent,blockedlog'; // '' means 'all'. Note that contact is added here as it should be a module later. diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php index daf77674190..db37b15345b 100644 --- a/htdocs/public/payment/newpayment.php +++ b/htdocs/public/payment/newpayment.php @@ -1834,7 +1834,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment print '
'; - print ''; + print ''."\n"; + print ''."\n"; print ''."\n"; print ''."\n"; @@ -1852,7 +1853,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment print ''; print ''; - if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) + if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($conf->global->STRIPE_USE_NEW_CHECKOUT)) // Use a SCA ready method { require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php'; @@ -1876,8 +1877,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment } } - if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent)) - { + //if (empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION) || ! empty($paymentintent)) + //{ print '
'; @@ -1914,7 +1915,7 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment print '
'; - } + //} if (! empty($conf->global->STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION)) { @@ -1942,6 +1943,8 @@ if (preg_match('/^dopayment/', $action)) // If we choosed/click on the payment { print ''; print ''."\n"; + $urllogofull = 'http://home.destailleur.fr:805/dolibarr_dev/htdocs/viewimage.php?modulepart=mycompany&entity=1&file=logos%2Fthumbs%2Ffbm+logo_small.png'; + print ''."\n"; // Code to ask the credit card. This use the default "API version". No way to force API version when using JS code. print ''; */ - print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; + print 'ref.'" class="button bordertransp"'.$disabled.' title="'.dol_escape_htmltag($langs->trans("ReplaceWebsiteContent")).'">'; } print ''; From c0681770276d5a12b383766ae000f483d746428a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 2 Sep 2019 16:39:56 +0200 Subject: [PATCH 1003/1148] Work on search on global site files --- htdocs/core/lib/website.lib.php | 78 ++++++++++++++++++++++++++------- htdocs/langs/en_US/website.lang | 1 + htdocs/website/index.php | 2 + 3 files changed, 65 insertions(+), 16 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index c1f3c6f9809..af0114c9c97 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -636,10 +636,11 @@ function getStructuredData($type, $data = array()) } /** - * Return list of containers object that match a criteria + * Return list of containers object that match a criteria. + * WARNING: This function can be used by websites. * * @param string $type Type of container to search into (Example: 'page') - * @param string $algo Algorithm used for search (Example: 'meta' is searching into meta information like title and description, 'metacontent') + * @param string $algo Algorithm used for search (Example: 'meta' is searching into meta information like title and description, 'content', 'sitefiles', or any combination, ...) * @param string $searchstring Search string * @param int $max Max number of answers * @return string HTML content @@ -674,20 +675,21 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25) } $searchdone = 0; + $found = 0; - if (! $error && in_array($algo, array('meta', 'metacontent', 'content'))) + if (! $error && (empty($max) || ($found < $max)) && (preg_match('/meta/', $algo) || preg_match('/content/', $algo))) { $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'website_page'; $sql.= " WHERE fk_website = ".$website->id; if ($type) $sql.= " AND type_container = '".$db->escape($type)."'"; $sql.= " AND ("; $searchalgo = ''; - if ($algo == 'meta' || $algo == 'metacontent') + if (preg_match('/meta/', $algo)) { $searchalgo.= ($searchalgo?' OR ':'')."title LIKE '%".$db->escape($searchstring)."%' OR description LIKE '%".$db->escape($searchstring)."%'"; $searchalgo.= ($searchalgo?' OR ':'')."keywords LIKE '".$db->escape($searchstring).",%' OR keywords LIKE '% ".$db->escape($searchstring)."%'"; // TODO Use a better way to scan keywords } - if ($algo == 'metacontent' || $algo == 'content') + if (preg_match('/content/', $algo)) { $searchalgo.= ($searchalgo?' OR ':'')."content LIKE '%".$db->escape($searchstring)."%'"; } @@ -706,16 +708,10 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25) $tmpwebsitepage = new WebsitePage($db); $tmpwebsitepage->fetch($obj->rowid); if ($tmpwebsitepage->id > 0) $arrayresult['list'][]=$tmpwebsitepage; + $found++; } $i++; } - - $arrayresult['code']='OK'; - if (empty($arrayresult['list'])) - { - $arrayresult['code']='KO'; - $arrayresult['message']=$weblangs->trans("NoRecordFound"); - } } else { @@ -727,11 +723,61 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25) $searchdone = 1; } - if (! $searchdone) + if (! $error && (empty($max) || ($found < $max)) && (preg_match('/sitefiles/', $algo))) { - $error++; - $arrayresult['code']='KO'; - $arrayresult['message']='No supported algorithm found'; + $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'website'; + $sql.= " WHERE rowid = ".$website->id; + $sql.= " AND ("; + $searchalgo = ''; + // TODO + $searchalgo.= '...'; + + $sql.=$searchalgo; + $sql.= ")"; + $sql.= $db->plimit($max); + + $resql = $db->query($sql); + if ($resql) + { + $i = 0; + while (($obj = $db->fetch_object($resql)) && ($i < $max || $max == 0)) + { + if ($obj->rowid > 0) + { + $tmpwebsitepage = new WebsitePage($db); + $tmpwebsitepage->fetch($obj->rowid); + if ($tmpwebsitepage->id > 0) $arrayresult['list'][]=$tmpwebsitepage; + } + $i++; + } + } + else + { + $error++; + $arrayresult['code']=$db->lasterrno(); + $arrayresult['message']=$db->lasterror(); + } + + $searchdone = 1; + } + + if (! $error) + { + if ($searchdone) + { + $arrayresult['code']='OK'; + if (empty($arrayresult['list'])) + { + $arrayresult['code']='KO'; + $arrayresult['message']=$weblangs->trans("NoRecordFound"); + } + } + else + { + $error++; + $arrayresult['code']='KO'; + $arrayresult['message']='No supported algorithm found'; + } } return $arrayresult; diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 0d6945a17e5..83e71073984 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -116,3 +116,4 @@ Dynamiccontent=Sample of a page with dynamic content ImportSite=Import site EditInLineOnOff=Mode 'Edit inline' is %s ShowSubContainersOnOff=Mode to execute 'dynamic content' is %s +GlobalCSSorJS=Global CSS/JS/Header file of web site \ No newline at end of file diff --git a/htdocs/website/index.php b/htdocs/website/index.php index e01017e88ac..f98024a726d 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3216,6 +3216,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') print '
'; print ' '.$langs->trans("Content"); print ' '.$langs->trans("Title").' | '.$langs->trans("Description").' | '.$langs->trans("Keywords"); + print ' '.$langs->trans("GlobalCSSorJS"); print '
'; print ''; @@ -3239,6 +3240,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') $algo = ''; if (GETPOST('optionmeta')) $algo.='meta'; if (GETPOST('optioncontent')) $algo.='content'; + if (GETPOST('optionsitefiles')) $algo.='sitefiles'; $listofpages = getPagesFromSearchCriterias('', $algo, GETPOST('searchstring', 'none'), 1000); From b45d3ea1a0f8f4033e9c02bca784695c8d3aeef3 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Mon, 2 Sep 2019 17:38:59 +0200 Subject: [PATCH 1004/1148] FIX #11804 --- htdocs/ticket/list.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php index 2a4195cb07b..26b9756006c 100644 --- a/htdocs/ticket/list.php +++ b/htdocs/ticket/list.php @@ -2,6 +2,7 @@ /* Copyright (C) 2013-2018 Jean-François FERRY * Copyright (C) 2016 Christophe Battarel * Copyright (C) 2018 Regis Houssin + * Copyright (C) 2019 Juanjo Menent * * 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 @@ -210,6 +211,11 @@ $sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON (t.fk_soc = s.rowid)"; $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; +if ($socid > 0) +{ + $sql.= " AND t.fk_soc = ".$socid; +} + foreach($search as $key => $val) { if ($key == 'fk_statut') From a96742ee9b30acb63738592c93f37d301d279bb5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 2 Sep 2019 18:43:22 +0200 Subject: [PATCH 1005/1148] Can search into global site files. Support of cancel to previous page --- htdocs/core/lib/website.lib.php | 54 ++++++------- htdocs/website/index.php | 129 +++++++++++++++++++++++--------- 2 files changed, 123 insertions(+), 60 deletions(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index af0114c9c97..60016b2f2e9 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -725,37 +725,39 @@ function getPagesFromSearchCriterias($type, $algo, $searchstring, $max = 25) if (! $error && (empty($max) || ($found < $max)) && (preg_match('/sitefiles/', $algo))) { - $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'website'; - $sql.= " WHERE rowid = ".$website->id; - $sql.= " AND ("; - $searchalgo = ''; - // TODO - $searchalgo.= '...'; + global $dolibarr_main_data_root; - $sql.=$searchalgo; - $sql.= ")"; - $sql.= $db->plimit($max); + $pathofwebsite=$dolibarr_main_data_root.'/website/'.$website->ref; + $filehtmlheader=$pathofwebsite.'/htmlheader.html'; + $filecss=$pathofwebsite.'/styles.css.php'; + $filejs=$pathofwebsite.'/javascript.js.php'; + $filerobot=$pathofwebsite.'/robots.txt'; + $filehtaccess=$pathofwebsite.'/.htaccess'; + $filemanifestjson=$pathofwebsite.'/manifest.json.php'; + $filereadme=$pathofwebsite.'/README.md'; - $resql = $db->query($sql); - if ($resql) + $filecontent = file_get_contents($filehtmlheader); + if ((empty($max) || ($found < $max)) && preg_match('/'.preg_quote($searchstring, '/').'/', $filecontent)) { - $i = 0; - while (($obj = $db->fetch_object($resql)) && ($i < $max || $max == 0)) - { - if ($obj->rowid > 0) - { - $tmpwebsitepage = new WebsitePage($db); - $tmpwebsitepage->fetch($obj->rowid); - if ($tmpwebsitepage->id > 0) $arrayresult['list'][]=$tmpwebsitepage; - } - $i++; - } + $arrayresult['list'][]=array('type'=>'website_htmlheadercontent'); } - else + + $filecontent = file_get_contents($filecss); + if ((empty($max) || ($found < $max)) && preg_match('/'.preg_quote($searchstring, '/').'/', $filecontent)) { - $error++; - $arrayresult['code']=$db->lasterrno(); - $arrayresult['message']=$db->lasterror(); + $arrayresult['list'][]=array('type'=>'website_csscontent'); + } + + $filecontent = file_get_contents($filejs); + if ((empty($max) || ($found < $max)) && preg_match('/'.preg_quote($searchstring, '/').'/', $filecontent)) + { + $arrayresult['list'][]=array('type'=>'website_jscontent'); + } + + $filerobot = file_get_contents($filerobot); + if ((empty($max) || ($found < $max)) && preg_match('/'.preg_quote($searchstring, '/').'/', $filecontent)) + { + $arrayresult['list'][]=array('type'=>'website_robotcontent'); } $searchdone = 1; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index f98024a726d..1a2dc531dd1 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -53,6 +53,9 @@ $pageref=GETPOST('pageref', 'aZ09'); $action=GETPOST('action', 'aZ09'); $confirm=GETPOST('confirm', 'alpha'); $cancel=GETPOST('cancel', 'alpha'); +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'bomlist'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page +$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') $type_container=GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha'); @@ -270,9 +273,21 @@ if (GETPOST('refreshsite', 'alpha') || GETPOST('refreshsite.x', 'alpha') || GETP } if (GETPOST('refreshpage', 'alpha') && ! in_array($action, array('updatecss'))) $action='preview'; +// Cancel +if ($cancel) +{ + $action = 'preview'; + if ($backtopage) + { + header("Location: ".$backtopage); + exit; + } +} -$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid.(GETPOST('section_dir', 'alpha')?'§ion_dir='.urlencode(GETPOST('section_dir', 'alpha')):''); // used after a confirm_deletefile into actions_linkedfiles.inc.php +$savbacktopage = $backtopage; +$backtopage = $_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid.(GETPOST('section_dir', 'alpha')?'§ion_dir='.urlencode(GETPOST('section_dir', 'alpha')):''); // used after a confirm_deletefile into actions_linkedfiles.inc.php include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php'; +$backtopage = $savbacktopage; if ($action == 'renamefile') $action='file_manager'; // After actions_linkedfiles, if action were renamefile, we set it to 'file_manager' @@ -984,7 +999,8 @@ if ($action == 'delete') // Update css if ($action == 'updatecss') { - if (GETPOST('refreshsite', 'alpha') || GETPOST('refreshpage', 'alpha')) // If we tried to reload another site/page, we stay on editcss mode. + // If we tried to reload another site/page, we stay on editcss mode. + if (GETPOST('refreshsite') || GETPOST('refreshsite_x') || GETPOST('refreshsite.x') || GETPOST('refreshpage') || GETPOST('refreshpage_x') || GETPOST('refreshpage.x')) { $action='editcss'; } @@ -1221,6 +1237,12 @@ if ($action == 'updatecss') } $action='preview'; + + if ($backtopage) + { + header("Location: ".$backtopage); + exit; + } } } } @@ -1861,6 +1883,7 @@ llxHeader($moreheadcss.$moreheadjs, $langs->trans("WebsiteSetup"), $help_url, '' print "\n"; print ''; print ''; +print ''; if ($action == 'createsite') { @@ -2081,7 +2104,7 @@ if (! GETPOST('hide_websitemenu')) { if (preg_match('/^create/', $action) && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm') print ''; if (preg_match('/^edit/', $action) && $action != 'file_manager' && $action != 'replacesite' && $action != 'replacesiteconfirm') print ''; - if ($action != 'preview') print ''; + if ($action != 'preview') print ''; } print ''; @@ -2500,7 +2523,8 @@ if ($action == 'editcss') print '
'; print '
'; - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + + if (! GETPOSTISSET('WEBSITE_CSS_INLINE')) { $csscontent = @file_get_contents($filecss); // Clean the php css file to remove php code and get only css part @@ -2508,11 +2532,11 @@ if ($action == 'editcss') } else { - $csscontent = GETPOST('WEBSITE_CSS_INLINE'); + $csscontent = GETPOST('WEBSITE_CSS_INLINE', 'none'); } if (! trim($csscontent)) $csscontent='/* CSS content (all pages) */'."\n"."body.bodywebsite { margin: 0; font-family: 'Open Sans', sans-serif; }\n.bodywebsite h1 { margin-top: 0; margin-bottom: 0; padding: 10px;}"; - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + if (! GETPOSTISSET('WEBSITE_JS_INLINE')) { $jscontent = @file_get_contents($filejs); // Clean the php js file to remove php code and get only js part @@ -2520,11 +2544,11 @@ if ($action == 'editcss') } else { - $jscontent = GETPOST('WEBSITE_JS_INLINE'); + $jscontent = GETPOST('WEBSITE_JS_INLINE', 'none'); } if (! trim($jscontent)) $jscontent='/* JS content (all pages) */'."\n"; - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + if (! GETPOSTISSET('WEBSITE_HTML_HEADER')) { $htmlheadercontent = @file_get_contents($filehtmlheader); // Clean the php htmlheader file to remove php code and get only html part @@ -2532,7 +2556,7 @@ if ($action == 'editcss') } else { - $htmlheadercontent = GETPOST('WEBSITE_HTML_HEADER'); + $htmlheadercontent = GETPOST('WEBSITE_HTML_HEADER', 'none'); } if (! trim($htmlheadercontent)) { @@ -2547,7 +2571,7 @@ if ($action == 'editcss') $htmlheadercontent=''."\n".trim($htmlheadercontent)."\n".''; } - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + if (! GETPOSTISSET('WEBSITE_ROBOT')) { $robotcontent = @file_get_contents($filerobot); // Clean the php htmlheader file to remove php code and get only html part @@ -2555,7 +2579,7 @@ if ($action == 'editcss') } else { - $robotcontent = GETPOST('WEBSITE_ROBOT'); + $robotcontent = GETPOST('WEBSITE_ROBOT', 'nothtml'); } if (! trim($robotcontent)) { @@ -2565,7 +2589,7 @@ if ($action == 'editcss') $robotcontent.="Disallow: /administrator/\n"; } - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + if (! GETPOSTISSET('WEBSITE_HTACCESS')) { $htaccesscontent = @file_get_contents($filehtaccess); // Clean the php htaccesscontent file to remove php code and get only html part @@ -2573,7 +2597,7 @@ if ($action == 'editcss') } else { - $htaccesscontent = GETPOST('WEBSITE_HTACCESS'); + $htaccesscontent = GETPOST('WEBSITE_HTACCESS', 'nohtml'); } if (! trim($htaccesscontent)) { @@ -2582,7 +2606,7 @@ if ($action == 'editcss') } - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + if (! GETPOSTISSET('WEBSITE_MANIFEST_JSON')) { $manifestjsoncontent = @file_get_contents($filemanifestjson); // Clean the manifestjson file to remove php code and get only html part @@ -2590,14 +2614,14 @@ if ($action == 'editcss') } else { - $manifestjsoncontent = GETPOST('WEBSITE_MANIFEST_JSON'); + $manifestjsoncontent = GETPOST('WEBSITE_MANIFEST_JSON', 'none'); } if (! trim($manifestjsoncontent)) { //$manifestjsoncontent.=""; } - if (GETPOST('editcss', 'alpha') || GETPOST('refreshpage', 'alpha')) + if (! GETPOSTISSET('WEBSITE_README')) { $readmecontent = @file_get_contents($filereadme); // Clean the readme file to remove php code and get only html part @@ -2605,7 +2629,7 @@ if ($action == 'editcss') } else { - $readmecontent = GETPOST('WEBSITE_README'); + $readmecontent = GETPOST('WEBSITE_README', 'none'); } if (! trim($readmecontent)) { @@ -3196,6 +3220,8 @@ print "\n"; if ($action == 'replacesite' || $action == 'replacesiteconfirm') { + $searchkey = GETPOST('searchstring', 'none'); + print '
'; print ''; print ''; @@ -3225,7 +3251,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') print $langs->trans("SearchString"); print '
'; print '
'; - print ''; + print ''; print '
'; print ''; @@ -3242,17 +3268,65 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') if (GETPOST('optioncontent')) $algo.='content'; if (GETPOST('optionsitefiles')) $algo.='sitefiles'; - $listofpages = getPagesFromSearchCriterias('', $algo, GETPOST('searchstring', 'none'), 1000); + $listofpages = getPagesFromSearchCriterias('', $algo, $searchkey, 1000); print '
'; print '
'; if ($listofpages['code'] == 'OK') { - foreach($listofpages['list'] as $websitepagefound) + print '
'; + + if ($action == 'replacesiteconfirm') { - print '
'.$websitepagefound->title.' - '.$websitepagefound->description.'
'; + print '
'; + print '
'; + print $langs->trans("ReplaceString"); + print '
'; + print '
'; + print ''; + print ''; + print '
'; + print '
'; + print '
'; } + + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + foreach($listofpages['list'] as $answerrecord) + { + if (get_class($answerrecord) == 'WebsitePage') + { + print ''; + print ''; + print ''; + print ''; + print ''; + } + else + { + print ''; + print ''; + print ''; + print ''; + print ''; + } + } + print '
'.$langs->trans("Type").''.$langs->trans("Link").''.$langs->trans("Description").'
'.$langs->trans("Container").''; + print ''.$answerrecord->title.''; + print ''.$answerrecord->description; + print '
'.$answerrecord['type'].''; + $backtopageurl = $_SERVER["PHP_SELF"].'?action=replacesiteconfirm&searchstring='.urlencode($searchkey).'&optioncontent='.GETPOST('optioncontent','az09').'&optionmeta='.GETPOST('optionmeta','az09').'&optionsitefiles='.GETPOST('optionsitefiles','az09'); + print 'ref.'&backtopage='.urlencode($backtopageurl).'">'.$langs->trans("EditCss").''; + print ''; + print '
'; + print '
'; } else { @@ -3260,19 +3334,6 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') } } - if ($action == 'replacesiteconfirm') - { - print '
'; - print '
'; - print $langs->trans("ReplaceString"); - print '
'; - print '
'; - print ''; - print ''; - print '
'; - print '
'; - } - print ''; } From f9df175efc0cc5e82c27de3e98507b1eda95de75 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Mon, 2 Sep 2019 21:26:44 +0200 Subject: [PATCH 1006/1148] FIX takepos layout clear or focus search fix focus for compatibility with barcode scanner --- htdocs/takepos/takepos.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index b7061c0e135..70add232ed6 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -149,7 +149,7 @@ if(localStorage.hasKeyboard) { function ClearSearch() { console.log("ClearSearch"); $("#search").val(''); - browser->layer == 'classic') { ?> + browser->layout == 'classic') { ?> setFocusOnSearchField(); } From b9e3ba25036f7ba54ac63fcaa60da593a4cdfe0f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 2 Sep 2019 22:13:57 +0200 Subject: [PATCH 1007/1148] Fix backtourl --- htdocs/ecm/dir_card.php | 13 ++++++++----- htdocs/ecm/file_card.php | 2 -- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/htdocs/ecm/dir_card.php b/htdocs/ecm/dir_card.php index a279c228646..b6cb7dbfb7f 100644 --- a/htdocs/ecm/dir_card.php +++ b/htdocs/ecm/dir_card.php @@ -151,7 +151,10 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes') if ($action == 'confirm_deletedir' && $confirm == 'yes') { $backtourl = DOL_URL_ROOT."/ecm/index.php"; - if ($module == 'medias') $backtourl = DOL_URL_ROOT."/website/index.php?file_manager=1"; + if ($module == 'medias') + { + $backtourl = DOL_URL_ROOT."/website/index.php?file_manager=1"; + } $deletedirrecursive = (GETPOST('deletedirrecursive', 'alpha') == 'on' ? 1 : 0); @@ -381,7 +384,7 @@ dol_banner_tab($object, '', $morehtml, 0, '', '', $morehtmlref); print '
'; print '
'; -print ''; +print '
'; /*print ''; print ''; print ''; print ''; - $texte.= ''; + $texte.= ''; $texte.= '
'.$langs->trans("Ref").''; print img_picto('','object_dir').' '.$langs->trans("ECMRoot").' -> '; print $s; @@ -484,7 +487,7 @@ if ($action != 'edit' && $action != 'delete') //{ if ($permtoadd) { - print ''.$langs->trans('Delete').''; + print ''.$langs->trans('Delete').''; } else { @@ -504,7 +507,7 @@ if ($action != 'edit' && $action != 'delete') // Confirm remove file if ($action == 'delete') { - print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.GETPOST("section", 'alpha').'&urlfile='.urlencode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile'); + print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.GETPOST("section", 'alpha').'&urlfile='.urlencode($_GET["urlfile"]).($backtopage ? '&backtopage='.urlencode($backtopage) : ''), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile'); } // Confirm remove file @@ -521,7 +524,7 @@ if ($action == 'delete_dir') ); } - print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.GETPOST('section', 'alpha').($module?'&module='.$module:''), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection', $relativepathwithoutslash), 'confirm_deletedir', $formquestion, 1, 1); + print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.GETPOST('section', 'alpha').($module?'&module='.$module:'').($backtopage ? '&backtopage='.urlencode($backtopage) : ''), $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection', $relativepathwithoutslash), 'confirm_deletedir', $formquestion, 1, 1); } diff --git a/htdocs/ecm/file_card.php b/htdocs/ecm/file_card.php index 4eebb2d36b3..bbf210f631e 100644 --- a/htdocs/ecm/file_card.php +++ b/htdocs/ecm/file_card.php @@ -400,8 +400,6 @@ if ($action != 'edit') if ($user->rights->ecm->setup) { print ''.$langs->trans('Edit').''; - - //print ''.$langs->trans('Cancel').''; } /* if ($user->rights->ecm->setup) From f945ec57718808bb974efe6893e9ac88aec53720 Mon Sep 17 00:00:00 2001 From: Abbes Bahfir Date: Mon, 2 Sep 2019 21:18:57 +0100 Subject: [PATCH 1008/1148] fix: convert posted price formatted values to numeric --- htdocs/product/fournisseurs.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php index 587d494a51f..cb56ff63cfc 100644 --- a/htdocs/product/fournisseurs.php +++ b/htdocs/product/fournisseurs.php @@ -196,7 +196,7 @@ if (empty($reshook)) $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Supplier")), null, 'errors'); } - if ($_POST["price"] < 0 || $_POST["price"] == '') + if (price2num($_POST["price"]) < 0 || $_POST["price"] == '') { if ($price_expression === '') // Return error of missing price only if price_expression not set { @@ -215,12 +215,12 @@ if (empty($reshook)) $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("Currency")), null, 'errors'); } - if ($_POST["multicurrency_tx"] <= 0 || $_POST["multicurrency_tx"] == '') { + if (price2num($_POST["multicurrency_tx"]) <= 0 || $_POST["multicurrency_tx"] == '') { $error++; $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("CurrencyRate")), null, 'errors'); } - if ($_POST["multicurrency_price"] < 0 || $_POST["multicurrency_price"] == '') { + if (price2num($_POST["multicurrency_price"]) < 0 || $_POST["multicurrency_price"] == '') { $error++; $langs->load("errors"); setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentities("PriceCurrency")), null, 'errors'); From a126b1e538860368e98d53e867483744009ba42f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 2 Sep 2019 22:25:44 +0200 Subject: [PATCH 1009/1148] FIX Add char $ and ; in sanitizing of filenames. --- htdocs/core/lib/functions.lib.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 5540feadd14..3d7c9ad0ae2 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -796,8 +796,10 @@ function dol_size($size, $type = '') */ function dol_sanitizeFileName($str, $newstr = '_', $unaccent = 1) { - // List of special chars for filenames are defined on page https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file - $filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°'); + // List of special chars for filenames in windows are defined on page https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file + // Char '>' '<' '|' '$' and ';' are special chars for shells. + // Char '/' and '\' are file delimiters. + $filesystem_forbidden_chars = array('<', '>', '/', '\\', '?', '*', '|', '"', ':', '°', '$', ';'); return dol_string_nospecial($unaccent?dol_string_unaccent($str):$str, $newstr, $filesystem_forbidden_chars); } From 6c96478040bdaf935325290c0e42abd0eb63af63 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 2 Sep 2019 22:57:55 +0200 Subject: [PATCH 1010/1148] Removed deprecated code --- htdocs/comm/action/class/actioncomm.class.php | 11 +++-------- .../interface_50_modAgenda_ActionsAuto.class.php | 2 -- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 07db3b5a5d8..2caff8d242c 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -251,9 +251,6 @@ class ActionComm extends CommonObject public function __construct(DoliDB $db) { $this->db = $db; - - $this->societe = new stdClass(); // deprecated - $this->contact = new stdClass(); // deprecated } /** @@ -307,8 +304,6 @@ class ActionComm extends CommonObject $this->userassigned[$tmpid]=array('id'=>$tmpid, 'transparency'=>$this->transparency); } - //if (is_object($this->contact) && isset($this->contact->id) && $this->contact->id > 0 && ! ($this->contactid > 0)) $this->contactid = $this->contact->id; // For backward compatibility. Using this->contact->xx is deprecated - $userownerid=$this->userownerid; $userdoneid=$this->userdoneid; @@ -678,7 +673,7 @@ class ActionComm extends CommonObject $this->contactid = $obj->fk_contact; // To have fetch_contact method working $this->fk_project = $obj->fk_project; // To have fetch_project method working - $this->societe->id = $obj->fk_soc; // deprecated + //$this->societe->id = $obj->fk_soc; // deprecated //$this->contact->id = $obj->fk_contact; // deprecated $this->fk_element = $obj->elementid; @@ -889,8 +884,8 @@ class ActionComm extends CommonObject return -1; } - $socid=($this->socid?$this->socid:((isset($this->societe->id) && $this->societe->id > 0) ? $this->societe->id : 0)); - $contactid=($this->contactid?$this->contactid:0); + $socid=(($this->socid > 0)?$this->socid:0); + $contactid=(($this->contactid > 0)?$this->contactid:0); $userownerid=($this->userownerid?$this->userownerid:0); $userdoneid=($this->userdoneid?$this->userdoneid:0); diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php index 1ffbb6d9c52..0c26718f529 100644 --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php @@ -899,8 +899,6 @@ class InterfaceActionsAuto extends DolibarrTriggers $actioncomm->durationp = 0; $actioncomm->punctual = 1; $actioncomm->percentage = -1; // Not applicable - $actioncomm->societe = $societeforaction; - $actioncomm->contact = $contactforaction; $actioncomm->socid = $societeforaction->id; $actioncomm->contactid = $contactforaction->id; $actioncomm->authorid = $user->id; // User saving action From 443f16bddfc60a3aea825389fc17f167e7eddac5 Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Tue, 3 Sep 2019 10:36:00 +0200 Subject: [PATCH 1011/1148] Removed debug output --- htdocs/core/modules/modFournisseur.class.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/core/modules/modFournisseur.class.php b/htdocs/core/modules/modFournisseur.class.php index fb108fb83ba..0553fe3a1fa 100644 --- a/htdocs/core/modules/modFournisseur.class.php +++ b/htdocs/core/modules/modFournisseur.class.php @@ -641,8 +641,6 @@ class modFournisseur extends DolibarrModules $dirodt=DOL_DATA_ROOT.'/doctemplates/supplier_orders'; $dest=$dirodt.'/template_supplier_order.odt'; - file_put_contents("test.txt", var_export($dest, true)); - if (file_exists($src) && ! file_exists($dest)) { require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; From 0f02a621ba0860d495abe3e937da3fef32ec596c Mon Sep 17 00:00:00 2001 From: Tim Otte Date: Tue, 3 Sep 2019 10:39:11 +0200 Subject: [PATCH 1012/1148] Seriously? One newline failed the stickler ci test? --- .../pdf/doc_generic_supplier_order_odt.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php b/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php index 08711154819..d9e9112ec54 100644 --- a/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php +++ b/htdocs/core/modules/supplier_order/pdf/doc_generic_supplier_order_odt.modules.php @@ -514,4 +514,4 @@ class doc_generic_supplier_order_odt extends ModelePDFSuppliersOrders return -1; } -} \ No newline at end of file +} From c63a08b71bc5fdb07b286942856295523da4f383 Mon Sep 17 00:00:00 2001 From: Florian Mortgat Date: Tue, 3 Sep 2019 10:39:40 +0200 Subject: [PATCH 1013/1148] FIX: display a link to cron/list.php instead of just instructions on how to get there. Note: will have no impact until translations are updated; French & English updates provided --- htdocs/cron/admin/cron.php | 2 +- htdocs/langs/en_US/cron.lang | 2 +- htdocs/langs/fr_FR/cron.lang | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/cron/admin/cron.php b/htdocs/cron/admin/cron.php index 729772bcf7e..75bb49399f8 100644 --- a/htdocs/cron/admin/cron.php +++ b/htdocs/cron/admin/cron.php @@ -119,7 +119,7 @@ print ''; print '

'; -print $langs->trans("UseMenuModuleToolsToAddCronJobs").'
'; +print $langs->trans("UseMenuModuleToolsToAddCronJobs", dol_buildpath('/cron/list.php?leftmenu=admintools', 1)).'
'; if (! empty($conf->global->CRON_WARNING_DELAY_HOURS)) print info_admin($langs->trans("WarningCronDelayed", $conf->global->CRON_WARNING_DELAY_HOURS)); print '

'; diff --git a/htdocs/langs/en_US/cron.lang b/htdocs/langs/en_US/cron.lang index 704b852e138..48036a66093 100644 --- a/htdocs/langs/en_US/cron.lang +++ b/htdocs/langs/en_US/cron.lang @@ -76,7 +76,7 @@ CronType_method=Call method of a PHP Class CronType_command=Shell command CronCannotLoadClass=Cannot load class file %s (to use class %s) CronCannotLoadObject=Class file %s was loaded, but object %s was not found into it -UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. +UseMenuModuleToolsToAddCronJobs=Go into menu "Home - Admin tools - Scheduled jobs" to see and edit scheduled jobs. JobDisabled=Job disabled MakeLocalDatabaseDumpShort=Local database backup MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep diff --git a/htdocs/langs/fr_FR/cron.lang b/htdocs/langs/fr_FR/cron.lang index 5e50c173fe7..5addea1d31b 100644 --- a/htdocs/langs/fr_FR/cron.lang +++ b/htdocs/langs/fr_FR/cron.lang @@ -76,7 +76,7 @@ CronType_method=Appelle d'une méthode d'une classe Dolibarr CronType_command=Commande terminal CronCannotLoadClass=Impossible de charger le fichier %s (pour charger l'objet %s) CronCannotLoadObject=Le fichier de classe %s a été chargé, mais l'objet %s n'a pas été trouvé dedans -UseMenuModuleToolsToAddCronJobs=Aller à la page "Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmées et les modifier. +UseMenuModuleToolsToAddCronJobs=Aller à la page "Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmées et les modifier. JobDisabled=Travail désactivé MakeLocalDatabaseDumpShort=Sauvegarde locale de base MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nb de fichiers de sauvegarde à garder From f7430565725dbbd80ddc2bb8cc903fe96ad8639a Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 3 Sep 2019 11:15:35 +0200 Subject: [PATCH 1014/1148] Add missing agenda hook --- htdocs/public/agenda/agendaexport.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php index a69c940f7e2..33644e7bb72 100644 --- a/htdocs/public/agenda/agendaexport.php +++ b/htdocs/public/agenda/agendaexport.php @@ -95,6 +95,18 @@ if (empty($conf->global->MAIN_AGENDA_XCAL_EXPORTKEY)) exit; } +// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks +$hookmanager->initHooks(array('agendaexport')); + +$reshook = $hookmanager->executeHooks('doActions', $filters); // Note that $action and $object may have been modified by some +if ($reshook < 0){ + if(!empty($hookmanager->errors) && is_array($hookmanager->errors)){ + print '
'.implode('
', $hookmanager->errors).'
'; + }else{ + print '
'.$hookmanager->error.'
'; + } +} + // Check exportkey if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) { @@ -106,8 +118,6 @@ if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_ exit; } -// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array of hooks -$hookmanager->initHooks(array('agendaexport')); // Define filename with prefix on filters predica (each predica set must have on cache file) $shortfilename='dolibarrcalendar'; From 42433f3beb220e7569c1a5d60741089e54305c33 Mon Sep 17 00:00:00 2001 From: John Botella Date: Tue, 3 Sep 2019 11:23:27 +0200 Subject: [PATCH 1015/1148] Fix: hook replace behavior --- htdocs/public/agenda/agendaexport.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php index 33644e7bb72..dee0e8267ef 100644 --- a/htdocs/public/agenda/agendaexport.php +++ b/htdocs/public/agenda/agendaexport.php @@ -100,22 +100,24 @@ $hookmanager->initHooks(array('agendaexport')); $reshook = $hookmanager->executeHooks('doActions', $filters); // Note that $action and $object may have been modified by some if ($reshook < 0){ + llxHeaderVierge(); if(!empty($hookmanager->errors) && is_array($hookmanager->errors)){ print '
'.implode('
', $hookmanager->errors).'
'; }else{ print '
'.$hookmanager->error.'
'; } -} - -// Check exportkey -if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) -{ - $user->getrights(); - - llxHeaderVierge(); - print '
Bad value for key.
'; llxFooterVierge(); - exit; +} +elseif(empty($reshook)) { + // Check exportkey + if (empty($_GET["exportkey"]) || $conf->global->MAIN_AGENDA_XCAL_EXPORTKEY != $_GET["exportkey"]) { + $user->getrights(); + + llxHeaderVierge(); + print '
Bad value for key.
'; + llxFooterVierge(); + exit; + } } From 0c5859d2bfffdf47219729ee138718a646edd334 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 3 Sep 2019 11:37:25 +0200 Subject: [PATCH 1016/1148] Update takepos.php --- htdocs/takepos/takepos.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index 70add232ed6..bfe15aadd32 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -349,6 +349,7 @@ function deleteline() { $("#poslines").load("invoice.php?action=deleteline&place="+place+"&idline="+selectedline, function() { //$('#poslines').scrollTop($('#poslines')[0].scrollHeight); }); + ClearSearch(); } function Customer() { From 6996e83390a34384a5e19a2ed033a39a2fa21113 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 3 Sep 2019 11:40:19 +0200 Subject: [PATCH 1017/1148] Update takepos.php --- htdocs/takepos/takepos.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php index bfe15aadd32..fccaa222fcd 100644 --- a/htdocs/takepos/takepos.php +++ b/htdocs/takepos/takepos.php @@ -399,6 +399,7 @@ function New() { $("#poslines").load("invoice.php?action=delete&place="+place, function() { //$('#poslines').scrollTop($('#poslines')[0].scrollHeight); }); + ClearSearch(); } } From 5446ef317090b5b76d650e528f224592c131389a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 11:42:47 +0200 Subject: [PATCH 1018/1148] css --- htdocs/theme/eldy/info-box.inc.php | 21 +++++++++++---------- htdocs/theme/eldy/style.css.php | 4 +++- htdocs/theme/eldy/theme_vars.inc.php | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index f5a88f23f9f..3586d310dfa 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -113,43 +113,44 @@ a.info-box-text{ text-decoration: none;} -/* ICONS */ +/* ICONS INFO BOX */ .info-box-icon { color: #fff !important; } global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-75; +//print '/* conf->global->THEME_AGRESSIVITY_RATIO='.$conf->global->THEME_AGRESSIVITY_RATIO.' */'."\n"; +if (! isset($conf->global->THEME_AGRESSIVITY_RATIO)) $conf->global->THEME_AGRESSIVITY_RATIO=-40; if (GETPOSTISSET('THEME_AGRESSIVITY_RATIO')) $conf->global->THEME_AGRESSIVITY_RATIO=GETPOST('THEME_AGRESSIVITY_RATIO', 'int'); ?> .bg-infoxbox-project{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-action{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-propal, .bg-infoxbox-facture, .bg-infoxbox-commande{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-supplier_proposal, .bg-infoxbox-invoice_supplier, .bg-infoxbox-order_supplier{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-contrat{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-bank_account{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-adherent{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-expensereport{ - background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; + background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; } .bg-infoxbox-holiday{ background-color: global->THEME_AGRESSIVITY_RATIO); ?> !important; diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 3b8e1fc7329..2032edb40f2 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -228,13 +228,15 @@ print 'dol_screenwidth='.$_SESSION['dol_screenwidth']."\n"; print 'dol_screenheight='.$_SESSION['dol_screenheight']."\n"; print 'fontsize='.$fontsize."\n"; print 'nbtopmenuentries='.$nbtopmenuentries."\n"; -print 'fontsizesmaller='.$fontsizesmaller; +print 'fontsizesmaller='.$fontsizesmaller."\n"; print 'topMenuFontSize='.$topMenuFontSize."\n"; print 'toolTipBgColor='.$toolTipBgColor."\n"; print 'toolTipFontColor='.$toolTipFontColor."\n"; +print 'conf->global->THEME_AGRESSIVITY_RATIO='.$conf->global->THEME_AGRESSIVITY_RATIO." (must be between -100 and +100)\n"; print '*/'."\n"; +// Include the global.inc.php that include the badges, btn, info-box, dropdown, progress... require __DIR__ . '/global.inc.php'; diff --git a/htdocs/theme/eldy/theme_vars.inc.php b/htdocs/theme/eldy/theme_vars.inc.php index 84749f70a13..18ee2978f5d 100644 --- a/htdocs/theme/eldy/theme_vars.inc.php +++ b/htdocs/theme/eldy/theme_vars.inc.php @@ -74,7 +74,7 @@ $colortextlink='10, 10, 100'; $fontsize='0.86em'; $fontsizesmaller='0.75em'; $topMenuFontSize='1.2em'; -$toolTipBgColor='rgba(255, 255, 255, 0.96);'; +$toolTipBgColor='rgba(255, 255, 255, 0.96)'; $toolTipFontColor='#333'; // text color From fa11bbe2d5d171a042d5237c4a87628b72cf50ec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 12:51:11 +0200 Subject: [PATCH 1019/1148] Fix phpcs --- htdocs/website/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 1a2dc531dd1..1fd5939b4ac 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3317,7 +3317,7 @@ if ($action == 'replacesite' || $action == 'replacesiteconfirm') print '
'.$answerrecord['type'].''; - $backtopageurl = $_SERVER["PHP_SELF"].'?action=replacesiteconfirm&searchstring='.urlencode($searchkey).'&optioncontent='.GETPOST('optioncontent','az09').'&optionmeta='.GETPOST('optionmeta','az09').'&optionsitefiles='.GETPOST('optionsitefiles','az09'); + $backtopageurl = $_SERVER["PHP_SELF"].'?action=replacesiteconfirm&searchstring='.urlencode($searchkey).'&optioncontent='.GETPOST('optioncontent', 'az09').'&optionmeta='.GETPOST('optionmeta', 'az09').'&optionsitefiles='.GETPOST('optionsitefiles', 'az09'); print 'ref.'&backtopage='.urlencode($backtopageurl).'">'.$langs->trans("EditCss").''; print ''; From 32343fba24f684ff86b4cd9194a0cf42c801a4b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 3 Sep 2019 13:43:44 +0200 Subject: [PATCH 1020/1148] Optimize invoice situation doc with many many lines, it can be very very long to generate pdf --- htdocs/compta/facture/class/facture.class.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 33de9d47e18..1868c26c8fc 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -5168,13 +5168,16 @@ class FactureLigne extends CommonInvoiceLine public function get_prev_progress($invoiceid, $include_credit_note = true) { // phpcs:enable + global $invoicecache; if (is_null($this->fk_prev_id) || empty($this->fk_prev_id) || $this->fk_prev_id == "") { return 0; } else { // If invoice is not a situation invoice, this->fk_prev_id is used for something else - $tmpinvoice=new Facture($this->db); - $tmpinvoice->fetch($invoiceid); - if ($tmpinvoice->type != Facture::TYPE_SITUATION) return 0; + if (!isset($invoicecache[$invoiceid])) { + $invoicecache[$invoiceid]=new Facture($this->db); + $invoicecache[$invoiceid]->fetch($invoiceid); + } + if ($invoicecache[$invoiceid]->type != Facture::TYPE_SITUATION) return 0; $sql = 'SELECT situation_percent FROM ' . MAIN_DB_PREFIX . 'facturedet WHERE rowid=' . $this->fk_prev_id; $resql = $this->db->query($sql); From decf1d5a4bec863b8fdeaaf34d06a39774bfe299 Mon Sep 17 00:00:00 2001 From: dolibarr95 <24292300+dolibarr95@users.noreply.github.com> Date: Tue, 3 Sep 2019 14:18:14 +0200 Subject: [PATCH 1021/1148] Use bug template --- htdocs/main.inc.php | 47 +++++++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 9beff2dd38e..77b05ff6f2a 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2035,20 +2035,39 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ { require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - $bugbaseurl = 'https://github.com/Dolibarr/dolibarr/issues/new'; - $bugbaseurl.= '?title='; - $bugbaseurl.= urlencode("Bug: "); - $bugbaseurl.= '&body='; - $bugbaseurl.= urlencode("# Bug\n"); - $bugbaseurl.= urlencode("\n"); - $bugbaseurl.= urlencode("## Environment\n"); - $bugbaseurl.= urlencode("- **Version**: " . DOL_VERSION . "\n"); - $bugbaseurl.= urlencode("- **OS**: " . php_uname('s') . "\n"); - $bugbaseurl.= urlencode("- **Web server**: " . $_SERVER["SERVER_SOFTWARE"] . "\n"); - $bugbaseurl.= urlencode("- **PHP**: " . php_sapi_name() . ' ' . phpversion() . "\n"); - $bugbaseurl.= urlencode("- **Database**: " . $db::LABEL . ' ' . $db->getVersion() . "\n"); - $bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n"); - + $bugbaseurl = 'https://github.com/Dolibarr/dolibarr/issues/new?labels=Bug'; + $bugbaseurl.= '&title='; + $bugbaseurl.= urlencode("Bug: "); + $bugbaseurl.= '&body='; + $bugbaseurl.= urlencode("# Instructions\n"); + $bugbaseurl.= urlencode("*This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.*\n"); + $bugbaseurl.= urlencode("*Please:*\n"); + $bugbaseurl.= urlencode("- *replace the bracket enclosed texts with meaningful information*\n"); + $bugbaseurl.= urlencode("- *remove any unused sub-section*\n"); + $bugbaseurl.= urlencode("\n"); + $bugbaseurl.= urlencode("\n"); + $bugbaseurl.= urlencode("# Bug\n"); + $bugbaseurl.= urlencode("[*Short description*]\n"); + $bugbaseurl.= urlencode("\n"); + $bugbaseurl.= urlencode("## Environment\n"); + $bugbaseurl.= urlencode("- **Version**: " . DOL_VERSION . "\n"); + $bugbaseurl.= urlencode("- **OS**: " . php_uname('s') . "\n"); + $bugbaseurl.= urlencode("- **Web server**: " . $_SERVER["SERVER_SOFTWARE"] . "\n"); + $bugbaseurl.= urlencode("- **PHP**: " . php_sapi_name() . ' ' . phpversion() . "\n"); + $bugbaseurl.= urlencode("- **Database**: " . $db::LABEL . ' ' . $db->getVersion() . "\n"); + $bugbaseurl.= urlencode("- **URL(s)**: " . $_SERVER["REQUEST_URI"] . "\n"); + $bugbaseurl.= urlencode("\n"); + $bugbaseurl.= urlencode("## Expected and actual behavior\n"); + $bugbaseurl.= urlencode("[*Verbose description*]\n"); + $bugbaseurl.= urlencode("\n"); + $bugbaseurl.= urlencode("## Steps to reproduce the behavior\n"); + $bugbaseurl.= urlencode("[*Verbose description*]\n"); + $bugbaseurl.= urlencode("\n"); + $bugbaseurl.= urlencode("## [Attached files](https://help.github.com/articles/issue-attachments) (Screenshots, screencasts, dolibarr.log, debugging informations…)\n"); + $bugbaseurl.= urlencode("[*Files*]\n"); + $bugbaseurl.= urlencode("\n"); + + // Execute hook printBugtrackInfo $parameters=array('bugbaseurl'=>$bugbaseurl); $reshook=$hookmanager->executeHooks('printBugtrackInfo', $parameters); // Note that $action and $object may have been modified by some hooks From b2cbad1a88e8f106be3753a5d23722916e1c6a99 Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Tue, 3 Sep 2019 12:21:08 +0000 Subject: [PATCH 1022/1148] Fixing style errors. --- htdocs/main.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 77b05ff6f2a..2e91298f570 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -2037,7 +2037,7 @@ function left_menu($menu_array_before, $helppagename = '', $notused = '', $menu_ $bugbaseurl = 'https://github.com/Dolibarr/dolibarr/issues/new?labels=Bug'; $bugbaseurl.= '&title='; - $bugbaseurl.= urlencode("Bug: "); + $bugbaseurl.= urlencode("Bug: "); $bugbaseurl.= '&body='; $bugbaseurl.= urlencode("# Instructions\n"); $bugbaseurl.= urlencode("*This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.*\n"); From 95f3db126776b8e94264c3a9457f1cfd6c17eeaf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:41:39 +0200 Subject: [PATCH 1023/1148] Fix translation --- htdocs/langs/en_US/website.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 83e71073984..be758c04890 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -116,4 +116,5 @@ Dynamiccontent=Sample of a page with dynamic content ImportSite=Import site EditInLineOnOff=Mode 'Edit inline' is %s ShowSubContainersOnOff=Mode to execute 'dynamic content' is %s -GlobalCSSorJS=Global CSS/JS/Header file of web site \ No newline at end of file +GlobalCSSorJS=Global CSS/JS/Header file of web site +BackToHomePage=Back to home page... \ No newline at end of file From ffcea3dfd85809dee960698a23fa83956f403de5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:48:06 +0200 Subject: [PATCH 1024/1148] Fix phpcs --- htdocs/product/class/api_products.class.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index c0d415165c0..2543ff4a2e6 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -479,7 +479,7 @@ class Products extends DolibarrApi * @param string $barcode Barcode of element * @param int $includestockdata Load also information about stock (slower) * @return array|mixed Data without useless information - * + * * @url GET {id}/purchase_prices * * @throws 401 @@ -502,16 +502,16 @@ class Products extends DolibarrApi $result = $this->product->fetch($id, $ref, $ref_ext, $barcode); if(! $result ) { throw new RestException(404, 'Product not found'); - } - + } + if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) { throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login); - } - + } + if ($includestockdata) { $this->product->load_stock(); } - + if($result) { $this->product = new ProductFournisseur($this->db); $this->product->fetch($id, $ref); From 80624c67f4a7085be83103144c8202dc587b4ae1 Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Tue, 3 Sep 2019 14:48:46 +0200 Subject: [PATCH 1025/1148] Fix lang in invoice / takepos --- htdocs/takepos/invoice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php index 1729e22427c..6ae5429d062 100644 --- a/htdocs/takepos/invoice.php +++ b/htdocs/takepos/invoice.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php'; require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php'; -$langs->loadLangs(array("companies","commercial","bills", "cashdesk")); +$langs->loadLangs(array("companies", "commercial", "bills", "cashdesk", "stocks")); $id = GETPOST('id', 'int'); $action = GETPOST('action', 'alpha'); From a95e02e3f6caacac8766fdf1b9efbf39bfee8255 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:52:03 +0200 Subject: [PATCH 1026/1148] FIX #11789 FIX #11790 --- htdocs/comm/propal/card.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 7331d7a86e9..5b37242c8ac 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2535,10 +2535,13 @@ $formquestion = array_merge($formquestion, array( print ''; } - $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); - if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) + if ($usercanclose) { - print ''; + $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); + if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) + { + print ''; + } } } From 17ccb8fa101988c443be52aa28b35967f213c451 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:56:13 +0200 Subject: [PATCH 1027/1148] Fix missing tooltip --- htdocs/comm/propal/card.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 5b37242c8ac..9bf00cb6a9c 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2500,7 +2500,7 @@ $formquestion = array_merge($formquestion, array( if ($usercansend) { print ''; } else - print ''; + print ''; } // Create an order @@ -2543,6 +2543,10 @@ $formquestion = array_merge($formquestion, array( print ''; } } + else + { + print ''; + } } // Set accepted/refused From 52a543953c1bf22f2a4c47af8a5ead06c79fca57 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 14:58:54 +0200 Subject: [PATCH 1028/1148] Fix position of tests --- htdocs/comm/propal/card.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php index 9bf00cb6a9c..180f95e2d4e 100644 --- a/htdocs/comm/propal/card.php +++ b/htdocs/comm/propal/card.php @@ -2535,17 +2535,17 @@ $formquestion = array_merge($formquestion, array( print ''; } - if ($usercanclose) + $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); + if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) { - $arrayofinvoiceforpropal = $object->getInvoiceArrayList(); - if ((is_array($arrayofinvoiceforpropal) && count($arrayofinvoiceforpropal) > 0) || empty($conf->global->WORKFLOW_PROPAL_NEED_INVOICE_TO_BE_CLASSIFIED_BILLED)) + if ($usercanclose) { print ''; } - } - else - { - print ''; + else + { + print ''; + } } } From 132aceaa2085ba7aeca628bbd821bcba2aeaf9ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 15:35:06 +0200 Subject: [PATCH 1029/1148] Update .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 3e8cb903cfb..cccc1efe1c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -110,6 +110,7 @@ install: rm $TRAVIS_BUILD_DIR/composer.json rm $TRAVIS_BUILD_DIR/composer.lock composer self-update + # To have composer making parallel downloads composer global require hirak/prestissimo composer -n init composer -n config vendor-dir htdocs/includes From 106938168f210df8836c7ab2ecc27261a12b1f7e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 15:36:49 +0200 Subject: [PATCH 1030/1148] Fix phpcs --- .../core/modules/societe/mod_codecompta_digitaria.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/htdocs/core/modules/societe/mod_codecompta_digitaria.php b/htdocs/core/modules/societe/mod_codecompta_digitaria.php index 8044610a914..01b8da27b91 100644 --- a/htdocs/core/modules/societe/mod_codecompta_digitaria.php +++ b/htdocs/core/modules/societe/mod_codecompta_digitaria.php @@ -119,7 +119,7 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode * @param int $type Type of third party (1:customer, 2:supplier, -1:autodetect) * @return string Example */ - public function getExample($langs, $objsoc=0, $type=-1) + public function getExample($langs, $objsoc = 0, $type = -1) { global $mysoc; @@ -128,9 +128,9 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode if (! isset($conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL)) $thirdpartylabelexample = preg_replace('/([^a-z0-9])/i', '', $mysoc->name); $s.="
\n"; - $s.=$this->prefixcustomeraccountancycode.strtoupper(substr($thirdpartylabelexample,0, $this->customeraccountancycodecharacternumber)); + $s.=$this->prefixcustomeraccountancycode.strtoupper(substr($thirdpartylabelexample, 0, $this->customeraccountancycodecharacternumber)); $s.="
\n"; - $s.=$this->prefixsupplieraccountancycode.strtoupper(substr($thirdpartylabelexample,0, $this->supplieraccountancycodecharacternumber)); + $s.=$this->prefixsupplieraccountancycode.strtoupper(substr($thirdpartylabelexample, 0, $this->supplieraccountancycodecharacternumber)); return $s; } @@ -143,7 +143,7 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode * @param int $type 'customer' or 'supplier' * @return int >=0 if OK, <0 if KO */ - public function get_code($db, $societe, $type='') + public function get_code($db, $societe, $type = '') { // phpcs:enable $i = 0; @@ -229,7 +229,7 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode * @param int $type 'customer' or 'supplier' * @return int >=0 if OK, <0 if KO */ - public function checkIfAccountancyCodeIsAlreadyUsed($db, $code, $type='') + public function checkIfAccountancyCodeIsAlreadyUsed($db, $code, $type = '') { if ($type == 'supplier') { @@ -269,4 +269,3 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode } } } - From bd47bd096b756230a911de8db2be12a29e4e47cc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 15:58:20 +0200 Subject: [PATCH 1031/1148] NEW Can defined a position of numbering submodules for thirdparties --- .../societe/mod_codeclient_elephant.php | 7 - .../societe/mod_codeclient_leopard.php | 7 - .../modules/societe/mod_codeclient_monkey.php | 7 - .../societe/mod_codecompta_aquarium.php | 17 +-- .../societe/mod_codecompta_digitaria.php | 18 +-- .../societe/mod_codecompta_panicum.php | 9 +- .../modules/societe/modules_societe.class.php | 11 +- htdocs/langs/en_US/admin.lang | 3 +- htdocs/societe/admin/societe.php | 122 ++++++++++-------- 9 files changed, 91 insertions(+), 110 deletions(-) diff --git a/htdocs/core/modules/societe/mod_codeclient_elephant.php b/htdocs/core/modules/societe/mod_codeclient_elephant.php index b4e9f5d5258..3b72d57ed03 100644 --- a/htdocs/core/modules/societe/mod_codeclient_elephant.php +++ b/htdocs/core/modules/societe/mod_codeclient_elephant.php @@ -34,13 +34,6 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php' */ class mod_codeclient_elephant extends ModeleThirdPartyCode { - /** - * @var string Nom du modele - * @deprecated - * @see name - */ - public $nom='Elephant'; - /** * @var string model name */ diff --git a/htdocs/core/modules/societe/mod_codeclient_leopard.php b/htdocs/core/modules/societe/mod_codeclient_leopard.php index 727d2e09299..abea7070e80 100644 --- a/htdocs/core/modules/societe/mod_codeclient_leopard.php +++ b/htdocs/core/modules/societe/mod_codeclient_leopard.php @@ -38,13 +38,6 @@ class mod_codeclient_leopard extends ModeleThirdPartyCode * Le fonctionnement de celui-ci doit donc rester le plus ouvert possible */ - /** - * @var string Nom du modele - * @deprecated - * @see name - */ - public $nom='Leopard'; - /** * @var string model name */ diff --git a/htdocs/core/modules/societe/mod_codeclient_monkey.php b/htdocs/core/modules/societe/mod_codeclient_monkey.php index f86be2ed96c..87f4a527880 100644 --- a/htdocs/core/modules/societe/mod_codeclient_monkey.php +++ b/htdocs/core/modules/societe/mod_codeclient_monkey.php @@ -32,13 +32,6 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php' */ class mod_codeclient_monkey extends ModeleThirdPartyCode { - /** - * @var string Nom du modele - * @deprecated - * @see name - */ - public $nom='Monkey'; - /** * @var string model name */ diff --git a/htdocs/core/modules/societe/mod_codecompta_aquarium.php b/htdocs/core/modules/societe/mod_codecompta_aquarium.php index e9c60b699cc..edd0c5cf4dd 100644 --- a/htdocs/core/modules/societe/mod_codecompta_aquarium.php +++ b/htdocs/core/modules/societe/mod_codecompta_aquarium.php @@ -31,13 +31,6 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php' */ class mod_codecompta_aquarium extends ModeleAccountancyCode { - /** - * @var string Nom du modele - * @deprecated - * @see name - */ - public $nom='Aquarium'; - /** * @var string model name */ @@ -49,9 +42,11 @@ class mod_codecompta_aquarium extends ModeleAccountancyCode */ public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' - public $prefixcustomeraccountancycode; + public $prefixcustomeraccountancycode; - public $prefixsupplieraccountancycode; + public $prefixsupplieraccountancycode; + + public $position = 20; /** @@ -93,11 +88,11 @@ class mod_codecompta_aquarium extends ModeleAccountancyCode $texte.=$langs->trans("ModuleCompanyCodeCustomer".$this->name, $s2)."
\n"; $texte.=$langs->trans("ModuleCompanyCodeSupplier".$this->name, $s1)."
\n"; $texte.="
\n"; - if (! isset($conf->global->COMPANY_AQUARIUM_REMOVE_SPECIAL) || ! empty($conf->global->$conf->global->COMPANY_AQUARIUM_REMOVE_SPECIAL)) $texte.=$langs->trans('COMPANY_AQUARIUM_REMOVE_SPECIAL').' = '.yn(1)."
\n"; + if (! isset($conf->global->COMPANY_AQUARIUM_REMOVE_SPECIAL) || ! empty($conf->global->$conf->global->COMPANY_AQUARIUM_REMOVE_SPECIAL)) $texte.=$langs->trans('RemoveSpecialChars').' = '.yn(1)."
\n"; //if (! empty($conf->global->COMPANY_AQUARIUM_REMOVE_ALPHA)) $texte.=$langs->trans('COMPANY_AQUARIUM_REMOVE_ALPHA').' = '.yn($conf->global->COMPANY_AQUARIUM_REMOVE_ALPHA)."
\n"; if (! empty($conf->global->COMPANY_AQUARIUM_CLEAN_REGEX)) $texte.=$langs->trans('COMPANY_AQUARIUM_CLEAN_REGEX').' = '.$conf->global->COMPANY_AQUARIUM_CLEAN_REGEX."
\n"; $texte.= '
 
'; $texte.= ''; diff --git a/htdocs/core/modules/societe/mod_codecompta_digitaria.php b/htdocs/core/modules/societe/mod_codecompta_digitaria.php index 01b8da27b91..97486da70cc 100644 --- a/htdocs/core/modules/societe/mod_codecompta_digitaria.php +++ b/htdocs/core/modules/societe/mod_codecompta_digitaria.php @@ -31,13 +31,6 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php' */ class mod_codecompta_digitaria extends ModeleAccountancyCode { - /** - * @var string Nom du modele - * @deprecated - * @see name - */ - public $nom='Digitaria'; - /** * @var string model name */ @@ -49,9 +42,12 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode */ public $version='dolibarr'; // 'development', 'experimental', 'dolibarr' - public $prefixcustomeraccountancycode; + public $prefixcustomeraccountancycode; + + public $prefixsupplieraccountancycode; + + public $position = 30; - public $prefixsupplieraccountancycode; /** * Constructor @@ -98,13 +94,13 @@ class mod_codecompta_digitaria extends ModeleAccountancyCode $texte.= $langs->trans("ModuleCompanyCodeSupplier".$this->name, $s1, $s3)."
\n"; $texte.= "
\n"; // Remove special char if COMPANY_DIGITARIA_REMOVE_SPECIAL is set to 1 or not set (default) - if (! isset($conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL) || ! empty($conf->global->$conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL)) $texte.= $langs->trans('COMPANY_DIGITARIA_REMOVE_SPECIAL').' = '.yn(1)."
\n"; + if (! isset($conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL) || ! empty($conf->global->$conf->global->COMPANY_DIGITARIA_REMOVE_SPECIAL)) $texte.= $langs->trans('RemoveSpecialChars').' = '.yn(1)."
\n"; // Apply a regex replacement pattern on code if COMPANY_DIGITARIA_CLEAN_REGEX is set. Value must be a regex with parenthesis. The part into parenthesis is kept, the rest removed. if (! empty($conf->global->COMPANY_DIGITARIA_CLEAN_REGEX)) $texte.= $langs->trans('COMPANY_DIGITARIA_CLEAN_REGEX').' = '.$conf->global->COMPANY_DIGITARIA_CLEAN_REGEX."
\n"; // Unique index on code if COMPANY_DIGITARIA_UNIQUE_CODE is set to 1 or not set (default) if (! isset($conf->global->COMPANY_DIGITARIA_UNIQUE_CODE) || ! empty($conf->global->COMPANY_DIGITARIA_UNIQUE_CODE)) $texte.= $langs->trans('COMPANY_DIGITARIA_UNIQUE_CODE').' = '.yn(1)."
\n"; $texte.= '
 
'; $texte.= ''; diff --git a/htdocs/core/modules/societe/mod_codecompta_panicum.php b/htdocs/core/modules/societe/mod_codecompta_panicum.php index f3106cef761..60f66ca4e46 100644 --- a/htdocs/core/modules/societe/mod_codecompta_panicum.php +++ b/htdocs/core/modules/societe/mod_codecompta_panicum.php @@ -30,13 +30,6 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php' */ class mod_codecompta_panicum extends ModeleAccountancyCode { - /** - * @var string Nom du modele - * @deprecated - * @see name - */ - public $nom='Panicum'; - /** * @var string model name */ @@ -48,6 +41,8 @@ class mod_codecompta_panicum extends ModeleAccountancyCode */ public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' + public $position = 10; + /** * Constructor diff --git a/htdocs/core/modules/societe/modules_societe.class.php b/htdocs/core/modules/societe/modules_societe.class.php index 4a873847d8a..62f481b9b25 100644 --- a/htdocs/core/modules/societe/modules_societe.class.php +++ b/htdocs/core/modules/societe/modules_societe.class.php @@ -83,18 +83,18 @@ abstract class ModeleThirdPartyCode return $langs->trans("NoDescription"); } - /** Renvoi nom module + /** Return name of module * * @param Translate $langs Object langs * @return string Nom du module */ public function getNom($langs) { - return $this->nom; + return $this->name; } - /** Renvoi un exemple de numerotation + /** Return an example of numbering * * @param Translate $langs Object langs * @return string Example @@ -261,8 +261,7 @@ abstract class ModeleThirdPartyCode /** - * \class ModeleAccountancyCode - * \brief Parent class for third parties accountancy code generators + * Parent class for third parties accountancy code generators */ abstract class ModeleAccountancyCode { @@ -340,7 +339,7 @@ abstract class ModeleAccountancyCode $langs->load("admin"); $s=''; - if ($type == -1) $s.=$langs->trans("Name").': '.$this->nom.'
'; + if ($type == -1) $s.=$langs->trans("Name").': '.$this->name.'
'; if ($type == -1) $s.=$langs->trans("Version").': '.$this->getVersion().'
'; //$s.='
'; //$s.=''.$langs->trans("ThisIsModuleRules").':
'; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 0ae5239642d..f59f4449b8e 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1848,9 +1848,8 @@ NothingToSetup=There is no specific setup required for this module. SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2') SeveralLangugeVariatFound=Several language variants found -COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters +RemoveSpecialChars=Remove special characters COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX) -COMPANY_DIGITARIA_REMOVE_SPECIAL=Remove special characters COMPANY_DIGITARIA_CLEAN_REGEX=Regex filter to clean value (COMPANY_DIGITARIA_CLEAN_REGEX) COMPANY_DIGITARIA_UNIQUE_CODE=Unauthorized double GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact) diff --git a/htdocs/societe/admin/societe.php b/htdocs/societe/admin/societe.php index d07ddfc2b4f..82f8c32510e 100644 --- a/htdocs/societe/admin/societe.php +++ b/htdocs/societe/admin/societe.php @@ -360,6 +360,8 @@ print '
'.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.$modCodeTiers->name.''.$modCodeTiers->info($langs).''.$modCodeTiers->getExample($langs).''."\n"; - print img_picto($langs->trans("Activated"), 'switch_on'); - print "'; - if (! $disabled) print ''; - print img_picto($langs->trans("Disabled"), 'switch_off'); - if (! $disabled) print ''; - print ''; - $s=$modCodeTiers->getToolTip($langs, null, -1); - print $form->textwithpicto('', $s, 1); - print '
'.$modCodeTiers->name.''.$modCodeTiers->info($langs).''.$modCodeTiers->getExample($langs).''."\n"; + print img_picto($langs->trans("Activated"), 'switch_on'); + print "'; + if (! $disabled) print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + if (! $disabled) print ''; + print ''; + $s=$modCodeTiers->getToolTip($langs, null, -1); + print $form->textwithpicto('', $s, 1); + print '
'; print ''; @@ -441,6 +449,8 @@ print '
'.$langs->trans("Status").''.$langs->trans("ShortInfo").'
'.$modCodeCompta->name."\n"; - print $modCodeCompta->info($langs); - print ''.$modCodeCompta->getExample($langs)."'; - print img_picto($langs->trans("Activated"), 'switch_on'); - print ''; - print img_picto($langs->trans("Disabled"), 'switch_off'); - print ''; - $s=$modCodeCompta->getToolTip($langs, null, -1); - print $form->textwithpicto('', $s, 1); - print '
'.$modCodeCompta->name."\n"; + print $modCodeCompta->info($langs); + print ''.$modCodeCompta->getExample($langs)."'; + print img_picto($langs->trans("Activated"), 'switch_on'); + print ''; + print img_picto($langs->trans("Disabled"), 'switch_off'); + print ''; + $s=$modCodeCompta->getToolTip($langs, null, -1); + print $form->textwithpicto('', $s, 1); + print '
\n"; print ''; From 28c4f86c79b305291d51994ff3578added6c0aa0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 16:23:39 +0200 Subject: [PATCH 1032/1148] Fix regression --- htdocs/compta/facture/class/facture.class.php | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index b3c34d03360..131f0ee90fd 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -210,12 +210,12 @@ class Facture extends CommonInvoice * @var double percentage of retainage */ public $retained_warranty; - + /** * @var int timestamp of date limit of retainage */ public $retained_warranty_date_limit; - + /** * @var int Code in llx_c_paiement */ @@ -461,10 +461,10 @@ class Facture extends CommonInvoice // Define due date if not already defined if (empty($forceduedate)) { $duedate = $this->calculate_date_lim_reglement(); - if ($duedate < 0) { - dol_syslog(__METHOD__ . ' ' . $this->error, LOG_ERR); + /*if ($duedate < 0) { Regression, a date can be negative if before 1970. + dol_syslog(__METHOD__ . ' Error in calculate_date_lim_reglement. We got ' . $duedate, LOG_ERR); return -1; - } + }*/ $this->date_lim_reglement = $duedate; } else { $this->date_lim_reglement = $forceduedate; @@ -535,7 +535,7 @@ class Facture extends CommonInvoice $sql.= ", ".(empty($this->retained_warranty)?"0":$this->db->escape($this->retained_warranty)); $sql.= ", ".(!empty($this->retained_warranty_date_limit)?"'".$this->db->idate($this->retained_warranty_date_limit)."'":'NULL'); $sql.= ", ".(int) $this->retained_warranty_fk_cond_reglement; - + $sql.=")"; $resql=$this->db->query($sql); @@ -1439,7 +1439,7 @@ class Facture extends CommonInvoice $this->retained_warranty = $obj->retained_warranty; $this->retained_warranty_date_limit = $this->db->jdate($obj->retained_warranty_date_limit); $this->retained_warranty_fk_cond_reglement = $obj->retained_warranty_fk_cond_reglement; - + $this->extraparams = (array) json_decode($obj->extraparams, true); //Incoterms @@ -1688,7 +1688,7 @@ class Facture extends CommonInvoice if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf); if (isset($this->import_key)) $this->import_key=trim($this->import_key); if (isset($this->retained_warranty)) $this->retained_warranty = floatval($this->retained_warranty); - + // Check parameters // Put here code to add control on parameters values @@ -4431,9 +4431,9 @@ class Facture extends CommonInvoice if(empty($this->retained_warranty) ){ return -1; } - + $retainedWarrantyAmount = 0; - + // Billed - retained warranty if($this->type == Facture::TYPE_SITUATION) { @@ -4447,18 +4447,18 @@ class Facture extends CommonInvoice } } } - + if($displayWarranty && !empty($this->situation_final)) { $this->fetchPreviousNextSituationInvoice(); $TPreviousIncoice = $this->tab_previous_situation_invoice; - + $total2BillWT = 0; foreach ($TPreviousIncoice as &$fac){ $total2BillWT += $fac->total_ttc; } $total2BillWT += $this->total_ttc; - + $retainedWarrantyAmount = $total2BillWT * $this->retained_warranty / 100; } else{ @@ -4470,10 +4470,10 @@ class Facture extends CommonInvoice // Because one day retained warranty could be used on standard invoices $retainedWarrantyAmount = $this->total_ttc * $this->retained_warranty / 100; } - + return $retainedWarrantyAmount; } - + /** * Change the retained warranty * @@ -4489,7 +4489,7 @@ class Facture extends CommonInvoice $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql .= ' SET '.$fieldname.' = '.floatval($value); $sql .= ' WHERE rowid='.$this->id; - + if ($this->db->query($sql)) { $this->retained_warranty = floatval($value); @@ -4509,8 +4509,8 @@ class Facture extends CommonInvoice return -2; } } - - + + /** * Change the retained_warranty_date_limit * @@ -4523,8 +4523,8 @@ class Facture extends CommonInvoice if(!$timestamp && $dateYmd){ $timestamp = $this->db->jdate($dateYmd); } - - + + dol_syslog(get_class($this).'::setRetainedWarrantyDateLimit('.$timestamp.')'); if ($this->statut >= 0) { @@ -4532,7 +4532,7 @@ class Facture extends CommonInvoice $sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element; $sql .= ' SET '.$fieldname.' = '.(strval($timestamp)!='' ? '\'' .$this->db->idate($timestamp).'\'' : 'null' ); $sql .= ' WHERE rowid='.$this->id; - + if ($this->db->query($sql)) { $this->retained_warranty_date_limit = $timestamp; From a5aedacb7e69f81f3915acd965fc22d6f2897018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Tue, 3 Sep 2019 16:49:41 +0200 Subject: [PATCH 1033/1148] Update productbatch.class.php --- htdocs/product/class/productbatch.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/class/productbatch.class.php b/htdocs/product/class/productbatch.class.php index 4b1e5232abb..22077747b95 100644 --- a/htdocs/product/class/productbatch.class.php +++ b/htdocs/product/class/productbatch.class.php @@ -223,7 +223,7 @@ class Productbatch extends CommonObject $sql.= " batch=".(isset($this->batch)?"'".$this->db->escape($this->batch)."'":"null").","; $sql.= " qty=".(isset($this->qty)?$this->qty:"null").","; $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null").""; - $sql.= " WHERE rowid=".$this->id." AND tms='".$this->db->idate($this->tms)."'"; + $sql.= " WHERE rowid=".$this->id; $this->db->begin(); From 65fee73b225ca47daa3667369171fff61403790d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 17:31:20 +0200 Subject: [PATCH 1034/1148] Update treso.php --- htdocs/compta/bank/treso.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 10b366f0b9c..8ce3370587f 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -264,12 +264,12 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $paiement = -1*$socialcontribstatic->getSommePaiement(); // Payment already done } - $parameters = array('obj' => $obj); + $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'payment' => $paiement); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; + $paiement = isset($hookmanager->resArray['payment']) ? $hookmanager->resArray['payment'] : $paiement; } $total_ttc = $obj->total_ttc; From 7c07e64adcf1b121d410644eda4471c3c87c1224 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 17:32:18 +0200 Subject: [PATCH 1035/1148] Update treso.php --- htdocs/compta/bank/treso.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 8ce3370587f..5b39e8fd79b 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -269,7 +269,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) if(empty($reshook)){ $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; - $paiement = isset($hookmanager->resArray['payment']) ? $hookmanager->resArray['payment'] : $paiement; + $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; } $total_ttc = $obj->total_ttc; From 481a25cb8fc3b8b9bd71a77a6c101573aa8fcbc7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 17:39:19 +0200 Subject: [PATCH 1036/1148] The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). --- ChangeLog | 2 +- htdocs/compta/bank/treso.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7efaa290bfc..60cb7dd6ecf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,7 +18,7 @@ Following changes may create regressions for some external modules, but were nec * The function show_theme() hase been renamed into showSkins() * Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency. * The deprecated method get_OutstandingBill has been removed. You can use getOutstandingBills() instead. -* The hook "moreFamily" must return payment into var "payment" and no more "paiement". +* The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php index 29bc1db3593..ac4c9c767e8 100644 --- a/htdocs/compta/bank/treso.php +++ b/htdocs/compta/bank/treso.php @@ -213,9 +213,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $i = 0; while ($i < $num) { - $paiement = ''; $ref = ''; $refcomp = ''; + $totalpayment = ''; $obj = array_shift($tab_sqlobj); @@ -236,7 +236,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $societestatic->name = $obj->name; $refcomp=$societestatic->getNomUrl(1, '', 24); - $paiement = -1*$facturefournstatic->getSommePaiement(); // Payment already done + $totalpayment = -1*$facturefournstatic->getSommePaiement(); // Payment already done } } if ($obj->family == 'invoice') @@ -250,9 +250,9 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $societestatic->name = $obj->name; $refcomp=$societestatic->getNomUrl(1, '', 24); - $paiement = $facturestatic->getSommePaiement(); // Payment already done - $paiement+= $facturestatic->getSumDepositsUsed(); - $paiement+= $facturestatic->getSumCreditNotesUsed(); + $totalpayment = $facturestatic->getSommePaiement(); // Payment already done + $totalpayment+= $facturestatic->getSumDepositsUsed(); + $totalpayment+= $facturestatic->getSumCreditNotesUsed(); } if ($obj->family == 'social_contribution') { @@ -261,19 +261,19 @@ if ($_REQUEST["account"] || $_REQUEST["ref"]) $socialcontribstatic->lib=$obj->type; $ref = $socialcontribstatic->getNomUrl(1, 24); - $paiement = -1*$socialcontribstatic->getSommePaiement(); // Payment already done + $totalpayment = -1*$socialcontribstatic->getSommePaiement(); // Payment already done } - $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'payment' => $paiement); + $parameters = array('obj' => $obj, 'ref' => $ref, 'refcomp' => $refcomp, 'totalpayment' => $totalpayment); $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook if(empty($reshook)){ $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : $ref; $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : $refcomp; - $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : $paiement; + $totalpayment = isset($hookmanager->resArray['totalpayment']) ? $hookmanager->resArray['totalpayment'] : $totalpayment; } $total_ttc = $obj->total_ttc; - if ($paiement) $total_ttc = $obj->total_ttc - $paiement; + if ($totalpayment) $total_ttc = $obj->total_ttc - $totalpayment; $solde += $total_ttc; // We discard lines with a remainder to pay to 0 From 0a17e6bfd5adc6bc1bfc4dc3a99c264b6918cb1f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 22:39:24 +0200 Subject: [PATCH 1037/1148] FIX Several pb in export of documents FIX Must escape shell FIX Must exclude logs and some dirs for compressed backup FIX gzip and bzip2 must use option -f --- htdocs/admin/tools/dolibarr_export.php | 20 +++++++++++---- htdocs/admin/tools/export_files.php | 34 ++++++++++++++++---------- htdocs/core/class/utils.class.php | 24 +++++++++--------- htdocs/core/lib/files.lib.php | 28 +++++++++++++++------ 4 files changed, 70 insertions(+), 36 deletions(-) diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php index c06314daa9a..0bef19dde56 100644 --- a/htdocs/admin/tools/dolibarr_export.php +++ b/htdocs/admin/tools/dolibarr_export.php @@ -50,10 +50,20 @@ if (! $user->admin) if ($action == 'delete') { - $file=$conf->admin->dir_output.'/backup/'.basename(GETPOST('urlfile', 'alpha')); - $ret=dol_delete_file($file, 1); - if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); - else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors'); + if (preg_match('/^backup\//', GETPOST('urlfile', 'alpha'))) + { + $file=$conf->admin->dir_output.'/backup/'.basename(GETPOST('urlfile', 'alpha')); + $ret=dol_delete_file($file, 1); + if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); + else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors'); + } + else + { + $file=$conf->admin->dir_output.'/documents/'.basename(GETPOST('urlfile', 'alpha')); + $ret=dol_delete_file($file, 1); + if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs'); + else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors'); + } $action=''; } @@ -577,7 +587,7 @@ print "\n"; ?>
-
" id="buttonGo" />

diff --git a/htdocs/admin/tools/export_files.php b/htdocs/admin/tools/export_files.php index c1ddedfea53..4f9e8b933d2 100644 --- a/htdocs/admin/tools/export_files.php +++ b/htdocs/admin/tools/export_files.php @@ -112,21 +112,27 @@ $utils = new Utils($db); if ($compression == 'zip') { - $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression); + $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression, '/(\.log|\/temp\/|documents\/admin\/documents\/)/'); if ($ret < 0) { - $errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputfile); + $errormsg = $langs->trans("ErrorFailedToWriteInDir", $outputdir); } } elseif (in_array($compression, array('gz', 'bz'))) { - $file = substr($file, 0, strrpos($file, '.')); + $userlogin = ($user->login ? $user->login : 'unknown'); + + $outputfile = $conf->admin->dir_temp.'/export_files.'.$userlogin.'.out'; // File used with popen method + + $file = substr($file, 0, strrpos($file, '.')); $file .= '.tar'; - $cmd = 'tar -cf '.$outputdir."/".$file." --exclude=documents/admin/documents -C ".DOL_DATA_ROOT." ".DOL_DATA_ROOT."/../documents/"; - exec($cmd, $out, $retval); - //var_dump($cmd, DOL_DATA_ROOT);exit; - - if ($retval != 0) + // We also exclude '/temp/' dir and 'documents/admin/documents' + $cmd = "tar -cf ".$outputdir."/".$file." --exclude-vcs --exclude 'temp' --exclude 'dolibarr.log' --exclude='documents/admin/documents' -C ".dirname(DOL_DATA_ROOT)." ".basename(DOL_DATA_ROOT); + + $result = $utils->executeCLI($cmd, $outputfile); + + $retval = $result['error']; + if ($result['result'] || ! empty($retval)) { $langs->load("errors"); dol_syslog("Documents tar retval after exec=".$retval, LOG_ERR); @@ -136,15 +142,17 @@ elseif (in_array($compression, array('gz', 'bz'))) { if ($compression == 'gz') { - $cmd = "gzip " . $outputdir."/".$file; + $cmd = "gzip -f " . $outputdir."/".$file; } if ($compression == 'bz') { - $cmd = "bzip2 " . $outputdir."/".$file; + $cmd = "bzip2 -f " . $outputdir."/".$file; } - - exec($cmd, $out, $retval); - if ($retval != 0) + + $result = $utils->executeCLI($cmd, $outputfile); + + $retval = $result['error']; + if ($result['result'] || ! empty($retval)) { $errormsg = 'Error '.$compression.' generation return '.$retval; unlink($outputdir."/".$file); diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php index f86d6570e5c..86eff6613c1 100644 --- a/htdocs/core/class/utils.class.php +++ b/htdocs/core/class/utils.class.php @@ -316,27 +316,29 @@ class Utils // TODO Replace with executeCLI function if ($execmethod == 1) { - exec($fullcommandclear, $readt, $retval); - $result = $retval; + $output_arr = array(); $retval = null; + exec($fullcommandclear, $output_arr, $retval); if ($retval != 0) { $langs->load("errors"); dol_syslog("Datadump retval after exec=".$retval, LOG_ERR); - $error = 'Error '.$retval; + $errormsg = 'Error '.$retval; $ok=0; } else { $i=0; - if (!empty($readt)) - foreach($readt as $key=>$read) + if (!empty($output_arr)) { - $i++; // output line number - if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue; - fwrite($handle, $read.($execmethod == 2 ? '' : "\n")); - if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1; - elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1; + foreach($output_arr as $key => $read) + { + $i++; // output line number + if ($i == 1 && preg_match('/Warning.*Using a password/i', $read)) continue; + fwrite($handle, $read.($execmethod == 2 ? '' : "\n")); + if (preg_match('/'.preg_quote('-- Dump completed').'/i', $read)) $ok=1; + elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i', $read)) $ok=1; + } } } } @@ -534,6 +536,7 @@ class Utils if ($execmethod == 1) { + $retval = null; exec($command, $output_arr, $retval); $result = $retval; if ($retval != 0) @@ -545,7 +548,6 @@ class Utils } if ($execmethod == 2) // With this method, there is no way to get the return code, only output { - $ok=0; $handle = fopen($outputfile, 'w+b'); if ($handle) { diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index c6a5cb14426..d2aee3e6a30 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1221,9 +1221,12 @@ function dol_delete_file($file, $disableglob = 0, $nophperrors = 0, $nohook = 0, } } } - else dol_syslog("Failed to remove file ".$filename, LOG_WARNING); - // TODO Failure to remove can be because file was already removed or because of permission - // If error because it does not exists, we should return true, and we should return false if this is a permission problem + else + { + dol_syslog("Failed to remove file ".$filename, LOG_WARNING); + // TODO Failure to remove can be because file was already removed or because of permission + // If error because it does not exists, we should return true, and we should return false if this is a permission problem + } } } else dol_syslog("No files to delete found", LOG_DEBUG); @@ -2062,9 +2065,10 @@ function dol_uncompress($inputfile, $outputdir) * @param string $inputdir Source dir name * @param string $outputfile Target file name (output directory must exists and be writable) * @param string $mode 'zip' + * @param string $excludefiles A regex pattern. For example: '/\.log$|\/temp\//' * @return int <0 if KO, >0 if OK */ -function dol_compress_dir($inputdir, $outputfile, $mode = "zip") +function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = '') { $foundhandler=0; @@ -2095,6 +2099,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip") return 1; } else*/ + //if (class_exists('ZipArchive') && ! empty($conf->global->MAIN_USE_ZIPARCHIVE_FOR_ZIP_COMPRESS)) if (class_exists('ZipArchive')) { $foundhandler=1; @@ -2102,6 +2107,13 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip") // Initialize archive object $zip = new ZipArchive(); $result = $zip->open($outputfile, ZipArchive::CREATE | ZipArchive::OVERWRITE); + if (! $result) + { + global $langs, $errormsg; + $langs->load("errors"); + $errormsg=$langs->trans("ErrorFailedToWriteInFile", $outputfile); + return -4; + } // Create recursive directory iterator /** @var SplFileInfo[] $files */ @@ -2118,9 +2130,11 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip") // Get real and relative path for current file $filePath = $file->getRealPath(); $relativePath = substr($filePath, strlen($inputdir) + 1); - - // Add current file to archive - $zip->addFile($filePath, $relativePath); + if (empty($excludefiles) || ! preg_match($excludefiles, $filePath)) + { + // Add current file to archive + $zip->addFile($filePath, $relativePath); + } } } From c8fd4a2385507cd2f4eb27f2b82107902a730892 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Sep 2019 22:48:35 +0200 Subject: [PATCH 1038/1148] Fix phpcs --- htdocs/index.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/index.php b/htdocs/index.php index 5a22dd2e13f..d50b5248fab 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -825,13 +825,11 @@ if (empty($conf->global->MAIN_DISABLE_GLOBAL_WORKBOARD)) { $boxwork .= '
'; // End table array of working board $boxwork .= '
'; - if (!empty($isIntopOpenedDashBoard)) { print '
'; print '
' . $openedDashBoard . '
'; print '
'; } - } From 5494fed0a0054b7305e1757c4c2cb7119f9ffdb4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 03:48:12 +0200 Subject: [PATCH 1039/1148] Removed duplicate images --- doc/images/dolibarr_screenshot5_1280x800.png | Bin 43930 -> 0 bytes ....jpg => dolibarr_screenshot5_1920x1080.jpg} | Bin .../dolibarr_screenshot5_1920x1080_a.jpg | Bin 227972 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/images/dolibarr_screenshot5_1280x800.png rename doc/images/{dolibarr_screenshot5_1920x1080_b.jpg => dolibarr_screenshot5_1920x1080.jpg} (100%) delete mode 100644 doc/images/dolibarr_screenshot5_1920x1080_a.jpg diff --git a/doc/images/dolibarr_screenshot5_1280x800.png b/doc/images/dolibarr_screenshot5_1280x800.png deleted file mode 100644 index 92f6dfa521d19ea04c289488345d87704982c95f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43930 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 lQ|zU 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 diff --git a/doc/images/dolibarr_screenshot5_1920x1080_b.jpg b/doc/images/dolibarr_screenshot5_1920x1080.jpg similarity index 100% rename from doc/images/dolibarr_screenshot5_1920x1080_b.jpg rename to doc/images/dolibarr_screenshot5_1920x1080.jpg diff --git a/doc/images/dolibarr_screenshot5_1920x1080_a.jpg b/doc/images/dolibarr_screenshot5_1920x1080_a.jpg deleted file mode 100644 index 1c6e2cbdbdf0c00a5fb4a513e407f9b907fd067c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227972 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 z 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 EEVlz_q{%zuW;! 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 From a7ecf9f18b4a1ce3f9e9aa9580549853937d90f0 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Wed, 4 Sep 2019 09:32:37 +0200 Subject: [PATCH 1040/1148] FIX Missing ticket icon on md theme --- htdocs/theme/md/img/title_ticket.png | Bin 0 -> 234 bytes htdocs/theme/md/img/title_ticketsup.png | Bin 1044 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 htdocs/theme/md/img/title_ticket.png delete mode 100644 htdocs/theme/md/img/title_ticketsup.png diff --git a/htdocs/theme/md/img/title_ticket.png b/htdocs/theme/md/img/title_ticket.png new file mode 100644 index 0000000000000000000000000000000000000000..b1cf5df0e7580226f61d129d2ebbd93506c0ee75 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE^%(yc-&<;;;jpisG|i(`nz>ARCRaxok7IL~kXzgpJm zM11VK^(HA9|5mHa<@0*ky3KvMaD~7LH>R5mMdzB|2db>yXXyFuWtvwery_%ZMTfA= zhjgLjJv)AvF52&z70kZ(`(4T8Co7wyvYBt$D^Iz;@5gSAYJ<(cFLJz|+5P3Pw|E2l Ywo4Xlix2!20y=@g)78&qol`;+0C<>DdjJ3c literal 0 HcmV?d00001 diff --git a/htdocs/theme/md/img/title_ticketsup.png b/htdocs/theme/md/img/title_ticketsup.png deleted file mode 100644 index 3ec332075e66b1160122713117fa0d8087f659c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1044 zcmV+v1nc{WP)kdg00002VoOIv0RM-N z%)bBt010qNS#tmY4c7nw4c7reD4Tcy000McNliru;sXr{7YHUBg%1D#1EonsK~zY` z&6Vv>+f@|DKj+?GOI!Oe%0ttN3<`sdEyC0&NN_>-kSr`F#uvWx?=#VuMVTRPCT5Yr zP}vM5jFurAY!phN4;j$*_q)DmDJ{$w`bN*Yn{&ROdmeJ`h5y<#QQFC2{*|_yCP87* zN0FzL|AE*dj+&fVoe_65-(Z92B{Iloa0Y6 z;Jn9-FoK6BJh*@o2OM%B4|uS20K7>T2{M(89t#fnTLn{Kj%~800OBV^8}CT~lh5Sl?fd!d`exKwPxRI0 z{dnFvGpl~FlMDG{&!vD)nh$s1CloQh$ zeuhU36K#-38Rk*pp);pfRg)fk=i(`V88s1XW`9iri%fH+0dR$B7UB1&YDR2{$ml76 z6}B8}K`#RkB!)wKP2P?}j39tcSc}?N%_jgO5#<$2WmKi}1}_8D(&Qooc&q!8CoQ79 z!;uDnM3qb1YI~*tfQ^qK+_(U6;bsUQHo$B_?`XuWVvQxl#H)~8_2f{-%~eVOl(>qU zGEVifoD%VxXam5~T8kscOYPtgr3-*AqL?E&C`W89E~^2cQgWy)9jL}+Sp?kl0?>;a z!{X7ds-SYop-MHDu%QmM(&0~h)%%y2!b=>0I9{e$s^svoPqirI(5yEA{3%@&RGav# zz#S$@)-p&k$xgKce$}c(m;8+xd|xIf!iA~?AWec+T4rxDgI=|!9|E&exn;N zKa*#l9QK6eTxV3oJd~-VeFBiM`?As@t%S9!e`mQsj^|_%c35G99Hm<=e5A%yKrO2~ zchawU4-$J9EZw8Sa!&l`vmfLi+d#Tf{g+l(r`(Wh;#Yfe@4NZBN1%S?KJ{>oal*hB zQ*4ss0Pqkb!VMz8E_bq?S!@i3pUe;6?4693*MB@;G@Bl}O?TyEkyTb%`D&N{rTqo<%tv;ioLqST O0000 Date: Wed, 4 Sep 2019 10:30:05 +0200 Subject: [PATCH 1041/1148] Fix injection in User-Agent --- htdocs/main.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 19517973882..4738aa90419 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1775,7 +1775,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'; $dropdownBody.= '
'.$langs->trans("Session").''; - $dropdownBody.= '
'.$langs->trans("IPAddress").': '.$_SERVER["REMOTE_ADDR"]; + $dropdownBody.= '
'.$langs->trans("IPAddress").': '.dol_escape_htmltag($_SERVER["REMOTE_ADDR"]); if (! empty($conf->global->MAIN_MODULE_MULTICOMPANY)) $dropdownBody.= '
'.$langs->trans("ConnectedOnMultiCompany").': '.$conf->entity.' (user entity '.$user->entity.')'; $dropdownBody.= '
'.$langs->trans("AuthenticationMode").': '.$_SESSION["dol_authmode"].(empty($dolibarr_main_demo)?'':' (demo)'); $dropdownBody.= '
'.$langs->trans("ConnectedSince").': '.dol_print_date($user->datelastlogin, "dayhour", 'tzuser'); @@ -1784,7 +1784,7 @@ function top_menu_user(User $user, Translate $langs) $dropdownBody.= '
'.$langs->trans("CurrentMenuManager").': '.$menumanager->name; $langFlag=picto_from_langcode($langs->getDefaultLang()); $dropdownBody.= '
'.$langs->trans("CurrentUserLanguage").': '.($langFlag?$langFlag.' ':'').$langs->getDefaultLang(); - $dropdownBody.= '
'.$langs->trans("Browser").': '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.$_SERVER['HTTP_USER_AGENT'].')'; + $dropdownBody.= '
'.$langs->trans("Browser").': '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.dol_escape_htmltag($_SERVER['HTTP_USER_AGENT']).')'; $dropdownBody.= '
'.$langs->trans("Layout").': '.$conf->browser->layout; $dropdownBody.= '
'.$langs->trans("Screen").': '.$_SESSION['dol_screenwidth'].' x '.$_SESSION['dol_screenheight']; if ($conf->browser->layout == 'phone') $dropdownBody.= '
'.$langs->trans("Phone").': '.$langs->trans("Yes"); From a3d417a40f791a9f74548781290eab66435d7337 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 11:21:41 +0200 Subject: [PATCH 1042/1148] Fix can't change approver of a leave request in some cases --- htdocs/holiday/card.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 87305a19fd4..2207148e4ea 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -122,7 +122,7 @@ if ($action == 'create') elseif ($starthalfday == 'afternoon') $halfday=-1; elseif ($endhalfday == 'morning') $halfday=1; - $valideur = GETPOST('valideur'); + $valideur = GETPOST('valideur', 'int'); $description = trim(GETPOST('description')); // If no type @@ -270,8 +270,8 @@ if ($action == 'update' && ! GETPOSTISSET('savevalidator')) // If this is the requestor or has read/write rights if ($cancreate) { - $valideur = $_POST['valideur']; - $description = trim($_POST['description']); + $valideur = GETPOST('valideur', 'int'); + $description = trim(GETPOST('description', 'none')); // If no start date if (empty($_POST['date_debut_'])) { @@ -1297,7 +1297,8 @@ else if (empty($include_users)) print img_warning().' '.$langs->trans("NobodyHasPermissionToValidateHolidays"); else { - $s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), ($user->admin ? '' : array($user->id)), 0, $include_users); + $arrayofvalidatorstoexclude = (($user->admin || ($user->id != $userRequest->id))? '' : array($user->id)); // Nobody if we are admin or if we are not the user of the leave. + $s=$form->select_dolusers($object->fk_validator, "valideur", (($action == 'editvalidator') ? 0 : 1), $arrayofvalidatorstoexclude, 0, $include_users); print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate")); } if ($action == 'editvalidator') From f2f2621da8dae5fcbe9b6a9f2df0341e5c9701e7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 11:33:07 +0200 Subject: [PATCH 1043/1148] FIX Can't save setup of mailman module --- htdocs/admin/mailman.php | 11 ++++++++++- htdocs/admin/spip.php | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/htdocs/admin/mailman.php b/htdocs/admin/mailman.php index 4ee9e214890..a2403315614 100644 --- a/htdocs/admin/mailman.php +++ b/htdocs/admin/mailman.php @@ -158,8 +158,10 @@ $head = mailmanspip_admin_prepare_head(); if (! empty($conf->global->ADHERENT_USE_MAILMAN)) { print '

'; + print ''; + print ''; - dol_fiche_head($head, 'mailman', $langs->trans("Setup"), 0, 'user'); + dol_fiche_head($head, 'mailman', $langs->trans("Setup"), -1, 'user'); //$link=img_picto($langs->trans("Active"),'tick').' '; $link=''; @@ -227,14 +229,21 @@ else if (! empty($conf->global->ADHERENT_USE_MAILMAN)) { print ''; + print ''; print ''; + print $langs->trans("TestSubscribe").'
'; print $langs->trans("EMail").'
'; + print ''; + print '
'; + print ''; print ''; + print $langs->trans("TestUnSubscribe").'
'; print $langs->trans("EMail").'
'; + print '
'; } diff --git a/htdocs/admin/spip.php b/htdocs/admin/spip.php index e0b4b986969..579363395f3 100644 --- a/htdocs/admin/spip.php +++ b/htdocs/admin/spip.php @@ -123,8 +123,10 @@ $head = mailmanspip_admin_prepare_head(); if (! empty($conf->global->ADHERENT_USE_SPIP)) { print '
'; + print ''; + print ''; - dol_fiche_head($head, 'spip', $langs->trans("Setup"), 0, 'user'); + dol_fiche_head($head, 'spip', $langs->trans("Setup"), -1, 'user'); //$link=img_picto($langs->trans("Active"),'tick').' '; $link=''; From 7d5877b8b1982ef06f0e140f56b8a983dc92d2e0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 13:50:10 +0200 Subject: [PATCH 1044/1148] Doxygen --- htdocs/core/modules/modDebugBar.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modDebugBar.class.php b/htdocs/core/modules/modDebugBar.class.php index 8d51a102251..b69406ffb57 100644 --- a/htdocs/core/modules/modDebugBar.class.php +++ b/htdocs/core/modules/modDebugBar.class.php @@ -16,7 +16,7 @@ */ /** - * \defgroup debugbar Debug bar + * \defgroup debugbar Module Debug bar * \brief debugbar module descriptor. * * \file htdocs/core/modules/modDebugBar.class.php From 750182f9cdbc5131ee405c656a271a51e0e10882 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 13:54:36 +0200 Subject: [PATCH 1045/1148] Removed deprecated method actioncomm->add(), use create() instead --- ChangeLog | 2 +- htdocs/comm/action/class/actioncomm.class.php | 14 -------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60cb7dd6ecf..2e0bbf78352 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,7 +19,7 @@ Following changes may create regressions for some external modules, but were nec * Rename 'module_part' parameter into 'modulepart' into document APIs, for consistency. * The deprecated method get_OutstandingBill has been removed. You can use getOutstandingBills() instead. * The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). - +* Removed deprecated method actioncomm->add(), use create() instead ***** ChangeLog for 10.0.1 compared to 10.0.0 ***** diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index 2caff8d242c..12926f9b360 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -497,20 +497,6 @@ class ActionComm extends CommonObject } } - /** - * Add an action/event into database. - * $this->type_id OR $this->type_code must be set. - * - * @param User $user Object user making action - * @param int $notrigger 1 = disable triggers, 0 = enable triggers - * @return int Id of created event, < 0 if KO - * @deprecated Use create instead - */ - public function add(User $user, $notrigger = 0) - { - return $this->create($user, $notrigger); - } - /** * Load an object from its id and create a new one in database * From 1950952b058f7ce749255ffe4f70db60fbb145c7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 15:11:06 +0200 Subject: [PATCH 1046/1148] Missing label --- htdocs/core/modules/modTicket.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php index e16b6e87fd0..620c1639901 100644 --- a/htdocs/core/modules/modTicket.class.php +++ b/htdocs/core/modules/modTicket.class.php @@ -19,6 +19,7 @@ /** * \defgroup ticket Module Ticket + * \brief Module for ticket and request management. * \file core/modules/modTicket.class.php * \ingroup ticket * \brief Description and activation file for module Ticket From 7aaf3ac6293d9618f638a68bc43799c767b90d6a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 15:41:09 +0200 Subject: [PATCH 1047/1148] Typo --- htdocs/install/mysql/tables/llx_user.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql index c82669df7cc..ac29410873a 100644 --- a/htdocs/install/mysql/tables/llx_user.sql +++ b/htdocs/install/mysql/tables/llx_user.sql @@ -36,7 +36,7 @@ create table llx_user pass_encoding varchar(24), pass varchar(128), pass_crypted varchar(128), - pass_temp varchar(128), -- temporary password when asked for forget password or 'hashtoallowreset:YYYMMDDHHMMSS' (where date is max date of validaity) + pass_temp varchar(128), -- temporary password when asked for forget password or 'hashtoallowreset:YYYMMDDHHMMSS' (where date is max date of validity) api_key varchar(128), -- key to use REST API by this user gender varchar(10), civility varchar(6), From 9666200d6b94a6b959d5c0f287f9fafd877404bc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 4 Sep 2019 19:55:15 +0200 Subject: [PATCH 1048/1148] Enhance error management --- htdocs/core/lib/files.lib.php | 32 ++++++++++++++++++++++++-------- test/phpunit/FilesLibTest.php | 8 +++++--- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 83d7f6f7614..a5f97b3fa3a 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1884,14 +1884,16 @@ function dol_convert_file($fileinput, $ext = 'png', $fileoutput = '', $page = '' /** - * Compress a file + * Compress a file. + * An error string may be returned into parameters. * * @param string $inputfile Source file name * @param string $outputfile Target file name * @param string $mode 'gz' or 'bz' or 'zip' + * @param string $errorstring Error string * @return int <0 if KO, >0 if OK */ -function dol_compress_file($inputfile, $outputfile, $mode = "gz") +function dol_compress_file($inputfile, $outputfile, $mode = "gz", &$errorstring = null) { global $conf; @@ -1916,8 +1918,12 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") $zip = new ZipArchive; if ($zip->open($outputfile, ZipArchive::CREATE) !== true) { - $errormsg="Failed to open file ".$outputfile."\n"; - dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); + $errorstring="dol_compress_file failure - Failed to open file ".$outputfile."\n"; + dol_syslog($errorstring, LOG_ERR); + + global $errormsg; + $errormsg = $errorstring; + return -6; } @@ -1961,12 +1967,16 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") { global $errormsg; $errormsg=$archive->errorInfo(true); - dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); + if ($archive->errorCode() == PCLZIP_ERR_WRITE_OPEN_FAIL) { - dol_syslog("dol_compress_file error PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR); + $errorstring = "PCLZIP_ERR_WRITE_OPEN_FAIL"; + dol_syslog("dol_compress_file error - archive->errorCode() = PCLZIP_ERR_WRITE_OPEN_FAIL", LOG_ERR); return -4; } + + $errorstring = "dol_compress_file error archive->errorCode = ".$archive->errorCode()." errormsg=".$errormsg; + dol_syslog("dol_compress_file failure - ".$errormsg, LOG_ERR); return -3; } else @@ -1986,7 +1996,11 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") } else { - dol_syslog("Try to zip with format ".$mode." with no handler for this format", LOG_ERR); + $errorstring = "Try to zip with format ".$mode." with no handler for this format"; + dol_syslog($errorstring, LOG_ERR); + + global $errormsg; + $errormsg = $errorstring; return -2; } } @@ -1994,8 +2008,10 @@ function dol_compress_file($inputfile, $outputfile, $mode = "gz") { global $langs, $errormsg; $langs->load("errors"); - dol_syslog("Failed to open file ".$outputfile, LOG_ERR); $errormsg=$langs->trans("ErrorFailedToWriteInDir"); + + $errorstring = "Failed to open file ".$outputfile; + dol_syslog($errorstring, LOG_ERR); return -1; } } diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php index cbe6ad948d8..f52b7d21304 100644 --- a/test/phpunit/FilesLibTest.php +++ b/test/phpunit/FilesLibTest.php @@ -409,13 +409,15 @@ class FilesLibTest extends PHPUnit\Framework\TestCase $count=0; dol_delete_dir_recursive($dirout, $count, 1); - $result=dol_compress_file($filein, $fileout, $format); + $errorstring = ''; + + $result=dol_compress_file($filein, $fileout, $format, $errorstring); print __METHOD__." result=".$result."\n"; - $this->assertGreaterThanOrEqual(1, $result); + $this->assertGreaterThanOrEqual(1, $result, "Pb with dol_compress_file ".$errorstring); $result=dol_uncompress($fileout, $dirout); print __METHOD__." result=".join(',', $result)."\n"; - $this->assertEquals(0, count($result)); + $this->assertEquals(0, count($result), "Pb with dol_uncompress_file"); } /** From ecaa2df0b8598efdc2c4034749cdf700237803c5 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Thu, 5 Sep 2019 10:37:09 +0200 Subject: [PATCH 1049/1148] FIX change "rowid" type in llx_accounting_account (bigint instead int) --- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 2 +- htdocs/install/mysql/tables/llx_accounting_account.sql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 8efe44db103..e19ccc1c73b 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -89,5 +89,5 @@ ALTER TABLE llx_projet ADD COLUMN usage_organize_event integer DEFAULT 0; UPDATE llx_projet set usage_opportunity = 1 WHERE fk_opp_status > 0; - +ALTER TABLE llx_accounting_account MODIFY COLUMN rowid bigint AUTO_INCREMENT; \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_accounting_account.sql b/htdocs/install/mysql/tables/llx_accounting_account.sql index 727965f6a9d..fd1962b6c09 100644 --- a/htdocs/install/mysql/tables/llx_accounting_account.sql +++ b/htdocs/install/mysql/tables/llx_accounting_account.sql @@ -21,7 +21,7 @@ create table llx_accounting_account ( - rowid integer AUTO_INCREMENT PRIMARY KEY, + rowid bigint AUTO_INCREMENT PRIMARY KEY, entity integer DEFAULT 1 NOT NULL, datec datetime, tms timestamp, From 9601f846cef60e264a7be699b348ffe5a419001b Mon Sep 17 00:00:00 2001 From: ptibogxiv Date: Thu, 5 Sep 2019 11:11:48 +0200 Subject: [PATCH 1050/1148] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index d0459e1e288..2211bf80118 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -383,6 +383,7 @@ class Stripe extends CommonObject { $metadata['dol_type'] = $object->element; $metadata['dol_id'] = $object->id; + if (isset($object->thirdparty->id)) $metadata['dol_thirdparty_id'] = $object->thirdparty->id; } $dataforintent = array( From 4fe141c9f1eb3e4999f87e9667bd4afe8c132d00 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Thu, 5 Sep 2019 12:05:50 +0200 Subject: [PATCH 1051/1148] FIX Nowrap missing on amount in boxes --- htdocs/core/boxes/box_activity.php | 6 +++--- htdocs/core/boxes/box_comptes.php | 2 +- htdocs/core/boxes/box_produits_alerte_stock.php | 4 ++-- htdocs/core/boxes/box_supplier_orders.php | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index 995ba93fb64..c313b6c526a 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -173,7 +173,7 @@ class box_activity extends ModeleBoxes $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( @@ -256,7 +256,7 @@ class box_activity extends ModeleBoxes $totalnb += $data[$j]->nb; $this->info_box_contents[$line][3] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency), ); $this->info_box_contents[$line][4] = array( @@ -340,7 +340,7 @@ class box_activity extends ModeleBoxes ); $this->info_box_contents[$line][3] = array( - 'td' => 'class="right"', + 'td' => 'class="nowrap right"', 'text' => price($data[$j]->Mnttot, 1, $langs, 0, 0, -1, $conf->currency) ); diff --git a/htdocs/core/boxes/box_comptes.php b/htdocs/core/boxes/box_comptes.php index 525562d308d..1928ac7cc94 100644 --- a/htdocs/core/boxes/box_comptes.php +++ b/htdocs/core/boxes/box_comptes.php @@ -134,7 +134,7 @@ class box_comptes extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowraponall"', 'text' => price($solde, 0, $langs, 0, -1, -1, $objp->currency_code) ); diff --git a/htdocs/core/boxes/box_produits_alerte_stock.php b/htdocs/core/boxes/box_produits_alerte_stock.php index d1381870338..165b6db0d6b 100644 --- a/htdocs/core/boxes/box_produits_alerte_stock.php +++ b/htdocs/core/boxes/box_produits_alerte_stock.php @@ -179,12 +179,12 @@ class box_produits_alerte_stock extends ModeleBoxes } $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowraponall"', 'text' => $price, ); $this->info_box_contents[$line][] = array( - 'td' => 'class="nowrap"', + 'td' => 'class="right"', 'text' => $price_base_type, ); diff --git a/htdocs/core/boxes/box_supplier_orders.php b/htdocs/core/boxes/box_supplier_orders.php index 34316cd1ad1..6874425db78 100644 --- a/htdocs/core/boxes/box_supplier_orders.php +++ b/htdocs/core/boxes/box_supplier_orders.php @@ -135,7 +135,7 @@ class box_supplier_orders extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => 'class="right"', + 'td' => 'class="right nowrap"', 'text' => price($objp->total_ht, 0, $langs, 0, -1, -1, $conf->currency), ); From 12868413bdaefd386e2fb8ac09ba9769cdc04336 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:33:49 +0200 Subject: [PATCH 1052/1148] Doxygen --- htdocs/core/modules/modDebugBar.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modDebugBar.class.php b/htdocs/core/modules/modDebugBar.class.php index 8d51a102251..b69406ffb57 100644 --- a/htdocs/core/modules/modDebugBar.class.php +++ b/htdocs/core/modules/modDebugBar.class.php @@ -16,7 +16,7 @@ */ /** - * \defgroup debugbar Debug bar + * \defgroup debugbar Module Debug bar * \brief debugbar module descriptor. * * \file htdocs/core/modules/modDebugBar.class.php From 3f121f07ccbd42958aa09edf68ac2a0df51f55d4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:38:38 +0200 Subject: [PATCH 1053/1148] Removed deprecated properties --- htdocs/contact/class/contact.class.php | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index e064b93504d..c73ceaf13ee 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -82,26 +82,11 @@ class Contact extends CommonObject public $civility_id; // In fact we store civility_code public $civility_code; - public $civility; + public $civility; public $address; public $zip; public $town; - /** - * @deprecated - * @see $state_id - */ - public $fk_departement; - /** - * @deprecated - * @see $state_code - */ - public $departement_code; - /** - * @deprecated - * @see $state - */ - public $departement; public $state_id; // Id of department public $state_code; // Code of department public $state; // Label of department From 1828872bd1007d4a248d9617816351ce732a885a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:38:38 +0200 Subject: [PATCH 1054/1148] Removed deprecated properties --- htdocs/contact/class/contact.class.php | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index bae8632e289..18da6bf476d 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -81,26 +81,11 @@ class Contact extends CommonObject public $civility_id; // In fact we store civility_code public $civility_code; - public $civility; + public $civility; public $address; public $zip; public $town; - /** - * @deprecated - * @see $state_id - */ - public $fk_departement; - /** - * @deprecated - * @see $state_code - */ - public $departement_code; - /** - * @deprecated - * @see $state - */ - public $departement; public $state_id; // Id of department public $state_code; // Code of department public $state; // Label of department From 8d5105e29c88cc5a70704c393383ff6923e3df20 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:41:29 +0200 Subject: [PATCH 1055/1148] Remove deprecated field --- htdocs/holiday/class/holiday.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php index 66c212ef4c7..d767bcdc691 100644 --- a/htdocs/holiday/class/holiday.class.php +++ b/htdocs/holiday/class/holiday.class.php @@ -376,7 +376,6 @@ class Holiday extends CommonObject $obj = $this->db->fetch_object($resql); $this->id = $obj->rowid; - $this->rowid = $obj->rowid; // deprecated $this->ref = ($obj->ref?$obj->ref:$obj->rowid); $this->fk_user = $obj->fk_user; $this->date_create = $this->db->jdate($obj->date_create); From f4a7714f82c4940b5fc42e4830f49be8494fe1f0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:42:58 +0200 Subject: [PATCH 1056/1148] Fix bad log --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index a5f97b3fa3a..0c72fe35fab 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -2089,7 +2089,7 @@ function dol_compress_dir($inputdir, $outputfile, $mode = "zip", $excludefiles = { $foundhandler=0; - dol_syslog("Try to zip dir ".$inputdir." into ".$outputdir." mode=".$mode); + dol_syslog("Try to zip dir ".$inputdir." into ".$outputfile." mode=".$mode); if (! dol_is_dir(dirname($outputfile)) || ! is_writable(dirname($outputfile))) { From 4a19f510fd8820e3327b6c76151c5ebb30bd2bea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 13:58:35 +0200 Subject: [PATCH 1057/1148] Fix scrutinizer reports --- htdocs/contrat/services_list.php | 2 +- htdocs/core/lib/asset.lib.php | 11 ++++++----- htdocs/core/lib/contract.lib.php | 6 ++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php index e86433af85d..9371a9ea835 100644 --- a/htdocs/contrat/services_list.php +++ b/htdocs/contrat/services_list.php @@ -705,7 +705,7 @@ while ($i < min($num, $limit)) print ''; if ($obj->cstatut == 0) // If contract is draft, we say line is also draft { - print $contractstatic->LibStatut(0, 5, ($obj->date_fin_validite && $db->jdate($obj->date_fin_validite) < $now)); + print $contractstatic->LibStatut(0, 5); } else { diff --git a/htdocs/core/lib/asset.lib.php b/htdocs/core/lib/asset.lib.php index b9890533a00..8e8b561ac8e 100644 --- a/htdocs/core/lib/asset.lib.php +++ b/htdocs/core/lib/asset.lib.php @@ -48,7 +48,7 @@ function asset_admin_prepare_head() //$this->tabs = array( // 'entity:-tabname:Title:@assets:/asset/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'assets_admin'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'assets_admin'); $head[$h][0] = DOL_URL_ROOT . '/asset/admin/assets_extrafields.php'; $head[$h][1] = $langs->trans("ExtraFields"); @@ -60,7 +60,7 @@ function asset_admin_prepare_head() $head[$h][2] = 'attributes_type'; $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'assets_admin', 'remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'assets_admin', 'remove'); return $head; } @@ -68,11 +68,12 @@ function asset_admin_prepare_head() /** * Prepare admin pages header * + * @param Contrat $object Object related to tabs * @return array head array with tabs */ -function asset_prepare_head() +function asset_prepare_head(Asset $object) { - global $langs, $conf; + global $db, $langs, $conf; $langs->load("assets"); @@ -96,7 +97,7 @@ function asset_prepare_head() require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->assets->dir_output . '/' . get_exdir($filename, 2, 0, 1, $object, 'assets'). '/'. dol_sanitizeFileName($object->ref); + $upload_dir = $conf->assets->dir_output . '/' . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/asset/document.php?id='.$object->id; diff --git a/htdocs/core/lib/contract.lib.php b/htdocs/core/lib/contract.lib.php index d1a4a07689e..80609f524d4 100644 --- a/htdocs/core/lib/contract.lib.php +++ b/htdocs/core/lib/contract.lib.php @@ -101,7 +101,7 @@ function contract_prepare_head(Contrat $object) */ function contract_admin_prepare_head() { - global $langs, $conf, $user; + global $langs, $conf; $h = 0; $head = array(); @@ -127,9 +127,7 @@ function contract_admin_prepare_head() $head[$h][2] = 'attributeslines'; $h++; - - complete_head_from_modules($conf, $langs, null, $head, $h, 'contract_admin', 'remove'); - return $head; + return $head; } From f893854986d74ddeae506ae22cd15eb99f53572f Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 14:24:13 +0200 Subject: [PATCH 1058/1148] Fix remove warnings --- htdocs/contact/class/contact.class.php | 2 +- htdocs/core/lib/agenda.lib.php | 6 ++---- htdocs/core/lib/bank.lib.php | 1 - htdocs/core/lib/donation.lib.php | 2 +- htdocs/core/lib/multicurrency.lib.php | 2 +- htdocs/core/lib/ticket.lib.php | 2 +- htdocs/datapolicy/lib/datapolicy.lib.php | 4 +++- htdocs/dav/dav.lib.php | 4 ++-- htdocs/emailcollector/lib/emailcollector.lib.php | 2 ++ htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php | 2 ++ htdocs/product/inventory/lib/inventory.lib.php | 2 +- htdocs/takepos/lib/takepos.lib.php | 4 +++- htdocs/website/lib/websiteaccount.lib.php | 2 ++ 13 files changed, 21 insertions(+), 14 deletions(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index c73ceaf13ee..ebfafa698b7 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -1008,7 +1008,7 @@ class Contact extends CommonObject // Removed extrafields if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) { // For avoid conflicts if trigger used - $result=$this->deleteExtraFields($this); + $result=$this->deleteExtraFields(); if ($result < 0) $error++; } diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index c6bc31956d6..9316dcbfeb6 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -549,15 +549,13 @@ function calendars_prepare_head($param) $h++; - $object=new stdClass(); - // Show more tabs from modules // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'agenda'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'agenda'); - complete_head_from_modules($conf, $langs, $object, $head, $h, 'agenda', 'remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'agenda', 'remove'); return $head; } diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php index f117bc24daf..54d1c491878 100644 --- a/htdocs/core/lib/bank.lib.php +++ b/htdocs/core/lib/bank.lib.php @@ -163,7 +163,6 @@ function bank_admin_prepare_head($object) */ function various_payment_prepare_head($object) { - global $db, $langs, $conf; $h = 0; diff --git a/htdocs/core/lib/donation.lib.php b/htdocs/core/lib/donation.lib.php index 91c41ffcced..7b78ac96b91 100644 --- a/htdocs/core/lib/donation.lib.php +++ b/htdocs/core/lib/donation.lib.php @@ -80,7 +80,7 @@ function donation_prepare_head($object) require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php'; - $upload_dir = $conf->don->dir_output . '/' . get_exdir($filename, 2, 0, 1, $object, 'donation'). '/'. dol_sanitizeFileName($object->ref); + $upload_dir = $conf->don->dir_output . '/' . dol_sanitizeFileName($object->ref); $nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$')); $nbLinks=Link::count($db, $object->element, $object->id); $head[$h][0] = DOL_URL_ROOT.'/don/document.php?id='.$object->id; diff --git a/htdocs/core/lib/multicurrency.lib.php b/htdocs/core/lib/multicurrency.lib.php index 339ca2d01bc..e44511fcb97 100644 --- a/htdocs/core/lib/multicurrency.lib.php +++ b/htdocs/core/lib/multicurrency.lib.php @@ -40,7 +40,7 @@ function multicurrencyAdminPrepareHead() $head[$h][2] = 'settings'; $h++; - complete_head_from_modules($conf, $langs, $object, $head, $h, 'multicurrency'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'multicurrency'); return $head; } diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php index 84be86f4a15..c1d42bf25b7 100644 --- a/htdocs/core/lib/ticket.lib.php +++ b/htdocs/core/lib/ticket.lib.php @@ -59,7 +59,7 @@ function ticketAdminPrepareHead() //$this->tabs = array( // 'entity:-tabname:Title:@ticket:/ticket/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'ticketadmin'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'ticketadmin'); return $head; } diff --git a/htdocs/datapolicy/lib/datapolicy.lib.php b/htdocs/datapolicy/lib/datapolicy.lib.php index b72417d7ff9..1ea83696a1b 100644 --- a/htdocs/datapolicy/lib/datapolicy.lib.php +++ b/htdocs/datapolicy/lib/datapolicy.lib.php @@ -48,7 +48,9 @@ function datapolicyAdminPrepareHead() $h++; } - complete_head_from_modules($conf, $langs, $object, $head, $h, 'datapolicy'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'datapolicy'); + + complete_head_from_modules($conf, $langs, null, $head, $h, 'datapolicy', 'remove'); return $head; } diff --git a/htdocs/dav/dav.lib.php b/htdocs/dav/dav.lib.php index 3c213f400c1..058fc635fc7 100644 --- a/htdocs/dav/dav.lib.php +++ b/htdocs/dav/dav.lib.php @@ -63,9 +63,9 @@ function dav_admin_prepare_head() // Entries must be declared in modules descriptor with line // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab // $this->tabs = array('entity:-tabname); to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'admindav'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'admindav'); - complete_head_from_modules($conf, $langs, $object, $head, $h, 'admindav', 'remove'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'admindav', 'remove'); return $head; } diff --git a/htdocs/emailcollector/lib/emailcollector.lib.php b/htdocs/emailcollector/lib/emailcollector.lib.php index e7cc3bcb3a0..e9cb3984819 100644 --- a/htdocs/emailcollector/lib/emailcollector.lib.php +++ b/htdocs/emailcollector/lib/emailcollector.lib.php @@ -81,5 +81,7 @@ function emailcollectorPrepareHead($object) //); // to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector', 'remove'); + return $head; } diff --git a/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php b/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php index e1af0259062..d9ea2f110cd 100644 --- a/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php +++ b/htdocs/modulebuilder/template/lib/mymodule_myobject.lib.php @@ -79,5 +79,7 @@ function myobjectPrepareHead($object) //); // to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'myobject@mymodule'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'myobject@mymodule', 'remove'); + return $head; } diff --git a/htdocs/product/inventory/lib/inventory.lib.php b/htdocs/product/inventory/lib/inventory.lib.php index 175c772cb61..ad2e8193449 100644 --- a/htdocs/product/inventory/lib/inventory.lib.php +++ b/htdocs/product/inventory/lib/inventory.lib.php @@ -50,7 +50,7 @@ function inventoryAdminPrepareHead() //$this->tabs = array( // 'entity:-tabname:Title:@inventory:/inventory/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'inventory'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'inventory'); return $head; } diff --git a/htdocs/takepos/lib/takepos.lib.php b/htdocs/takepos/lib/takepos.lib.php index 691f118d2cb..024e1fb9ae5 100644 --- a/htdocs/takepos/lib/takepos.lib.php +++ b/htdocs/takepos/lib/takepos.lib.php @@ -52,7 +52,9 @@ function takeposAdminPrepareHead() //$this->tabs = array( // 'entity:-tabname:Title:@takepos:/takepos/mypage.php?id=__ID__' //); // to remove a tab - complete_head_from_modules($conf, $langs, $object, $head, $h, 'takepos'); + complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos'); + + complete_head_from_modules($conf, $langs, null, $head, $h, 'takepos', 'remove'); return $head; } diff --git a/htdocs/website/lib/websiteaccount.lib.php b/htdocs/website/lib/websiteaccount.lib.php index 0b63be45188..8ade5eee288 100644 --- a/htdocs/website/lib/websiteaccount.lib.php +++ b/htdocs/website/lib/websiteaccount.lib.php @@ -79,5 +79,7 @@ function websiteaccountPrepareHead($object) //); // to remove a tab complete_head_from_modules($conf, $langs, $object, $head, $h, 'websiteaccount@website'); + complete_head_from_modules($conf, $langs, $object, $head, $h, 'websiteaccount@website', 'remove'); + return $head; } From f62c79c4455fa8bc71bdc88f8a3a1f5d1029acc5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 14:26:18 +0200 Subject: [PATCH 1059/1148] Fix object user must be a param of delete method --- htdocs/core/class/link.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php index 283b296b3e3..4ad6b9d5d9a 100644 --- a/htdocs/core/class/link.class.php +++ b/htdocs/core/class/link.class.php @@ -355,11 +355,12 @@ class Link extends CommonObject /** * Delete a link from database * - * @return int <0 if KO, 0 if nothing done, >0 if OK + * @param User $user Object suer + * @return int <0 if KO, 0 if nothing done, >0 if OK */ - public function delete() + public function delete($user) { - global $user, $langs, $conf; + global $langs, $conf; dol_syslog(get_class($this)."::delete", LOG_DEBUG); $error = 0; From 07e647ca10e6d5afe21faee4839df2356522be3b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 14:27:13 +0200 Subject: [PATCH 1060/1148] Fix sql outside transaction --- htdocs/core/class/link.class.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php index 4ad6b9d5d9a..a5242c597c4 100644 --- a/htdocs/core/class/link.class.php +++ b/htdocs/core/class/link.class.php @@ -365,13 +365,17 @@ class Link extends CommonObject dol_syslog(get_class($this)."::delete", LOG_DEBUG); $error = 0; + $this->db->begin(); + // Call trigger $result=$this->call_trigger('LINK_DELETE', $user); - if ($result < 0) return -1; + if ($result < 0) + { + $this->db->rollback(); + return -1; + } // End call triggers - $this->db->begin(); - // Remove link $sql = "DELETE FROM " . MAIN_DB_PREFIX . "links"; $sql.= " WHERE rowid = " . $this->id; From c816a41006a555d502344f3aa4b8e06628b6de71 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 15:00:46 +0200 Subject: [PATCH 1061/1148] Fix missing exit --- htdocs/externalsite/frames.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/externalsite/frames.php b/htdocs/externalsite/frames.php index eb8e06919d3..9c232cbe710 100644 --- a/htdocs/externalsite/frames.php +++ b/htdocs/externalsite/frames.php @@ -49,6 +49,7 @@ if (empty($keyforcontent) && empty($conf->global->EXTERNALSITE_URL)) llxHeader(); print '
'.$langs->trans('ExternalSiteModuleNotComplete').'
'; llxFooter(); + exit; } if (! empty($keyforcontent)) From 87c596a93409687b36a5ae0d591248ed9a95b364 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 15:58:54 +0200 Subject: [PATCH 1062/1148] Fix responsive --- htdocs/core/boxes/box_factures.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/boxes/box_factures.php b/htdocs/core/boxes/box_factures.php index 5aa7d0575c6..05ab5db50fd 100644 --- a/htdocs/core/boxes/box_factures.php +++ b/htdocs/core/boxes/box_factures.php @@ -156,7 +156,7 @@ class box_factures extends ModeleBoxes ); $this->info_box_contents[$line][] = array( - 'td' => '', + 'td' => 'class="tdoverflowmax200"', 'text' => $societestatic->getNomUrl(1, '', 40), 'asis' => 1, ); From 92e7d7bb26389c1633b7dd6bd7909507ac78f489 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:18:20 +0200 Subject: [PATCH 1063/1148] Fix duplicate translation --- htdocs/compta/localtax/quadri_detail.php | 2 +- htdocs/compta/tva/clients.php | 2 +- htdocs/compta/tva/quadri_detail.php | 2 +- htdocs/expensereport/class/expensereport.class.php | 2 +- htdocs/fourn/class/fournisseur.facture.class.php | 2 +- htdocs/langs/en_US/compta.lang | 2 +- htdocs/langs/en_US/main.lang | 1 + htdocs/langs/en_US/paybox.lang | 1 - 8 files changed, 7 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 4bbe5c723e1..54fa04d33a2 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -170,7 +170,7 @@ $amountcust=$langs->trans("AmountHT"); $vatcust=$langs->trans("VATReceived"); $namecust=$langs->trans("Name"); if ($mysoc->tva_assuj) { - $vatcust.=' ('.$langs->trans("ToPay").')'; + $vatcust.=' ('.$langs->trans("StatusToPay").')'; } // Suppliers invoices diff --git a/htdocs/compta/tva/clients.php b/htdocs/compta/tva/clients.php index e0775313dd3..e977b31e5e4 100644 --- a/htdocs/compta/tva/clients.php +++ b/htdocs/compta/tva/clients.php @@ -185,7 +185,7 @@ $productcust=$langs->trans("Description"); $namerate=$langs->trans("VATRate"); $amountcust=$langs->trans("AmountHT"); if ($mysoc->tva_assuj) { - $vatcust.=' ('.$langs->trans("ToPay").')'; + $vatcust.=' ('.$langs->trans("StatusToPay").')'; } $elementsup=$langs->trans("SuppliersInvoices"); $productsup=$langs->trans("Description"); diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php index c48bc385c53..26601308ccf 100644 --- a/htdocs/compta/tva/quadri_detail.php +++ b/htdocs/compta/tva/quadri_detail.php @@ -173,7 +173,7 @@ $amountcust=$langs->trans("AmountHT"); $vatcust=$langs->trans("VATReceived"); $namecust=$langs->trans("Name"); if ($mysoc->tva_assuj) { - $vatcust.=' ('.$langs->trans("ToPay").')'; + $vatcust.=' ('.$langs->trans("VATToPay").')'; } // Suppliers invoices diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php index 9b1a62ed402..32915339297 100644 --- a/htdocs/expensereport/class/expensereport.class.php +++ b/htdocs/expensereport/class/expensereport.class.php @@ -2340,7 +2340,7 @@ class ExpenseReport extends CommonObject { $response->warning_delay=$conf->expensereport->payment->warning_delay/60/60/24; $response->label=$langs->trans("ExpenseReportsToPay"); - $response->labelShort=$langs->trans("ToPay"); + $response->labelShort=$langs->trans("StatusToPay"); $response->url=DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm&statut=5'; } $response->img=img_object('', "trip"); diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php index a3e6666f412..ac19cac8a34 100644 --- a/htdocs/fourn/class/fournisseur.facture.class.php +++ b/htdocs/fourn/class/fournisseur.facture.class.php @@ -2203,7 +2203,7 @@ class FactureFournisseur extends CommonInvoice $response = new WorkboardResponse(); $response->warning_delay=$conf->facture->fournisseur->warning_delay/60/60/24; $response->label=$langs->trans("SupplierBillsToPay"); - $response->labelShort=$langs->trans("ToPay"); + $response->labelShort=$langs->trans("StatusToPay"); $response->url=DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills'; $response->img=img_object($langs->trans("Bills"), "bill"); diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang index 9a5f9768d24..42d88f3f722 100644 --- a/htdocs/langs/en_US/compta.lang +++ b/htdocs/langs/en_US/compta.lang @@ -63,7 +63,7 @@ LT2SupplierES=IRPF purchases LT2CustomerIN=SGST sales LT2SupplierIN=SGST purchases VATCollected=VAT collected -ToPay=To pay +StatusToPay=To pay SpecialExpensesArea=Area for all special payments SocialContribution=Social or fiscal tax SocialContributions=Social or fiscal taxes diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 5c3e30967de..397e562e265 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -412,6 +412,7 @@ DefaultTaxRate=Default tax rate Average=Average Sum=Sum Delta=Delta +StatusToPay=To pay RemainToPay=Remain to pay Module=Module/Application Modules=Modules/Applications diff --git a/htdocs/langs/en_US/paybox.lang b/htdocs/langs/en_US/paybox.lang index a4eee3680af..35216661140 100644 --- a/htdocs/langs/en_US/paybox.lang +++ b/htdocs/langs/en_US/paybox.lang @@ -11,7 +11,6 @@ YourEMail=Email to receive payment confirmation Creditor=Creditor PaymentCode=Payment code PayBoxDoPayment=Pay with Paybox -ToPay=Do payment YouWillBeRedirectedOnPayBox=You will be redirected on secured Paybox page to input you credit card information Continue=Next ToOfferALinkForOnlinePayment=URL for %s payment From 8e7f83653400d01d98f813f5170849312868b86c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:23:04 +0200 Subject: [PATCH 1064/1148] Fix trans --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index f59f4449b8e..9b8c6f04c51 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1851,7 +1851,7 @@ SeveralLangugeVariatFound=Several language variants found RemoveSpecialChars=Remove special characters COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX) COMPANY_DIGITARIA_CLEAN_REGEX=Regex filter to clean value (COMPANY_DIGITARIA_CLEAN_REGEX) -COMPANY_DIGITARIA_UNIQUE_CODE=Unauthorized double +COMPANY_DIGITARIA_UNIQUE_CODE=Duplicate not allowed GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact) GDPRContactDesc=If you store data about European companies/citizens, you can name the contact who is responsible for the General Data Protection Regulation here HelpOnTooltip=Help text to show on tooltip From 3802734212a282999190a3e47003ceff63aa60fc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:37:30 +0200 Subject: [PATCH 1065/1148] fix --- build/flatpack/org.flatpak.Dolibarr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/flatpack/org.flatpak.Dolibarr.json b/build/flatpack/org.flatpak.Dolibarr.json index 9e2135cf0a3..69140d32372 100644 --- a/build/flatpack/org.flatpak.Dolibarr.json +++ b/build/flatpack/org.flatpak.Dolibarr.json @@ -1 +1 @@ -Help wanted... \ No newline at end of file +"Help wanted..." \ No newline at end of file From 50957ab621e1a6b759d779a1ce2b081f7b3c1155 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 16:51:20 +0200 Subject: [PATCH 1066/1148] Sync transifex --- htdocs/langs/en_AU/admin.lang | 4 ---- htdocs/langs/en_AU/withdrawals.lang | 2 -- htdocs/langs/en_CA/admin.lang | 4 ---- htdocs/langs/en_GB/admin.lang | 4 ---- htdocs/langs/en_GB/withdrawals.lang | 1 - htdocs/langs/en_IN/admin.lang | 4 ---- htdocs/langs/es_CL/compta.lang | 1 - htdocs/langs/es_CO/compta.lang | 1 - htdocs/langs/fr_BE/admin.lang | 4 ---- htdocs/langs/fr_BE/withdrawals.lang | 1 - htdocs/langs/fr_CA/admin.lang | 4 ---- htdocs/langs/fr_CA/withdrawals.lang | 1 - htdocs/langs/fr_FR/admin.lang | 8 +++++-- htdocs/langs/fr_FR/bills.lang | 6 ++--- htdocs/langs/fr_FR/compta.lang | 2 +- htdocs/langs/fr_FR/cron.lang | 2 +- htdocs/langs/fr_FR/dict.lang | 34 +++++++++++++-------------- htdocs/langs/fr_FR/holiday.lang | 1 + htdocs/langs/fr_FR/main.lang | 3 +-- htdocs/langs/fr_FR/modulebuilder.lang | 1 + htdocs/langs/fr_FR/paybox.lang | 1 - htdocs/langs/fr_FR/products.lang | 6 ++++- htdocs/langs/fr_FR/website.lang | 4 ++++ 23 files changed, 40 insertions(+), 59 deletions(-) delete mode 100644 htdocs/langs/en_AU/withdrawals.lang diff --git a/htdocs/langs/en_AU/admin.lang b/htdocs/langs/en_AU/admin.lang index 447918b3b95..f792eabe51a 100644 --- a/htdocs/langs/en_AU/admin.lang +++ b/htdocs/langs/en_AU/admin.lang @@ -1,11 +1,7 @@ # Dolibarr language file - Source file is en_US - admin OldVATRates=Old GST rate NewVATRates=New GST rate -Module600Name=Notifications on business event DictionaryVAT=GST Rates or Sales Tax Rates OptionVatMode=GST due -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications LinkColor=Colour of links OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_AU/withdrawals.lang b/htdocs/langs/en_AU/withdrawals.lang deleted file mode 100644 index 967d1f20411..00000000000 --- a/htdocs/langs/en_AU/withdrawals.lang +++ /dev/null @@ -1,2 +0,0 @@ -# Dolibarr language file - Source file is en_US - withdrawals -RUM=Unique Mandate Reference (UMR) diff --git a/htdocs/langs/en_CA/admin.lang b/htdocs/langs/en_CA/admin.lang index ae0ffe7f7c7..e5e33b73dd6 100644 --- a/htdocs/langs/en_CA/admin.lang +++ b/htdocs/langs/en_CA/admin.lang @@ -1,10 +1,6 @@ # Dolibarr language file - Source file is en_US - admin -Module600Name=Notifications on business event LocalTax1Management=PST Management CompanyZip=Postal code LDAPFieldZip=Postal code -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications FormatZip=Postal code OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang index 3f23aecf4be..29af3e502f6 100644 --- a/htdocs/langs/en_GB/admin.lang +++ b/htdocs/langs/en_GB/admin.lang @@ -41,14 +41,10 @@ UMaskExplanation=This parameter allows you to define permissions set by default ListOfDirectories=List of OpenDocument template directories ListOfDirectoriesForModelGenODT=List of directories containing template files in OpenDocument format.

Put here full path of directories.
Add a carriage return between each directory.
To add a directory of the GED module, add here DOL_DATA_ROOT/ecm/yourdirectoryname.

Files in those directories must end with .odt or .ods. FollowingSubstitutionKeysCanBeUsed=
To learn how to create your .odt document templates, before storing them in those directories, read wiki documentation: -Module600Name=Notifications on business event Module50200Name=PayPal DictionaryAccountancyJournal=Finance journals CompanyZip=Postcode LDAPFieldZip=Postcode GenbarcodeLocation=Barcode generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".
For example: /usr/local/bin/genbarcode -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications FormatZip=Postcode OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/en_GB/withdrawals.lang b/htdocs/langs/en_GB/withdrawals.lang index b34ed7e8f1f..aaf36937580 100644 --- a/htdocs/langs/en_GB/withdrawals.lang +++ b/htdocs/langs/en_GB/withdrawals.lang @@ -15,7 +15,6 @@ NotifyCredit=Payment Credit WithdrawalFileNotCapable=Unable to generate Payment receipt file for your country %s (Your country is not supported) DoStandingOrdersBeforePayments=This tab allows you to request a direct debit payment order. Once done, go into menu Bank->Direct Debit orders to manage the direct debit payment order. When the payment order is closed, payment on the invoice will be automatically recorded, and the invoice closed if the outstanding balance is null. WithdrawalFile=Payment file -RUM=Unique Mandate Reference (UMR) WithdrawRequestAmount=The amount of Direct Debit request: WithdrawRequestErrorNilAmount=Unable to create a Direct Debit request for an empty amount. SEPALegalText=By signing this mandate form, you authorise (A) %s to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with the instructions from %s. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights regarding the above mandate are explained in a statement that you can obtain from your bank. diff --git a/htdocs/langs/en_IN/admin.lang b/htdocs/langs/en_IN/admin.lang index d19942507b6..e3cc80d5cea 100644 --- a/htdocs/langs/en_IN/admin.lang +++ b/htdocs/langs/en_IN/admin.lang @@ -1,7 +1,6 @@ # Dolibarr language file - Source file is en_US - admin Module20Name=Quotations Module20Desc=Management of quotations -Module600Name=Notifications on business event Permission21=Read quotations Permission22=Create/modify quotations Permission24=Validate quotations @@ -14,8 +13,5 @@ ProposalsNumberingModules=Quotation numbering models ProposalsPDFModules=Quotation documents models FreeLegalTextOnProposal=Free text on quotations WatermarkOnDraftProposal=Watermark on draft quotations (none if empty) -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications MailToSendProposal=Customer quotations OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/es_CL/compta.lang b/htdocs/langs/es_CL/compta.lang index 2aa54a47917..499f8f169ef 100644 --- a/htdocs/langs/es_CL/compta.lang +++ b/htdocs/langs/es_CL/compta.lang @@ -54,7 +54,6 @@ LT2CustomerES=Ventas de IRPF LT2SupplierES=Compras de IRPF LT2CustomerIN=Ventas de SGST VATCollected=IVA recaudado -ToPay=Pagar SpecialExpensesArea=Área para todos los pagos especiales SocialContribution=Impuesto social o fiscal LabelContrib=Contribución de etiqueta diff --git a/htdocs/langs/es_CO/compta.lang b/htdocs/langs/es_CO/compta.lang index c35bb1a59e1..be705a0bacc 100644 --- a/htdocs/langs/es_CO/compta.lang +++ b/htdocs/langs/es_CO/compta.lang @@ -50,7 +50,6 @@ LT2Supplier=Impuestos 3 compras LT2CustomerES=Ventas de IRPF LT2SupplierES=Compras IRPF VATCollected=IVA recaudado -ToPay=Pagar SpecialExpensesArea=Área para todos los pagos especiales. SocialContribution=Impuesto social o fiscal SocialContributions=Impuestos sociales o fiscales. diff --git a/htdocs/langs/fr_BE/admin.lang b/htdocs/langs/fr_BE/admin.lang index 7d99260c310..45352a47b83 100644 --- a/htdocs/langs/fr_BE/admin.lang +++ b/htdocs/langs/fr_BE/admin.lang @@ -16,9 +16,5 @@ FormToTestFileUploadForm=Formulaire pour tester l'upload de fichiers (selon la c IfModuleEnabled=Note: oui ne fonctionne que si le module %s est activé Module20Name=Propales Module30Name=Factures -Module600Name=Notifications on business event Target=Objectif -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications OperationParamDesc=Define values to use for action, or how to extract values. For example:
objproperty1=SET:abc
objproperty1=SET:a value with replacement of __objproperty1__
objproperty3=SETIFEMPTY:abc
objproperty4=EXTRACT:HEADER:X-Myheaderkey.*[^\\s]+(.*)
options_myextrafield=EXTRACT:SUBJECT:([^\\s]*)
object.objproperty5=EXTRACT:BODY:My company name is\\s([^\\s]*)

Use a ; char as separator to extract or set several properties. diff --git a/htdocs/langs/fr_BE/withdrawals.lang b/htdocs/langs/fr_BE/withdrawals.lang index 305bdf13d8e..eb336cadcc0 100644 --- a/htdocs/langs/fr_BE/withdrawals.lang +++ b/htdocs/langs/fr_BE/withdrawals.lang @@ -1,3 +1,2 @@ # Dolibarr language file - Source file is en_US - withdrawals StatusTrans=Envoyé -RUM=Unique Mandate Reference (UMR) diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang index 69ce614e588..5990a0d3fa8 100644 --- a/htdocs/langs/fr_CA/admin.lang +++ b/htdocs/langs/fr_CA/admin.lang @@ -89,7 +89,6 @@ WatermarkOnDraftExpenseReports=Filigrane sur les projets de rapports de dépense Module0Desc=Gestion des utilisateurs / employés et des groupes Module42Desc=Installations de journalisation (fichier, syslog, ...). Ces journaux sont à des fins techniques / de débogage. Module75Name=Notes de frais et déplacements -Module600Name=Notifications on business event Module2400Name=Evénements / Agenda Module2600Name=services API / Web ( serveur SOAP ) Module2600Desc=Active le serveur de Web Services de Dolibarr @@ -199,9 +198,6 @@ DeleteFiscalYear=Supprimer la période comptable ConfirmDeleteFiscalYear=Êtes-vous sûr de supprimer cette période comptable? ShowFiscalYear=Afficher la période comptable SalariesSetup=Configuration du module salariés -ListOfNotificationsPerUser=List of automatic notifications per user* -ListOfNotificationsPerUserOrContact=List of possible automatic notifications (on business event) available per user* or per contact** -ListOfFixedNotifications=List of automatic fixed notifications ConfFileMustContainCustom=L'installation ou la construction d'un module externe à partir de l'application doit sauvegarder les fichiers du module dans le répertoire %s. Pour que ce répertoire soit traité par Dolibarr, vous devez configurer votre conf / conf.php pour ajouter les 2 lignes de directive:
$ dolibarr_main_url_root_alt = '/ custom';
$ dolibarr_main_document_root_alt = '%s / custom'; HighlightLinesOnMouseHover=Mettez en surbrillance les lignes de table lorsque déplacement de la souris passe au-dessus PressF5AfterChangingThis=Appuyez sur CTRL + F5 sur le clavier ou effacez votre cache de navigateur après avoir changé cette valeur pour l'avoir efficace diff --git a/htdocs/langs/fr_CA/withdrawals.lang b/htdocs/langs/fr_CA/withdrawals.lang index d8dc0f4bd1a..f0875b5400f 100644 --- a/htdocs/langs/fr_CA/withdrawals.lang +++ b/htdocs/langs/fr_CA/withdrawals.lang @@ -53,7 +53,6 @@ DoStandingOrdersBeforePayments=Cet onglet vous permet de demander une commande d WithdrawalFile=Fichier de retrait SetToStatusSent=Définir le statut "Fichier envoyé" StatisticsByLineStatus=Statistiques par état des lignes -RUM=Unique Mandate Reference (UMR) RUMLong=Référence de mandat unique WithdrawMode=Mode de débit direct (FRST ou RECUR) WithdrawRequestAmount=Montant de la demande de débit direct: diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang index 7407396835b..20cdc9175d6 100644 --- a/htdocs/langs/fr_FR/admin.lang +++ b/htdocs/langs/fr_FR/admin.lang @@ -462,7 +462,9 @@ EnableAndSetupModuleCron=Si vous voulez avoir cette facture récurrente génér ModuleCompanyCodeCustomerAquarium=%s suivi d'un code client tiers pour un code comptable client ModuleCompanyCodeSupplierAquarium=%s suivi du code fournisseur tiers pour le code comptable fournisseur ModuleCompanyCodePanicum=Retourne un code comptable vide -ModuleCompanyCodeDigitaria=Renvoie un code comptable composé suivant le code tiers. Le code est composé du caractère 'C' en première position suivi des 5 premiers caractères du code tiers. +ModuleCompanyCodeDigitaria=Renvoie un code de comptabilisation composé en fonction du nom du tiers. Le code consiste en un préfixe pouvant être défini dans la première position, suivi d'un nombre de caractères défini dans le code tiers. +ModuleCompanyCodeCustomerDigitaria=%s suivi du nom de client tronqué du nombre de caractères: %s pour le code comptable client. +ModuleCompanyCodeSupplierDigitaria=%s suivi du nom du fournisseur tronqué du nombre de caractères: %s pour le code comptable fournisseur. Use3StepsApproval=Par défaut, les commandes fournisseurs nécessitent d'être créées et approuvées par 2 utilisateurs différents (une étape/utilisateur pour créer et une étape/utilisateur pour approuver. Notez que si un utilisateur à les deux permissions, ces deux actions sont effectuées en une seule fois). Cette option ajoute la nécessité d'une approbation par une troisième étape/utilisateur, si le montant de la commande est supérieur au montant d'une valeur définie (soit 3 étapes nécessaire: 1 =Validation, 2=Première approbation et 3=seconde approbation si le montant l'exige).
Laissez le champ vide si une seule approbation (2 étapes) est suffisante, placez une valeur très faible (0.1) si une deuxième approbation (3 étapes) est toujours exigée. UseDoubleApproval=Activer l'approbation en trois étapes si le montant HT est supérieur à... WarningPHPMail=Attention : Il est préférable de configurer les emails sortant pour utiliser le serveur email de votre fournisseur plutôt que la configuration par défaut. Certains fournisseurs email (comme Yahoo) ne permettent pas l'envoi d'e-mails depuis un autre serveur que le leur si l'adresse d'envoi utilisée est une adresse autre que la leur. Votre configuration actuelle utilise le serveur de l'application pour l'envoi d'e-mails et non le serveur de votre fournisseur de messagerie, aussi certains destinataires (ceux compatibles avec le protocole restrictif DMARC) demanderont au fournisseur d'email si ils peuvent accepter l'email et certains fournisseurs (comme Yahoo) peuvent répondre "non" car le serveur utilisé pour l'envoi n'est pas un serveur appartenant au fournisseur, aussi certains de vos emails envoyés peuvent ne pas etre accepté (faites attention aussi aux quotas de votre fournisseur d'email).
SI votre fournisseur d'email (comme Yahoo) impose cette restriction, vous devrez modifier votre configuration et opter pour l'autre méthode d'envoi "SMTP server" et saisir les identifiants SMTP de votre compte fournis par votre fournisseur d'e-mail (à demander à votre fournisseur d'e-mail) @@ -1846,8 +1848,10 @@ NothingToSetup=Aucune configuration particulière n'est requise pour ce module. SetToYesIfGroupIsComputationOfOtherGroups=Réglez ceci sur Oui si ce groupe est un calcul d'autres groupes EnterCalculationRuleIfPreviousFieldIsYes=Entrez la règle de calcul si le champ précédent a été défini sur Oui (par exemple, 'CODEGRP1 + CODEGRP2') SeveralLangugeVariatFound=Plusieurs variantes de langue trouvées -COMPANY_AQUARIUM_REMOVE_SPECIAL=Supprimer les caractères spéciaux +RemoveSpecialChars=Supprimer les caractères spéciaux COMPANY_AQUARIUM_CLEAN_REGEX=Filtre Regex pour nettoyer la valeur (COMPANY_AQUARIUM_CLEAN_REGEX) +COMPANY_DIGITARIA_CLEAN_REGEX=Filtre de regex pour nettoyer la valeur (COMPANY_DIGITARIA_CLEAN_REGEX) +COMPANY_DIGITARIA_UNIQUE_CODE=Doublons non autorisés GDPRContact=Responsable de la protection des données (DPO ou contact RGPD) GDPRContactDesc=Si vous stockez des données sur des entreprises / citoyens européens, vous pouvez stocker ici le contact responsable du RGPD. HelpOnTooltip=Texte d'aide à afficher dans l'info-bulle diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang index bdf515ca297..edb61e62406 100644 --- a/htdocs/langs/fr_FR/bills.lang +++ b/htdocs/langs/fr_FR/bills.lang @@ -496,9 +496,9 @@ CantRemovePaymentWithOneInvoicePaid=Suppression impossible quand il existe au mo ExpectedToPay=Paiement attendu CantRemoveConciliatedPayment=Suppression d'un paiement rapproché impossible PayedByThisPayment=Règlé par ce paiement -ClosePaidInvoicesAutomatically=Classifiez "Payée" toutes les factures standard, d'acompte ou de remplacement entièrement payées. -ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures avoirs entièrement remboursées. -ClosePaidContributionsAutomatically=Classer "payé" toutes les contributions sociales ou fiscales payées entièrement. +ClosePaidInvoicesAutomatically=Classer "Payée" toutes les factures standard, d'acompte ou de remplacement quand le paiement est complet. +ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures d'avoirs quand le remboursement est complet. +ClosePaidContributionsAutomatically=Classer automatiquement à "Payé" toutes les contributions sociales ou fiscales quand les sont complets. AllCompletelyPayedInvoiceWillBeClosed=Toutes les factures avec un reste à payer nul seront automatiquement fermées au statut "Payé". ToMakePayment=Payer ToMakePaymentBack=Rembourser diff --git a/htdocs/langs/fr_FR/compta.lang b/htdocs/langs/fr_FR/compta.lang index d557f85e726..7732a9c8dca 100644 --- a/htdocs/langs/fr_FR/compta.lang +++ b/htdocs/langs/fr_FR/compta.lang @@ -63,7 +63,7 @@ LT2SupplierES=IRPF achats LT2CustomerIN=TVA sur les ventes LT2SupplierIN=TVA sur les achats VATCollected=TVA récupérée -ToPay=A payer +StatusToPay=A payer SpecialExpensesArea=Espace des paiements particuliers SocialContribution=Charge sociale ou fiscale SocialContributions=Charges fiscales ou sociales diff --git a/htdocs/langs/fr_FR/cron.lang b/htdocs/langs/fr_FR/cron.lang index 4a80dd19ac4..38c6d34650d 100644 --- a/htdocs/langs/fr_FR/cron.lang +++ b/htdocs/langs/fr_FR/cron.lang @@ -76,7 +76,7 @@ CronType_method=Appelle d'une méthode d'une classe Dolibarr CronType_command=Commande terminal CronCannotLoadClass=Impossible de charger le fichier %s (pour charger l'objet %s) CronCannotLoadObject=Le fichier de classe %s a été chargé, mais l'objet %s n'a pas été trouvé dedans -UseMenuModuleToolsToAddCronJobs=Aller à la page "
Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmées et les modifier. +UseMenuModuleToolsToAddCronJobs=Aller à la page "Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmés et les modifier. JobDisabled=Travail désactivé MakeLocalDatabaseDumpShort=Sauvegarde locale de base MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nombre de fichiers de sauvegarde à garder diff --git a/htdocs/langs/fr_FR/dict.lang b/htdocs/langs/fr_FR/dict.lang index ac8d667c6e3..8da0543e2c2 100644 --- a/htdocs/langs/fr_FR/dict.lang +++ b/htdocs/langs/fr_FR/dict.lang @@ -332,27 +332,27 @@ PaperFormatCAP6=Format P6 Canadien ExpAutoCat=Voiture ExpCycloCat=2 roues ExpMotoCat=Moto -ExpAuto3CV=3 cv +ExpAuto3CV=3 CV ExpAuto4CV=4 CV -ExpAuto5CV=5 cv +ExpAuto5CV=5 CV ExpAuto6CV=6 CV -ExpAuto7CV=7 cv -ExpAuto8CV=8 cv +ExpAuto7CV=7 CV +ExpAuto8CV=8 CV ExpAuto9CV=9 CV -ExpAuto10CV=10 cv -ExpAuto11CV=11 cv -ExpAuto12CV=12 cv -ExpAuto3PCV=3 cv et plus +ExpAuto10CV=10 CV +ExpAuto11CV=11 CV +ExpAuto12CV=12 CV +ExpAuto3PCV=3 CV et plus ExpAuto4PCV=4 CV et plus -ExpAuto5PCV=5 cv et plus -ExpAuto6PCV=6 cv et plus -ExpAuto7PCV=7 cv et plus -ExpAuto8PCV=8 cv et plus -ExpAuto9PCV=9 cv et plus -ExpAuto10PCV=10 cv et plus -ExpAuto11PCV=11 cv et plus -ExpAuto12PCV=12 cv et plus -ExpAuto13PCV=13 cv et plus +ExpAuto5PCV=5 CV et plus +ExpAuto6PCV=6 CV et plus +ExpAuto7PCV=7 CV et plus +ExpAuto8PCV=8 CV et plus +ExpAuto9PCV=9 CV et plus +ExpAuto10PCV=10 CV et plus +ExpAuto11PCV=11 CV et plus +ExpAuto12PCV=12 CV et plus +ExpAuto13PCV=13 CV et plus ExpCyclo=Capacité inférieure à 50 cm3 ExpMoto12CV=2 roues 1 ou 2 cv ExpMoto345CV=2 roues 3, 4 ou 5 cv diff --git a/htdocs/langs/fr_FR/holiday.lang b/htdocs/langs/fr_FR/holiday.lang index 1dd59973aea..dfc6e33299a 100644 --- a/htdocs/langs/fr_FR/holiday.lang +++ b/htdocs/langs/fr_FR/holiday.lang @@ -18,6 +18,7 @@ ValidatorCP=Approbateur ListeCP=Liste des demandes de congés LeaveId=ID demande de congès ReviewedByCP=Sera approuvé par +UserID=ID Utilisateur UserForApprovalID=ID de l'utilisateur d'approbation UserForApprovalFirstname=Prénom de l'utilisateur d'approbation UserForApprovalLastname=Nom de l'utilisateur d'approbation diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang index ec5d8a471df..b375a3e16e0 100644 --- a/htdocs/langs/fr_FR/main.lang +++ b/htdocs/langs/fr_FR/main.lang @@ -348,8 +348,6 @@ PriceUTTC=P.U TTC Amount=Montant AmountInvoice=Montant facture AmountInvoiced=Montant facturé -AmountInvoicedHT=Montant HT facturé -AmountInvoicedTTC=Montant TTC facturé AmountPayment=Montant paiement AmountHTShort=Montant HT AmountTTCShort=Montant TTC @@ -414,6 +412,7 @@ DefaultTaxRate=Taux de taxe par défaut Average=Moyenne Sum=Somme Delta=Écart +StatusToPay=A payer RemainToPay=Reste à payer Module=Module/Application Modules=Modules/Applications diff --git a/htdocs/langs/fr_FR/modulebuilder.lang b/htdocs/langs/fr_FR/modulebuilder.lang index 8aad310a172..5efb048a4a2 100644 --- a/htdocs/langs/fr_FR/modulebuilder.lang +++ b/htdocs/langs/fr_FR/modulebuilder.lang @@ -105,6 +105,7 @@ InitStructureFromExistingTable=Construire la chaîne du tableau de structure d'u UseAboutPage=Désactiver la page "à propos de" UseDocFolder=Désactiver le dossier de la documentation UseSpecificReadme=Utiliser un fichier ReadMe spécifique +ContentOfREADMECustomized=Remarque: le contenu du fichier README.md a été remplacé par la valeur spécifique définie dans la configuration de ModuleBuilder. RealPathOfModule=Chemin réel du dossier du module ContentCantBeEmpty=Le contenu du fichier ne peut pas être vide WidgetDesc=Vous pouvez générer et éditer ici les widgets qui seront intégrés à votre module. diff --git a/htdocs/langs/fr_FR/paybox.lang b/htdocs/langs/fr_FR/paybox.lang index 2f0891171a5..6a79a2196a6 100644 --- a/htdocs/langs/fr_FR/paybox.lang +++ b/htdocs/langs/fr_FR/paybox.lang @@ -11,7 +11,6 @@ YourEMail=Email de confirmation du paiement Creditor=Bénéficiaire PaymentCode=Code de paiement PayBoxDoPayment=Payer avec PayBox -ToPay=Saisir règlement YouWillBeRedirectedOnPayBox=Vous serez redirigé vers la page sécurisée Paybox de saisie de votre carte bancaire Continue=Continuer ToOfferALinkForOnlinePayment=URL de paiement %s diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang index a1dc8e412a6..a0473ad8c76 100644 --- a/htdocs/langs/fr_FR/products.lang +++ b/htdocs/langs/fr_FR/products.lang @@ -29,10 +29,14 @@ ProductOrService=Produit ou Service ProductsAndServices=Produits et Services ProductsOrServices=Produits ou Services ProductsPipeServices=Produits | Services +ProductsOnSale=Produits en vente +ProductsOnPurchase=Produits en achat ProductsOnSaleOnly=Produits en vente uniquement ProductsOnPurchaseOnly=Produits seulement en achat ProductsNotOnSell=Produits hors vente et hors achat ProductsOnSellAndOnBuy=Produits en vente et en achat +ServicesOnSale=Services en vente +ServicesOnPurchase=Services en achat ServicesOnSaleOnly=Services en vente uniquement ServicesOnPurchaseOnly=Services en achat uniquement ServicesNotOnSell=Services hors vente et hors achat @@ -340,4 +344,4 @@ ErrorCopyProductCombinations=Une erreur s'est produite lors de la copie des vari ErrorDestinationProductNotFound=Produit destination non trouvé ErrorProductCombinationNotFound=Variante du produit non trouvé ActionAvailableOnVariantProductOnly=Action disponible uniquement sur la variante du produit -ProductsPricePerCustomer=Prix produit par clients \ No newline at end of file +ProductsPricePerCustomer=Prix produit par clients diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang index 0858738f1fb..608da399e3a 100644 --- a/htdocs/langs/fr_FR/website.lang +++ b/htdocs/langs/fr_FR/website.lang @@ -114,3 +114,7 @@ CSSContentTooltipHelp=Entrez ici le contenu CSS. Pour éviter tout conflit avec LinkAndScriptsHereAreNotLoadedInEditor=Avertissement: Ce contenu est affiché uniquement lorsque le site est accessible depuis un serveur. Il n'est pas utilisé en mode édition. Par conséquent, si vous devez charger des fichiers javascript également en mode édition, ajoutez simplement la balise 'script src=...' dans la page. Dynamiccontent=Exemple de page à contenu dynamique ImportSite=Importer modèle de site web +EditInLineOnOff=Mode 'Modifier en ligne' est %s +ShowSubContainersOnOff=Mode 'exécution dynamique' est %s +GlobalCSSorJS=Fichier CSS/JS/Header global du site Web +BackToHomePage=Retour à la page d'accueil... From 04174316c81d49825cb61c82b872c4435ff59826 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 17:57:21 +0200 Subject: [PATCH 1067/1148] Fix css for expanded dir in ecm --- htdocs/theme/eldy/global.inc.php | 3 +++ htdocs/theme/md/style.css.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index bc76fd445c3..a63ce37fdfe 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -2207,6 +2207,9 @@ img.toolbarbutton { height: 30px; } +li.expanded > a.fmdirlia.jqft.ecmjqft { + font-weight: bold !important; +} diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 983d0773f48..c621e909095 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2351,6 +2351,9 @@ img.toolbarbutton { height: 30px; } +li.expanded > a.fmdirlia.jqft.ecmjqft { + font-weight: bold !important; +} /* ============================================================================== */ From 37a32af7b00763642fc8be05ddf98e7c647230a9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 20:06:09 +0200 Subject: [PATCH 1068/1148] NEW Add dictionary to store public holidays. --- htdocs/admin/dict.php | 68 ++++++++++--------- htdocs/core/lib/admin.lib.php | 10 ++- .../mysql/data/llx_c_hrm_public_holiday.sql | 43 ++++++++++++ .../install/mysql/migration/10.0.0-11.0.0.sql | 17 ++++- .../install/mysql/tables/llx_c_field_list.sql | 1 - .../tables/llx_c_hrm_public_holiday.key.sql | 21 ++++++ .../mysql/tables/llx_c_hrm_public_holiday.sql | 31 +++++++++ htdocs/langs/en_US/hrm.lang | 1 + 8 files changed, 158 insertions(+), 34 deletions(-) create mode 100644 htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql create mode 100644 htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql create mode 100644 htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index ee90a0638fb..2c6b41b7796 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -88,7 +88,7 @@ $hookmanager->initHooks(array('admin')); // Put here declaration of dictionaries properties // Sort order to show dictionary (0 is space). All other dictionaries (added by modules) will be at end of this. -$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); +$taborder=array(9,0,4,3,2,0,1,8,19,16,27,0,5,11,0,32,33,34,0,6,0,29,0,7,24,28,17,35,36,0,10,23,12,13,0,14,0,22,20,18,21,0,15,30,0,37,0,25,0); // Name of SQL tables of dictionaries $tabname=array(); @@ -123,9 +123,10 @@ $tabname[28]= MAIN_DB_PREFIX."c_holiday_types"; $tabname[29]= MAIN_DB_PREFIX."c_lead_status"; $tabname[30]= MAIN_DB_PREFIX."c_format_cards"; //$tabname[31]= MAIN_DB_PREFIX."accounting_system"; -//$tabname[32]= MAIN_DB_PREFIX."c_accounting_category"; +$tabname[32]= MAIN_DB_PREFIX."c_hrm_public_holiday"; $tabname[33]= MAIN_DB_PREFIX."c_hrm_department"; $tabname[34]= MAIN_DB_PREFIX."c_hrm_function"; + $tabname[35]= MAIN_DB_PREFIX."c_exp_tax_cat"; $tabname[36]= MAIN_DB_PREFIX."c_exp_tax_range"; $tabname[37]= MAIN_DB_PREFIX."c_units"; @@ -163,7 +164,7 @@ $tablib[28]= "DictionaryHolidayTypes"; $tablib[29]= "DictionaryOpportunityStatus"; $tablib[30]= "DictionaryFormatCards"; //$tablib[31]= "DictionaryAccountancysystem"; -//$tablib[32]= "DictionaryAccountancyCategory"; +$tablib[32]= "DictionaryPublicHolidays"; $tablib[33]= "DictionaryDepartment"; $tablib[34]= "DictionaryFunction"; $tablib[35]= "DictionaryExpenseTaxCat"; @@ -203,7 +204,7 @@ $tabsql[28]= "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.new $tabsql[29]= "SELECT rowid as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status"; $tabsql[30]= "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards"; //$tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s"; -//$tabsql[32]= "SELECT a.rowid as rowid, a.code as code, a.label, a.range_account, a.sens, a.category_type, a.formula, a.position as position, a.fk_country as country_id, c.code as country_code, c.label as country, a.active FROM ".MAIN_DB_PREFIX."c_accounting_category as a, ".MAIN_DB_PREFIX."c_country as c WHERE a.fk_country=c.rowid and c.active=1"; +$tabsql[32]= "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1"; $tabsql[33]= "SELECT rowid, pos, code, label, active FROM ".MAIN_DB_PREFIX."c_hrm_department"; $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PREFIX."c_hrm_function"; $tabsql[35]= "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat c"; @@ -243,7 +244,7 @@ $tabsqlsort[28]="country ASC, code ASC"; $tabsqlsort[29]="position ASC"; $tabsqlsort[30]="code ASC"; //$tabsqlsort[31]="pcg_version ASC"; -//$tabsqlsort[32]="position ASC"; +$tabsqlsort[32]="year ASC, month ASC, day ASC"; $tabsqlsort[33]="code ASC"; $tabsqlsort[34]="code ASC"; $tabsqlsort[35]="c.label ASC"; @@ -283,7 +284,7 @@ $tabfield[28]= "code,label,affect,delay,newbymonth,country_id,country"; $tabfield[29]= "code,label,percent,position"; $tabfield[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfield[31]= "pcg_version,label"; -//$tabfield[32]= "code,label,range_account,sens,category_type,formula,position,country_id,country"; +$tabfield[32]= "code,year,month,day,country_id,country"; $tabfield[33]= "code,label"; $tabfield[34]= "code,label"; $tabfield[35]= "label"; @@ -323,7 +324,7 @@ $tabfieldvalue[28]= "code,label,affect,delay,newbymonth,country"; $tabfieldvalue[29]= "code,label,percent,position"; $tabfieldvalue[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldvalue[31]= "pcg_version,label"; -//$tabfieldvalue[32]= "code,label,range_account,sens,category_type,formula,position,country"; +$tabfieldvalue[32]= "code,day,month,year,country"; $tabfieldvalue[33]= "code,label"; $tabfieldvalue[34]= "code,label"; $tabfieldvalue[35]= "label"; @@ -364,15 +365,16 @@ $tabfieldinsert[29]= "code,label,percent,position"; $tabfieldinsert[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldinsert[31]= "pcg_version,label"; //$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country"; +$tabfieldinsert[32]= "code,day,month,year,fk_country"; $tabfieldinsert[33]= "code,label"; $tabfieldinsert[34]= "code,label"; $tabfieldinsert[35]= "label"; $tabfieldinsert[36]= "range_ik,fk_c_exp_tax_cat"; $tabfieldinsert[37]= "code,label,short_label,unit_type,scale"; -// Rowid name if the field is not autoincrement type -// Example: "" if id field is "rowid" and has autoincrement on -// "nameoffield" if id field is not "rowid" or has not autoincrement on +// Rowid name of field depending if field is autoincrement on or off.. +// Use "" if id field is "rowid" and has autoincrement on +// Use "nameoffield" if id field is not "rowid" or has not autoincrement on $tabrowid=array(); $tabrowid[1] = ""; $tabrowid[2] = ""; @@ -405,7 +407,7 @@ $tabrowid[28]= ""; $tabrowid[29]= ""; $tabrowid[30]= ""; //$tabrowid[31]= ""; -//$tabrowid[32]= ""; +$tabrowid[32]= "id"; $tabrowid[33]= "rowid"; $tabrowid[34]= "rowid"; $tabrowid[35]= ""; @@ -445,7 +447,7 @@ $tabcond[28]= ! empty($conf->holiday->enabled); $tabcond[29]= ! empty($conf->projet->enabled); $tabcond[30]= ! empty($conf->label->enabled); //$tabcond[31]= ! empty($conf->accounting->enabled); -//$tabcond[32]= ! empty($conf->accounting->enabled); +$tabcond[32]= (! empty($conf->holiday->enabled) || ! empty($conf->hrm->enabled)); $tabcond[33]= ! empty($conf->hrm->enabled); $tabcond[34]= ! empty($conf->hrm->enabled); $tabcond[35]= ! empty($conf->expensereport->enabled); @@ -485,12 +487,12 @@ $tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"),'delay'=>$lan $tabhelp[29] = array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList")); $tabhelp[30] = array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize")); //$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode")); -//$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'daterule'=>"Use 'date'", 'country'=>$langs->trans("EnterACountryOnlyIfSpecificToOneCountry"), 'year'=>$langs->trans("ZeroMeansEveryYear")); $tabhelp[33] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[34] = array('code'=>$langs->trans("EnterAnyCode")); -$tabhelp[35]= array(); -$tabhelp[36]= array('range_ik'=>$langs->trans('PrevRangeToThisRange')); -$tabhelp[37]= array('code'=>$langs->trans("EnterAnyCode")); +$tabhelp[35] = array(); +$tabhelp[36] = array('range_ik'=>$langs->trans('PrevRangeToThisRange')); +$tabhelp[37] = array('code'=>$langs->trans("EnterAnyCode")); // List of check for fields (NOT USED YET) $tabfieldcheck=array(); @@ -525,12 +527,12 @@ $tabfieldcheck[28] = array(); $tabfieldcheck[29] = array(); $tabfieldcheck[30] = array(); //$tabfieldcheck[31] = array(); -//$tabfieldcheck[32] = array(); +$tabfieldcheck[32] = array(); $tabfieldcheck[33] = array(); $tabfieldcheck[34] = array(); -$tabfieldcheck[35]= array(); -$tabfieldcheck[36]= array(); -$tabfieldcheck[37]= array(); +$tabfieldcheck[35] = array(); +$tabfieldcheck[36] = array(); +$tabfieldcheck[37] = array(); // Complete all arrays with entries found into modules complete_dictionary_with_modules($taborder, $tabname, $tablib, $tabsql, $tabsqlsort, $tabfield, $tabfieldvalue, $tabfieldinsert, $tabrowid, $tabcond, $tabhelp, $tabfieldcheck); @@ -621,9 +623,11 @@ if (GETPOST('actionadd') || GETPOST('actionmodify')) $ok=1; foreach ($listfield as $f => $value) { - if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue; // For some pages, country is not mandatory - if ($value == 'country' && in_array($tablib[$id], array('DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory - if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue; + // Discard check of mandatory fields for country for some tables + if ($value == 'country_id' && in_array($tablib[$id], array('DictionaryPublicHolidays','DictionaryVAT','DictionaryRegion','DictionaryCompanyType','DictionaryHolidayTypes','DictionaryRevenueStamp','DictionaryAccountancysystem','DictionaryAccountancyCategory'))) continue; // For some pages, country is not mandatory + if ($value == 'country' && in_array($tablib[$id], array('DictionaryPublicHolidays','DictionaryCanton','DictionaryCompanyType','DictionaryRevenueStamp'))) continue; // For some pages, country is not mandatory + // Discard check of mandatory fiedls for other fields + if ($value == 'localtax1' && empty($_POST['localtax1_type'])) continue; if ($value == 'localtax2' && empty($_POST['localtax2_type'])) continue; if ($value == 'color' && empty($_POST['color'])) continue; if ($value == 'formula' && empty($_POST['formula'])) continue; @@ -992,8 +996,10 @@ if ($id) if (! preg_match('/ WHERE /', $sql)) $sql.= " WHERE 1 = 1"; if ($search_country_id > 0) $sql.= " AND c.rowid = ".$search_country_id; - if ($search_code != '' && $id != 9) $sql.= natural_search("code", $search_code); if ($search_code != '' && $id == 9) $sql.= natural_search("code_iso", $search_code); + elseif ($search_code != '' && $id == 28) $sql.= natural_search("h.code", $search_code); + elseif ($search_code != '' && $id == 32) $sql.= natural_search("a.code", $search_code); + elseif ($search_code != '' && $id != 9) $sql.= natural_search("code", $search_code); if ($sortfield) { @@ -1053,7 +1059,7 @@ if ($id) continue; } - // Define field friedly name from its technical name + // Define field friendly name from its technical name $valuetoshow=ucfirst($fieldlist[$field]); // Par defaut $valuetoshow=$langs->trans($valuetoshow); // try to translate $class=''; @@ -1156,7 +1162,8 @@ if ($id) print ''; // Line to enter new values - print ''; + print ''; + print ''; $obj = new stdClass(); // If data was already input, we define them in obj to populate input fields. @@ -1632,10 +1639,10 @@ if ($id) if ($obj->code == 'RECEP') $canbemodified=1; if ($tabname[$id] == MAIN_DB_PREFIX."c_actioncomm") $canbemodified=1; - // Url + // Build Url. The table is id=, the id of line is rowid= $rowidcol=$tabrowid[$id]; // If rowidcol not defined - if (empty($rowidcol) || in_array($id, array(6,7,8,13,17,19,27))) $rowidcol='rowid'; + if (empty($rowidcol) || in_array($id, array(6,7,8,13,17,19,27,32))) $rowidcol='rowid'; $url = $_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.((! empty($obj->{$rowidcol}) || $obj->{$rowidcol} == '0')?$obj->{$rowidcol}:(! empty($obj->code)?urlencode($obj->code):'')).'&code='.(! empty($obj->code)?urlencode($obj->code):''); if (! empty($param)) $url .= '&'.$param; if (! is_null($withentity)) $url .= '&entity='.$withentity; @@ -1971,7 +1978,6 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') } else { - $fieldValue = isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''; if ($fieldlist[$field]=='sortorder') @@ -1981,11 +1987,11 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '') $classtd=''; $class=''; if ($fieldlist[$field]=='code') $class='maxwidth100'; - if (in_array($fieldlist[$field], array('pos', 'use_default', 'affect', 'delay', 'position', 'sortorder', 'sens', 'category_type'))) $class='maxwidth50'; + if (in_array($fieldlist[$field], array('dayrule', 'day', 'month', 'year', 'pos', 'use_default', 'affect', 'delay', 'position', 'sortorder', 'sens', 'category_type'))) $class='maxwidth50'; if (in_array($fieldlist[$field], array('libelle', 'label', 'tracking'))) $class='quatrevingtpercent'; print ''; $transfound=0; - if (in_array($fieldlist[$field], array('label','libelle'))) + if (in_array($fieldlist[$field], array('label','libelle'))) // For label { $transkey=''; // Special case for labels diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php index 6635220cc23..cf5ab8dc7e0 100644 --- a/htdocs/core/lib/admin.lib.php +++ b/htdocs/core/lib/admin.lib.php @@ -1094,6 +1094,8 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab { global $db, $modules, $conf, $langs; + dol_syslog("complete_dictionary_with_modules Search external modules to complete the list of dictionnary tables", LOG_DEBUG, 1); + // Search modules $modulesdir = dolGetModulesDirs(); $i = 0; // is a sequencer of modules found @@ -1191,6 +1193,8 @@ function complete_dictionary_with_modules(&$taborder, &$tabname, &$tablib, &$tab } } + dol_syslog("", LOG_DEBUG, -1); + return 1; } @@ -1259,7 +1263,7 @@ function activateModulesRequiredByCountry($country_code) } /** - * Add external modules to list of contact element + * Search external modules to complete the list of contact element * * @param array $elementList elementList * @return int 1 @@ -1278,6 +1282,8 @@ function complete_elementList_with_modules(&$elementList) $i = 0; // is a sequencer of modules found $j = 0; // j is module number. Automatically affected if module number not defined. + dol_syslog("complete_elementList_with_modules Search external modules to complete the list of contact element", LOG_DEBUG, 1); + $modulesdir = dolGetModulesDirs(); foreach ($modulesdir as $dir) @@ -1355,6 +1361,8 @@ function complete_elementList_with_modules(&$elementList) } } + dol_syslog("", LOG_DEBUG, -1); + return 1; } diff --git a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql new file mode 100644 index 00000000000..5b6f4bf3f0c --- /dev/null +++ b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql @@ -0,0 +1,43 @@ +-- Copyright (C) 2001-2004 Rodolphe Quiedeville +-- Copyright (C) 2003 Jean-Louis Bergamo +-- Copyright (C) 2004-2010 Laurent Destailleur +-- Copyright (C) 2004 Benoit Mortier +-- Copyright (C) 2004 Guillaume Delecourt +-- Copyright (C) 2005-2012 Regis Houssin +-- Copyright (C) 2007 Patrick Raguin +-- Copyright (C) 2019 Markus Welters +-- +-- 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 . +-- + +-- +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors +-- de l'install et tous les sigles '--' sont supprimés. +-- + + +-- LIST ON https://fr.wikipedia.org/wiki/Jour_férié + + +-- A lot of countries +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('NEWYEARDAY1', 0, 0, 0, 1, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('LABORDAY1', 0, 0, 0, 5, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('CHRISTMASDAY1', 0, 0, 0, 12, 25, 1); + +-- France only +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRVICTORYDAY', 0, 1, 0, 5, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRNATIONALDAY', 0, 1, 0, 7, 14, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRASSOMPTION', 0, 1, 0, 8, 15, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRTOUSSAINT', 0, 1, 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRARMISTICE', 0, 1, 0, 11, 11, 1); diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 8efe44db103..64de0364139 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -89,5 +89,20 @@ ALTER TABLE llx_projet ADD COLUMN usage_organize_event integer DEFAULT 0; UPDATE llx_projet set usage_opportunity = 1 WHERE fk_opp_status > 0; - + +create table llx_c_hrm_public_holiday +( + id integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all + fk_country integer, + code varchar(62), + dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ... + day integer, + month integer, + year integer, -- 0 for all years + active integer DEFAULT 1, + import_key varchar(14) +)ENGINE=innodb; + + \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_c_field_list.sql b/htdocs/install/mysql/tables/llx_c_field_list.sql index 44b02c35248..fa528bec0ef 100644 --- a/htdocs/install/mysql/tables/llx_c_field_list.sql +++ b/htdocs/install/mysql/tables/llx_c_field_list.sql @@ -36,5 +36,4 @@ create table llx_c_field_list visible tinyint DEFAULT 1 NOT NULL, -- visibility of field. 0=Never visible, 1=Visible on list and forms, 2=Visible on list only enabled varchar(255) DEFAULT 1, -- Condition to show or hide rang integer DEFAULT 0 - )ENGINE=innodb; diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql new file mode 100644 index 00000000000..23dcbf355b4 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql @@ -0,0 +1,21 @@ +-- ======================================================================== +-- Copyright (C) 2019 Laurent Destailleur +-- +-- 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 . +-- +-- ======================================================================== + +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday(entity, code); +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday2(entity, day, month, year); + diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql new file mode 100644 index 00000000000..7efbe314875 --- /dev/null +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql @@ -0,0 +1,31 @@ +-- ======================================================================== +-- Copyright (C) 2019 Laurent Destailleur +-- +-- 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 . +-- +-- ======================================================================== + +create table llx_c_hrm_public_holiday +( + id integer AUTO_INCREMENT PRIMARY KEY, + entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all + fk_country integer, + code varchar(62), + dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ... + day integer, + month integer, + year integer, -- 0 for all years + active integer DEFAULT 1, + import_key varchar(14) +)ENGINE=innodb; diff --git a/htdocs/langs/en_US/hrm.lang b/htdocs/langs/en_US/hrm.lang index 12bb1592cbc..3697c47e30d 100644 --- a/htdocs/langs/en_US/hrm.lang +++ b/htdocs/langs/en_US/hrm.lang @@ -9,6 +9,7 @@ ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment? OpenEtablishment=Open establishment CloseEtablishment=Close establishment # Dictionary +DictionaryPublicHolidays=HRM - Public holidays DictionaryDepartment=HRM - Department list DictionaryFunction=HRM - Function list # Module From e91b6f7843dfde2f0d66c4bcac89e6de5496fd0a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 22:48:33 +0200 Subject: [PATCH 1069/1148] FIX Can't delete a draft leave even if it should --- htdocs/holiday/card.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 2207148e4ea..7301d08f87b 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -55,13 +55,6 @@ $langs->load("holiday"); $childids = $user->getAllChildIds(1); -$cancreate = 0; -if (! empty($user->rights->holiday->write_all)) $cancreate=1; -if (! empty($user->rights->holiday->write) && in_array($fuserid, $childids)) $cancreate=1; - -$candelete = 0; -if (! empty($user->rights->holiday->delete)) $candelete=1; - $morefilter = 'AND employee = 1'; if (! empty($conf->global->HOLIDAY_FOR_NON_SALARIES_TOO)) $morefilter = ''; @@ -82,6 +75,14 @@ if ($id > 0) } } +$cancreate = 0; +if (! empty($user->rights->holiday->write_all)) $cancreate=1; +if (! empty($user->rights->holiday->write) && in_array($fuserid, $childids)) $cancreate=1; + +$candelete = 0; +if (! empty($user->rights->holiday->delete)) $candelete=1; +if ($object->statut == Holiday::STATUS_DRAFT && $user->rights->holiday->create && in_array($object->fk_user, $childids)) $candelete=1; + /* * Actions @@ -1435,7 +1436,7 @@ else { print ''.$langs->trans("SetToDraft").''; } - if ($user->rights->holiday->delete && ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED)) // If draft or canceled or refused + if ($candelete && ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED)) // If draft or canceled or refused { print ''.$langs->trans("DeleteCP").''; } From 9a823f1c64c9cd619cc418772c7fb663f2287e60 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 5 Sep 2019 22:51:26 +0200 Subject: [PATCH 1070/1148] Fix bad perm --- htdocs/holiday/card.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php index 7301d08f87b..204d832a94c 100644 --- a/htdocs/holiday/card.php +++ b/htdocs/holiday/card.php @@ -81,8 +81,7 @@ if (! empty($user->rights->holiday->write) && in_array($fuserid, $childids)) $ca $candelete = 0; if (! empty($user->rights->holiday->delete)) $candelete=1; -if ($object->statut == Holiday::STATUS_DRAFT && $user->rights->holiday->create && in_array($object->fk_user, $childids)) $candelete=1; - +if ($object->statut == Holiday::STATUS_DRAFT && $user->rights->holiday->write && in_array($object->fk_user, $childids)) $candelete=1; /* * Actions From 04adbd8c80d8bd532a76e942dc4358b2acc17d57 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 01:52:51 +0200 Subject: [PATCH 1071/1148] Fix conflict between new module reception and old process Fix inventory record does not need status at creation --- htdocs/admin/stock.php | 120 ++++++++---------- htdocs/admin/supplier_order.php | 34 +++-- .../class/fournisseur.commande.class.php | 3 +- htdocs/fourn/commande/card.php | 80 +++++++----- htdocs/langs/en_US/admin.lang | 2 +- htdocs/langs/en_US/orders.lang | 2 +- htdocs/langs/en_US/sendings.lang | 2 + htdocs/langs/en_US/stocks.lang | 4 +- htdocs/langs/fr_FR/orders.lang | 2 +- .../inventory/class/inventory.class.php | 4 +- htdocs/reception/card.php | 4 +- 11 files changed, 135 insertions(+), 122 deletions(-) diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 7c22d1a4a58..572f034f259 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -103,14 +103,14 @@ print '
'; print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; $found=0; print ''; print ''; -print ''; print ''; -print ''; print ''; -print ''; print ''; -print ''; print ''; print ''; From 3a2b3d311a66791f35940fb185be72d2e02bd66d Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 8 Sep 2019 04:57:09 +0200 Subject: [PATCH 1115/1148] Traduction --- .../core/modules/barcode/doc/phpbarcode.modules.php | 6 +++--- .../modules/barcode/doc/tcpdfbarcode.modules.php | 6 +++--- htdocs/core/modules/bom/modules_bom.php | 13 +++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/htdocs/core/modules/barcode/doc/phpbarcode.modules.php b/htdocs/core/modules/barcode/doc/phpbarcode.modules.php index 96cf345ff09..d6bcb3fcd25 100644 --- a/htdocs/core/modules/barcode/doc/phpbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/phpbarcode.modules.php @@ -71,10 +71,10 @@ class modPhpbarcode extends ModeleBarCode } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php index 3d2564591da..6e80a430204 100644 --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -67,10 +67,10 @@ class modTcpdfbarcode extends ModeleBarCode } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index fc4d2167980..a26cdafd17a 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -85,7 +85,7 @@ abstract class ModeleNumRefBoms } /** - * Renvoie la description par defaut du modele de numerotation + * Returns the default description of the numbering template * * @return string Texte descripif */ @@ -97,7 +97,7 @@ abstract class ModeleNumRefBoms } /** - * Renvoie un exemple de numerotation + * Returns an example of numbering * * @return string Example */ @@ -109,9 +109,10 @@ abstract class ModeleNumRefBoms } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de conflits qui empecheraient cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { @@ -119,7 +120,7 @@ abstract class ModeleNumRefBoms } /** - * Renvoie prochaine valeur attribuee + * Returns next assigned value * * @param Societe $objsoc Object thirdparty * @param Object $object Object we need next value for @@ -132,7 +133,7 @@ abstract class ModeleNumRefBoms } /** - * Renvoie version du module numerotation + * Returns version of numbering module * * @return string Valeur */ From d9fa32b555da7b630b89bf8156fb144f6a340e4f Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 8 Sep 2019 05:00:24 +0200 Subject: [PATCH 1116/1148] Traduction --- htdocs/core/modules/bom/mod_bom_advanced.php | 2 +- htdocs/core/modules/bom/mod_bom_standard.php | 2 +- htdocs/core/modules/cheque/mod_chequereceipt_mint.php | 2 +- htdocs/core/modules/cheque/mod_chequereceipt_thyme.php | 2 +- htdocs/core/modules/commande/mod_commande_marbre.php | 2 +- htdocs/core/modules/commande/mod_commande_saphir.php | 2 +- htdocs/core/modules/dons/modules_don.php | 2 +- htdocs/core/modules/expensereport/mod_expensereport_sand.php | 2 +- htdocs/core/modules/facture/mod_facture_mars.php | 2 +- htdocs/core/modules/facture/mod_facture_terre.php | 2 +- htdocs/core/modules/facture/modules_facture.php | 2 +- htdocs/core/modules/fichinter/mod_arctic.php | 2 +- htdocs/core/modules/fichinter/mod_pacific.php | 2 +- htdocs/core/modules/livraison/mod_livraison_jade.php | 2 +- htdocs/core/modules/livraison/modules_livraison.php | 2 +- htdocs/core/modules/payment/mod_payment_ant.php | 2 +- htdocs/core/modules/payment/mod_payment_cicada.php | 2 +- htdocs/core/modules/product/modules_product.class.php | 2 +- htdocs/core/modules/project/mod_project_universal.php | 2 +- htdocs/core/modules/project/modules_project.php | 2 +- htdocs/core/modules/project/task/mod_task_universal.php | 2 +- htdocs/core/modules/project/task/modules_task.php | 2 +- htdocs/core/modules/propale/mod_propale_saphir.php | 2 +- htdocs/core/modules/propale/modules_propale.php | 2 +- .../modules/supplier_order/mod_commande_fournisseur_muguet.php | 2 +- .../supplier_order/mod_commande_fournisseur_orchidee.php | 2 +- .../modules/supplier_payment/mod_supplier_payment_brodator.php | 2 +- .../modules/supplier_payment/mod_supplier_payment_bronan.php | 2 +- .../modules/supplier_proposal/mod_supplier_proposal_saphir.php | 2 +- .../modules/supplier_proposal/modules_supplier_proposal.php | 2 +- htdocs/core/modules/ticket/mod_ticket_universal.php | 2 +- htdocs/core/modules/ticket/modules_ticket.php | 2 +- 32 files changed, 32 insertions(+), 32 deletions(-) diff --git a/htdocs/core/modules/bom/mod_bom_advanced.php b/htdocs/core/modules/bom/mod_bom_advanced.php index aa8eef7aa59..3f6be391a37 100644 --- a/htdocs/core/modules/bom/mod_bom_advanced.php +++ b/htdocs/core/modules/bom/mod_bom_advanced.php @@ -92,7 +92,7 @@ class mod_bom_advanced extends ModeleNumRefboms } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/bom/mod_bom_standard.php b/htdocs/core/modules/bom/mod_bom_standard.php index 39af3ecc7e1..60870da1a01 100644 --- a/htdocs/core/modules/bom/mod_bom_standard.php +++ b/htdocs/core/modules/bom/mod_bom_standard.php @@ -61,7 +61,7 @@ class mod_bom_standard extends ModeleNumRefboms /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/cheque/mod_chequereceipt_mint.php b/htdocs/core/modules/cheque/mod_chequereceipt_mint.php index 0169ce04a70..48a99112839 100644 --- a/htdocs/core/modules/cheque/mod_chequereceipt_mint.php +++ b/htdocs/core/modules/cheque/mod_chequereceipt_mint.php @@ -58,7 +58,7 @@ class mod_chequereceipt_mint extends ModeleNumRefChequeReceipts /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php b/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php index 545222c8b03..69aa090ab04 100644 --- a/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php +++ b/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php @@ -86,7 +86,7 @@ class mod_chequereceipt_thyme extends ModeleNumRefChequeReceipts } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php index 160a07635f4..f05c668e8e7 100644 --- a/htdocs/core/modules/commande/mod_commande_marbre.php +++ b/htdocs/core/modules/commande/mod_commande_marbre.php @@ -61,7 +61,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/commande/mod_commande_saphir.php b/htdocs/core/modules/commande/mod_commande_saphir.php index 4f9931f35e9..c976290377b 100644 --- a/htdocs/core/modules/commande/mod_commande_saphir.php +++ b/htdocs/core/modules/commande/mod_commande_saphir.php @@ -92,7 +92,7 @@ class mod_commande_saphir extends ModeleNumRefCommandes } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/dons/modules_don.php b/htdocs/core/modules/dons/modules_don.php index 9957bf4f326..373b9dd8742 100644 --- a/htdocs/core/modules/dons/modules_don.php +++ b/htdocs/core/modules/dons/modules_don.php @@ -96,7 +96,7 @@ abstract class ModeleNumRefDons } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/expensereport/mod_expensereport_sand.php b/htdocs/core/modules/expensereport/mod_expensereport_sand.php index 5217e2dc1c3..5abace4279c 100644 --- a/htdocs/core/modules/expensereport/mod_expensereport_sand.php +++ b/htdocs/core/modules/expensereport/mod_expensereport_sand.php @@ -95,7 +95,7 @@ class mod_expensereport_sand extends ModeleNumRefExpenseReport } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/facture/mod_facture_mars.php b/htdocs/core/modules/facture/mod_facture_mars.php index 4c9d249d6c8..3c94fd46511 100644 --- a/htdocs/core/modules/facture/mod_facture_mars.php +++ b/htdocs/core/modules/facture/mod_facture_mars.php @@ -74,7 +74,7 @@ class mod_facture_mars extends ModeleNumRefFactures } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/facture/mod_facture_terre.php b/htdocs/core/modules/facture/mod_facture_terre.php index db9a3e2e046..ecb26218636 100644 --- a/htdocs/core/modules/facture/mod_facture_terre.php +++ b/htdocs/core/modules/facture/mod_facture_terre.php @@ -84,7 +84,7 @@ class mod_facture_terre extends ModeleNumRefFactures } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/facture/modules_facture.php b/htdocs/core/modules/facture/modules_facture.php index 7ed9eb7e94a..865ea6cb71b 100644 --- a/htdocs/core/modules/facture/modules_facture.php +++ b/htdocs/core/modules/facture/modules_facture.php @@ -98,7 +98,7 @@ abstract class ModeleNumRefFactures } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/fichinter/mod_arctic.php b/htdocs/core/modules/fichinter/mod_arctic.php index 1d33cb7fc83..6c1ec0d46fe 100644 --- a/htdocs/core/modules/fichinter/mod_arctic.php +++ b/htdocs/core/modules/fichinter/mod_arctic.php @@ -97,7 +97,7 @@ class mod_arctic extends ModeleNumRefFicheinter } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/fichinter/mod_pacific.php b/htdocs/core/modules/fichinter/mod_pacific.php index 7d636a8b8e0..aed72285ee4 100644 --- a/htdocs/core/modules/fichinter/mod_pacific.php +++ b/htdocs/core/modules/fichinter/mod_pacific.php @@ -68,7 +68,7 @@ class mod_pacific extends ModeleNumRefFicheinter } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/livraison/mod_livraison_jade.php b/htdocs/core/modules/livraison/mod_livraison_jade.php index 5cae280f245..d9ad3f16a31 100644 --- a/htdocs/core/modules/livraison/mod_livraison_jade.php +++ b/htdocs/core/modules/livraison/mod_livraison_jade.php @@ -72,7 +72,7 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/livraison/modules_livraison.php b/htdocs/core/modules/livraison/modules_livraison.php index ce9d9b77f77..55b2146f2a6 100644 --- a/htdocs/core/modules/livraison/modules_livraison.php +++ b/htdocs/core/modules/livraison/modules_livraison.php @@ -100,7 +100,7 @@ abstract class ModeleNumRefDeliveryOrder } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/payment/mod_payment_ant.php b/htdocs/core/modules/payment/mod_payment_ant.php index a9cde1b86cb..a9bacfede80 100644 --- a/htdocs/core/modules/payment/mod_payment_ant.php +++ b/htdocs/core/modules/payment/mod_payment_ant.php @@ -95,7 +95,7 @@ class mod_payment_ant extends ModeleNumRefPayments } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/payment/mod_payment_cicada.php b/htdocs/core/modules/payment/mod_payment_cicada.php index a6f1eee1ef7..97b386a87f3 100644 --- a/htdocs/core/modules/payment/mod_payment_cicada.php +++ b/htdocs/core/modules/payment/mod_payment_cicada.php @@ -68,7 +68,7 @@ class mod_payment_cicada extends ModeleNumRefPayments /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/product/modules_product.class.php b/htdocs/core/modules/product/modules_product.class.php index 30350d9378f..0628744d8d9 100644 --- a/htdocs/core/modules/product/modules_product.class.php +++ b/htdocs/core/modules/product/modules_product.class.php @@ -90,7 +90,7 @@ abstract class ModeleProductCode } - /** Renvoi un exemple de numerotation + /** Return an example of numbering * * @param Translate $langs Object langs * @return string Example diff --git a/htdocs/core/modules/project/mod_project_universal.php b/htdocs/core/modules/project/mod_project_universal.php index 70394f92129..d27f3d1c250 100644 --- a/htdocs/core/modules/project/mod_project_universal.php +++ b/htdocs/core/modules/project/mod_project_universal.php @@ -96,7 +96,7 @@ class mod_project_universal extends ModeleNumRefProjects } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/project/modules_project.php b/htdocs/core/modules/project/modules_project.php index f77111bade3..de3bbd2ccf5 100644 --- a/htdocs/core/modules/project/modules_project.php +++ b/htdocs/core/modules/project/modules_project.php @@ -95,7 +95,7 @@ abstract class ModeleNumRefProjects } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/project/task/mod_task_universal.php b/htdocs/core/modules/project/task/mod_task_universal.php index 760caaa366e..1d311f96391 100644 --- a/htdocs/core/modules/project/task/mod_task_universal.php +++ b/htdocs/core/modules/project/task/mod_task_universal.php @@ -96,7 +96,7 @@ class mod_task_universal extends ModeleNumRefTask } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/project/task/modules_task.php b/htdocs/core/modules/project/task/modules_task.php index e37c4b1dabb..965bcbdd016 100644 --- a/htdocs/core/modules/project/task/modules_task.php +++ b/htdocs/core/modules/project/task/modules_task.php @@ -96,7 +96,7 @@ abstract class ModeleNumRefTask } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/propale/mod_propale_saphir.php b/htdocs/core/modules/propale/mod_propale_saphir.php index 99c82217a87..bb9bf463930 100644 --- a/htdocs/core/modules/propale/mod_propale_saphir.php +++ b/htdocs/core/modules/propale/mod_propale_saphir.php @@ -98,7 +98,7 @@ class mod_propale_saphir extends ModeleNumRefPropales } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/propale/modules_propale.php b/htdocs/core/modules/propale/modules_propale.php index dc01941ece4..f67cc5c194c 100644 --- a/htdocs/core/modules/propale/modules_propale.php +++ b/htdocs/core/modules/propale/modules_propale.php @@ -99,7 +99,7 @@ abstract class ModeleNumRefPropales } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php index 96dc9fbfd99..a864161a459 100644 --- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php +++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php @@ -80,7 +80,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php index c816953a298..96c294c2e8d 100644 --- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php +++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php @@ -98,7 +98,7 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php b/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php index d06a2ccfcf3..7eaf44a691f 100644 --- a/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php +++ b/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php @@ -95,7 +95,7 @@ class mod_supplier_payment_brodator extends ModeleNumRefSupplierPayments } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php b/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php index e01c82cb445..608fe54ce55 100644 --- a/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php +++ b/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php @@ -68,7 +68,7 @@ class mod_supplier_payment_bronan extends ModeleNumRefSupplierPayments /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php index 343e16df8ed..072409fbcba 100644 --- a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php +++ b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php @@ -98,7 +98,7 @@ class mod_supplier_proposal_saphir extends ModeleNumRefSupplierProposal } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php b/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php index a7c12a9aeed..707e2f76c21 100644 --- a/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php +++ b/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php @@ -99,7 +99,7 @@ abstract class ModeleNumRefSupplierProposal } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/ticket/mod_ticket_universal.php b/htdocs/core/modules/ticket/mod_ticket_universal.php index 007e0b318cd..64e58f1b66b 100644 --- a/htdocs/core/modules/ticket/mod_ticket_universal.php +++ b/htdocs/core/modules/ticket/mod_ticket_universal.php @@ -94,7 +94,7 @@ class mod_ticket_universal extends ModeleNumRefTicket } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ diff --git a/htdocs/core/modules/ticket/modules_ticket.php b/htdocs/core/modules/ticket/modules_ticket.php index b66eb30422f..a63ad5295e4 100644 --- a/htdocs/core/modules/ticket/modules_ticket.php +++ b/htdocs/core/modules/ticket/modules_ticket.php @@ -57,7 +57,7 @@ abstract class ModeleNumRefTicket } /** - * Renvoi un exemple de numerotation + * Return an example of numbering * * @return string Example */ From 48b2a11da25dc7badd8bc2a2d09bcf186c4a750e Mon Sep 17 00:00:00 2001 From: david Date: Sun, 8 Sep 2019 05:15:26 +0200 Subject: [PATCH 1117/1148] FIX #10460 compatibility with MariaDB 10.4 --- htdocs/core/class/html.form.class.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 187df8cf539..49efea8c04d 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1152,9 +1152,8 @@ class Form $sql .= ", dictp.code as country_code"; } - $sql.= " FROM (".MAIN_DB_PREFIX ."societe as s"; + $sql.= " FROM ".MAIN_DB_PREFIX ."societe as s"; if (!$user->rights->societe->client->voir && !$user->socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= " )"; if ($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST) { $sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."c_country as dictp ON dictp.rowid=s.fk_pays"; } From 3ddd123eb15a387d548c9de9b18e28a12a1761a2 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 8 Sep 2019 05:18:52 +0200 Subject: [PATCH 1118/1148] Traduction --- .../modules/barcode/doc/tcpdfbarcode.modules.php | 4 ++-- htdocs/core/modules/bom/mod_bom_standard.php | 6 +++--- htdocs/core/modules/bom/modules_bom.php | 2 +- .../core/modules/cheque/mod_chequereceipt_mint.php | 6 +++--- .../core/modules/cheque/modules_chequereceipts.php | 9 +++++---- .../core/modules/commande/mod_commande_marbre.php | 6 +++--- htdocs/core/modules/commande/modules_commande.php | 5 +++-- htdocs/core/modules/dons/modules_don.php | 6 +++--- .../expensereport/mod_expensereport_jade.php | 6 +++--- htdocs/core/modules/facture/mod_facture_mars.php | 6 +++--- htdocs/core/modules/facture/mod_facture_terre.php | 6 +++--- htdocs/core/modules/facture/modules_facture.php | 6 +++--- htdocs/core/modules/fichinter/mod_pacific.php | 6 +++--- .../core/modules/fichinter/modules_fichinter.php | 6 +++--- .../core/modules/livraison/mod_livraison_jade.php | 6 +++--- .../core/modules/livraison/modules_livraison.php | 6 +++--- htdocs/core/modules/payment/mod_payment_cicada.php | 6 +++--- htdocs/core/modules/payment/modules_payment.php | 9 +++++---- .../core/modules/product/modules_product.class.php | 7 ++++--- htdocs/core/modules/project/mod_project_simple.php | 7 ++++--- htdocs/core/modules/project/modules_project.php | 6 +++--- .../core/modules/project/task/mod_task_simple.php | 7 ++++--- htdocs/core/modules/project/task/modules_task.php | 6 +++--- htdocs/core/modules/propale/mod_propale_marbre.php | 6 +++--- htdocs/core/modules/propale/modules_propale.php | 6 +++--- .../core/modules/societe/modules_societe.class.php | 14 ++++++++------ .../mod_commande_fournisseur_muguet.php | 6 +++--- .../mod_supplier_payment_bronan.php | 6 +++--- .../supplier_payment/modules_supplier_payment.php | 9 +++++---- .../mod_supplier_proposal_marbre.php | 6 +++--- .../modules_supplier_proposal.php | 6 +++--- htdocs/core/modules/ticket/mod_ticket_simple.php | 6 +++--- htdocs/core/modules/ticket/modules_ticket.php | 6 +++--- 33 files changed, 110 insertions(+), 101 deletions(-) diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php index 6e80a430204..aad1493ff5f 100644 --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -67,8 +67,8 @@ class modTcpdfbarcode extends ModeleBarCode } /** - * Checks if the numbers already in force in the data base do not - * cause conflicts that would prevent this numbering from working. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * * @return boolean false if conflict, true if ok */ diff --git a/htdocs/core/modules/bom/mod_bom_standard.php b/htdocs/core/modules/bom/mod_bom_standard.php index 60870da1a01..0f3c704b5dd 100644 --- a/htdocs/core/modules/bom/mod_bom_standard.php +++ b/htdocs/core/modules/bom/mod_bom_standard.php @@ -72,10 +72,10 @@ class mod_bom_standard extends ModeleNumRefboms /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/bom/modules_bom.php b/htdocs/core/modules/bom/modules_bom.php index a26cdafd17a..35cd9c11abd 100644 --- a/htdocs/core/modules/bom/modules_bom.php +++ b/htdocs/core/modules/bom/modules_bom.php @@ -109,7 +109,7 @@ abstract class ModeleNumRefBoms } /** - * Checks if the numbers already in force in the data base do not + * Checks if the numbers already in force in the data base do not * cause conflicts that would prevent this numbering from working. * * @return boolean false if conflict, true if ok diff --git a/htdocs/core/modules/cheque/mod_chequereceipt_mint.php b/htdocs/core/modules/cheque/mod_chequereceipt_mint.php index 48a99112839..f9e98d550b8 100644 --- a/htdocs/core/modules/cheque/mod_chequereceipt_mint.php +++ b/htdocs/core/modules/cheque/mod_chequereceipt_mint.php @@ -69,10 +69,10 @@ class mod_chequereceipt_mint extends ModeleNumRefChequeReceipts /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/cheque/modules_chequereceipts.php b/htdocs/core/modules/cheque/modules_chequereceipts.php index 29fd071200a..7d05e4f94b8 100644 --- a/htdocs/core/modules/cheque/modules_chequereceipts.php +++ b/htdocs/core/modules/cheque/modules_chequereceipts.php @@ -76,10 +76,11 @@ abstract class ModeleNumRefChequeReceipts } /** - * Test if the existing numbers in the database do not cause conflicts that would prevent this numbering run. - * - * @return boolean false si conflit, true si ok - */ + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ public function canBeActivated() { return true; diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php index f05c668e8e7..85ec964a100 100644 --- a/htdocs/core/modules/commande/mod_commande_marbre.php +++ b/htdocs/core/modules/commande/mod_commande_marbre.php @@ -72,10 +72,10 @@ class mod_commande_marbre extends ModeleNumRefCommandes /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/commande/modules_commande.php b/htdocs/core/modules/commande/modules_commande.php index 47fb20a56b4..bd95ed752fb 100644 --- a/htdocs/core/modules/commande/modules_commande.php +++ b/htdocs/core/modules/commande/modules_commande.php @@ -110,9 +110,10 @@ abstract class ModeleNumRefCommandes } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de conflits qui empecheraient cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/dons/modules_don.php b/htdocs/core/modules/dons/modules_don.php index 373b9dd8742..edca09dd57b 100644 --- a/htdocs/core/modules/dons/modules_don.php +++ b/htdocs/core/modules/dons/modules_don.php @@ -108,10 +108,10 @@ abstract class ModeleNumRefDons } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas d - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/expensereport/mod_expensereport_jade.php b/htdocs/core/modules/expensereport/mod_expensereport_jade.php index 176c3a46dcb..d8e5979f126 100644 --- a/htdocs/core/modules/expensereport/mod_expensereport_jade.php +++ b/htdocs/core/modules/expensereport/mod_expensereport_jade.php @@ -78,10 +78,10 @@ class mod_expensereport_jade extends ModeleNumRefExpenseReport /** - * Test whether the numbers already in force in the base do not cause conflicts - * that would prevent this numbering from working. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/facture/mod_facture_mars.php b/htdocs/core/modules/facture/mod_facture_mars.php index 3c94fd46511..bc7ae612d09 100644 --- a/htdocs/core/modules/facture/mod_facture_mars.php +++ b/htdocs/core/modules/facture/mod_facture_mars.php @@ -84,10 +84,10 @@ class mod_facture_mars extends ModeleNumRefFactures } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/facture/mod_facture_terre.php b/htdocs/core/modules/facture/mod_facture_terre.php index ecb26218636..6644702c82f 100644 --- a/htdocs/core/modules/facture/mod_facture_terre.php +++ b/htdocs/core/modules/facture/mod_facture_terre.php @@ -94,10 +94,10 @@ class mod_facture_terre extends ModeleNumRefFactures } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/facture/modules_facture.php b/htdocs/core/modules/facture/modules_facture.php index 865ea6cb71b..c9a010a84c2 100644 --- a/htdocs/core/modules/facture/modules_facture.php +++ b/htdocs/core/modules/facture/modules_facture.php @@ -110,10 +110,10 @@ abstract class ModeleNumRefFactures } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas - * de conflits qui empecheraient cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/fichinter/mod_pacific.php b/htdocs/core/modules/fichinter/mod_pacific.php index aed72285ee4..74fedefba9a 100644 --- a/htdocs/core/modules/fichinter/mod_pacific.php +++ b/htdocs/core/modules/fichinter/mod_pacific.php @@ -78,10 +78,10 @@ class mod_pacific extends ModeleNumRefFicheinter } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/fichinter/modules_fichinter.php b/htdocs/core/modules/fichinter/modules_fichinter.php index f5056bf45bb..970507e8c0b 100644 --- a/htdocs/core/modules/fichinter/modules_fichinter.php +++ b/htdocs/core/modules/fichinter/modules_fichinter.php @@ -109,10 +109,10 @@ abstract class ModeleNumRefFicheinter } /** - * Tests if the numbers already in force in the database do not cause conflicts - * that would prevent this numbering from working. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/livraison/mod_livraison_jade.php b/htdocs/core/modules/livraison/mod_livraison_jade.php index d9ad3f16a31..de16820b8f3 100644 --- a/htdocs/core/modules/livraison/mod_livraison_jade.php +++ b/htdocs/core/modules/livraison/mod_livraison_jade.php @@ -82,10 +82,10 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/livraison/modules_livraison.php b/htdocs/core/modules/livraison/modules_livraison.php index 55b2146f2a6..9dff79742ef 100644 --- a/htdocs/core/modules/livraison/modules_livraison.php +++ b/htdocs/core/modules/livraison/modules_livraison.php @@ -112,10 +112,10 @@ abstract class ModeleNumRefDeliveryOrder } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas d - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/payment/mod_payment_cicada.php b/htdocs/core/modules/payment/mod_payment_cicada.php index 97b386a87f3..7aff7dff662 100644 --- a/htdocs/core/modules/payment/mod_payment_cicada.php +++ b/htdocs/core/modules/payment/mod_payment_cicada.php @@ -79,10 +79,10 @@ class mod_payment_cicada extends ModeleNumRefPayments /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/payment/modules_payment.php b/htdocs/core/modules/payment/modules_payment.php index b85c97008e3..d0e0c99ed66 100644 --- a/htdocs/core/modules/payment/modules_payment.php +++ b/htdocs/core/modules/payment/modules_payment.php @@ -63,10 +63,11 @@ abstract class ModeleNumRefPayments } /** - * Test if the existing numbers in the database do not cause conflicts that would prevent this numbering run. - * - * @return boolean false si conflit, true si ok - */ + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ public function canBeActivated() { return true; diff --git a/htdocs/core/modules/product/modules_product.class.php b/htdocs/core/modules/product/modules_product.class.php index 0628744d8d9..482f35cacd0 100644 --- a/htdocs/core/modules/product/modules_product.class.php +++ b/htdocs/core/modules/product/modules_product.class.php @@ -101,10 +101,11 @@ abstract class ModeleProductCode return $langs->trans("NoExample"); } - /** Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/project/mod_project_simple.php b/htdocs/core/modules/project/mod_project_simple.php index faab6523820..a8b7f3b4cd0 100644 --- a/htdocs/core/modules/project/mod_project_simple.php +++ b/htdocs/core/modules/project/mod_project_simple.php @@ -80,10 +80,11 @@ class mod_project_simple extends ModeleNumRefProjects } - /** Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/project/modules_project.php b/htdocs/core/modules/project/modules_project.php index de3bbd2ccf5..211b586e8f1 100644 --- a/htdocs/core/modules/project/modules_project.php +++ b/htdocs/core/modules/project/modules_project.php @@ -107,10 +107,10 @@ abstract class ModeleNumRefProjects } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/project/task/mod_task_simple.php b/htdocs/core/modules/project/task/mod_task_simple.php index 7619c9b6834..11139f4366a 100644 --- a/htdocs/core/modules/project/task/mod_task_simple.php +++ b/htdocs/core/modules/project/task/mod_task_simple.php @@ -80,10 +80,11 @@ class mod_task_simple extends ModeleNumRefTask } - /** Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/project/task/modules_task.php b/htdocs/core/modules/project/task/modules_task.php index 965bcbdd016..510f727e7ec 100644 --- a/htdocs/core/modules/project/task/modules_task.php +++ b/htdocs/core/modules/project/task/modules_task.php @@ -108,10 +108,10 @@ abstract class ModeleNumRefTask } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/propale/mod_propale_marbre.php b/htdocs/core/modules/propale/mod_propale_marbre.php index 4fba93d7a8d..dcc535bcca1 100644 --- a/htdocs/core/modules/propale/mod_propale_marbre.php +++ b/htdocs/core/modules/propale/mod_propale_marbre.php @@ -81,10 +81,10 @@ class mod_propale_marbre extends ModeleNumRefPropales /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/propale/modules_propale.php b/htdocs/core/modules/propale/modules_propale.php index f67cc5c194c..5cd2791cc95 100644 --- a/htdocs/core/modules/propale/modules_propale.php +++ b/htdocs/core/modules/propale/modules_propale.php @@ -111,10 +111,10 @@ abstract class ModeleNumRefPropales } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/societe/modules_societe.class.php b/htdocs/core/modules/societe/modules_societe.class.php index 62f481b9b25..b665e36f163 100644 --- a/htdocs/core/modules/societe/modules_societe.class.php +++ b/htdocs/core/modules/societe/modules_societe.class.php @@ -105,10 +105,11 @@ abstract class ModeleThirdPartyCode return $langs->trans("NoExample"); } - /** Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { @@ -297,10 +298,11 @@ abstract class ModeleAccountancyCode return $langs->trans("NoExample"); } - /** Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + /** + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php index a864161a459..d10ce45a7f9 100644 --- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php +++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php @@ -91,10 +91,10 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php b/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php index 608fe54ce55..b1f8dbd2e9c 100644 --- a/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php +++ b/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php @@ -79,10 +79,10 @@ class mod_supplier_payment_bronan extends ModeleNumRefSupplierPayments /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/supplier_payment/modules_supplier_payment.php b/htdocs/core/modules/supplier_payment/modules_supplier_payment.php index a3f7495efb5..07bad24bcfc 100644 --- a/htdocs/core/modules/supplier_payment/modules_supplier_payment.php +++ b/htdocs/core/modules/supplier_payment/modules_supplier_payment.php @@ -98,10 +98,11 @@ abstract class ModeleNumRefSupplierPayments } /** - * Test if the existing numbers in the database do not cause conflicts that would prevent this numbering run. - * - * @return boolean false si conflit, true si ok - */ + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. + * + * @return boolean false if conflict, true if ok + */ public function canBeActivated() { return true; diff --git a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php index db9cec8e2c3..5238ebb4b4d 100644 --- a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php +++ b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php @@ -81,10 +81,10 @@ class mod_supplier_proposal_marbre extends ModeleNumRefSupplierProposal /** - * Test si les numeros deje en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php b/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php index 707e2f76c21..eda9e24eb1f 100644 --- a/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php +++ b/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php @@ -111,10 +111,10 @@ abstract class ModeleNumRefSupplierProposal } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/ticket/mod_ticket_simple.php b/htdocs/core/modules/ticket/mod_ticket_simple.php index 299c9c6a485..e3cab2404ad 100644 --- a/htdocs/core/modules/ticket/mod_ticket_simple.php +++ b/htdocs/core/modules/ticket/mod_ticket_simple.php @@ -77,10 +77,10 @@ class mod_ticket_simple extends ModeleNumRefTicket } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { diff --git a/htdocs/core/modules/ticket/modules_ticket.php b/htdocs/core/modules/ticket/modules_ticket.php index a63ad5295e4..945b8f0fe67 100644 --- a/htdocs/core/modules/ticket/modules_ticket.php +++ b/htdocs/core/modules/ticket/modules_ticket.php @@ -69,10 +69,10 @@ abstract class ModeleNumRefTicket } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Checks if the numbers already in force in the data base do not + * cause conflicts that would prevent this numbering from working. * - * @return boolean false si conflit, true si ok + * @return boolean false if conflict, true if ok */ public function canBeActivated() { From 985cfab8e9c6f5cc67ff429441da96786fc9a949 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 8 Sep 2019 05:22:13 +0200 Subject: [PATCH 1119/1148] Traduction --- htdocs/core/modules/commande/modules_commande.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/commande/modules_commande.php b/htdocs/core/modules/commande/modules_commande.php index bd95ed752fb..974b30f6f68 100644 --- a/htdocs/core/modules/commande/modules_commande.php +++ b/htdocs/core/modules/commande/modules_commande.php @@ -121,7 +121,7 @@ abstract class ModeleNumRefCommandes } /** - * Renvoie prochaine valeur attribuee + * Returns next assigned value * * @param Societe $objsoc Object thirdparty * @param Object $object Object we need next value for @@ -134,7 +134,7 @@ abstract class ModeleNumRefCommandes } /** - * Renvoie version du module numerotation + * Returns version of numbering module * * @return string Valeur */ From fa5cda2e883cff38134726c13c6176a7c721d3af Mon Sep 17 00:00:00 2001 From: ATM john Date: Sun, 8 Sep 2019 18:03:14 +0200 Subject: [PATCH 1120/1148] Fix missing total progress column --- htdocs/core/lib/project.lib.php | 40 +++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 19d89c6799b..5e9d05057be 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -664,12 +664,48 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t print convertSecondToTime($total_projectlinesa_spent, 'allhourmin'); if ($projectidfortotallink > 0) print ''; print ''; + + if ($total_projectlinesa_planned) { + $totalAverageDeclaredProgress = round(100 * $total_projectlinesa_declared_if_planned / $total_projectlinesa_planned, 2); + $totalCalculatedProgress = round(100 * $total_projectlinesa_spent / $total_projectlinesa_planned, 2); + // this conf is actually hidden, by default we use 1% for "be carefull or warning" + $warningRatio = !empty($conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT) ? (1 + $conf->global->PROJECT_TIME_SPEND_WARNING_PERCENT / 100) : 1.01; + + // define progress color according to time spend vs workload + $progressBarClass = 'progress-bar-info'; + $badgeClass = 'badge '; + + if ($totalCalculatedProgress > $totalAverageDeclaredProgress) { + $progressBarClass = 'progress-bar-danger'; + $badgeClass.= 'badge-danger'; + } elseif ($totalCalculatedProgress * $warningRatio >= $totalAverageDeclaredProgress) { // warning if close at 1% + $progressBarClass = 'progress-bar-warning'; + $badgeClass.= 'badge-warning'; + } else { + $progressBarClass = 'progress-bar-success'; + $badgeClass.= 'badge-success'; + } + } + print ''; print ''; + + + // resume + print ''; + if ($showbilltime) { print ''; if ($showbilltime) diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php index 7b74e3a743a..ebe506c15d6 100644 --- a/htdocs/projet/tasks/list.php +++ b/htdocs/projet/tasks/list.php @@ -121,6 +121,7 @@ $arrayfields=array( 't.duration_effective'=>array('label'=>$langs->trans("TimeSpent"), 'checked'=>1, 'position'=>103), 't.progress_calculated'=>array('label'=>$langs->trans("ProgressCalculated"), 'checked'=>1, 'position'=>104), 't.progress'=>array('label'=>$langs->trans("ProgressDeclared"), 'checked'=>1, 'position'=>105), + 't.progress_summary'=>array('label'=>$langs->trans("TaskProgressSummary"), 'checked'=>1, 'position'=>106), 't.tobill'=>array('label'=>$langs->trans("TimeToBill"), 'checked'=>0, 'position'=>110), 't.billed'=>array('label'=>$langs->trans("TimeBilled"), 'checked'=>0, 'position'=>111), 't.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), @@ -570,6 +571,7 @@ if (! empty($arrayfields['t.planned_workload']['checked'])) print ''; if (! empty($arrayfields['t.progress_calculated']['checked'])) print ''; if (! empty($arrayfields['t.progress']['checked'])) print ''; +if (! empty($arrayfields['t.progress_summary']['checked'])) print ''; if (! empty($arrayfields['t.tobill']['checked'])) print ''; if (! empty($arrayfields['t.billed']['checked'])) print ''; // Extra fields @@ -610,6 +612,7 @@ if (! empty($arrayfields['t.planned_workload']['checked'])) print_liste_ if (! empty($arrayfields['t.duration_effective']['checked'])) print_liste_field_titre($arrayfields['t.duration_effective']['label'], $_SERVER["PHP_SELF"], "t.duration_effective", "", $param, '', $sortfield, $sortorder, 'center '); if (! empty($arrayfields['t.progress_calculated']['checked'])) print_liste_field_titre($arrayfields['t.progress_calculated']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', '', '', 'center '); if (! empty($arrayfields['t.progress']['checked'])) print_liste_field_titre($arrayfields['t.progress']['label'], $_SERVER["PHP_SELF"], "t.progress", "", $param, '', $sortfield, $sortorder, 'center '); +if (! empty($arrayfields['t.progress_summary']['checked'])) print_liste_field_titre($arrayfields['t.progress_summary']['label'], $_SERVER["PHP_SELF"], "t.progress", "", $param, '', $sortfield, $sortorder, 'center '); if (! empty($arrayfields['t.tobill']['checked'])) print_liste_field_titre($arrayfields['t.tobill']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'center '); if (! empty($arrayfields['t.billed']['checked'])) print_liste_field_titre($arrayfields['t.billed']['label'], $_SERVER["PHP_SELF"], "", "", $param, '', $sortfield, $sortorder, 'center '); // Extra fields @@ -642,6 +645,9 @@ while ($i < min($num, $limit)) $object->progress = $obj->progress; $object->datee = $db->jdate($obj->date_end); // deprecated $object->date_end = $db->jdate($obj->date_end); + $object->planned_workload= $obj->planned_workload; + $object->duration_effective= $obj->duration_effective; + $projectstatic->id = $obj->projectid; $projectstatic->ref = $obj->projectref; @@ -784,12 +790,23 @@ while ($i < min($num, $limit)) print ''; if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalprogress_declaredfield']=$totalarray['nbfield']; $totalarray['totaldurationdeclared'] += $obj->planned_workload * $obj->progress / 100; + } + // Progress summary + if (! empty($arrayfields['t.progress_summary']['checked'])) + { + print ''; + if (! $i) $totalarray['nbfield']++; + if (! $i) $totalarray['totalprogress_summary']=$totalarray['nbfield']; } // Time not billed if (! empty($arrayfields['t.tobill']['checked'])) @@ -891,7 +908,7 @@ if (isset($totalarray['totaldurationeffectivefield']) || isset($totalarray['tota elseif ($totalarray['totalprogress_declaredfield'] == $i) print ''; elseif ($totalarray['totaltobillfield'] == $i) print ''; elseif ($totalarray['totalbilledfield'] == $i) print ''; - else print ''; + else print ''; } print ''; } From 1d311b29691d840474e9ea9f38a2922b09582fec Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 8 Sep 2019 21:21:33 +0200 Subject: [PATCH 1123/1148] Fix scrutinizer --- htdocs/core/modules/modBlockedLog.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modBlockedLog.class.php b/htdocs/core/modules/modBlockedLog.class.php index d9833e2978e..b582d5e2165 100644 --- a/htdocs/core/modules/modBlockedLog.class.php +++ b/htdocs/core/modules/modBlockedLog.class.php @@ -93,7 +93,7 @@ class modBlockedLog extends DolibarrModules $this->always_enabled = (!empty($conf->blockedlog->enabled) && !empty($conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY) && in_array($mysoc->country_code, explode(',', $conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY)) - && $this->alreadyUsed(1)); + && $this->alreadyUsed()); // Constants //----------- From 47f72fb74cac7c57f777347098544bad131cb467 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 8 Sep 2019 21:21:58 +0200 Subject: [PATCH 1124/1148] Update data file --- htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql index 5b6f4bf3f0c..312c30210c8 100644 --- a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql +++ b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql @@ -41,3 +41,4 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRASSOMPTION', 0, 1, 0, 8, 15, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRTOUSSAINT', 0, 1, 0, 11, 1, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRARMISTICE', 0, 1, 0, 11, 11, 1); +--INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('EASTER', 0, 1, 'easter', 0, 0, 0, 1); From 5cc0b24f6fb77b269498f763ebd33b42c753a59b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 8 Sep 2019 21:24:01 +0200 Subject: [PATCH 1125/1148] Fix param --- htdocs/core/tpl/contacts.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php index 1f7d403b575..0f9b733d010 100644 --- a/htdocs/core/tpl/contacts.tpl.php +++ b/htdocs/core/tpl/contacts.tpl.php @@ -208,7 +208,7 @@ if ($permission) { if ($tab[$i]['source']=='external') { $contactstatic->fetch($tab[$i]['id']); - echo $contactstatic->getNomUrl(1, '', 0, '', 0, 0, '', 'valignmiddle'); + echo $contactstatic->getNomUrl(1, '', 0, '', 0, 0); } ?> From feca9a7ee3198f28fbab20c4555a30d4ce300e85 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 8 Sep 2019 21:28:17 +0200 Subject: [PATCH 1126/1148] Fix phpcs --- htdocs/modulebuilder/index.php | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 30fd315dde3..4b7efffdfed 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -2372,18 +2372,18 @@ elseif (! empty($module)) print '
".$langs->trans("RuleForStockManagementDecrease")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("DeStockOnBill").''; +print ''; if (! empty($conf->facture->enabled)) { if ($conf->use_javascript_ajax) { @@ -130,7 +130,7 @@ $found++; print '
'.$langs->trans("DeStockOnValidateOrder").''; +print ''; if (! empty($conf->commande->enabled)) { if ($conf->use_javascript_ajax) { @@ -152,7 +152,7 @@ $found++; print '
'.$langs->trans("DeStockOnShipment").''; +print ''; if (! empty($conf->expedition->enabled)) { if ($conf->use_javascript_ajax) { @@ -172,7 +172,7 @@ $found++; print '
'.$langs->trans("DeStockOnShipmentOnClosing").''; +print ''; if (! empty($conf->expedition->enabled)) { if ($conf->use_javascript_ajax) { @@ -205,14 +205,14 @@ print '
'; print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; $found=0; print ''; print ''; -print ''; print ''; -print ''; - print ''; - print ''; + print ''; - print ''; - print ''; + print ''; print ''; - print '
".$langs->trans("RuleForStockManagementIncrease")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("ReStockOnBill").''; +print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -233,7 +233,7 @@ $found++; print '
'.$langs->trans("ReStockOnValidateOrder").''; +print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -253,8 +253,8 @@ $found++; if (!empty($conf->reception->enabled)) { print '
'.$langs->trans("StockOnReception").''; + print ''.$langs->trans("StockOnReception").''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION'); @@ -268,8 +268,8 @@ if ($conf->use_javascript_ajax) { print '
'.$langs->trans("StockOnReceptionOnClosing").''; + print ''.$langs->trans("StockOnReceptionOnClosing").''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE'); @@ -284,7 +284,7 @@ else { print '
'.$langs->trans("ReStockOnDispatchOrder").''; + print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -313,16 +313,17 @@ if ($conf->use_javascript_ajax) { print '
'; print '
'; + print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''; print ''; -print ''; print ''; - print ''; print ''; - print ''; print ''; - print ''; + print ''; + print ''; + print "
".$langs->trans("RuleForStockAvailability")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("WarehouseAllowNegativeTransfer").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_ALLOW_NEGATIVE_TRANSFER'); } else { @@ -337,7 +338,7 @@ if($conf->invoice->enabled) { print '
'.$langs->trans("StockMustBeEnoughForInvoice").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE'); } else { @@ -352,7 +353,7 @@ if($conf->order->enabled) { print '
'.$langs->trans("StockMustBeEnoughForOrder").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER'); } else { @@ -367,7 +368,7 @@ if($conf->expedition->enabled) { print '
'.$langs->trans("StockMustBeEnoughForShipment").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT'); } else { @@ -391,12 +392,12 @@ if ($virtualdiffersfromphysical) print ''; print ''; print "\n"; - print ''."\n"; + print ''."\n"; print ''."\n"; print ''; print ''; - print ''; print ''; print ''; print "\n"; -$var=false; -//if ($conf->global->MAIN_FEATURES_LEVEL > 0) -//{ - print '\n"; +print '\n"; -//} // Ask for payment bank during supplier order /* Kept as hidden for the moment @@ -564,6 +560,20 @@ print '\n"; +// Option to add a quality/validation step, on products, after reception. +$langs->load("stocks"); +print ''; +print ''; +print ''; +print '\n\n"; + print '
".$langs->trans("RuleForStockReplenishment")." ".img_help('help', $langs->trans("VirtualDiffersFromPhysical"))."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UseVirtualStockByDefault").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK'); } else { @@ -414,12 +415,12 @@ print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''; print ''; -print ''; print ''; -print '\n"; print ''; print ''; -print '\n"; print "\n"; -if (! empty($conf->fournisseur->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) { - print ''; - print ''; - print '\n\n"; -} - print '
".$langs->trans("Other")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UserWarehouseAutoCreate").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_USERSTOCK_AUTOCREATE'); } else { @@ -433,7 +434,7 @@ print '
'; print $form->textwithpicto($langs->trans("StockSupportServices"), $langs->trans("StockSupportServicesDesc")); print ''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_SUPPORTS_SERVICES'); } else { @@ -445,7 +446,7 @@ print "
'.$langs->trans("AllowAddLimitStockByWarehouse").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE'); } else { @@ -455,19 +456,6 @@ if ($conf->use_javascript_ajax) { print "
'.$langs->trans("UseDispatchStatus").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); -} - print "
'; print '
'; @@ -476,43 +464,45 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) print ''; print ''; print ''."\n"; - print ''."\n"; - print ''."\n"; + print ''."\n"; + print ''."\n"; // Example with a yes / no select - print ''; + /*print ''; print ''; - print ''; + */ // Example with a yes / no select - print ''; + /*print ''; print ''; - print ''; + print ''; + */ - // Example with a yes / no select + // Example with a yes / no select print ''; - print ''; - print ''; + print ''; print '
'.$langs->trans("Inventory").''.$langs->trans("Status").'
'.$langs->trans("Status").'
'.$langs->trans("INVENTORY_DISABLE_VIRTUAL").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL); -} + print ''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL); + } print '
'.$langs->trans("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA); -} - print '
'; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA); + } + print '
'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT); -} + print ''.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT").''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT); + } print '
'; diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index e895a0b4005..f1fbbd4b286 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -494,20 +494,16 @@ print '
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'; - print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'
'; - print $langs->trans("IfSetToYesDontForgetPermission"); - print '
'; - print ''; - print ''; - print ''; - print "
'; +print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'
'; +print $langs->trans("IfSetToYesDontForgetPermission"); +print '
'; +print ''; +print ''; +print ''; +print "
'; print ''; print "
'.$langs->trans("UseDispatchStatus").''; +if ($conf->use_javascript_ajax) { + print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); +} else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); +} +print "

'; print ''; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 2edd86d1c10..c38107b14b4 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1822,10 +1822,9 @@ class CommandeFournisseur extends CommonOrder $error++; } - // Si module stock gere et que incrementation faite depuis un dispatching en stock + // If module stock is enabled and the stock increase is done on purchase order dispatching if (! $error && $entrepot > 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) { - $mouv = new MouvementStock($this->db); if ($product > 0) { diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index ff33a42e2a9..66b48164a9e 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2346,7 +2346,7 @@ elseif (! empty($object->id)) }*/ // Modify - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->commander) { @@ -2355,7 +2355,7 @@ elseif (! empty($object->id)) } // Approve - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approuver) { @@ -2377,7 +2377,7 @@ elseif (! empty($object->id)) // Second approval (if option SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED is set) if (! empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) { - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approve2) { @@ -2398,7 +2398,7 @@ elseif (! empty($object->id)) } // Refuse - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approuver || $user->rights->fournisseur->commande->approve2) { @@ -2411,7 +2411,7 @@ elseif (! empty($object->id)) } // Send - if (in_array($object->statut, array(2, 3, 4, 5))) + if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED, 3, 4, 5))) { if ($user->rights->fournisseur->commande->commander) { @@ -2420,7 +2420,7 @@ elseif (! empty($object->id)) } // Reopen - if (in_array($object->statut, array(2))) + if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED))) { $buttonshown=0; if (! $buttonshown && $user->rights->fournisseur->commande->approuver) @@ -2462,7 +2462,7 @@ elseif (! empty($object->id)) } } - if ($object->statut == 2) + if ($object->statut == CommandeFournisseur::STATUS_ACCEPTED) { if ($user->rights->fournisseur->commande->commander) { @@ -2474,6 +2474,15 @@ elseif (! empty($object->id)) } } + // Classify received (this does not record reception) + if ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY) + { + if ($user->rights->fournisseur->commande->receptionner) + { + print ''; + } + } + // Create bill //if (! empty($conf->facture->enabled)) //{ @@ -2590,38 +2599,41 @@ elseif (! empty($object->id)) print '
'; - if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) + if ($action == 'classifyreception') { - // Set status to received (action=livraison) - print ''."\n"; - print '
'; - print ''; - print ''; - print load_fiche_titre($langs->trans("Receive"), '', ''); + if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) + { + // Set status to received (action=livraison) + print ''."\n"; + print ''; + print ''; + print ''; + print load_fiche_titre($langs->trans("Receive"), '', ''); - print ''; - //print ''; - print '\n"; + print '
'.$langs->trans("Receive").'
'.$langs->trans("DeliveryDate").''; - $datepreselected = dol_now(); - print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); - print "
'; + //print ''; + print '\n"; - print ''; - print ''; - print ''; - print "
'.$langs->trans("Receive").'
'.$langs->trans("DeliveryDate").''; + $datepreselected = dol_now(); + print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); + print "
'.$langs->trans("Delivery")."\n"; - $liv = array(); - $liv[''] = ' '; - $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); - $liv['par'] = $langs->trans("PartialWoman"); - $liv['nev'] = $langs->trans("NeverReceived"); - $liv['can'] = $langs->trans("Canceled"); + print '
'.$langs->trans("Delivery")."\n"; + $liv = array(); + $liv[''] = ' '; + $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); + $liv['par'] = $langs->trans("PartialWoman"); + $liv['nev'] = $langs->trans("NeverReceived"); + $liv['can'] = $langs->trans("Canceled"); - print $form->selectarray("type", $liv); + print $form->selectarray("type", $liv); - print '
'.$langs->trans("Comment").'
\n"; - print "
\n"; - print "
"; + print '
'.$langs->trans("Comment").'
\n"; + print "\n"; + print "
"; + } } // List of actions on element diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 9b8c6f04c51..494e7d4a8a3 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1695,7 +1695,7 @@ SuppliersSetup=Vendor module setup SuppliersCommandModel=Complete template of purchase order (logo...) SuppliersInvoiceModel=Complete template of vendor invoice (logo...) SuppliersInvoiceNumberingModel=Vendor invoices numbering models -IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval +IfSetToYesDontForgetPermission=If set to a non null value, don't forget to provide permissions to groups or users allowed for the second approval ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=GeoIP Maxmind module setup PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.
Examples:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoLite2-Country.mmdb diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index ad895845488..256bd2a7d4d 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -154,5 +154,5 @@ CreateOrders=Create orders ToBillSeveralOrderSelectCustomer=To create an invoice for several orders, click first onto customer, then choose "%s". OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually. IfValidateInvoiceIsNoOrderStayUnbilled=If invoice validation is 'No', the order will remain to status 'Unbilled' until the invoice is validated. -CloseReceivedSupplierOrdersAutomatically=Close order to "%s" automatically if all products are received. +CloseReceivedSupplierOrdersAutomatically=Close order to status "%s" automatically if all products are received. SetShippingMode=Set shipping mode diff --git a/htdocs/langs/en_US/sendings.lang b/htdocs/langs/en_US/sendings.lang index ede7fea87b7..f3f023f8dcf 100644 --- a/htdocs/langs/en_US/sendings.lang +++ b/htdocs/langs/en_US/sendings.lang @@ -21,6 +21,7 @@ QtyShipped=Qty shipped QtyShippedShort=Qty ship. QtyPreparedOrShipped=Qty prepared or shipped QtyToShip=Qty to ship +QtyToReceive=Qty to receive QtyReceived=Qty received QtyInOtherShipments=Qty in other shipments KeepToShip=Remain to ship @@ -46,6 +47,7 @@ DateDeliveryPlanned=Planned date of delivery RefDeliveryReceipt=Ref delivery receipt StatusReceipt=Status delivery receipt DateReceived=Date delivery received +ClassifyReception=Classify reception SendShippingByEMail=Send shipment by email SendShippingRef=Submission of shipment %s ActionsOnShipping=Events on shipment diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index d42f1a82243..a98d4e18cbf 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -55,7 +55,7 @@ PMPValue=Weighted average price PMPValueShort=WAP EnhancedValueOfWarehouses=Warehouses value UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user -AllowAddLimitStockByWarehouse=Manage also values for minimum and desired stock per pairing (product-warehouse) in addition to values per product +AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock per pairing (product-warehouse) in addition to the value for minimum and desired stock per product IndependantSubProductStock=Product stock and subproduct stock are independent QtyDispatched=Quantity dispatched QtyDispatchedShort=Qty dispatched @@ -184,7 +184,7 @@ SelectFournisseur=Vendor filter inventoryOnDate=Inventory INVENTORY_DISABLE_VIRTUAL=Virtual product (kit): do not decrement stock of a child product INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found -INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement has date of inventory +INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT=Stock movements will have the date of inventory (instead of the date of inventory validation) inventoryChangePMPPermission=Allow to change PMP value for a product ColumnNewPMP=New unit PMP OnlyProdsInStock=Do not add product without stock diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang index a4a8827ca05..bbbeb2638e8 100644 --- a/htdocs/langs/fr_FR/orders.lang +++ b/htdocs/langs/fr_FR/orders.lang @@ -154,5 +154,5 @@ CreateOrders=Créer commandes ToBillSeveralOrderSelectCustomer=Pour créer une facture pour plusieurs commandes, cliquez d'abord sur le client, puis choisir "%s". OptionToSetOrderBilledNotEnabled=L'option (issue du module Workflow) pour définir automatiquement les commandes à 'Facturé' que une facture est validée, est désactivée, aussi vous devrez donc définir le statut de la commande sur 'Facturé' manuellement. IfValidateInvoiceIsNoOrderStayUnbilled=Si la validation de facture est à "Non", la commande restera au statut "Non facturé" jusqu'à ce que la facture soit validée. -CloseReceivedSupplierOrdersAutomatically=Fermer la commande "%s" automatiquement si tous les produits ont été reçus. +CloseReceivedSupplierOrdersAutomatically=Fermer la commande au statut "%s" automatiquement si tous les produits ont été reçus. SetShippingMode=Définir la méthode d'expédition diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 62cfc476ba8..85b174ea725 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -59,7 +59,7 @@ class Inventory extends CommonObject * 'type' if the field format. * 'label' the translation key. * 'enabled' is a condition when the field must be managed. - * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing) + * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing) * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). * 'index' if we want an index in database. * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). @@ -96,7 +96,7 @@ class Inventory extends CommonObject //'fk_user_valid' =>array('type'=>'integer', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>512), 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000), - 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'Todo', 1=>'Done', -1=>'Cancel')), + 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'ToDo', 1=>'Done', -1=>'Cancel')), ); /** diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 2153d8a53c7..e93c4f2d7ad 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -11,7 +11,7 @@ * Copyright (C) 2015 Claudio Aschieri * Copyright (C) 2016 Ferran Marcet * Copyright (C) 2016 Yasser Carreón - * Copyright (C) 2018 Quentin Vial-Gouteyron + * Copyright (C) 2018 Quentin Vial-Gouteyron * * 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 @@ -56,7 +56,7 @@ if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } -$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal')); +$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal','sendings')); if (!empty($conf->incoterm->enabled)) $langs->load('incoterm'); if (! empty($conf->productbatch->enabled)) $langs->load('productbatch'); From 80daf29d790e60031d2b3ad02d85ba58504ca0dc Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 01:52:51 +0200 Subject: [PATCH 1072/1148] Fix conflict between new module reception and old process Fix inventory record does not need status at creation Conflicts: htdocs/fourn/commande/card.php --- htdocs/admin/stock.php | 120 ++++++++---------- htdocs/admin/supplier_order.php | 34 +++-- .../class/fournisseur.commande.class.php | 3 +- htdocs/fourn/commande/card.php | 80 +++++++----- htdocs/langs/en_US/admin.lang | 2 +- htdocs/langs/en_US/orders.lang | 2 +- htdocs/langs/en_US/sendings.lang | 2 + htdocs/langs/en_US/stocks.lang | 4 +- htdocs/langs/fr_FR/orders.lang | 2 +- .../inventory/class/inventory.class.php | 4 +- htdocs/reception/card.php | 4 +- 11 files changed, 135 insertions(+), 122 deletions(-) diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index 2e934211970..83834aa5861 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -98,14 +98,14 @@ print '
'; print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; $found=0; print ''; print ''; -print ''; print ''; -print ''; print ''; -print ''; print ''; -print ''; print "\n"; + // Ref client print ''; + print $langs->trans("SupplierOrder").''; print '\n"; From fbbe49d6dcf8dbe2fae7f06e7bfab1d060a5362d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:12:56 +0200 Subject: [PATCH 1075/1148] Replace deprecated code --- htdocs/reception/card.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index f1d32b3ed6e..1dbac0117fa 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -816,7 +816,7 @@ if ($action == 'create') print '\n"; print ''; @@ -1164,10 +1164,10 @@ if ($action == 'create') { print ''; print ''; print ''; } else { @@ -1425,7 +1425,7 @@ elseif ($id || $ref) print ''; print ''; print ''; - print $form->select_date($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0, 1); + print $form->selectDate($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0); print ''; print ''; } @@ -1888,9 +1888,9 @@ elseif ($id || $ref) { print ''; } print ''; From 16484e1fa3fccb4a44dfa87ff5f051aa5fd4efc5 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:22:44 +0200 Subject: [PATCH 1076/1148] Fix balance of td --- htdocs/fourn/commande/dispatch.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 48599a5bbf2..17a7443aa9f 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -883,8 +883,16 @@ if ($id > 0 || ! empty($ref)) { print ''; print ''; print ''; - if (! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS) || !empty($conf->reception->enabled)) + + // Status + if (! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS) && empty($reception->rowid)) { print ''; + } + elseif(!empty($conf->reception->enabled)) { + print ''; + } + + print ''; print "\n"; @@ -969,17 +977,15 @@ if ($id > 0 || ! empty($ref)) { } } print ''; - }elseif(!empty($conf->reception->enabled)){ + } elseif(!empty($conf->reception->enabled)) { print ''; } - print ''; - print ''; - + print ''; print "\n"; From 5b1d94a668d46b4ad54ce07007eec2cebb933c6e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:27:49 +0200 Subject: [PATCH 1077/1148] Fix translation --- .../core/modules/reception/doc/pdf_squille.modules.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/htdocs/core/modules/reception/doc/pdf_squille.modules.php b/htdocs/core/modules/reception/doc/pdf_squille.modules.php index 9acd517370a..ca167e10644 100644 --- a/htdocs/core/modules/reception/doc/pdf_squille.modules.php +++ b/htdocs/core/modules/reception/doc/pdf_squille.modules.php @@ -121,15 +121,7 @@ class pdf_squille extends ModelePdfReception // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; - $outputlangs->load("main"); - $outputlangs->load("dict"); - $outputlangs->load("companies"); - $outputlangs->load("bills"); - $outputlangs->load("products"); - $outputlangs->load("propal"); - $outputlangs->load("deliveries"); - $outputlangs->load("receptions"); - $outputlangs->load("productbatch"); + $outputlangs->loadLangs(array("main","dict","companies","bills","products","propal","deliveries","receptions","productbatch","sendings")); $nblignes = count($object->lines); From 626e3fd90e8cf244f123c9bd8dc77f211ea1dd27 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:34:24 +0200 Subject: [PATCH 1078/1148] Fix look and feel v10 --- htdocs/commande/tpl/linkedobjectblock.tpl.php | 4 +- .../reception/tpl/linkedobjectblock.tpl.php | 39 +++++++++++++------ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php index 74a2243d633..c2fed2895a8 100644 --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php @@ -81,8 +81,8 @@ if (count($linkedObjectBlock) > 1) - - + + diff --git a/htdocs/reception/tpl/linkedobjectblock.tpl.php b/htdocs/reception/tpl/linkedobjectblock.tpl.php index 9601c661c70..2b66b76e9dd 100644 --- a/htdocs/reception/tpl/linkedobjectblock.tpl.php +++ b/htdocs/reception/tpl/linkedobjectblock.tpl.php @@ -1,6 +1,7 @@ - * Copyright (C) 2014 Marcos García +/* Copyright (C) 2012 Regis Houssin + * Copyright (C) 2014 Marcos García + * Copyright (C) 2019 Laurent Destailleur * * 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 @@ -15,6 +16,14 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + +// Protection to avoid direct call of template +if (empty($conf) || ! is_object($conf)) +{ + print "Error, template page can't be called as URL"; + exit; +} + ?> @@ -22,41 +31,47 @@ load("receptions"); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); + $total=0; $ilink=0; -$var=true; foreach($linkedObjectBlock as $key => $objectlink) { $ilink++; - $trclass=($var?'pair':'impair'); + $trclass='oddeven'; if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total'; ?> - - - - - + + + + - - + + ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?> + Date: Fri, 6 Sep 2019 02:39:08 +0200 Subject: [PATCH 1079/1148] Fix more consistent setup --- htdocs/admin/supplier_order.php | 20 +++++++++++++------- htdocs/langs/en_US/admin.lang | 1 + 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index f1fbbd4b286..2fef63ffdd8 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php'; // Load translation files required by the page -$langs->loadLangs(array("admin", "other", "orders")); +$langs->loadLangs(array("admin", "other", "orders", "stocks")); if (!$user->admin) accessforbidden(); @@ -561,16 +561,22 @@ print '' print "\n"; // Option to add a quality/validation step, on products, after reception. -$langs->load("stocks"); print ''; print ''; print ''; print '\n\n"; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 5f1d04f8bb0..bc9981faf3f 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1919,3 +1919,4 @@ DeleteEmailCollector=Delete email collector ConfirmDeleteEmailCollector=Are you sure you want to delete this email collector? RecipientEmailsWillBeReplacedWithThisValue=Recipient emails will be always replaced with this value AtLeastOneDefaultBankAccountMandatory=At least 1 default bank account must be defined +FeatureNotAvailableWithReceptionModule=Feature not available when module Reception is enabled \ No newline at end of file From c0b8315e1983c3ddc6b3f6a2d0ac759e33338deb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:45:00 +0200 Subject: [PATCH 1080/1148] Replace deprecated code --- htdocs/reception/list.php | 2 +- htdocs/website/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/reception/list.php b/htdocs/reception/list.php index 17518df8ab6..8b37df8c779 100644 --- a/htdocs/reception/list.php +++ b/htdocs/reception/list.php @@ -566,7 +566,7 @@ if ($resql) print $langs->trans('DateInvoice'); print ''; print ''; print ''; print ''; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 1fd5939b4ac..38af5be87e4 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -3080,7 +3080,7 @@ if ($action == 'editmeta' || $action == 'createcontainer') print ''; From ec1751bae9f7342d61fc5bcbd461e83c25cdd56b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:47:20 +0200 Subject: [PATCH 1081/1148] Doxygen --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 5e2c754fce6..187df8cf539 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5216,7 +5216,7 @@ class Form * @param datetime $adddateof Add a link "Date of invoice" using the following date. * @return string|void Nothing or string if nooutput is 1 * @deprecated - * @see form_date(), select_month(), select_year(), select_dayofweek() + * @see selectDate(), form_date(), select_month(), select_year(), select_dayofweek() */ public function select_date($set_time = '', $prefix = 're', $h = 0, $m = 0, $empty = 0, $form_name = "", $d = 1, $addnowlink = 0, $nooutput = 0, $disabled = 0, $fullday = '', $addplusone = '', $adddateof = '') { From bb81f66a1af79915591aa4eb2c2bae574d82910e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 10:36:49 +0200 Subject: [PATCH 1082/1148] Add phpunit test for Lessc --- htdocs/comm/action/card.php | 4 +- .../class/bonprelevement.class.php | 2 - .../class/paymentsocialcontribution.class.php | 2 +- htdocs/core/class/CMailFile.class.php | 2 +- htdocs/core/class/extrafields.class.php | 3 +- htdocs/core/class/lessc.class.php | 4 +- htdocs/website/index.php | 2 +- test/phpunit/AllTests.php | 2 + test/phpunit/LesscTest.php | 182 ++++++++++++++++++ 9 files changed, 193 insertions(+), 10 deletions(-) create mode 100644 test/phpunit/LesscTest.php diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php index af54186e255..a9dd837fc8c 100644 --- a/htdocs/comm/action/card.php +++ b/htdocs/comm/action/card.php @@ -147,7 +147,7 @@ if ($action == 'classin' && ($user->rights->agenda->allactions->create || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->create))) { $object->fetch($id); - $object->setProject(GETPOST('projectid')); + $object->setProject(GETPOST('projectid', 'int')); } // Action clone object @@ -165,7 +165,7 @@ if ($action == 'confirm_clone' && $confirm == 'yes') reset($object->socpeopleassigned); $object->contactid = key($object->socpeopleassigned); } - $result = $object->createFromClone($user, GETPOST('fk_userowner'), GETPOST('socid')); + $result = $object->createFromClone($user, GETPOST('socid', 'int')); if ($result > 0) { header("Location: " . $_SERVER['PHP_SELF'] . '?id=' . $result); exit(); diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index a60330270d4..c9dd592c6a9 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -798,8 +798,6 @@ class BonPrelevement extends CommonObject $month = strftime("%m", $datetimeprev); $year = strftime("%Y", $datetimeprev); - $puser = new User($this->db, $conf->global->PRELEVEMENT_USER); - $this->invoice_in_error = array(); $this->thirdparty_in_error = array(); diff --git a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php index 86dda559061..c17724e2de5 100644 --- a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php +++ b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php @@ -184,7 +184,7 @@ class PaymentSocialContribution extends CommonObject $remaintopay=price2num($contrib->amount - $paiement - $creditnotes - $deposits, 'MT'); if ($remaintopay == 0) { - $result=$contrib->set_paid($user, '', ''); + $result=$contrib->set_paid($user); } else dol_syslog("Remain to pay for conrib ".$contribid." not null. We do nothing."); } diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index eabe0440dca..43ad52b5f47 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -428,7 +428,7 @@ class CMailFile foreach ($this->images_encoded as $img) { //$img['fullpath'],$img['image_encoded'],$img['name'],$img['content_type'],$img['cid'] - $attachment = Swift_Image::fromPath($img['fullpath'], $img['content_type']); + $attachment = Swift_Image::fromPath($img['fullpath']); // embed image $imgcid = $this->message->embed($attachment); // replace cid by the one created by swiftmail in html message diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index c92ae311141..0a9f98b4afd 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -274,9 +274,10 @@ class ExtraFields * @param string $perms Permission * @param string $list Into list view by default * @param string $computed Computed value + * @param string $help Help on tooltip * @return int <=0 if KO, >0 if OK */ - private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '') + private function create($attrname, $type = 'varchar', $length = 255, $elementtype = 'member', $unique = 0, $required = 0, $default_value = '', $param = '', $perms = '', $list = '0', $computed = '', $help = '') { if ($elementtype == 'thirdparty') $elementtype='societe'; if ($elementtype == 'contact') $elementtype='socpeople'; diff --git a/htdocs/core/class/lessc.class.php b/htdocs/core/class/lessc.class.php index f6a9208cadf..396991b6612 100644 --- a/htdocs/core/class/lessc.class.php +++ b/htdocs/core/class/lessc.class.php @@ -3058,7 +3058,7 @@ class lessc_parser { $content[] = $m[1]; if ($m[2] == "@{") { $this->count -= strlen($m[2]); - if ($this->interpolation($inter, false)) { + if ($this->interpolation($inter)) { $content[] = $inter; } else { $this->count += strlen($m[2]); @@ -3310,7 +3310,7 @@ class lessc_parser { continue; } - if ($this->interpolation($inter, false)) { + if ($this->interpolation($inter)) { $attrParts[] = $inter; $hasInterpolation = true; continue; diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 38af5be87e4..47e3188f5ff 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -705,7 +705,7 @@ if ($action == 'addcontainer') getAllImages($object, $objectpage, $urltograbbis, $tmpgeturl['content'], $action, 1, $grabimages, $grabimagesinto); include_once DOL_DOCUMENT_ROOT.'/core/class/lessc.class.php'; - $lesscobj = new lessc(); + $lesscobj = new Lessc(); try { $contentforlessc = ".bodywebsite {\n".$tmpgeturl['content']."\n}\n"; //print '
'.$contentforlessc.'
'; diff --git a/test/phpunit/AllTests.php b/test/phpunit/AllTests.php index 37abbc9a2bd..f5068dc59ee 100644 --- a/test/phpunit/AllTests.php +++ b/test/phpunit/AllTests.php @@ -87,6 +87,8 @@ class AllTests $suite->addTestSuite('DateLibTest'); require_once dirname(__FILE__).'/UtilsTest.php'; $suite->addTestSuite('UtilsTest'); + require_once dirname(__FILE__).'/LesscTest.php'; + $suite->addTestSuite('LesscTest'); //require_once dirname(__FILE__).'/DateLibTzFranceTest.php'; //$suite->addTestSuite('DateLibTzFranceTest'); require_once dirname(__FILE__).'/MarginsLibTest.php'; diff --git a/test/phpunit/LesscTest.php b/test/phpunit/LesscTest.php new file mode 100644 index 00000000000..634b362a7b2 --- /dev/null +++ b/test/phpunit/LesscTest.php @@ -0,0 +1,182 @@ + + * + * 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 . + * or see http://www.gnu.org/ + */ + +/** + * \file test/phpunit/LessTest.php + * \ingroup test + * \brief PHPUnit test + * \remarks To run this script as CLI: phpunit filename.php + */ + +global $conf,$user,$langs,$db; +//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver +//require_once 'PHPUnit/Autoload.php'; +require_once dirname(__FILE__).'/../../htdocs/master.inc.php'; +require_once dirname(__FILE__).'/../../htdocs/core/lib/security.lib.php'; +require_once dirname(__FILE__).'/../../htdocs/core/lib/security2.lib.php'; + +if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); +if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); +if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); +if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no menu to show +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); +if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is public (can be called outside logged session) + +if (empty($user->id)) +{ + print "Load permissions for admin user nb 1\n"; + $user->fetch(1); + $user->getrights(); +} +$conf->global->MAIN_DISABLE_ALL_MAILS=1; + + +/** + * Class for PHPUnit tests + * + * @backupGlobals disabled + * @backupStaticAttributes enabled + * @remarks backupGlobals must be disabled to have db,conf,user and lang not erased. + */ +class LesscTest extends PHPUnit\Framework\TestCase +{ + protected $savconf; + protected $savuser; + protected $savlangs; + protected $savdb; + + /** + * Constructor + * We save global variables into local variables + * + * @return SecurityTest + */ + public function __construct() + { + parent::__construct(); + + //$this->sharedFixture + global $conf,$user,$langs,$db; + $this->savconf=$conf; + $this->savuser=$user; + $this->savlangs=$langs; + $this->savdb=$db; + + print __METHOD__." db->type=".$db->type." user->id=".$user->id; + //print " - db ".$db->db; + print "\n"; + } + + // Static methods + public static function setUpBeforeClass() + { + global $conf,$user,$langs,$db; + $db->begin(); // This is to have all actions inside a transaction even if test launched without suite. + + print __METHOD__."\n"; + } + + // tear down after class + public static function tearDownAfterClass() + { + global $conf,$user,$langs,$db; + $db->rollback(); + + print __METHOD__."\n"; + } + + /** + * Init phpunit tests + * + * @return void + */ + protected function setUp() + { + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + print __METHOD__."\n"; + } + + /** + * End phpunit tests + * + * @return void + */ + protected function tearDown() + { + print __METHOD__."\n"; + } + + /** + * testLess + * + * @return string + */ + public function testLessc() + { + global $conf,$user,$langs,$db; + $conf=$this->savconf; + $user=$this->savuser; + $langs=$this->savlangs; + $db=$this->savdb; + + include_once DOL_DOCUMENT_ROOT.'/core/class/lessc.class.php'; + + $lesscobj = new Lessc(); + + $cssfile = " + a { font-size: 10px; } + b .test { + font-size: 10px; + } + "; + + try { + $contentforlessc = ".bodywebsite {\n".$cssfile."\n}\n"; + //print '
'.$contentforlessc.'
'; + $result = $lesscobj->compile($contentforlessc); + //var_dump($contentforlessc); exit; + + } catch (exception $e) { + //echo "failed to compile lessc"; + dol_syslog("Failed to compile the CSS with lessc: ".$e->getMessage(), LOG_WARNING); + } + + $cssexpected = " +.bodywebsite a { + font-size: 10px; +} +.bodywebsite b .test { + font-size: 10px; +} +"; + + print __METHOD__." SeparatorDecimal=".$result."\n"; + $this->assertEquals(trim($result), trim($cssexpected)); + + return; + } +} From f08c07f31550db064e66ad603665a4df8df3985b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 10:42:51 +0200 Subject: [PATCH 1083/1148] Fix bugs reported by scrutinizer --- htdocs/core/lib/files.lib.php | 6 ------ htdocs/core/menus/standard/empty.php | 11 +++++++---- htdocs/core/modules/import/import_csv.modules.php | 2 +- htdocs/core/modules/import/import_xlsx.modules.php | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 0c72fe35fab..3bbedb91076 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1023,22 +1023,16 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable { case UPLOAD_ERR_INI_SIZE: // 1 return 'ErrorFileSizeTooLarge'; - break; case UPLOAD_ERR_FORM_SIZE: // 2 return 'ErrorFileSizeTooLarge'; - break; case UPLOAD_ERR_PARTIAL: // 3 return 'ErrorPartialFile'; - break; case UPLOAD_ERR_NO_TMP_DIR: // return 'ErrorNoTmpDir'; - break; case UPLOAD_ERR_CANT_WRITE: return 'ErrorFailedToWriteInDir'; - break; case UPLOAD_ERR_EXTENSION: return 'ErrorUploadBlockedByAddon'; - break; default: break; } diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php index 1898d67ad39..964681a962b 100644 --- a/htdocs/core/menus/standard/empty.php +++ b/htdocs/core/menus/standard/empty.php @@ -51,12 +51,15 @@ class MenuManager /** - * Load this->tabMenu - * - * @return void + * Load this->tabMenu + * + * @param string $forcemainmenu To force mainmenu to load + * @param string $forceleftmenu To force leftmenu to load + * @return void */ - public function loadMenu() + public function loadMenu($forcemainmenu = '', $forceleftmenu = '') { + // Do nothing } diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php index 606b23e2767..0888e5b84bf 100644 --- a/htdocs/core/modules/import/import_csv.modules.php +++ b/htdocs/core/modules/import/import_csv.modules.php @@ -761,7 +761,7 @@ class ImportCsv extends ModeleImports $lastinsertid = $res->rowid; $last_insert_id_array[$tablename] = $lastinsertid; } elseif($resql->num_rows > 1) { - $this->errors[$error]['lib']=$langs->trans('MultipleRecordFoundWithTheseFilters', implode($filters, ', ')); + $this->errors[$error]['lib']=$langs->trans('MultipleRecordFoundWithTheseFilters', implode(', ', $filters)); $this->errors[$error]['type']='SQL'; $error++; } else { diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php index 66670247a4c..253622d115f 100644 --- a/htdocs/core/modules/import/import_xlsx.modules.php +++ b/htdocs/core/modules/import/import_xlsx.modules.php @@ -782,7 +782,7 @@ class ImportXlsx extends ModeleImports $lastinsertid = $res->rowid; $last_insert_id_array[$tablename] = $lastinsertid; } elseif($resql->num_rows > 1) { - $this->errors[$error]['lib']=$langs->trans('MultipleRecordFoundWithTheseFilters', implode($filters, ', ')); + $this->errors[$error]['lib']=$langs->trans('MultipleRecordFoundWithTheseFilters', implode(', ', $filters)); $this->errors[$error]['type']='SQL'; $error++; } else { From 529dd05226e53316e17995a0b2dd3f3dcd0f836b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 10:53:05 +0200 Subject: [PATCH 1084/1148] Replace deprecated code --- htdocs/adherents/class/adherent.class.php | 3 ++- htdocs/bom/class/api_boms.class.php | 2 +- htdocs/comm/propal/class/api_proposals.class.php | 2 +- htdocs/commande/class/api_orders.class.php | 2 +- htdocs/compta/facture/class/api_invoices.class.php | 2 +- htdocs/contrat/class/api_contracts.class.php | 2 +- htdocs/don/class/api_donations.class.php | 2 +- htdocs/expedition/class/api_shipments.class.php | 2 +- htdocs/expensereport/class/api_expensereports.class.php | 2 +- htdocs/fichinter/class/api_interventions.class.php | 2 +- htdocs/fourn/class/api_supplier_orders.class.php | 2 +- htdocs/modulebuilder/template/class/api_mymodule.class.php | 2 +- htdocs/product/class/api_products.class.php | 2 +- htdocs/projet/class/api_projects.class.php | 2 +- htdocs/projet/class/api_tasks.class.php | 2 +- htdocs/societe/class/api_thirdparties.class.php | 2 +- .../supplier_proposal/class/api_supplier_proposals.class.php | 2 +- htdocs/ticket/class/api_tickets.class.php | 4 ++-- htdocs/user/class/api_users.class.php | 2 +- 19 files changed, 21 insertions(+), 20 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index c5128942830..1b516e1c94e 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -2063,9 +2063,10 @@ class Adherent extends CommonObject * @param string $mode ''=Show firstname+lastname as label (using default order), 'firstname'=Show only firstname, 'login'=Show login, 'ref'=Show ref * @param string $morecss Add more css on link * @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking + * @param int $notooltip 1=Disable tooltip * @return string Chaine avec URL */ - public function getNomUrl($withpictoimg = 0, $maxlen = 0, $option = 'card', $mode = '', $morecss = '', $save_lastsearch_value = -1) + public function getNomUrl($withpictoimg = 0, $maxlen = 0, $option = 'card', $mode = '', $morecss = '', $save_lastsearch_value = -1, $notooltip = 0) { global $conf, $langs; diff --git a/htdocs/bom/class/api_boms.class.php b/htdocs/bom/class/api_boms.class.php index 54f289a5b23..89f3e337099 100644 --- a/htdocs/bom/class/api_boms.class.php +++ b/htdocs/bom/class/api_boms.class.php @@ -101,7 +101,7 @@ class Boms extends DolibarrApi $obj_ret = array(); $tmpobject = new BOM($db); - $socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : ''; + $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $restrictonsocid = 0; // Set to 1 if there is a field socid in table of object diff --git a/htdocs/comm/propal/class/api_proposals.class.php b/htdocs/comm/propal/class/api_proposals.class.php index 9cc8bd32d26..15badcd75a3 100644 --- a/htdocs/comm/propal/class/api_proposals.class.php +++ b/htdocs/comm/propal/class/api_proposals.class.php @@ -103,7 +103,7 @@ class Proposals extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php index 440ea9e6984..56147545f36 100644 --- a/htdocs/commande/class/api_orders.class.php +++ b/htdocs/commande/class/api_orders.class.php @@ -107,7 +107,7 @@ class Orders extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/compta/facture/class/api_invoices.class.php b/htdocs/compta/facture/class/api_invoices.class.php index d6b33acbda6..d558bf5ac7f 100644 --- a/htdocs/compta/facture/class/api_invoices.class.php +++ b/htdocs/compta/facture/class/api_invoices.class.php @@ -112,7 +112,7 @@ class Invoices extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php index 4735f840582..194e145210f 100644 --- a/htdocs/contrat/class/api_contracts.class.php +++ b/htdocs/contrat/class/api_contracts.class.php @@ -108,7 +108,7 @@ class Contracts extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/don/class/api_donations.class.php b/htdocs/don/class/api_donations.class.php index f9e2c5ab64b..ef59743e03f 100644 --- a/htdocs/don/class/api_donations.class.php +++ b/htdocs/don/class/api_donations.class.php @@ -106,7 +106,7 @@ class Donations extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; $sql = "SELECT t.rowid"; if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) ) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects) diff --git a/htdocs/expedition/class/api_shipments.class.php b/htdocs/expedition/class/api_shipments.class.php index 9f1e42a7aaa..5e4d0d5e00c 100644 --- a/htdocs/expedition/class/api_shipments.class.php +++ b/htdocs/expedition/class/api_shipments.class.php @@ -106,7 +106,7 @@ class Shipments extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/expensereport/class/api_expensereports.class.php b/htdocs/expensereport/class/api_expensereports.class.php index cb5a438bc21..f2177aafc63 100644 --- a/htdocs/expensereport/class/api_expensereports.class.php +++ b/htdocs/expensereport/class/api_expensereports.class.php @@ -101,7 +101,7 @@ class ExpenseReports extends DolibarrApi $obj_ret = array(); // case of external user, $societe param is ignored and replaced by user's socid - //$socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $societe; + //$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $societe; $sql = "SELECT t.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."expensereport as t"; diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php index b183623edb3..12f6824ad4d 100644 --- a/htdocs/fichinter/class/api_interventions.class.php +++ b/htdocs/fichinter/class/api_interventions.class.php @@ -113,7 +113,7 @@ class Interventions extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/fourn/class/api_supplier_orders.class.php b/htdocs/fourn/class/api_supplier_orders.class.php index 897d210b1f1..323ddf29521 100644 --- a/htdocs/fourn/class/api_supplier_orders.class.php +++ b/htdocs/fourn/class/api_supplier_orders.class.php @@ -103,7 +103,7 @@ class SupplierOrders extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/modulebuilder/template/class/api_mymodule.class.php b/htdocs/modulebuilder/template/class/api_mymodule.class.php index 0fcd9a8afd4..594f979bb22 100644 --- a/htdocs/modulebuilder/template/class/api_mymodule.class.php +++ b/htdocs/modulebuilder/template/class/api_mymodule.class.php @@ -111,7 +111,7 @@ class MyModuleApi extends DolibarrApi throw new RestException(401); } - $socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : ''; + $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $restrictonsocid = 0; // Set to 1 if there is a field socid in table of object diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php index 2543ff4a2e6..446b4fa3cfe 100644 --- a/htdocs/product/class/api_products.class.php +++ b/htdocs/product/class/api_products.class.php @@ -116,7 +116,7 @@ class Products extends DolibarrApi $obj_ret = array(); - $socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : ''; + $socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; $sql = "SELECT t.rowid, t.ref, t.ref_ext"; $sql.= " FROM ".MAIN_DB_PREFIX."product as t"; diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php index 38ea9796f65..0744017161e 100644 --- a/htdocs/projet/class/api_projects.class.php +++ b/htdocs/projet/class/api_projects.class.php @@ -105,7 +105,7 @@ class Projects extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/projet/class/api_tasks.class.php b/htdocs/projet/class/api_tasks.class.php index b5e589e4ef9..2415950e37b 100644 --- a/htdocs/projet/class/api_tasks.class.php +++ b/htdocs/projet/class/api_tasks.class.php @@ -113,7 +113,7 @@ class Tasks extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php index 95aad3a003b..ddb19c563fe 100644 --- a/htdocs/societe/class/api_thirdparties.class.php +++ b/htdocs/societe/class/api_thirdparties.class.php @@ -124,7 +124,7 @@ class Thirdparties extends DolibarrApi $obj_ret = array(); // case of external user, we force socids - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : ''; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : ''; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/supplier_proposal/class/api_supplier_proposals.class.php b/htdocs/supplier_proposal/class/api_supplier_proposals.class.php index 014951d980e..cb606e8a083 100644 --- a/htdocs/supplier_proposal/class/api_supplier_proposals.class.php +++ b/htdocs/supplier_proposal/class/api_supplier_proposals.class.php @@ -101,7 +101,7 @@ class Supplierproposals extends DolibarrApi $obj_ret = array(); // case of external user, $thirdparty_ids param is ignored and replaced by user's socid - $socids = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $thirdparty_ids; + $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids; // If the internal user must only see his customers, force searching by him $search_sale = 0; diff --git a/htdocs/ticket/class/api_tickets.class.php b/htdocs/ticket/class/api_tickets.class.php index 400b8452938..aac1bf88f60 100644 --- a/htdocs/ticket/class/api_tickets.class.php +++ b/htdocs/ticket/class/api_tickets.class.php @@ -234,8 +234,8 @@ class Tickets extends DolibarrApi $obj_ret = array(); - if (!$socid && DolibarrApiAccess::$user->societe_id) { - $socid = DolibarrApiAccess::$user->societe_id; + if (!$socid && DolibarrApiAccess::$user->socid) { + $socid = DolibarrApiAccess::$user->socid; } // If the internal user must only see his customers, force searching by him diff --git a/htdocs/user/class/api_users.class.php b/htdocs/user/class/api_users.class.php index f570dd21285..1344cdd9815 100644 --- a/htdocs/user/class/api_users.class.php +++ b/htdocs/user/class/api_users.class.php @@ -76,7 +76,7 @@ class Users extends DolibarrApi } // case of external user, $societe param is ignored and replaced by user's socid - //$socid = DolibarrApiAccess::$user->societe_id ? DolibarrApiAccess::$user->societe_id : $societe; + //$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $societe; $sql = "SELECT t.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."user as t"; From 369961b3766891766626307efbd8a3c5eab97ac1 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 6 Sep 2019 11:55:41 +0200 Subject: [PATCH 1085/1148] FIX avoid Warning: A non-numeric value encountered --- htdocs/contrat/card.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 5c9ac3375dd..35338f41903 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -433,7 +433,7 @@ if (empty($reshook)) } $qty = GETPOST('qty'.$predef); - $remise_percent = GETPOST('remise_percent'.$predef); + $remise_percent = (GETPOST('remise_percent'.$predef) != '' ? GETPOST('remise_percent'.$predef) : 0); if ($qty == '') { @@ -566,7 +566,8 @@ if (empty($reshook)) $info_bits=0; if ($tva_npr) $info_bits |= 0x01; - if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& ($price_min && (price2num($pu_ht)*(1-price2num($remise_percent)/100) < price2num($price_min)))) + if (((! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) + || empty($conf->global->MAIN_USE_ADVANCED_PERMS) ) && ($price_min && (price2num($pu_ht)*(1-price2num($remise_percent)/100) < price2num($price_min)))) { $object->error = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, -1, $conf->currency)); $result = -1 ; From 0ed7ab07fd8207df753e02da89c98ca46396e730 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 12:41:34 +0200 Subject: [PATCH 1086/1148] Fix date selection for supplier proposal not yet supported --- htdocs/supplier_proposal/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 56473959a39..551a5f0616e 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1711,7 +1711,7 @@ if ($action == 'create') if (! empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; if (! empty($object->lines)) - $ret = $object->printObjectLines($action, $soc, $mysoc, $lineid, 1); + $ret = $object->printObjectLines($action, $soc, $mysoc, $lineid, $dateSelector); // Form to add new line if ($object->statut == SupplierProposal::STATUS_DRAFT && $user->rights->supplier_proposal->creer) @@ -1719,7 +1719,7 @@ if ($action == 'create') if ($action != 'editline') { // Add products/services form - $object->formAddObjectLine(1, $soc, $mysoc); + $object->formAddObjectLine($dateSelector, $soc, $mysoc); $parameters = array(); $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook From 123eace8c04159ed57578d193ef3c91183d9a950 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 12:44:23 +0200 Subject: [PATCH 1087/1148] Fix look and feel v10 --- htdocs/core/class/commonobject.class.php | 19 +++++++++++++++---- htdocs/core/tpl/objectline_create.tpl.php | 2 +- htdocs/core/tpl/objectline_edit.tpl.php | 4 ++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index c57148124be..cabd5647bc9 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6532,9 +6532,12 @@ abstract class CommonObject } else { - $csstyle=''; $class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : ''); + $csstyle=''; if (is_array($params) && count($params)>0) { + if (array_key_exists('class', $params)) { + $class.=$params['class'].' '; + } if (array_key_exists('style', $params)) { $csstyle=$params['style']; } @@ -6571,16 +6574,19 @@ abstract class CommonObject $labeltoshow = $langs->trans($label); - $out .= '
'; $html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : ''; + $out .=''; + /*for($ii = 0; $ii < ($colspan - 1); $ii++) + { + $out .=''; + }*/ + if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1)) $out .= ''; else $out .= ''; $e++; diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index f427bb34f92..6bad5bb2ac5 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -375,7 +375,7 @@ if ($nolinesbefore) { { $coldisplay++; ?> - + + showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var],'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); + print $line->showOptionals($extrafieldsline, 'edit', array('class'=>'tredited', 'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } ?> From e1ee70fd8feb14b564eae6a57e2b990e30682d92 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 12:45:27 +0200 Subject: [PATCH 1088/1148] Start to implement date selection of supplier proposals --- .../install/mysql/migration/10.0.0-11.0.0.sql | 5 +- .../mysql/tables/llx_supplier_proposaldet.sql | 2 + htdocs/supplier_proposal/card.php | 21 +++-- .../class/supplier_proposal.class.php | 83 +++++++------------ 4 files changed, 53 insertions(+), 58 deletions(-) diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 64de0364139..00964b85e3e 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -105,4 +105,7 @@ create table llx_c_hrm_public_holiday )ENGINE=innodb; - \ No newline at end of file +ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_start datetime DEFAULT NULL; +ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_end datetime DEFAULT NULL; + + \ No newline at end of file diff --git a/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql b/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql index 211502686ee..b735046a340 100644 --- a/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql +++ b/htdocs/install/mysql/tables/llx_supplier_proposaldet.sql @@ -40,6 +40,8 @@ CREATE TABLE llx_supplier_proposaldet ( total_localtax2 double(24,8) DEFAULT 0, total_ttc double(24,8) DEFAULT 0, product_type integer DEFAULT 0, + date_start datetime DEFAULT NULL, -- date debut si service + date_end datetime DEFAULT NULL, -- date fin si service info_bits integer DEFAULT 0, buy_price_ht double(24,8) DEFAULT 0, fk_product_fournisseur_price integer DEFAULT NULL, diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index efb480370cd..2a61876659d 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -357,7 +357,7 @@ if (empty($reshook)) $array_options = $lines[$i]->array_options; } - $result = $object->addline( + $result = $object->addline( $desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, $lines[$i]->localtax1_tx, $lines[$i]->localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, @@ -646,6 +646,9 @@ if (empty($reshook)) $pu_ht = $productsupplier->fourn_pu; if (empty($pu_ht)) $pu_ht = 0; // If pu is '' or null, we force to have a numeric value + $fournprice = 0; + $buyingprice = 0; + $result=$object->addline( $desc, $pu_ht, @@ -670,9 +673,17 @@ if (empty($reshook)) $productsupplier->fk_unit, '', 0, - $productsupplier->fourn_multicurrency_unitprice + $productsupplier->fourn_multicurrency_unitprice, + $date_start, + $date_end ); + //var_dump($tva_tx);var_dump($productsupplier->fourn_pu);var_dump($price_base_type);exit; + if ($result < 0) + { + $error++; + setEventMessages($object->error, $object->errors, 'errors'); + } } if ($idprod == -99 || $idprod == 0) { @@ -1751,12 +1762,12 @@ if ($action == 'create') // Add free products/services form global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; - $forceall=1; $dateSelector=0; $inputalsopricewithtax=1; + $forceall=1; $dateSelector=1; $inputalsopricewithtax=1; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty. if (! empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; if (! empty($object->lines)) - $ret = $object->printObjectLines($action, $soc, $mysoc, $lineid, 1); + $ret = $object->printObjectLines($action, $soc, $mysoc, $lineid, $dateSelector); // Form to add new line if ($object->statut == SupplierProposal::STATUS_DRAFT && $user->rights->supplier_proposal->creer) @@ -1764,7 +1775,7 @@ if ($action == 'create') if ($action != 'editline') { // Add products/services form - $object->formAddObjectLine(1, $soc, $mysoc); + $object->formAddObjectLine($dateSelector, $soc, $mysoc); $parameters = array(); $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 3748aede1c7..142917a10d3 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -391,11 +391,13 @@ class SupplierProposal extends CommonObject * @param string $origin 'order', 'supplier_proposal', ... * @param int $origin_id Id of origin line * @param double $pu_ht_devise Amount in currency + * @param int $date_start Date start + * @param int $date_end Date end * @return int >0 if OK, <0 if KO * * @see add_product() */ - public function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $fk_product = 0, $remise_percent = 0, $price_base_type = 'HT', $pu_ttc = 0, $info_bits = 0, $type = 0, $rang = -1, $special_code = 0, $fk_parent_line = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $array_option = 0, $ref_supplier = '', $fk_unit = '', $origin = '', $origin_id = 0, $pu_ht_devise = 0) + public function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1 = 0, $txlocaltax2 = 0, $fk_product = 0, $remise_percent = 0, $price_base_type = 'HT', $pu_ttc = 0, $info_bits = 0, $type = 0, $rang = -1, $special_code = 0, $fk_parent_line = 0, $fk_fournprice = 0, $pa_ht = 0, $label = '', $array_option = 0, $ref_supplier = '', $fk_unit = '', $origin = '', $origin_id = 0, $pu_ht_devise = 0, $date_start = 0, $date_end = 0) { global $mysoc, $conf; @@ -570,6 +572,8 @@ class SupplierProposal extends CommonObject $this->line->origin=$origin; $this->line->origin_id=$origin_id; $this->line->ref_fourn = $this->db->escape($ref_supplier); + $this->line->date_start = $date_start; + $this->line->date_end = $date_end; // infos marge if (!empty($fk_product) && empty($fk_fournprice) && empty($pa_ht)) { @@ -594,10 +598,6 @@ class SupplierProposal extends CommonObject // Mise en option de la ligne if (empty($qty) && empty($special_code)) $this->line->special_code=3; - // TODO deprecated - $this->line->price=$price; - $this->line->remise=$remise; - if (is_array($array_option) && count($array_option)>0) { $this->line->array_options=$array_option; } @@ -613,7 +613,7 @@ class SupplierProposal extends CommonObject if ($result > 0) { $this->db->commit(); - return $this->line->rowid; + return $this->line->id; } else { @@ -629,6 +629,11 @@ class SupplierProposal extends CommonObject return -2; } } + else + { + $this->error = 'BadStatusOfObjectToAddLine'; + return -5; + } } @@ -688,6 +693,7 @@ class SupplierProposal extends CommonObject $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $mysoc, $this->thirdparty); // Clean vat code + $reg = array(); $vat_src_code=''; if (preg_match('/\((.*)\)/', $txtva, $reg)) { @@ -707,14 +713,6 @@ class SupplierProposal extends CommonObject $multicurrency_total_tva = $tabprice[17]; $multicurrency_total_ttc = $tabprice[18]; - // Anciens indicateurs: $price, $remise (a ne plus utiliser) - $price = $pu; - if ($remise_percent > 0) - { - $remise = round(($pu * $remise_percent / 100), 2); - $price = $pu - $remise; - } - // Update line $this->line=new SupplierProposalLine($this->db); @@ -730,7 +728,7 @@ class SupplierProposal extends CommonObject $this->line->rang = $rangmax + 1; } - $this->line->rowid = $rowid; + $this->line->id = $rowid; $this->line->label = $label; $this->line->desc = $desc; $this->line->qty = $qty; @@ -768,10 +766,6 @@ class SupplierProposal extends CommonObject } $this->line->pa_ht = $pa_ht; - // TODO deprecated - $this->line->price=$price; - $this->line->remise=$remise; - if (is_array($array_option) && count($array_option)>0) { $this->line->array_options=$array_option; } @@ -791,7 +785,6 @@ class SupplierProposal extends CommonObject $this->update_price(1); $this->fk_supplier_proposal = $this->id; - $this->rowid = $rowid; $this->db->commit(); return $result; @@ -2745,9 +2738,6 @@ class SupplierProposalLine extends CommonObjectLine public $oldline; - // From llx_supplier_proposaldet - public $rowid; // deprecated - /** * @var int ID */ @@ -2813,20 +2803,11 @@ class SupplierProposalLine extends CommonObjectLine // Bit 1: 0 ligne normale - 1 si ligne de remise fixe public $total_ht; // Total HT de la ligne toute quantite et incluant la remise ligne - public $total_tva; // Total TVA de la ligne toute quantite et incluant la remise ligne + public $total_tva; // Total TVA de la ligne toute quantite et incluant la remise ligne public $total_ttc; // Total TTC de la ligne toute quantite et incluant la remise ligne - /** - * @deprecated - * @see remise_percent, fk_remise_except - */ - public $remise; - - /** - * @deprecated - * @see subprice - */ - public $price; + public $date_start; + public $date_end; // From llx_product /** @@ -2902,6 +2883,7 @@ class SupplierProposalLine extends CommonObjectLine public function fetch($rowid) { $sql = 'SELECT pd.rowid, pd.fk_supplier_proposal, pd.fk_parent_line, pd.fk_product, pd.label as custom_label, pd.description, pd.price, pd.qty, pd.tva_tx,'; + $sql.= ' pd.date_start, pd.date_end,'; $sql.= ' pd.remise, pd.remise_percent, pd.fk_remise_except, pd.subprice,'; $sql.= ' pd.info_bits, pd.total_ht, pd.total_tva, pd.total_ttc, pd.fk_product_fournisseur_price as fk_fournprice, pd.buy_price_ht as pa_ht, pd.special_code, pd.rang,'; $sql.= ' pd.localtax1_tx, pd.localtax2_tx, pd.total_localtax1, pd.total_localtax2,'; @@ -2917,21 +2899,20 @@ class SupplierProposalLine extends CommonObjectLine { $objp = $this->db->fetch_object($result); - $this->rowid = $objp->rowid; // deprecated $this->id = $objp->rowid; $this->fk_supplier_proposal = $objp->fk_supplier_proposal; $this->fk_parent_line = $objp->fk_parent_line; $this->label = $objp->custom_label; $this->desc = $objp->description; $this->qty = $objp->qty; - $this->price = $objp->price; // deprecated $this->subprice = $objp->subprice; $this->tva_tx = $objp->tva_tx; - $this->remise = $objp->remise; $this->remise_percent = $objp->remise_percent; $this->fk_remise_except = $objp->fk_remise_except; $this->fk_product = $objp->fk_product; $this->info_bits = $objp->info_bits; + $this->date_start = $this->db->jdate($objp->date_start); + $this->date_end = $this->db->jdate($objp->date_end); $this->total_ht = $objp->total_ht; $this->total_tva = $objp->total_tva; @@ -3028,6 +3009,7 @@ class SupplierProposalLine extends CommonObjectLine // Insert line into database $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'supplier_proposaldet'; $sql.= ' (fk_supplier_proposal, fk_parent_line, label, description, fk_product, product_type,'; + $sql.= ' date_start, date_end,'; $sql.= ' fk_remise_except, qty, tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type,'; $sql.= ' subprice, remise_percent, '; $sql.= ' info_bits, '; @@ -3040,6 +3022,8 @@ class SupplierProposalLine extends CommonObjectLine $sql.= " '".$this->db->escape($this->desc)."',"; $sql.= " ".($this->fk_product?"'".$this->db->escape($this->fk_product)."'":"null").","; $sql.= " '".$this->db->escape($this->product_type)."',"; + $sql.= " ".($this->date_start ? "'".$this->db->idate($this->date_start)."'" : "null").","; + $sql.= " ".($this->date_end ? "'".$this->db->idate($this->date_end)."'" : "null").","; $sql.= " ".($this->fk_remise_except?"'".$this->db->escape($this->fk_remise_except)."'":"null").","; $sql.= " ".price2num($this->qty).","; $sql.= " ".price2num($this->tva_tx).","; @@ -3073,8 +3057,7 @@ class SupplierProposalLine extends CommonObjectLine $resql=$this->db->query($sql); if ($resql) { - $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'supplier_proposaldet'); - $this->id=$this->rowid; + $this->id=$this->db->last_insert_id(MAIN_DB_PREFIX.'supplier_proposaldet'); if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used { @@ -3120,7 +3103,7 @@ class SupplierProposalLine extends CommonObjectLine $error=0; $this->db->begin(); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."supplier_proposaldet WHERE rowid = ".$this->rowid; + $sql = "DELETE FROM ".MAIN_DB_PREFIX."supplier_proposaldet WHERE rowid = ".$this->id; dol_syslog("SupplierProposalLine::delete", LOG_DEBUG); if ($this->db->query($sql) ) { @@ -3128,7 +3111,6 @@ class SupplierProposalLine extends CommonObjectLine // Remove extrafields if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used { - $this->id=$this->rowid; $result=$this->deleteExtraFields(); if ($result < 0) { @@ -3180,8 +3162,6 @@ class SupplierProposalLine extends CommonObjectLine if (empty($this->localtax2_type)) $this->localtax2_type=0; if (empty($this->marque_tx)) $this->marque_tx=0; if (empty($this->marge_tx)) $this->marge_tx=0; - if (empty($this->price)) $this->price=0; // TODO A virer - if (empty($this->remise)) $this->remise=0; // TODO A virer if (empty($this->remise_percent)) $this->remise_percent=0; if (empty($this->info_bits)) $this->info_bits=0; if (empty($this->special_code)) $this->special_code=0; @@ -3212,6 +3192,8 @@ class SupplierProposalLine extends CommonObjectLine $sql.= " description='".$this->db->escape($this->desc)."'"; $sql.= " , label=".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null"); $sql.= " , product_type=".$this->product_type; + $sql.= " , date_start=".($this->date_start ? "'".$this->db->idate($this->date_start)."'" : "null"); + $sql.= " , date_end=".($this->date_end ? "'".$this->db->idate($this->date_end)."'" : "null"); $sql.= " , tva_tx='".price2num($this->tva_tx)."'"; $sql.= " , localtax1_tx=".price2num($this->localtax1_tx); $sql.= " , localtax2_tx=".price2num($this->localtax2_tx); @@ -3220,8 +3202,6 @@ class SupplierProposalLine extends CommonObjectLine $sql.= " , qty='".price2num($this->qty)."'"; $sql.= " , subprice=".price2num($this->subprice).""; $sql.= " , remise_percent=".price2num($this->remise_percent).""; - $sql.= " , price=".price2num($this->price).""; // TODO A virer - $sql.= " , remise=".price2num($this->remise).""; // TODO A virer $sql.= " , info_bits='".$this->db->escape($this->info_bits)."'"; if (empty($this->skip_update_total)) { @@ -3245,7 +3225,7 @@ class SupplierProposalLine extends CommonObjectLine $sql.= " , multicurrency_total_tva=".price2num($this->multicurrency_total_tva).""; $sql.= " , multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc).""; - $sql.= " WHERE rowid = ".$this->rowid; + $sql.= " WHERE rowid = ".$this->id; dol_syslog(get_class($this)."::update", LOG_DEBUG); $resql=$this->db->query($sql); @@ -3253,7 +3233,6 @@ class SupplierProposalLine extends CommonObjectLine { if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used { - $this->id=$this->rowid; $result=$this->insertExtraFields(); if ($result < 0) { @@ -3298,10 +3277,10 @@ class SupplierProposalLine extends CommonObjectLine // Mise a jour ligne en base $sql = "UPDATE ".MAIN_DB_PREFIX."supplier_proposaldet SET"; - $sql.= " total_ht=".price2num($this->total_ht, 'MT').""; - $sql.= ",total_tva=".price2num($this->total_tva, 'MT').""; - $sql.= ",total_ttc=".price2num($this->total_ttc, 'MT').""; - $sql.= " WHERE rowid = ".$this->rowid; + $sql.= " total_ht=".price2num($this->total_ht, 'MT'); + $sql.= ",total_tva=".price2num($this->total_tva, 'MT'); + $sql.= ",total_ttc=".price2num($this->total_ttc, 'MT'); + $sql.= " WHERE rowid = ".$this->id; dol_syslog("SupplierProposalLine::update_total", LOG_DEBUG); From 165f64463b754f63d287c02222c266ffca60480a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 12:44:23 +0200 Subject: [PATCH 1089/1148] Fix look and feel v10 --- htdocs/core/class/commonobject.class.php | 19 +++++++++++++++---- htdocs/core/tpl/objectline_create.tpl.php | 2 +- htdocs/core/tpl/objectline_edit.tpl.php | 4 ++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 4e88348c6d0..d20a8d2785b 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -6450,9 +6450,12 @@ abstract class CommonObject } else { - $csstyle=''; $class=(!empty($extrafields->attributes[$this->table_element]['hidden'][$key]) ? 'hideobject ' : ''); + $csstyle=''; if (is_array($params) && count($params)>0) { + if (array_key_exists('class', $params)) { + $class.=$params['class'].' '; + } if (array_key_exists('style', $params)) { $csstyle=$params['style']; } @@ -6489,16 +6492,19 @@ abstract class CommonObject $labeltoshow = $langs->trans($label); - $out .= ''; $html_id = !empty($this->id) ? $this->element.'_extras_'.$key.'_'.$this->id : ''; + $out .=''; + /*for($ii = 0; $ii < ($colspan - 1); $ii++) + { + $out .=''; + }*/ + if (! empty($conf->global->MAIN_EXTRAFIELDS_USE_TWO_COLUMS) && (($e % 2) == 1)) $out .= ''; else $out .= ''; $e++; diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index f427bb34f92..6bad5bb2ac5 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -375,7 +375,7 @@ if ($nolinesbefore) { { $coldisplay++; ?> - + + showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var],'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); + print $line->showOptionals($extrafieldsline, 'edit', array('class'=>'tredited', 'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1); } ?> From 104858cf4751fd73d845c7464a21b58e47b74984 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 12:51:10 +0200 Subject: [PATCH 1090/1148] Fix date selection on supplier proposal line not yet supported --- htdocs/supplier_proposal/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php index 2a61876659d..bf6ec8d0c59 100644 --- a/htdocs/supplier_proposal/card.php +++ b/htdocs/supplier_proposal/card.php @@ -1762,7 +1762,7 @@ if ($action == 'create') // Add free products/services form global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax; - $forceall=1; $dateSelector=1; $inputalsopricewithtax=1; + $forceall=1; $dateSelector=0; $inputalsopricewithtax=1; $senderissupplier=2; // $senderissupplier=2 is same than 1 but disable test on minimum qty. if (! empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) $senderissupplier=1; From d1a5be20ea2321b717e2fd5498b310f3027d493b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 13:02:52 +0200 Subject: [PATCH 1091/1148] Fix wrong warning --- htdocs/compta/prelevement/card.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index 5864d6301bd..b8aa09eae60 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -356,8 +356,6 @@ if ($id > 0 || $ref) print_liste_field_titre(''); print "\n"; - $var=false; - $total = 0; while ($i < min($num, $conf->liste_limit)) @@ -406,7 +404,10 @@ if ($id > 0 || $ref) print ''; print ''; print '\n"; print ''; From bc7bf3b4b5d0cdf7748914cf23693b66ff9b5303 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 13:44:02 +0200 Subject: [PATCH 1092/1148] FIX bad consistency in list of invoice for direct debit order. --- .../class/bonprelevement.class.php | 7 +- htdocs/compta/prelevement/demandes.php | 204 +++++++++++------- htdocs/compta/prelevement/index.php | 3 + 3 files changed, 129 insertions(+), 85 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 1a98c33ab02..6f8a7431b0e 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -739,14 +739,13 @@ class BonPrelevement extends CommonObject $sql = "SELECT count(f.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f"; $sql.= ", ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; - $sql.= " WHERE f.fk_statut = 1"; + $sql.= " WHERE f.fk_statut = ".Facture::STATUS_VALIDATED; $sql.= " AND f.entity IN (".getEntity('invoice').")"; $sql.= " AND f.rowid = pfd.fk_facture"; - $sql.= " AND f.paye = 0"; $sql.= " AND pfd.traite = 0"; $sql.= " AND f.total_ttc > 0"; - dol_syslog(get_class($this)."::SommeAPrelever"); + dol_syslog(get_class($this)."::NbFactureAPrelever"); $resql = $this->db->query($sql); if ( $resql ) @@ -759,7 +758,7 @@ class BonPrelevement extends CommonObject } else { - $this->error=get_class($this)."::SommeAPrelever Erreur -1 sql=".$this->db->error(); + $this->error=get_class($this)."::NbFactureAPrelever Erreur -1 sql=".$this->db->error(); return -1; } } diff --git a/htdocs/compta/prelevement/demandes.php b/htdocs/compta/prelevement/demandes.php index 8f9df284291..1caf62f1491 100644 --- a/htdocs/compta/prelevement/demandes.php +++ b/htdocs/compta/prelevement/demandes.php @@ -35,31 +35,43 @@ $langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies')); // Security check $socid = GETPOST('socid', 'int'); +$status = GETPOST('status', 'int'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'prelevement', '', '', 'bons'); -// Get supervariables -$page = GETPOST('page', 'int'); -$sortorder = GETPOST('sortorder', 'alpha'); -$sortfield = GETPOST('sortfield', 'alpha'); +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectlist'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page +$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') +// Load variable for pagination $limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; $sortfield = GETPOST("sortfield", 'alpha'); $sortorder = GETPOST("sortorder", 'alpha'); $page = GETPOST("page", 'int'); -if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1 +if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action $offset = $limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; if (! $sortorder) $sortorder="DESC"; if (! $sortfield) $sortfield="f.ref"; +$massactionbutton = ''; + /* * View */ -llxHeader(); +if (!$status) +{ + $title = $langs->trans("RequestStandingOrderToTreat"); +} +else +{ + $title = $langs->trans("RequestStandingOrderTreated"); +} + +llxHeader('', $title); $thirdpartystatic=new Societe($db); $invoicestatic=new Facture($db); @@ -78,95 +90,125 @@ $sql.= " WHERE s.rowid = f.fk_soc"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND f.fk_soc = ".$socid; -if (!$statut) $sql.= " AND pfd.traite = 0"; -if ($statut) $sql.= " AND pfd.traite = ".$statut; +if (!$status) $sql.= " AND pfd.traite = 0"; +if ($status) $sql.= " AND pfd.traite = ".$status; +$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; $sql.= " AND pfd.fk_facture = f.rowid"; if (dol_strlen(trim(GETPOST('search_societe', 'alpha')))) { $sql.= natural_search("s.nom", 'search_societe'); } -$sql.= " ORDER BY $sortfield $sortorder "; -$sql.= $db->plimit($limit+1, $offset); +$sql.=$db->order($sortfield, $sortorder); -$resql=$db->query($sql); -if ($resql) + +// Count total nb of records +$nbtotalofrecords = ''; +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { - $num = $db->num_rows($resql); - $i = 0; - - if (!$statut) + $resql = $db->query($sql); + $nbtotalofrecords = $db->num_rows($resql); + if (($page * $limit) > $nbtotalofrecords) // if total of record found is smaller than page * limit, goto and load page 0 { - print_barre_liste($langs->trans("RequestStandingOrderToTreat"), $page, "demandes.php", $urladd, $sortfield, $sortorder, '', $num); + $page = 0; + $offset = 0; } - else - { - print_barre_liste($langs->trans("RequestStandingOrderTreated"), $page, "demandes.php", $urladd, $sortfield, $sortorder, '', $num); - } - - print '
'; - - print '
".$langs->trans("RuleForStockManagementDecrease")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("DeStockOnBill").''; +print ''; if (! empty($conf->facture->enabled)) { if ($conf->use_javascript_ajax) { @@ -125,7 +125,7 @@ $found++; print '
'.$langs->trans("DeStockOnValidateOrder").''; +print ''; if (! empty($conf->commande->enabled)) { if ($conf->use_javascript_ajax) { @@ -147,7 +147,7 @@ $found++; print '
'.$langs->trans("DeStockOnShipment").''; +print ''; if (! empty($conf->expedition->enabled)) { if ($conf->use_javascript_ajax) { @@ -167,7 +167,7 @@ $found++; print '
'.$langs->trans("DeStockOnShipmentOnClosing").''; +print ''; if (! empty($conf->expedition->enabled)) { if ($conf->use_javascript_ajax) { @@ -200,14 +200,14 @@ print '
'; print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; $found=0; print ''; print ''; -print ''; print ''; -print ''; - print ''; - print ''; + print ''; - print ''; - print ''; + print ''; print ''; - print '
".$langs->trans("RuleForStockManagementIncrease")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("ReStockOnBill").''; +print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -228,7 +228,7 @@ $found++; print '
'.$langs->trans("ReStockOnValidateOrder").''; +print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -248,8 +248,8 @@ $found++; if (!empty($conf->reception->enabled)) { print '
'.$langs->trans("StockOnReception").''; + print ''.$langs->trans("StockOnReception").''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION'); @@ -263,8 +263,8 @@ if ($conf->use_javascript_ajax) { print '
'.$langs->trans("StockOnReceptionOnClosing").''; + print ''.$langs->trans("StockOnReceptionOnClosing").''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_CALCULATE_ON_RECEPTION_CLOSE'); @@ -279,7 +279,7 @@ else { print '
'.$langs->trans("ReStockOnDispatchOrder").''; + print ''; if (! empty($conf->fournisseur->enabled)) { if ($conf->use_javascript_ajax) { @@ -308,16 +308,17 @@ if ($conf->use_javascript_ajax) { print '
'; print '
'; + print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''; print ''; -print ''; print ''; - print ''; print ''; - print ''; print ''; - print ''; + print ''; + print ''; + print "
".$langs->trans("RuleForStockAvailability")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("WarehouseAllowNegativeTransfer").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_ALLOW_NEGATIVE_TRANSFER'); } else { @@ -332,7 +333,7 @@ if($conf->invoice->enabled) { print '
'.$langs->trans("StockMustBeEnoughForInvoice").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_INVOICE'); } else { @@ -347,7 +348,7 @@ if($conf->order->enabled) { print '
'.$langs->trans("StockMustBeEnoughForOrder").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_ORDER'); } else { @@ -362,7 +363,7 @@ if($conf->expedition->enabled) { print '
'.$langs->trans("StockMustBeEnoughForShipment").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_MUST_BE_ENOUGH_FOR_SHIPMENT'); } else { @@ -386,12 +387,12 @@ if ($virtualdiffersfromphysical) print ''; print ''; print "\n"; - print ''."\n"; + print ''."\n"; print ''."\n"; print ''; print ''; - print ''; print ''; print ''; print "\n"; -$var=false; -//if ($conf->global->MAIN_FEATURES_LEVEL > 0) -//{ - print '\n"; +print '\n"; -//} // Ask for payment bank during supplier order /* Kept as hidden for the moment @@ -564,6 +560,20 @@ print '\n"; +// Option to add a quality/validation step, on products, after reception. +$langs->load("stocks"); +print ''; +print ''; +print ''; +print '\n\n"; + print '
".$langs->trans("RuleForStockReplenishment")." ".img_help('help', $langs->trans("VirtualDiffersFromPhysical"))."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UseVirtualStockByDefault").''; + print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_USE_VIRTUAL_STOCK'); } else { @@ -409,12 +410,12 @@ print ''; print ''; print "\n"; -print ''."\n"; +print ''."\n"; print ''."\n"; print ''; print ''; -print ''; print ''; -print '\n"; print ''; print ''; -print '\n"; print "\n"; -if (! empty($conf->fournisseur->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) { - print ''; - print ''; - print '\n\n"; -} - print '
".$langs->trans("Other")."'.$langs->trans("Status").''.$langs->trans("Status").'
'.$langs->trans("UserWarehouseAutoCreate").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_USERSTOCK_AUTOCREATE'); } else { @@ -428,7 +429,7 @@ print '
'; print $form->textwithpicto($langs->trans("StockSupportServices"), $langs->trans("StockSupportServicesDesc")); print ''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_SUPPORTS_SERVICES'); } else { @@ -440,7 +441,7 @@ print "
'.$langs->trans("AllowAddLimitStockByWarehouse").''; +print ''; if ($conf->use_javascript_ajax) { print ajax_constantonoff('STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE'); } else { @@ -450,19 +451,6 @@ if ($conf->use_javascript_ajax) { print "
'.$langs->trans("UseDispatchStatus").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); -} - print "
'; print '
'; @@ -471,43 +459,45 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2) print ''; print ''; print ''."\n"; - print ''."\n"; - print ''."\n"; + print ''."\n"; + print ''."\n"; // Example with a yes / no select - print ''; + /*print ''; print ''; - print ''; + */ // Example with a yes / no select - print ''; + /*print ''; print ''; - print ''; + print ''; + */ - // Example with a yes / no select + // Example with a yes / no select print ''; - print ''; - print ''; + print ''; print '
'.$langs->trans("Inventory").''.$langs->trans("Status").'
'.$langs->trans("Status").'
'.$langs->trans("INVENTORY_DISABLE_VIRTUAL").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL); -} + print ''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_DISABLE_VIRTUAL'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_DISABLE_VIRTUAL", $arrval, $conf->global->INVENTORY_DISABLE_VIRTUAL); + } print '
'.$langs->trans("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA); -} - print '
'; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_USE_MIN_PA_IF_NO_LAST_PA'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_USE_MIN_PA_IF_NO_LAST_PA", $arrval, $conf->global->INVENTORY_USE_MIN_PA_IF_NO_LAST_PA); + } + print '
'.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT); -} + print ''.$langs->trans("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT").''; + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT", $arrval, $conf->global->INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT); + } print '
'; diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php index e895a0b4005..f1fbbd4b286 100644 --- a/htdocs/admin/supplier_order.php +++ b/htdocs/admin/supplier_order.php @@ -494,20 +494,16 @@ print '
'.$langs->trans("Parameter").''.$langs->trans("Value").' 
'; - print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'
'; - print $langs->trans("IfSetToYesDontForgetPermission"); - print '
'; - print ''; - print ''; - print ''; - print "
'; +print $form->textwithpicto($langs->trans("UseDoubleApproval"), $langs->trans("Use3StepsApproval"), 1, 'help').'
'; +print $langs->trans("IfSetToYesDontForgetPermission"); +print '
'; +print ''; +print ''; +print ''; +print "
'; print ''; print "
'.$langs->trans("UseDispatchStatus").''; +if ($conf->use_javascript_ajax) { + print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); +} else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); +} +print "

'; print ''; diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index d15545e4cda..51829492665 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1822,10 +1822,9 @@ class CommandeFournisseur extends CommonOrder $error++; } - // Si module stock gere et que incrementation faite depuis un dispatching en stock + // If module stock is enabled and the stock increase is done on purchase order dispatching if (! $error && $entrepot > 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) { - $mouv = new MouvementStock($this->db); if ($product > 0) { diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 3e42552a942..1f6baa158da 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -2338,7 +2338,7 @@ elseif (! empty($object->id)) }*/ // Modify - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->commander) { @@ -2347,7 +2347,7 @@ elseif (! empty($object->id)) } // Approve - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approuver) { @@ -2369,7 +2369,7 @@ elseif (! empty($object->id)) // Second approval (if option SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED is set) if (! empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $conf->global->MAIN_FEATURES_LEVEL > 0 && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) { - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approve2) { @@ -2390,7 +2390,7 @@ elseif (! empty($object->id)) } // Refuse - if ($object->statut == 1) + if ($object->statut == CommandeFournisseur::STATUS_VALIDATED) { if ($user->rights->fournisseur->commande->approuver || $user->rights->fournisseur->commande->approve2) { @@ -2403,7 +2403,7 @@ elseif (! empty($object->id)) } // Send - if (in_array($object->statut, array(2, 3, 4, 5))) + if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED, 3, 4, 5))) { if ($user->rights->fournisseur->commande->commander) { @@ -2412,7 +2412,7 @@ elseif (! empty($object->id)) } // Reopen - if (in_array($object->statut, array(2))) + if (in_array($object->statut, array(CommandeFournisseur::STATUS_ACCEPTED))) { $buttonshown=0; if (! $buttonshown && $user->rights->fournisseur->commande->approuver) @@ -2454,7 +2454,7 @@ elseif (! empty($object->id)) } } - if ($object->statut == 2) + if ($object->statut == CommandeFournisseur::STATUS_ACCEPTED) { if ($user->rights->fournisseur->commande->commander) { @@ -2466,6 +2466,15 @@ elseif (! empty($object->id)) } } + // Classify received (this does not record reception) + if ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY) + { + if ($user->rights->fournisseur->commande->receptionner) + { + print ''; + } + } + // Create bill //if (! empty($conf->facture->enabled)) //{ @@ -2583,38 +2592,41 @@ elseif (! empty($object->id)) print '
'; - if ($user->rights->fournisseur->commande->receptionner && ($object->statut == 3 || $object->statut == 4)) + if ($action == 'classifyreception') { - // Set status to received (action=livraison) - print ''."\n"; - print '
'; - print ''; - print ''; - print load_fiche_titre($langs->trans("Receive"), '', ''); + if ($user->rights->fournisseur->commande->receptionner && ($object->statut == CommandeFournisseur::STATUS_ORDERSENT || $object->statut == CommandeFournisseur::STATUS_RECEIVED_PARTIALLY)) + { + // Set status to received (action=livraison) + print ''."\n"; + print ''; + print ''; + print ''; + print load_fiche_titre($langs->trans("Receive"), '', ''); - print ''; - //print ''; - print '\n"; + print '
'.$langs->trans("Receive").'
'.$langs->trans("DeliveryDate").''; - $datepreselected = dol_now(); - print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); - print "
'; + //print ''; + print '\n"; - print "'; - print ''; - print ''; - print "
'.$langs->trans("Receive").'
'.$langs->trans("DeliveryDate").''; + $datepreselected = dol_now(); + print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1); + print "
".$langs->trans("Delivery")."\n"; - $liv = array(); - $liv[''] = ' '; - $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); - $liv['par'] = $langs->trans("PartialWoman"); - $liv['nev'] = $langs->trans("NeverReceived"); - $liv['can'] = $langs->trans("Canceled"); + print '
'.$langs->trans("Delivery")."\n"; + $liv = array(); + $liv[''] = ' '; + $liv['tot'] = $langs->trans("CompleteOrNoMoreReceptionExpected"); + $liv['par'] = $langs->trans("PartialWoman"); + $liv['nev'] = $langs->trans("NeverReceived"); + $liv['can'] = $langs->trans("Canceled"); - print $form->selectarray("type", $liv); + print $form->selectarray("type", $liv); - print '
'.$langs->trans("Comment").'
\n"; - print "
\n"; - print "
"; + print '
'.$langs->trans("Comment").'
\n"; + print "\n"; + print "
"; + } } // List of actions on element diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 367ff6672a5..5f1d04f8bb0 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1685,7 +1685,7 @@ SuppliersSetup=Vendor module setup SuppliersCommandModel=Complete template of purchase order (logo...) SuppliersInvoiceModel=Complete template of vendor invoice (logo...) SuppliersInvoiceNumberingModel=Vendor invoices numbering models -IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval +IfSetToYesDontForgetPermission=If set to a non null value, don't forget to provide permissions to groups or users allowed for the second approval ##### GeoIPMaxmind ##### GeoIPMaxmindSetup=GeoIP Maxmind module setup PathToGeoIPMaxmindCountryDataFile=Path to file containing Maxmind ip to country translation.
Examples:
/usr/local/share/GeoIP/GeoIP.dat
/usr/share/GeoIP/GeoIP.dat diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index ad895845488..256bd2a7d4d 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -154,5 +154,5 @@ CreateOrders=Create orders ToBillSeveralOrderSelectCustomer=To create an invoice for several orders, click first onto customer, then choose "%s". OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually. IfValidateInvoiceIsNoOrderStayUnbilled=If invoice validation is 'No', the order will remain to status 'Unbilled' until the invoice is validated. -CloseReceivedSupplierOrdersAutomatically=Close order to "%s" automatically if all products are received. +CloseReceivedSupplierOrdersAutomatically=Close order to status "%s" automatically if all products are received. SetShippingMode=Set shipping mode diff --git a/htdocs/langs/en_US/sendings.lang b/htdocs/langs/en_US/sendings.lang index ede7fea87b7..f3f023f8dcf 100644 --- a/htdocs/langs/en_US/sendings.lang +++ b/htdocs/langs/en_US/sendings.lang @@ -21,6 +21,7 @@ QtyShipped=Qty shipped QtyShippedShort=Qty ship. QtyPreparedOrShipped=Qty prepared or shipped QtyToShip=Qty to ship +QtyToReceive=Qty to receive QtyReceived=Qty received QtyInOtherShipments=Qty in other shipments KeepToShip=Remain to ship @@ -46,6 +47,7 @@ DateDeliveryPlanned=Planned date of delivery RefDeliveryReceipt=Ref delivery receipt StatusReceipt=Status delivery receipt DateReceived=Date delivery received +ClassifyReception=Classify reception SendShippingByEMail=Send shipment by email SendShippingRef=Submission of shipment %s ActionsOnShipping=Events on shipment diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang index fd89d432360..17f914b7405 100644 --- a/htdocs/langs/en_US/stocks.lang +++ b/htdocs/langs/en_US/stocks.lang @@ -55,7 +55,7 @@ PMPValue=Weighted average price PMPValueShort=WAP EnhancedValueOfWarehouses=Warehouses value UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user -AllowAddLimitStockByWarehouse=Manage also values for minimum and desired stock per pairing (product-warehouse) in addition to values per product +AllowAddLimitStockByWarehouse=Manage also value for minimum and desired stock per pairing (product-warehouse) in addition to the value for minimum and desired stock per product IndependantSubProductStock=Product stock and subproduct stock are independent QtyDispatched=Quantity dispatched QtyDispatchedShort=Qty dispatched @@ -182,7 +182,7 @@ SelectFournisseur=Vendor filter inventoryOnDate=Inventory INVENTORY_DISABLE_VIRTUAL=Virtual product (kit): do not decrement stock of a child product INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found -INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement has date of inventory +INVENTORY_USE_INVENTORY_DATE_FOR_DATE_OF_MVT=Stock movements will have the date of inventory (instead of the date of inventory validation) inventoryChangePMPPermission=Allow to change PMP value for a product ColumnNewPMP=New unit PMP OnlyProdsInStock=Do not add product without stock diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang index a4a8827ca05..bbbeb2638e8 100644 --- a/htdocs/langs/fr_FR/orders.lang +++ b/htdocs/langs/fr_FR/orders.lang @@ -154,5 +154,5 @@ CreateOrders=Créer commandes ToBillSeveralOrderSelectCustomer=Pour créer une facture pour plusieurs commandes, cliquez d'abord sur le client, puis choisir "%s". OptionToSetOrderBilledNotEnabled=L'option (issue du module Workflow) pour définir automatiquement les commandes à 'Facturé' que une facture est validée, est désactivée, aussi vous devrez donc définir le statut de la commande sur 'Facturé' manuellement. IfValidateInvoiceIsNoOrderStayUnbilled=Si la validation de facture est à "Non", la commande restera au statut "Non facturé" jusqu'à ce que la facture soit validée. -CloseReceivedSupplierOrdersAutomatically=Fermer la commande "%s" automatiquement si tous les produits ont été reçus. +CloseReceivedSupplierOrdersAutomatically=Fermer la commande au statut "%s" automatiquement si tous les produits ont été reçus. SetShippingMode=Définir la méthode d'expédition diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php index 62cfc476ba8..85b174ea725 100644 --- a/htdocs/product/inventory/class/inventory.class.php +++ b/htdocs/product/inventory/class/inventory.class.php @@ -59,7 +59,7 @@ class Inventory extends CommonObject * 'type' if the field format. * 'label' the translation key. * 'enabled' is a condition when the field must be managed. - * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing) + * 'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only (not list), 4=Visible on list and update/view form only (not create). Using a negative value means field is not shown by default on list but can be selected for viewing) * 'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0). * 'index' if we want an index in database. * 'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...). @@ -96,7 +96,7 @@ class Inventory extends CommonObject //'fk_user_valid' =>array('type'=>'integer', 'label'=>'UserValidation', 'enabled'=>1, 'visible'=>-1, 'position'=>512), 'import_key' =>array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0, 'position'=>1000), - 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'Todo', 1=>'Done', -1=>'Cancel')), + 'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>4, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'ToDo', 1=>'Done', -1=>'Cancel')), ); /** diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index 7cbd77dd4da..b9156b1837b 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -11,7 +11,7 @@ * Copyright (C) 2015 Claudio Aschieri * Copyright (C) 2016 Ferran Marcet * Copyright (C) 2016 Yasser Carreón - * Copyright (C) 2018 Quentin Vial-Gouteyron + * Copyright (C) 2018 Quentin Vial-Gouteyron * * 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 @@ -56,7 +56,7 @@ if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } -$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal')); +$langs->loadLangs(array("receptions","companies","bills",'deliveries','orders','stocks','other','propal','sendings')); if (!empty($conf->incoterm->enabled)) $langs->load('incoterm'); if (! empty($conf->productbatch->enabled)) $langs->load('productbatch'); From 08c16ea2e12bad3823928011378ecbd28372e3c9 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:03:26 +0200 Subject: [PATCH 1073/1148] Fix bad dir created --- htdocs/core/modules/modReception.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/modReception.class.php b/htdocs/core/modules/modReception.class.php index 6594d7bb04a..f85f5656afe 100644 --- a/htdocs/core/modules/modReception.class.php +++ b/htdocs/core/modules/modReception.class.php @@ -58,7 +58,7 @@ class modReception extends DolibarrModules // Data directories to create when module is enabled $this->dirs = array("/reception/receipt", "/reception/receipt/temp", - "/doctemplates/reception" + "/doctemplates/receptions" ); // Config pages From 613886f86b67f231b99cd78dbf531c6436cefa3c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 02:09:37 +0200 Subject: [PATCH 1074/1148] Fix translation --- htdocs/reception/card.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/reception/card.php b/htdocs/reception/card.php index e93c4f2d7ad..f1d32b3ed6e 100644 --- a/htdocs/reception/card.php +++ b/htdocs/reception/card.php @@ -780,9 +780,10 @@ if ($action == 'create') } print '
'; - if ($origin == 'supplier_order') print $langs->trans('RefSupplierOrder'); + if ($origin == 'supplier_order') print $langs->trans('SupplierOrder'); else print $langs->trans('RefSupplier'); print ''; print ''; @@ -1398,7 +1399,7 @@ elseif ($id || $ref) if ($typeobject == 'CommandeFournisseur' && $object->$typeobject->id && ! empty($conf->propal->enabled)) { print '
'; - print $langs->trans("RefSupplierOrder").''; print $objectsrc->getNomUrl(1, 'reception'); print "'; //print dol_print_date($object->date_livraison,"day"); // date_livraison come from order and will be stored into date_delivery planed. $date_delivery = ($date_delivery?$date_delivery:$object->date_livraison); // $date_delivery comes from GETPOST - print $form->select_date($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1); + print $form->selectDate($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1); print "
'; - print $form->select_date($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, ""); + print $form->selectDate($dispatchLines[$indiceAsked]['DLC'], 'dlc' . $indiceAsked, '', '', 1, ""); print ''; - print $form->select_date($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, ""); + print $form->selectDate($dispatchLines[$indiceAsked]['DLUO'], 'dluo' . $indiceAsked, '', '', 1, ""); print '

'; print $langs->trans('EatByDate').' : '; - print $form->select_date($lines[$i]->eatby, 'dlc' .$line_id, '', '', 1, ""). '
'; + print $form->selectDate($lines[$i]->eatby, 'dlc' .$line_id, '', '', 1, ""). '
'; print $langs->trans('SellByDate').' : '; - print $form->select_date($lines[$i]->sellby, 'dluo' .$line_id, '', '', 1, ""); + print $form->selectDate($lines[$i]->sellby, 'dluo' .$line_id, '', '', 1, ""); print '
' . $langs->trans("Warehouse") . '' . $langs->trans("Comment") . '' . $langs->trans("Status") . '
'; if(!empty($reception->id)){ print $reception->getLibStatut(5); } + print ''; - print '
trans("Total"); ?>
trans("Reception"); ?>getNomUrl(1); ?>date_delivery, 'day'); ?>trans("Reception"); ?> + global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES) print ' + getNomUrl(1); ?>date_delivery, 'day'); ?>rights->reception->lire) { $total = $total + $objectlink->total_ht; echo price($objectlink->total_ht); } ?>getLibStatut(3); ?> + getLibStatut(3); ?> element != 'order_supplier') { ?> - ">transnoentitiesnoconv("RemoveLink"), 'unlink'); ?>
'.$langs->trans("UseDispatchStatus").''; -if ($conf->use_javascript_ajax) { - print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); -} else { - $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); - print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); +if ($conf->reception->enabled) +{ + print ''.$langs->trans("FeatureNotAvailableWithReceptionModule").''; +} +else +{ + if ($conf->use_javascript_ajax) { + print ajax_constantonoff('SUPPLIER_ORDER_USE_DISPATCH_STATUS'); + } else { + $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes")); + print $form->selectarray("SUPPLIER_ORDER_USE_DISPATCH_STATUS", $arrval, $conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS); + } } print "
'; - print $form->select_date('', '', '', '', '', '', 1, 1); + print $form->selectDate('', '', '', '', '', '', 1, 1); print '
'; print $langs->trans('DateCreation'); print ''; - print $form->select_date($pagedatecreation, 'datecreation', 1, 1, 0, '', 1, 1); + print $form->selectDate($pagedatecreation, 'datecreation', 1, 1, 0, '', 1, 1); //print dol_print_date($pagedatecreation, 'dayhour'); print '
attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired'; $out .= '">'; - if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]); + if (! empty($extrafields->attributes[$this->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$this->table_element]['help'][$key]); else $out .= $labeltoshow; $out .= ''; + //$out .=''; switch($mode) { case "view": @@ -6593,6 +6599,11 @@ abstract class CommonObject $out .= '
">"> - attributes[$this->table_element]['required'][$key])) $out .= ' fieldrequired'; $out .= '">'; - if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$object->table_element]['help'][$key]); + if (! empty($extrafields->attributes[$this->table_element]['help'][$key])) $out .= $form->textwithpicto($labeltoshow, $extrafields->attributes[$this->table_element]['help'][$key]); else $out .= $labeltoshow; $out .= ''; + //$out .=''; switch($mode) { case "view": @@ -6511,6 +6517,11 @@ abstract class CommonObject $out .= '
">"> -
'.$langs->trans("Total").' '; - if ($total != $object->amount) print img_warning("AmountOfFileDiffersFromSumOfInvoices"); + if (empty($offset) && $num <= $limit) // If we have all record on same page, then the following test/warning can be done + { + if ($total != $object->amount) print img_warning("TotalAmountOfdirectDebitOrderDiffersFromSumOfLines"); + } print price($total); print " 
'; - - print ''; - print_liste_field_titre("Bill", $_SERVER["PHP_SELF"]); - print_liste_field_titre("Company", $_SERVER["PHP_SELF"]); - print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "", "", $param, 'class="right"'); - print_liste_field_titre("DateRequest", $_SERVER["PHP_SELF"], "", "", $param, 'class="center"'); - print_liste_field_titre(''); - print ''; - - print ''; - print ''; - print ''; - print ''; - print ''; - // Action column - print ''; - print ''; - - $users = array(); - - while ($i < min($num, $limit)) - { - $obj = $db->fetch_object($resql); - - print ''; - - // Ref facture - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - - print ''; - $i++; - } - - print "
'; - $searchpicto=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1); - print $searchpicto; - print '
'; - $invoicestatic->id=$obj->rowid; - $invoicestatic->ref=$obj->ref; - print $invoicestatic->getNomUrl(1, 'withdraw'); - print ''; - $thirdpartystatic->id=$obj->socid; - $thirdpartystatic->name=$obj->name; - print $thirdpartystatic->getNomUrl(1, 'customer'); - print ''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->date_demande), 'day').'

"; - - print ''; +} +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set. +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) +{ + $num = $nbtotalofrecords; } else { - dol_print_error($db); + $sql.= $db->plimit($limit+1, $offset); + + $resql=$db->query($sql); + if (! $resql) + { + dol_print_error($db); + exit; + } + + $num = $db->num_rows($resql); } + + +$newcardbutton = ''.$langs->trans("Back").''; + +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_generic', 0, $newcardbutton, '', $limit); + +print '
'; +if ($optioncss != '') print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; +print ''; + + +print ''; + +print ''; +print_liste_field_titre("Bill", $_SERVER["PHP_SELF"]); +print_liste_field_titre("Company", $_SERVER["PHP_SELF"]); +print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "", "", $param, 'class="right"'); +print_liste_field_titre("DateRequest", $_SERVER["PHP_SELF"], "", "", $param, 'class="center"'); +print_liste_field_titre(''); +print ''; + +print ''; +print ''; +print ''; +print ''; +print ''; +// Action column +print ''; +print ''; + +$users = array(); + +$i = 0; +while ($i < min($num, $limit)) +{ + $obj = $db->fetch_object($resql); + if (empty($obj)) break; // Should not happen + + print ''; + + // Ref facture + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + $i++; +} + +print "
'; +$searchpicto=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1); +print $searchpicto; +print '
'; + $invoicestatic->id=$obj->rowid; + $invoicestatic->ref=$obj->ref; + print $invoicestatic->getNomUrl(1, 'withdraw'); + print ''; + $thirdpartystatic->id=$obj->socid; + $thirdpartystatic->name=$obj->name; + print $thirdpartystatic->getNomUrl(1, 'customer'); + print ''.price($obj->total_ttc).''.dol_print_date($db->jdate($obj->date_demande), 'day').'

"; + +print '
'; + + // End of page llxFooter(); $db->close(); diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index 1be716f8f61..44db7dd2625 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -71,6 +71,7 @@ $thirdpartystatic=new Societe($db); $invoicestatic=new Facture($db); $bprev = new BonPrelevement($db); + print ''; print ''; @@ -100,6 +101,8 @@ if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX $sql.= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql.= " WHERE s.rowid = f.fk_soc"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; +$sql.= " AND f.total_ttc > 0"; +$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; $sql.= " AND pfd.traite = 0 AND pfd.fk_facture = f.rowid"; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND f.fk_soc = ".$socid; From 57a15b88fa3a7ce1a264f39d379432073b52b910 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 14:07:42 +0200 Subject: [PATCH 1093/1148] Fix UMR --- htdocs/langs/en_US/withdrawals.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang index 88e5eaf128c..b1d6e30e329 100644 --- a/htdocs/langs/en_US/withdrawals.lang +++ b/htdocs/langs/en_US/withdrawals.lang @@ -76,7 +76,7 @@ WithdrawalFile=Withdrawal file SetToStatusSent=Set to status "File Sent" ThisWillAlsoAddPaymentOnInvoice=This will also record payments to invoices and will classify them as "Paid" if remain to pay is null StatisticsByLineStatus=Statistics by status of lines -RUM=Unique Mandate Reference (UMR) +RUM=UMR DateRUM=Mandate signature date RUMLong=Unique Mandate Reference RUMWillBeGenerated=If empty, a UMR (Unique Mandate Reference) will be generated once the bank account information is saved. From bc0b8dfad06163a8c073d5dafe795dcc0278d2f3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 14:24:33 +0200 Subject: [PATCH 1094/1148] FIX Consistency in direct debit order lists. FIX Confirmation of deletion --- htdocs/compta/prelevement/card.php | 19 ++++++++++++++++++- .../class/bonprelevement.class.php | 4 ++-- htdocs/compta/prelevement/create.php | 9 ++++++--- htdocs/compta/prelevement/demandes.php | 1 + htdocs/langs/en_US/main.lang | 1 + .../modulebuilder/template/myobject_card.php | 2 +- 6 files changed, 29 insertions(+), 7 deletions(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index b8aa09eae60..bf95a35f1fd 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -239,6 +239,23 @@ if ($id > 0 || $ref) dol_fiche_end(); + $formconfirm = ''; + + // Confirmation to delete + if ($action == 'delete') + { + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('Delete'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1); + } + + // Call Hook formConfirm + /*$parameters = array(); + $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook + if (empty($reshook)) $formconfirm.=$hookmanager->resPrint; + elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;*/ + + // Print form confirm + print $formconfirm; + if (empty($object->date_trans) && $user->rights->prelevement->bons->send && $action=='settransmitted') { @@ -298,7 +315,7 @@ if ($id > 0 || $ref) print "id."\">".$langs->trans("ClassCredited").""; } - print "id."\">".$langs->trans("Delete").""; + print "id."\">".$langs->trans("Delete").""; print ""; } diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index 6f8a7431b0e..d37e8be9412 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -1629,8 +1629,8 @@ class BonPrelevement extends CommonObject public static function buildRumNumber($row_code_client, $row_datec, $row_drum) { global $langs; - $pre = $langs->trans('RUM').'-'; - return $pre.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec); + $pre = substr(dol_string_nospecial(dol_string_unaccent($langs->transnoentitiesnoconv('RUM'))), 0, 3); // Must always be on 3 char ('RUM' or 'UMR'. This is a protection against bad translation) + return $pre.'-'.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec); } // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index ddbec62e413..3145bd20598 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; // Load translation files required by the page -$langs->loadLangs(array('banks', 'categories', 'widthdrawals', 'companies', 'bills')); +$langs->loadLangs(array('banks', 'categories', 'withdrawals', 'companies', 'bills')); // Security check if ($user->societe_id) $socid=$user->societe_id; @@ -105,6 +105,7 @@ if (empty($reshook)) /* * View */ + $form = new Form($db); $thirdpartystatic=new Societe($db); @@ -206,9 +207,11 @@ $sql.= " ".MAIN_DB_PREFIX."societe as s,"; $sql.= " ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql.= " WHERE s.rowid = f.fk_soc"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; +$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +$sql.= " AND f.total_ttc > 0"; $sql.= " AND pfd.traite = 0"; $sql.= " AND pfd.fk_facture = f.rowid"; -if ($socid) $sql.= " AND f.fk_soc = ".$socid; +if ($socid > 0) $sql.= " AND f.fk_soc = ".$socid; $nbtotalofrecords = ''; if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) @@ -292,7 +295,7 @@ if ($resql) $i++; } } - else print ''; + else print ''; print "
'.$langs->trans("Statistics").'
'.$langs->trans("None").'
'.$langs->trans("None").'
"; print ""; print "
\n"; diff --git a/htdocs/compta/prelevement/demandes.php b/htdocs/compta/prelevement/demandes.php index 1caf62f1491..a34fde042e5 100644 --- a/htdocs/compta/prelevement/demandes.php +++ b/htdocs/compta/prelevement/demandes.php @@ -92,6 +92,7 @@ if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc. if ($socid) $sql.= " AND f.fk_soc = ".$socid; if (!$status) $sql.= " AND pfd.traite = 0"; if ($status) $sql.= " AND pfd.traite = ".$status; +$sql.= " AND f.total_ttc > 0"; $sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; $sql.= " AND pfd.fk_facture = f.rowid"; if (dol_strlen(trim(GETPOST('search_societe', 'alpha')))) diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 5e55597c306..f6753f1b87a 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -821,6 +821,7 @@ Mandatory=Mandatory Hello=Hello GoodBye=GoodBye Sincerely=Sincerely +ConfirmDeleteObject=Are you sure you want to delete this object? DeleteLine=Delete line ConfirmDeleteLine=Are you sure you want to delete this line? NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php index 28c817658f6..72bc424c53c 100644 --- a/htdocs/modulebuilder/template/myobject_card.php +++ b/htdocs/modulebuilder/template/myobject_card.php @@ -256,7 +256,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea // Confirmation to delete if ($action == 'delete') { - $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteMyObject'), $langs->trans('ConfirmDeleteMyObject'), 'confirm_delete', '', 0, 1); + $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteMyObject'), $langs->trans('ConfirmDeleteObject'), 'confirm_delete', '', 0, 1); } // Confirmation to delete line if ($action == 'deleteline') From cad9a59d2a9c16ebe6231db7bbda7020e65faba4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 14:45:55 +0200 Subject: [PATCH 1095/1148] Add option to be able to find behaviour before the fix of list of invoice in direct debit order. --- htdocs/compta/prelevement/class/bonprelevement.class.php | 7 +++++-- htdocs/compta/prelevement/create.php | 5 ++++- htdocs/compta/prelevement/demandes.php | 5 ++++- htdocs/compta/prelevement/index.php | 5 ++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php index d37e8be9412..10c12d967b3 100644 --- a/htdocs/compta/prelevement/class/bonprelevement.class.php +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php @@ -739,8 +739,11 @@ class BonPrelevement extends CommonObject $sql = "SELECT count(f.rowid) as nb"; $sql.= " FROM ".MAIN_DB_PREFIX."facture as f"; $sql.= ", ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; - $sql.= " WHERE f.fk_statut = ".Facture::STATUS_VALIDATED; - $sql.= " AND f.entity IN (".getEntity('invoice').")"; + $sql.= " WHERE f.entity IN (".getEntity('invoice').")"; + if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS)) + { + $sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; + } $sql.= " AND f.rowid = pfd.fk_facture"; $sql.= " AND pfd.traite = 0"; $sql.= " AND f.total_ttc > 0"; diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php index 3145bd20598..34da3336bcc 100644 --- a/htdocs/compta/prelevement/create.php +++ b/htdocs/compta/prelevement/create.php @@ -207,7 +207,10 @@ $sql.= " ".MAIN_DB_PREFIX."societe as s,"; $sql.= " ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql.= " WHERE s.rowid = f.fk_soc"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; -$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS)) +{ + $sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +} $sql.= " AND f.total_ttc > 0"; $sql.= " AND pfd.traite = 0"; $sql.= " AND pfd.fk_facture = f.rowid"; diff --git a/htdocs/compta/prelevement/demandes.php b/htdocs/compta/prelevement/demandes.php index a34fde042e5..6c1ea278430 100644 --- a/htdocs/compta/prelevement/demandes.php +++ b/htdocs/compta/prelevement/demandes.php @@ -93,7 +93,10 @@ if ($socid) $sql.= " AND f.fk_soc = ".$socid; if (!$status) $sql.= " AND pfd.traite = 0"; if ($status) $sql.= " AND pfd.traite = ".$status; $sql.= " AND f.total_ttc > 0"; -$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS)) +{ + $sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +} $sql.= " AND pfd.fk_facture = f.rowid"; if (dol_strlen(trim(GETPOST('search_societe', 'alpha')))) { diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php index 44db7dd2625..468d4807c65 100644 --- a/htdocs/compta/prelevement/index.php +++ b/htdocs/compta/prelevement/index.php @@ -102,7 +102,10 @@ $sql.= " , ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd"; $sql.= " WHERE s.rowid = f.fk_soc"; $sql.= " AND f.entity IN (".getEntity('invoice').")"; $sql.= " AND f.total_ttc > 0"; -$sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS)) +{ + $sql.= " AND f.fk_statut = ".Facture::STATUS_VALIDATED; +} $sql.= " AND pfd.traite = 0 AND pfd.fk_facture = f.rowid"; if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; if ($socid) $sql.= " AND f.fk_soc = ".$socid; From 348ab4765cf16fdceb7533c0fb22be6c87626c37 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 15:20:04 +0200 Subject: [PATCH 1096/1148] Fix sql injection --- htdocs/categories/viewcat.php | 2 +- htdocs/product/class/product.class.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php index a7170b799a2..a7a0767c6b5 100644 --- a/htdocs/categories/viewcat.php +++ b/htdocs/categories/viewcat.php @@ -40,7 +40,7 @@ $type = GETPOST('type', 'az09'); $action=GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); $removeelem = GETPOST('removeelem', 'int'); -$elemid = GETPOST('elemid', 'alpha'); +$elemid = GETPOST('elemid', 'int'); if ($id == "" && $label == "") { diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 9c515d619c6..dd5544a9a06 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -284,14 +284,14 @@ class Product extends CommonObject * @var int */ public $barcode_type; - + /** * Main Barcode type code * * @var string */ public $barcode_type_code; - + /** * Additional barcodes (Some products have different barcodes according to the country of origin of manufacture) * @@ -2052,7 +2052,7 @@ class Product extends CommonObject $sql.= " fk_price_expression, price_autogen"; $sql.= " FROM ".MAIN_DB_PREFIX."product"; if ($id) { - $sql.= " WHERE rowid = ".$this->db->escape($id); + $sql.= " WHERE rowid = ".(int) $id; } else { $sql.= " WHERE entity IN (".getEntity($this->element).")"; if ($ref) { From 74203a68964997354bf524278f7b17e90999d416 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 16:01:54 +0200 Subject: [PATCH 1097/1148] Fix phpcs --- test/phpunit/LesscTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/test/phpunit/LesscTest.php b/test/phpunit/LesscTest.php index 634b362a7b2..70ed161c260 100644 --- a/test/phpunit/LesscTest.php +++ b/test/phpunit/LesscTest.php @@ -159,7 +159,6 @@ class LesscTest extends PHPUnit\Framework\TestCase //print '
'.$contentforlessc.'
'; $result = $lesscobj->compile($contentforlessc); //var_dump($contentforlessc); exit; - } catch (exception $e) { //echo "failed to compile lessc"; dol_syslog("Failed to compile the CSS with lessc: ".$e->getMessage(), LOG_WARNING); From 018a43e1d3353a97d58fdc6fdd24f1c0fa9136a0 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 18:57:34 +0200 Subject: [PATCH 1098/1148] Fix --- htdocs/supplier_proposal/class/supplier_proposal.class.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php index 142917a10d3..f6866569f13 100644 --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php @@ -324,9 +324,6 @@ class SupplierProposal extends CommonObject $supplier_proposalligne->rang=-1; $supplier_proposalligne->info_bits=2; - // TODO deprecated - $supplier_proposalligne->price=-$remise->amount_ht; - $supplier_proposalligne->total_ht = -$remise->amount_ht; $supplier_proposalligne->total_tva = -$remise->amount_tva; $supplier_proposalligne->total_ttc = -$remise->amount_ttc; @@ -1350,7 +1347,6 @@ class SupplierProposal extends CommonObject $line->subprice = $objp->subprice; $line->fk_remise_except = $objp->fk_remise_except; $line->remise_percent = $objp->remise_percent; - $line->price = $objp->price; // TODO deprecated $line->info_bits = $objp->info_bits; $line->total_ht = $objp->total_ht; @@ -2364,7 +2360,6 @@ class SupplierProposal extends CommonObject $line->desc=$langs->trans("Description")." ".$xnbp; $line->qty=1; $line->subprice=100; - $line->price=100; $line->tva_tx=19.6; $line->localtax1_tx=0; $line->localtax2_tx=0; From 231725e3511d75c4a12ed71a0c53a3845f58d68c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 19:12:43 +0200 Subject: [PATCH 1099/1148] Fix scrutinizer --- htdocs/admin/commande.php | 1 - htdocs/asset/info.php | 7 +++++-- htdocs/core/class/fiscalyear.class.php | 8 ++++---- htdocs/cron/class/cronjob.class.php | 7 ++++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/htdocs/admin/commande.php b/htdocs/admin/commande.php index 455175220a8..40514cd1890 100644 --- a/htdocs/admin/commande.php +++ b/htdocs/admin/commande.php @@ -438,7 +438,6 @@ foreach ($dirmodels as $reldir) if ($modulequalified) { - $var = !$var; print '
'; print (empty($module->name)?$name:$module->name); print "\n"; diff --git a/htdocs/asset/info.php b/htdocs/asset/info.php index 462abf17342..45157e9b7a5 100644 --- a/htdocs/asset/info.php +++ b/htdocs/asset/info.php @@ -44,15 +44,18 @@ $object->fetch($id); * Actions */ + + /* * View */ + +$form = new Form($db); + $title = $langs->trans('Asset') . " - " . $langs->trans('Info'); $helpurl = ""; llxHeader('', $title, $helpurl); -$form = new Form($db); - $object->info($id); $head = asset_prepare_head($object); diff --git a/htdocs/core/class/fiscalyear.class.php b/htdocs/core/class/fiscalyear.class.php index 5593b4a90a4..90d824b7263 100644 --- a/htdocs/core/class/fiscalyear.class.php +++ b/htdocs/core/class/fiscalyear.class.php @@ -63,28 +63,28 @@ class Fiscalyear extends CommonObject * @var string fiscal year label */ public $label; - + /** * Date start (date_start) * * @var integer */ public $date_start; - + /** * Date end (date_end) * * @var integer */ public $date_end; - + /** * Date creation record (datec) * * @var integer */ public $datec; - + public $statut; // 0=open, 1=closed /** diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index 7934a628880..0e12da80cfc 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -894,14 +894,15 @@ class Cronjob extends CommonObject /** * Load object information * - * @return int + * @param int $id ID + * @return int <0 if KO, >0 if OK */ - public function info() + public function info($id) { $sql = "SELECT"; $sql.= " f.rowid, f.datec, f.tms, f.fk_user_mod, f.fk_user_author"; $sql.= " FROM ".MAIN_DB_PREFIX."cronjob as f"; - $sql.= " WHERE f.rowid = ".$this->id; + $sql.= " WHERE f.rowid = ".$id; dol_syslog(get_class($this)."::fetch", LOG_DEBUG); $resql=$this->db->query($sql); From 89e1cdff61556c6fd453794b2753b4dd21f97329 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 19:41:15 +0200 Subject: [PATCH 1100/1148] Debug module datapolicy --- htdocs/core/modules/modDataPolicy.class.php | 2 +- htdocs/datapolicy/class/datapolicy.class.php | 15 ++++++++++- .../datapolicy/class/datapolicycron.class.php | 27 ++++++++++++------- htdocs/langs/en_US/cron.lang | 1 + 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/htdocs/core/modules/modDataPolicy.class.php b/htdocs/core/modules/modDataPolicy.class.php index a08ce2f7873..2c6d749d1ee 100644 --- a/htdocs/core/modules/modDataPolicy.class.php +++ b/htdocs/core/modules/modDataPolicy.class.php @@ -187,7 +187,7 @@ class modDataPolicy extends DolibarrModules { // Cronjobs (List of cron jobs entries to add when module is enabled) // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week $this->cronjobs = array( - 0 => array('label' => 'DATAPOLICY Cron', 'jobtype' => 'method', 'class' => '/datapolicy/class/datapolicyCron.class.php', 'objectname' => 'DataPolicyCron', 'method' => 'exec', 'parameters' => '', 'comment' => 'Clean data', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 1, 'test' => '$conf->datapolicy->enabled'), + 0 => array('label' => 'DATAPOLICYJob', 'jobtype' => 'method', 'class' => 'datapolicy/class/datapolicycron.class.php', 'objectname' => 'DataPolicyCron', 'method' => 'cleanDataForDataPolicy', 'parameters' => '', 'comment' => 'Clean data', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 1, 'test' => '$conf->datapolicy->enabled'), //1 => array('label' => 'DATAPOLICY Mailing', 'jobtype' => 'method', 'class' => '/datapolicy/class/datapolicyCron.class.php', 'objectname' => 'RgpdCron', 'method' => 'sendMailing', 'parameters' => '', 'comment' => 'Comment', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 0, 'test' => true) ); // Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true), diff --git a/htdocs/datapolicy/class/datapolicy.class.php b/htdocs/datapolicy/class/datapolicy.class.php index bf1033084d5..c4b3cd2458d 100644 --- a/htdocs/datapolicy/class/datapolicy.class.php +++ b/htdocs/datapolicy/class/datapolicy.class.php @@ -30,6 +30,16 @@ include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php'; */ class DataPolicy { + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + $this->db = $db; + } + /** * getAllContactNotInformed * @@ -200,7 +210,6 @@ class DataPolicy } else { $result4 = $mailfile->sendfile(); if (!$error) { - $resultmasssend .= $langs->trans("MailSent") . ': ' . $sendto . "
"; $contact->array_options['options_datapolicy_send'] = date('Y-m-d', time()); $contact->update($contact->id); @@ -301,6 +310,10 @@ class DataPolicy $sendto = $adherent->email; + // TODO Use a dolibarr email template + $s = 'TXTLINKDATAPOLICIESSUBJECT_' . $l; + $ma = 'TXTLINKDATAPOLICIESMESSAGE_' . $l; + $code= md5($adherent->email); if (!empty($adherent->default_lang)) { $l = $adherent->default_lang; diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php index 656831eed2f..a938724ad73 100644 --- a/htdocs/datapolicy/class/datapolicycron.class.php +++ b/htdocs/datapolicy/class/datapolicycron.class.php @@ -27,12 +27,24 @@ */ class DataPolicyCron { + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + $this->db = $db; + } + + /** * Function exec + * CAN BE A CRON TASK * - * @return boolean + * @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK) */ - public function exec() + public function cleanDataForDataPolicy() { global $conf, $db, $langs, $user; @@ -479,14 +491,10 @@ class DataPolicyCron $db->query($sql); } } else { - if (DOL_VERSION < 8) { + if ($object->element == 'adherent') { $ret = $object->delete($obj->rowid, $user); } else { - if ($object->element == 'adherent') { - $ret = $object->delete($obj->rowid); - } else { - $ret = $object->delete(); - } + $ret = $object->delete($user); } } @@ -495,7 +503,8 @@ class DataPolicyCron } } } - return true; + + return 0; } diff --git a/htdocs/langs/en_US/cron.lang b/htdocs/langs/en_US/cron.lang index aee4d7bb988..1de1251831a 100644 --- a/htdocs/langs/en_US/cron.lang +++ b/htdocs/langs/en_US/cron.lang @@ -81,3 +81,4 @@ JobDisabled=Job disabled MakeLocalDatabaseDumpShort=Local database backup MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run. +DATAPOLICYJob=Data cleaner and anonymizer From f338a5f9ad6e27c3ff341e7001d7825a901afc64 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 19:56:00 +0200 Subject: [PATCH 1101/1148] Debug module datapolicy --- htdocs/core/modules/modDataPolicy.class.php | 1 - .../datapolicy/class/datapolicycron.class.php | 92 +++++++++++-------- 2 files changed, 56 insertions(+), 37 deletions(-) diff --git a/htdocs/core/modules/modDataPolicy.class.php b/htdocs/core/modules/modDataPolicy.class.php index 2c6d749d1ee..13095010a55 100644 --- a/htdocs/core/modules/modDataPolicy.class.php +++ b/htdocs/core/modules/modDataPolicy.class.php @@ -188,7 +188,6 @@ class modDataPolicy extends DolibarrModules { // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week $this->cronjobs = array( 0 => array('label' => 'DATAPOLICYJob', 'jobtype' => 'method', 'class' => 'datapolicy/class/datapolicycron.class.php', 'objectname' => 'DataPolicyCron', 'method' => 'cleanDataForDataPolicy', 'parameters' => '', 'comment' => 'Clean data', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 1, 'test' => '$conf->datapolicy->enabled'), - //1 => array('label' => 'DATAPOLICY Mailing', 'jobtype' => 'method', 'class' => '/datapolicy/class/datapolicyCron.class.php', 'objectname' => 'RgpdCron', 'method' => 'sendMailing', 'parameters' => '', 'comment' => 'Comment', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 0, 'test' => true) ); // Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true), // 1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>true) diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php index a938724ad73..6c1a740bd98 100644 --- a/htdocs/datapolicy/class/datapolicycron.class.php +++ b/htdocs/datapolicy/class/datapolicycron.class.php @@ -19,7 +19,7 @@ /** * \file htdocs/datapolicy/class/datapolicycron.class.php * \ingroup datapolicy - * \brief Example hook overload. + * \brief File for cron task of module DataPolicy */ /** @@ -46,10 +46,14 @@ class DataPolicyCron */ public function cleanDataForDataPolicy() { - global $conf, $db, $langs, $user; + global $conf, $langs, $user; $langs->load('datapolicy@datapolicy'); + $error = 0; + $errormsg = ''; + $nbupdated = $nbdeleted = 0; + // FIXME Removed hardcoded values of id $arrayofparameters=array( 'DATAPOLICIES_TIERS_CLIENT' => array( @@ -458,14 +462,18 @@ class DataPolicyCron ), ); - foreach ($arrayofparameters as $key => $params) { - if ($conf->global->$key != '' && is_numeric($conf->global->$key) && (int) $conf->global->$key > 0) { + $this->db->begin(); + foreach ($arrayofparameters as $key => $params) + { + if ($conf->global->$key != '' && is_numeric($conf->global->$key) && (int) $conf->global->$key > 0) + { $sql = sprintf($params['sql'], (int) $conf->entity, (int) $conf->global->$key, (int) $conf->global->$key); $resql = $db->query($sql); - if ($resql && $db->num_rows($resql) > 0) { + if ($resql && $db->num_rows($resql) > 0) + { $num = $db->num_rows($resql); $i = 0; @@ -473,29 +481,51 @@ class DataPolicyCron require_once $params['file']; $object = new $params['class']($db); - while ($i < $num) + while ($i < $num && ! $error) { $obj = $db->fetch_object($resql); $object->fetch($obj->rowid); $object->id = $obj->rowid; - if ($object->isObjectUsed($obj->rowid) > 0) { + if ($object->isObjectUsed($obj->rowid) > 0) // If object to clean is used + { foreach ($params['fields_anonym'] as $fields => $val) { $object->$fields = $val; } - $object->update($obj->rowid, $user); - if ($params['class'] == 'Societe') { - // On supprime les contacts associé - $sql = "DELETE FROM ".MAIN_DB_PREFIX."socpeople WHERE fk_soc = " . $obj->rowid; - $db->query($sql); + $result = $object->update($obj->rowid, $user); + if ($result > 0) + { + if ($params['class'] == 'Societe') { + // We delete contacts of thirdparty + $sql = "DELETE FROM ".MAIN_DB_PREFIX."socpeople WHERE fk_soc = " . $obj->rowid; + $result = $this->db->query($sql); + if ($result < 0) + { + $errormsg = $this->db->lasterror(); + $error++; + } + } } - } else { + else + { + $errormsg = $object->error; + $error++; + } + $nbupdated++; + } else { // If object to clean is not used if ($object->element == 'adherent') { - $ret = $object->delete($obj->rowid, $user); + $result = $object->delete($obj->rowid, $user); } else { - $ret = $object->delete($user); + $result = $object->delete($user); } + if ($result < 0) + { + $errormsg = $object->error; + $error++; + } + + $nbdeleted++; } $i++; @@ -504,27 +534,17 @@ class DataPolicyCron } } + $this->db->commit(); + + if (! $error) + { + $this->output = $nbupdated.' record updated, '.$nbdeleted.' record deleted'; + } + else + { + $this->error = $errormsg; + } + return 0; } - - - /** - * sendMailing - * - * @return boolean - */ - public function sendMailing() - { - global $conf, $db, $langs, $user; - - $langs->load('datapolicy@datapolicy'); - - require_once DOL_DOCUMENT_ROOT . '/datapolicy/class/datapolicy.class.php'; - - $contacts = new DataPolicy($db); - $contacts->getAllContactNotInformed(); - $contacts->getAllCompaniesNotInformed(); - $contacts->getAllAdherentsNotInformed(); - return true; - } } From f12a01293233b43dceed54eb13ed3842dcf2b76d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 23:25:40 +0200 Subject: [PATCH 1102/1148] Update card.php --- htdocs/contrat/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 35338f41903..0bf304b96a1 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -433,7 +433,7 @@ if (empty($reshook)) } $qty = GETPOST('qty'.$predef); - $remise_percent = (GETPOST('remise_percent'.$predef) != '' ? GETPOST('remise_percent'.$predef) : 0); + $remise_percent = ((GETPOST('remise_percent'.$predef) != '') ? GETPOST('remise_percent'.$predef) : 0); if ($qty == '') { From a168c989f8a12462bee3c96a4f1e50ec737480cd Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 23:29:27 +0200 Subject: [PATCH 1103/1148] Update stripe.class.php --- htdocs/stripe/class/stripe.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php index 2211bf80118..abc875c370f 100644 --- a/htdocs/stripe/class/stripe.class.php +++ b/htdocs/stripe/class/stripe.class.php @@ -383,7 +383,7 @@ class Stripe extends CommonObject { $metadata['dol_type'] = $object->element; $metadata['dol_id'] = $object->id; - if (isset($object->thirdparty->id)) $metadata['dol_thirdparty_id'] = $object->thirdparty->id; + if (is_object($object->thirdparty) && $object->thirdparty->id > 0) $metadata['dol_thirdparty_id'] = $object->thirdparty->id; } $dataforintent = array( From bdbae9b3bcd000a991d2e7f0f760d05dbd9706f3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 6 Sep 2019 23:51:33 +0200 Subject: [PATCH 1104/1148] Fix phpcs --- htdocs/install/repair.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php index 37a7dfaa842..472e77e1974 100644 --- a/htdocs/install/repair.php +++ b/htdocs/install/repair.php @@ -78,7 +78,7 @@ print 'Option rebuild_product_thumbs (\'test\' or \'confirmed\') is '.(GETPOST(' print 'Option force_disable_of_modules_not_found (\'test\' or \'confirmed\') is '.(GETPOST('force_disable_of_modules_not_found', 'alpha')?GETPOST('force_disable_of_modules_not_found', 'alpha'):'undefined').'
'."\n"; print 'Option clean_perm_table (\'test\' or \'confirmed\') is '.(GETPOST('clean_perm_table', 'alpha')?GETPOST('clean_perm_table', 'alpha'):'undefined').'
'."\n"; print 'Option force_utf8_on_tables, for mysql/mariadb only (\'test\' or \'confirmed\') is '.(GETPOST('force_utf8_on_tables', 'alpha')?GETPOST('force_utf8_on_tables', 'alpha'):'undefined').'
'."\n"; -print 'Option repair_link_dispatch_lines_supplier_order_lines, (\'test\' or \'confirmed\') is '.(GETPOST('repair_link_dispatch_lines_supplier_order_lines','alpha')?GETPOST('repair_link_dispatch_lines_supplier_order_lines','alpha'):'undefined').'
'."\n"; +print 'Option repair_link_dispatch_lines_supplier_order_lines, (\'test\' or \'confirmed\') is '.(GETPOST('repair_link_dispatch_lines_supplier_order_lines', 'alpha')?GETPOST('repair_link_dispatch_lines_supplier_order_lines', 'alpha'):'undefined').'
'."\n"; print '
'; print ''; From 397e656161aa5fbf7f86fa7d2f74e7d8e84596b2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 10:43:35 +0200 Subject: [PATCH 1105/1148] Update doc --- htdocs/conf/conf.php.example | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/htdocs/conf/conf.php.example b/htdocs/conf/conf.php.example index 4d26fef7965..84fc87d35f8 100644 --- a/htdocs/conf/conf.php.example +++ b/htdocs/conf/conf.php.example @@ -152,7 +152,9 @@ $dolibarr_main_db_collation='utf8_unicode_ci'; // dolibarr_main_instance_unique_id -// An ID that is unique for each installation. +// An secret ID that is unique for each installation. +// This value is also visible and never propagated outside of Dolibarr, so it can be used as a salt / key for some encryption. +// To propagate a unique key, you propagate the value concatenated with a string with a hash function. Example: md5('dolibarr'+dolibarr_main_instance_unique_id) // Default value: randomly defined during installation // Examples: // $dolibarr_main_instance_unique_id='84b5bc91f83b56e458db71e0adac2b62'; From 30d2f84eb71082bdb9ff4248ca4063cc9803ebc1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 10:58:20 +0200 Subject: [PATCH 1106/1148] Remove a label that is no more used --- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/fourn/class/fournisseur.commande.class.php | 1 - htdocs/langs/en_US/orders.lang | 4 ---- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index c6b5eb46515..e3f26b1ccd7 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -924,7 +924,7 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $newmenu->add("/fourn/commande/list.php?leftmenu=orders_suppliers&statut=6,7", $langs->trans("StatusSupplierOrderCanceled"), 2, $user->rights->fournisseur->commande->lire); $newmenu->add("/fourn/commande/list.php?leftmenu=orders_suppliers&statut=9", $langs->trans("StatusSupplierOrderRefused"), 2, $user->rights->fournisseur->commande->lire); } - // Billed is another field. We should add instead a dedicated filter on list. if ($usemenuhider || empty($leftmenu) || $leftmenu=="orders_suppliers") $newmenu->add("/fourn/commande/list.php?leftmenu=orders_suppliers&billed=1", $langs->trans("StatusSupplierOrderBilled"), 2, $user->rights->fournisseur->commande->lire); + // Billed is another field. We should add instead a dedicated filter on list. if ($usemenuhider || empty($leftmenu) || $leftmenu=="orders_suppliers") $newmenu->add("/fourn/commande/list.php?leftmenu=orders_suppliers&billed=1", $langs->trans("Billed"), 2, $user->rights->fournisseur->commande->lire); $newmenu->add("/commande/stats/index.php?leftmenu=orders_suppliers&mode=supplier", $langs->trans("Statistics"), 1, $user->rights->fournisseur->commande->lire); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index ddaa74e2525..64c7ca73b7b 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -648,7 +648,6 @@ class CommandeFournisseur extends CommonOrder $this->statuts[5] = 'StatusSupplierOrderReceivedAll'; $this->statuts[6] = 'StatusSupplierOrderCanceled'; // Approved->Canceled $this->statuts[7] = 'StatusSupplierOrderCanceled'; // Process running->canceled - //$this->statuts[8] = 'StatusSupplierOrderBilled'; // Everything is finished, order received totally and bill received $this->statuts[9] = 'StatusSupplierOrderRefused'; // List of language codes for status diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index 6a99b7e5a6b..3197cc12bca 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -37,7 +37,6 @@ StatusOrderDeliveredShort=Delivered StatusOrderToBillShort=Delivered StatusOrderApprovedShort=Approved StatusOrderRefusedShort=Refused -StatusOrderBilledShort=Billed StatusOrderToProcessShort=To process StatusOrderReceivedPartiallyShort=Partially received StatusOrderReceivedAllShort=Products received @@ -50,7 +49,6 @@ StatusOrderProcessed=Processed StatusOrderToBill=Delivered StatusOrderApproved=Approved StatusOrderRefused=Refused -StatusOrderBilled=Billed StatusOrderReceivedPartially=Partially received StatusOrderReceivedAll=All products received ShippingExist=A shipment exists @@ -170,7 +168,6 @@ StatusSupplierOrderDeliveredShort=Delivered StatusSupplierOrderToBillShort=Delivered StatusSupplierOrderApprovedShort=Approved StatusSupplierOrderRefusedShort=Refused -StatusSupplierOrderBilledShort=Billed StatusSupplierOrderToProcessShort=To process StatusSupplierOrderReceivedPartiallyShort=Partially received StatusSupplierOrderReceivedAllShort=Products received @@ -183,6 +180,5 @@ StatusSupplierOrderProcessed=Processed StatusSupplierOrderToBill=Delivered StatusSupplierOrderApproved=Approved StatusSupplierOrderRefused=Refused -StatusSupplierOrderBilled=Billed StatusSupplierOrderReceivedPartially=Partially received StatusSupplierOrderReceivedAll=All products received \ No newline at end of file From eb7f9642681b353790915e4c983b1151fff6ae56 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 11:25:11 +0200 Subject: [PATCH 1107/1148] Update objectline_create.tpl.php --- htdocs/core/tpl/objectline_create.tpl.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 458872cf99b..480e0975f00 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -647,7 +647,7 @@ jQuery(document).ready(function() { jQuery('#trlinefordates').show(); global->EDIT_PREDEF_PRICEHT)) + if (!empty($conf->global->MAIN_EDIT_PREDEF_PRICEHT)) { ?> // get the HT price for the product and display it @@ -842,10 +842,9 @@ function setforpredef() { jQuery("#prod_entry_mode_free").prop('checked',false).change(); jQuery("#prod_entry_mode_predef").prop('checked',true).change(); - global->EDIT_PREDEF_PRICEHT)) - {?> + global->MAIN_EDIT_PREDEF_PRICEHT)) { ?> jQuery("#price_ht").val('').hide(); - + jQuery("#multicurrency_price_ht").hide(); jQuery("#price_ttc").hide(); // May no exists jQuery("#fourn_ref").hide(); From c7a90ad52803ddae84a9a517acdaf1ddff9edb8d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 11:25:58 +0200 Subject: [PATCH 1108/1148] Update product.php --- htdocs/product/admin/product.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index a8116314dda..392ae8eb081 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -155,9 +155,6 @@ if ($action == 'other') $resql_new = $db->query($sql_new); } } - - $value = GETPOST('activate_EditPredifinedPriceHT','alpha'); - $res = dolibarr_set_const($db, "EDIT_PREDEF_PRICEHT", $value,'chaine',0,'',$conf->entity); } if ($action == 'specimen') // For products From a5d04e8fd5d7725abcb3c4c463b061db14290b40 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 11:26:21 +0200 Subject: [PATCH 1109/1148] Update product.php --- htdocs/product/admin/product.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php index 392ae8eb081..45f938431c3 100644 --- a/htdocs/product/admin/product.php +++ b/htdocs/product/admin/product.php @@ -675,14 +675,6 @@ if (! empty($conf->fournisseur->enabled)) print ''; } -// Activate price ht edition for predefined product on line add -print ''; -print ''; -print ''; -print ''; - if (! empty($conf->global->PRODUCT_CANVAS_ABILITY)) { // Add canvas feature From 5d6ccfdf0035582a01e9375a3bc31629e4bc8d50 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 13:12:39 +0200 Subject: [PATCH 1110/1148] Fix phpcs --- htdocs/core/tpl/objectline_create.tpl.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index b11006ac9bb..1f0897f7e98 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -685,10 +685,10 @@ jQuery(document).ready(function() { jQuery("#price_ht").val(data.price_ht); }, 'json'); - + rights->margins->creer) { $langs->load('stocks'); @@ -850,10 +850,10 @@ function setforpredef() { console.log("Call setforpredef. We hide some fields and show dates"); jQuery("#select_type").val(-1); jQuery("#prod_entry_mode_free").prop('checked',false).change(); - jQuery("#prod_entry_mode_predef").prop('checked',true).change(); + jQuery("#prod_entry_mode_predef").prop('checked',true).change( global->MAIN_EDIT_PREDEF_PRICEHT)) { ?> jQuery("#price_ht").val('').hide(); - + jQuery("#price_ht").val('') jQuery("#price_ht, #multicurrency_price_ht, #price_ttc, #fourn_ref, #tva_tx, #title_vat, #title_up_ht, #title_up_ht_currency, #title_up_ttc, #title_up_ttc_currency").hide(); jQuery("#np_marginRate, #np_markRate, .np_marginRate, .np_markRate, #units, #title_units").hide(); From 44cb9738d696067fa8188151f776a8e33c6f5baf Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 14:35:47 +0200 Subject: [PATCH 1111/1148] Fix trans --- htdocs/langs/en_US/admin.lang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index a84a052094a..a8f7f9643ce 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -218,7 +218,7 @@ DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external DoliPartnersDesc=List of companies providing custom-developed modules or features.
Note: since Dolibarr is an open source application, anyone experienced in PHP programming may develop a module. WebSiteDesc=External websites for more add-on (non-core) modules... DevelopYourModuleDesc=Some solutions to develop your own module... -URL=Link +URL=URL BoxesAvailable=Widgets available BoxesActivated=Widgets activated ActivateOn=Activate on From 452c248a0d5c2579689ab7c6c00d488b6a187a1b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 14:49:48 +0200 Subject: [PATCH 1112/1148] Show list of menus and permission on the modulebuilder. --- htdocs/modulebuilder/index.php | 231 +++++++++++++++------------------ 1 file changed, 105 insertions(+), 126 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 1c3c899b19c..30fd315dde3 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -2195,7 +2195,7 @@ elseif (! empty($module)) print '
'; - print '
'.$langs->trans("EditPredifinedPriceHTAbility").''; -print $form->selectyesno("activate_EditPredifinedPriceHT",$conf->global->EDIT_PREDEF_PRICEHT,1); -print '
'; print $proptype; print ''; + print ''; if ($proparrayofkeyval) { print json_encode($proparrayofkeyval); } @@ -2344,7 +2344,7 @@ elseif (! empty($module)) { $pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath']; - //$menus = $moduleobj->; + $menus = $moduleobj->menu; if ($action != 'editfile' || empty($file)) { @@ -2361,9 +2361,6 @@ elseif (! empty($module)) print '
'; print load_fiche_titre($langs->trans("ListOfMenusEntries"), '', ''); - // @TODO - print $langs->trans("FeatureNotYetAvailable"); - print '
'; print ''; print ''; @@ -2371,77 +2368,90 @@ elseif (! empty($module)) print ''; print ''; - /* - print '
'; - print ''; + print '
'; + print '
'; - print ''; - print_liste_field_titre("Menu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("CronTask",'','',"",$param,'',$sortfield,$sortorder); - print_liste_field_titre("CronFrequency",'',"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("StatusAtInstall",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Comment",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print "\n"; + print ''; + print_liste_field_titre("Type",$_SERVER["PHP_SELF"],'',"",$param,'',$sortfield,$sortorder); + print_liste_field_titre("fk_menu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Title",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("mainmenu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("leftmenu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("URL",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("LanguageFile",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Position",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Enabled",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("perms",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Target",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("UserType",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print "\n"; - if (count($menus)) - { - foreach ($cronjobs as $cron) - { - print ''; + if (count($menus)) + { + foreach ($menus as $menu) + { + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; - } + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + + print ''; + } } else { - print ''; + print ''; } print '
'; - print $cron['label']; - print ''; + print $menu['type']; + print ''; - if ($cron['jobtype']=='method') - { - $text=$langs->trans("CronClass"); - $texttoshow=$langs->trans('CronModule').': '.$module.'
'; - $texttoshow.=$langs->trans('CronClass').': '. $cron['class'].'
'; - $texttoshow.=$langs->trans('CronObject').': '. $cron['objectname'].'
'; - $texttoshow.=$langs->trans('CronMethod').': '. $cron['method']; - $texttoshow.='
'.$langs->trans('CronArgs').': '. $cron['parameters']; - $texttoshow.='
'.$langs->trans('Comment').': '. $langs->trans($cron['comment']); - } - elseif ($cron['jobtype']=='command') - { - $text=$langs->trans('CronCommand'); - $texttoshow=$langs->trans('CronCommand').': '.dol_trunc($cron['command']); - $texttoshow.='
'.$langs->trans('CronArgs').': '. $cron['parameters']; - $texttoshow.='
'.$langs->trans('Comment').': '. $langs->trans($cron['comment']); - } - print $form->textwithpicto($text, $texttoshow, 1); - print '
'; + print $menu['fk_menu']; + print ''; - if($cron['unitfrequency'] == "60") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Minutes'); - if($cron['unitfrequency'] == "3600") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Hours'); - if($cron['unitfrequency'] == "86400") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Days'); - if($cron['unitfrequency'] == "604800") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Weeks'); - print ''; + print $menu['titre']; + print ''; - print $cron['status']; - print ''; + print $menu['mainmenu']; + print ''; - if (!empty($cron['comment'])) {print $cron['comment'];} - print ''; + print $menu['left']; + print '
'; + print $menu['url']; + print ''; + print $menu['langs']; + print ''; + print $menu['position']; + print ''; + print $menu['enabled']; + print ''; + print $menu['perms']; + print ''; + print $menu['target']; + print ''; + print $menu['user']; + print '
'.$langs->trans("None").'
'.$langs->trans("None").'
'; print '
'; print '
'; - */ } else { @@ -2474,7 +2484,7 @@ elseif (! empty($module)) { $pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath']; - //$perms = $moduleobj->; + $perms = $moduleobj->rights; if ($action != 'editfile' || empty($file)) { @@ -2492,10 +2502,6 @@ elseif (! empty($module)) print '
'; print load_fiche_titre($langs->trans("ListOfPermissionsDefined"), '', ''); - - // @TODO - print $langs->trans("FeatureNotYetAvailable"); - print '
'; print ''; print ''; @@ -2503,77 +2509,50 @@ elseif (! empty($module)) print ''; print ''; - /* - print '
'; - print ''; + print '
'; + print '
'; - print ''; - print_liste_field_titre("CronLabel",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("CronTask",'','',"",$param,'',$sortfield,$sortorder); - print_liste_field_titre("CronFrequency",'',"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("StatusAtInstall",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Comment",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print "\n"; + print ''; + print_liste_field_titre("ID",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Label",$_SERVER["PHP_SELF"],'',"",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Permission",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print "\n"; - if (count($cronjobs)) - { - foreach ($cronjobs as $cron) - { - print ''; + if (count($perms)) + { + foreach ($perms as $perm) + { + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; + } + } + else + { + print ''; + } - print ''; - } - } - else - { - print ''; - } + print '
'; - print $cron['label']; - print ''; + print $perm[0]; + print ''; - if ($cron['jobtype']=='method') - { - $text=$langs->trans("CronClass"); - $texttoshow=$langs->trans('CronModule').': '.$module.'
'; - $texttoshow.=$langs->trans('CronClass').': '. $cron['class'].'
'; - $texttoshow.=$langs->trans('CronObject').': '. $cron['objectname'].'
'; - $texttoshow.=$langs->trans('CronMethod').': '. $cron['method']; - $texttoshow.='
'.$langs->trans('CronArgs').': '. $cron['parameters']; - $texttoshow.='
'.$langs->trans('Comment').': '. $langs->trans($cron['comment']); - } - elseif ($cron['jobtype']=='command') - { - $text=$langs->trans('CronCommand'); - $texttoshow=$langs->trans('CronCommand').': '.dol_trunc($cron['command']); - $texttoshow.='
'.$langs->trans('CronArgs').': '. $cron['parameters']; - $texttoshow.='
'.$langs->trans('Comment').': '. $langs->trans($cron['comment']); - } - print $form->textwithpicto($text, $texttoshow, 1); - print '
'; + print $perm[1]; + print ''; - if($cron['unitfrequency'] == "60") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Minutes'); - if($cron['unitfrequency'] == "3600") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Hours'); - if($cron['unitfrequency'] == "86400") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Days'); - if($cron['unitfrequency'] == "604800") print $langs->trans('CronEach')." ".($cron['frequency'])." ".$langs->trans('Weeks'); - print ''; + print $perm[4]; + print ''; - print $cron['status']; - print ''; + print $perm[5]; + print ''; - if (!empty($cron['comment'])) {print $cron['comment'];} - print '
'.$langs->trans("None").'
'.$langs->trans("None").'
'; + print '
'; - print '
'; - print ''; - - print ''; - */ + print ''; } else { From d6f105c78349afd246a842aee55abff084b63218 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 7 Sep 2019 15:44:48 +0200 Subject: [PATCH 1113/1148] Work on MRP module --- htdocs/core/class/conf.class.php | 3 --- htdocs/core/menus/standard/auguria.lib.php | 4 ++-- htdocs/core/menus/standard/eldy.lib.php | 13 +++++++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php index 3c03f9ea14c..b85056fe5e8 100644 --- a/htdocs/core/class/conf.class.php +++ b/htdocs/core/class/conf.class.php @@ -552,9 +552,6 @@ class Conf if (! isset($this->global->MAIN_PDF_DASH_BETWEEN_LINES)) $this->global->MAIN_PDF_DASH_BETWEEN_LINES=1; // use dash between lines if (! isset($this->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) $this->global->PDF_ALLOW_HTML_FOR_FREE_TEXT=1; // allow html content into free footer text - // Set default value to MAIN_SHOW_LOGO - if (! isset($this->global->MAIN_SHOW_LOGO)) $this->global->MAIN_SHOW_LOGO=1; - // Default max file size for upload $this->maxfilesize = (empty($this->global->MAIN_UPLOAD_DOC) ? 0 : (int) $this->global->MAIN_UPLOAD_DOC * 1024); diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index b321c0da621..438ff8246ea 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -53,8 +53,8 @@ function print_auguria_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout if (empty($noout)) print_start_menu_array_auguria(); - $usemenuhider = 1; global $usemenuhider; + $usemenuhider = 1; // Show/Hide vertical menu if ($mode != 'jmobile' && $mode != 'topnb' && $usemenuhider && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) @@ -265,8 +265,8 @@ function print_left_auguria_menu($db, $menu_array_before, $menu_array_after, &$t $mainmenu=($forcemainmenu?$forcemainmenu:$_SESSION["mainmenu"]); $leftmenu=($forceleftmenu?'':(empty($_SESSION["leftmenu"])?'none':$_SESSION["leftmenu"])); - $usemenuhider = 0; global $usemenuhider; + $usemenuhider = 0; // Show logo company if (empty($noout) && ! empty($conf->global->MAIN_SHOW_LOGO) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index e3f26b1ccd7..9efb4dd1e27 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1580,8 +1580,17 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM $langs->load("mrp"); $newmenu->add("", $langs->trans("MenuBOM"), 0, $user->rights->bom->read, '', $mainmenu, 'bom'); - $newmenu->add("/bom/bom_card.php?leftmenu=bom&action=create", $langs->trans("NewBOM"), 1, $user->rights->bom->write); - $newmenu->add("/bom/bom_list.php?leftmenu=bom", $langs->trans("List"), 1, $user->rights->bom->read); + $newmenu->add("/bom/bom_card.php?leftmenu=bom&action=create", $langs->trans("NewBOM"), 1, $user->rights->bom->write, '', $mainmenu, 'bom'); + $newmenu->add("/bom/bom_list.php?leftmenu=bom", $langs->trans("List"), 1, $user->rights->bom->read, '', $mainmenu, 'bom'); + } + + if (! empty($conf->mrp->enabled)) + { + $langs->load("mrp"); + + $newmenu->add("", $langs->trans("MenuMRP"), 0, $user->rights->mrp->read, '', $mainmenu, 'mo'); + $newmenu->add("/mrp/mo_card.php?leftmenu=mo&action=create", $langs->trans("NewMO"), 1, $user->rights->mrp->write, '', $mainmenu, 'mo'); + $newmenu->add("/mrp/mo_list.php?leftmenu=mo", $langs->trans("List"), 1, $user->rights->mrp->read, '', $mainmenu, 'mo'); } } From 3a8d8ee902ccdb2eb40960c2fe12f021b46ca521 Mon Sep 17 00:00:00 2001 From: Alexandre SPANGARO Date: Sun, 8 Sep 2019 03:56:01 +0200 Subject: [PATCH 1114/1148] FIX #11401 Adherent unknown language key --- htdocs/adherents/class/adherent_type.class.php | 2 +- htdocs/adherents/type.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php index 0d3980318a4..9591a24fa78 100644 --- a/htdocs/adherents/class/adherent_type.class.php +++ b/htdocs/adherents/class/adherent_type.class.php @@ -424,7 +424,7 @@ class AdherentType extends CommonObject global $langs; if ($morphy == 'phy') { return $langs->trans("Physical"); } elseif ($morphy == 'mor') { return $langs->trans("Moral"); } - else return $langs->trans("Physical & Morale"); + else return $langs->trans("MorPhy"); //return $morphy; } diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index 019388aeaab..f41275a4c71 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -283,7 +283,7 @@ if (! $rowid && $action != 'create' && $action != 'edit') print '
'; if ($objp->morphy == 'phy') { print $langs->trans("Physical"); } elseif ($objp->morphy == 'mor') { print $langs->trans("Moral"); } - else print $langs->trans("Physical & Morale"); + else print $langs->trans("MorPhy"); print ''.yn($objp->subscription).''.yn($objp->vote).''; - if ($total_projectlinesa_planned) print round(100 * $total_projectlinesa_spent / $total_projectlinesa_planned, 2).' %'; + if ($total_projectlinesa_planned) print $totalCalculatedProgress.' %'; print ''; - if ($total_projectlinesa_planned) print round(100 * $total_projectlinesa_declared_if_planned / $total_projectlinesa_planned, 2).' %'; + if ($total_projectlinesa_planned) print ''.$totalAverageDeclaredProgress.' %'; print ''; + if ($total_projectlinesa_planned){ + print ''; + print '
'; + print '
'; + print '
'; + print ''; + } + print '
'; From a639724b923cdb13f2b07c4579dd64823696d37d Mon Sep 17 00:00:00 2001 From: ATM john Date: Sun, 8 Sep 2019 18:13:15 +0200 Subject: [PATCH 1121/1148] Fix follow tasks and time spent --- htdocs/core/boxes/box_task.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/boxes/box_task.php b/htdocs/core/boxes/box_task.php index 3a0b2c67af9..cf1d5241753 100644 --- a/htdocs/core/boxes/box_task.php +++ b/htdocs/core/boxes/box_task.php @@ -156,6 +156,8 @@ class box_task extends ModeleBoxes $sql.= " pt.entity = ".$conf->entity; $sql.= " AND p.fk_statut = ".Project::STATUS_VALIDATED; $sql.= " AND (pt.progress < 100 OR pt.progress IS NULL ) "; // 100% is done and not displayed + $sql.= " AND p.usage_task = 1 "; + $sql.= " ORDER BY pt.datee ASC, pt.dateo ASC"; $sql.= $db->plimit($max, 0); From ecddeb2b8bf6e54c283599bb26aa9500c8a9cd64 Mon Sep 17 00:00:00 2001 From: ATM john Date: Sun, 8 Sep 2019 21:19:15 +0200 Subject: [PATCH 1122/1148] Add progress to global task list --- htdocs/core/lib/project.lib.php | 4 +++- htdocs/projet/tasks/list.php | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 5e9d05057be..d37c7d5f960 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -565,7 +565,9 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t // resume print ''; - print getTaskProgressView($taskstatic, false, false); + if ($lines[$i]->progress != '' && $lines[$i]->duration) { + print getTaskProgressView($taskstatic, false, false); + } print ''; if ($obj->progress != '') { - print $obj->progress.' %'; + print getTaskProgressBadge($object); } print ''; + if($obj->progress != '' && $obj->duration_effective){ + print getTaskProgressView($object, false, false); + } + print ''.($totalarray['totalplannedworkload'] > 0 ? round(100 * $totalarray['totaldurationdeclared'] / $totalarray['totalplannedworkload'], 2).' %' : '').''.convertSecondToTime($totalarray['totaltobill'], $plannedworkloadoutputformat).''.convertSecondToTime($totalarray['totalbilled'], $plannedworkloadoutputformat).'
'; print ''; - print_liste_field_titre("Type",$_SERVER["PHP_SELF"],'',"",$param,'',$sortfield,$sortorder); - print_liste_field_titre("fk_menu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Title",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("mainmenu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("leftmenu",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("URL",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("LanguageFile",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Position",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Enabled",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("perms",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Target",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("UserType",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("Type", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("fk_menu", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Title", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("mainmenu", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("leftmenu", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("URL", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("LanguageFile", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Position", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Enabled", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("perms", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Target", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("UserType", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); print "\n"; if (count($menus)) @@ -2513,10 +2513,10 @@ elseif (! empty($module)) print '
'; print ''; - print_liste_field_titre("ID",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Label",$_SERVER["PHP_SELF"],'',"",$param,'',$sortfield,$sortorder); - print_liste_field_titre("Permission",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); - print_liste_field_titre("",$_SERVER["PHP_SELF"],"","",$param,'',$sortfield,$sortorder); + print_liste_field_titre("ID", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Label", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("Permission", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); + print_liste_field_titre("", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder); print "\n"; if (count($perms)) From 6d38d58000c39109ea40ad973c2f5946d5453865 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 8 Sep 2019 21:31:10 +0200 Subject: [PATCH 1127/1148] Trans --- htdocs/langs/en_US/mrp.lang | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/langs/en_US/mrp.lang b/htdocs/langs/en_US/mrp.lang index 360f4303f07..96efb3be55f 100644 --- a/htdocs/langs/en_US/mrp.lang +++ b/htdocs/langs/en_US/mrp.lang @@ -15,3 +15,5 @@ ManufacturingEfficiency=Manufacturing efficiency ValueOfMeansLoss=Value of 0.95 means an average of 5%% of loss during the production DeleteBillOfMaterials=Delete Bill Of Materials ConfirmDeleteBillOfMaterials=Are you sure you want to delete this Bill Of Material? +MenuMRP=Manufacturing Orders +NewMO=New Manufacturing Order \ No newline at end of file From 1d74387125d9f975619b5e9b8e77500cb0f0bd53 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 08:47:23 +0200 Subject: [PATCH 1128/1148] Removed deprecated property ->numero (We must use ->num_payment) --- htdocs/adherents/class/adherent.class.php | 3 +-- .../compta/paiement/cheque/class/remisecheque.class.php | 2 +- htdocs/compta/paiement/class/paiement.class.php | 8 +++++--- htdocs/fourn/class/paiementfourn.class.php | 9 ++++++--- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php index 1b516e1c94e..7085f08be91 100644 --- a/htdocs/adherents/class/adherent.class.php +++ b/htdocs/adherents/class/adherent.class.php @@ -1740,8 +1740,7 @@ class Adherent extends CommonObject $paiement->datepaye = $paymentdate; $paiement->amounts = $amounts; $paiement->paiementid = dol_getIdFromCode($this->db, $operation, 'c_paiement', 'code', 'id', 1); - $paiement->num_paiement = $num_chq; - $paiement->note = $label; + $paiement->num_payment = $num_chq; $paiement->note_public = $label; if (! $error) diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php index 316215a5caf..a582c95ce6b 100644 --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php @@ -813,7 +813,7 @@ class RemiseCheque extends CommonObject $rejectedPayment->amounts = array(); $rejectedPayment->datepaye = $rejection_date; $rejectedPayment->paiementid = dol_getIdFromCode($this->db, 'CHQ', 'c_paiement', 'code', 'id', 1); - $rejectedPayment->num_paiement = $payment->numero; + $rejectedPayment->num_payment = $payment->num_payment; while($obj = $db->fetch_object($resql)) { diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php index a96a3d12f26..96f74fdae48 100644 --- a/htdocs/compta/paiement/class/paiement.class.php +++ b/htdocs/compta/paiement/class/paiement.class.php @@ -117,6 +117,7 @@ class Paiement extends CommonObject /** * @var int bank account id of payment * @deprecated + * @see $fk_account */ public $bank_account; @@ -182,7 +183,6 @@ class Paiement extends CommonObject $this->ref = $obj->ref?$obj->ref:$obj->rowid; $this->date = $this->db->jdate($obj->dp); $this->datepaye = $this->db->jdate($obj->dp); - $this->numero = $obj->num_payment; // deprecated $this->num_paiement = $obj->num_payment; // deprecated $this->num_payment = $obj->num_payment; $this->montant = $obj->amount; // deprecated @@ -286,10 +286,12 @@ class Paiement extends CommonObject $total = $totalamount_converted; // Maybe use price2num with MT for the converted value $mtotal = $totalamount; } + + $num_payment = ($this->num_payment?$this->num_payment:$this->num_paiement); $note = ($this->note_public?$this->note_public:$this->note); $sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement (entity, ref, datec, datep, amount, multicurrency_amount, fk_paiement, num_paiement, note, ext_payment_id, ext_payment_site, fk_user_creat)"; - $sql.= " VALUES (".$conf->entity.", '".$this->db->escape($this->ref)."', '". $this->db->idate($now)."', '".$this->db->idate($this->datepaye)."', ".$total.", ".$mtotal.", ".$this->paiementid.", '".$this->db->escape($this->num_paiement)."', '".$this->db->escape($note)."', ".($this->ext_payment_id?"'".$this->db->escape($this->ext_payment_id)."'":"null").", ".($this->ext_payment_site?"'".$this->db->escape($this->ext_payment_site)."'":"null").", ".$user->id.")"; + $sql.= " VALUES (".$conf->entity.", '".$this->db->escape($this->ref)."', '". $this->db->idate($now)."', '".$this->db->idate($this->datepaye)."', ".$total.", ".$mtotal.", ".$this->paiementid.", '".$this->db->escape($num_payment)."', '".$this->db->escape($note)."', ".($this->ext_payment_id?"'".$this->db->escape($this->ext_payment_id)."'":"null").", ".($this->ext_payment_site?"'".$this->db->escape($this->ext_payment_site)."'":"null").", ".$user->id.")"; dol_syslog(get_class($this)."::Create insert paiement", LOG_DEBUG); $resql = $this->db->query($sql); @@ -885,7 +887,7 @@ class Paiement extends CommonObject $result = $this->db->query($sql); if ($result) { - $this->numero = $this->db->escape($num); + $this->num_payment = $this->db->escape($num); return 0; } else diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php index 51485a7db5e..9ba504bb876 100644 --- a/htdocs/fourn/class/paiementfourn.class.php +++ b/htdocs/fourn/class/paiementfourn.class.php @@ -88,7 +88,7 @@ class PaiementFourn extends Paiement $sql = 'SELECT p.rowid, p.ref, p.entity, p.datep as dp, p.amount, p.statut, p.fk_bank,'; $sql.= ' c.code as paiement_code, c.libelle as paiement_type,'; - $sql.= ' p.num_paiement, p.note, b.fk_account'; + $sql.= ' p.num_paiement as num_payment, p.note, b.fk_account'; $sql.= ' FROM '.MAIN_DB_PREFIX.'paiementfourn as p'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as c ON p.fk_paiement = c.id'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid '; @@ -113,12 +113,15 @@ class PaiementFourn extends Paiement $this->entity = $obj->entity; $this->date = $this->db->jdate($obj->dp); $this->datepaye = $this->db->jdate($obj->dp); - $this->numero = $obj->num_paiement; - $this->num_paiement = $obj->num_paiement; + $this->num_paiement = $obj->num_payment; + $this->num_payment = $obj->num_payment; $this->bank_account = $obj->fk_account; + $this->fk_account = $obj->fk_account; $this->bank_line = $obj->fk_bank; $this->montant = $obj->amount; + $this->amount = $obj->amount; $this->note = $obj->note; + $this->note_private = $obj->note; $this->type_code = $obj->paiement_code; $this->type_libelle = $obj->paiement_type; $this->statut = $obj->statut; From 15eaa5cbd890f9fb0122a9198d0c609715b048f6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 10:27:56 +0200 Subject: [PATCH 1129/1148] NEW Public holidays are now in a table (no more hard coded per country) --- htdocs/core/lib/date.lib.php | 258 +++++++----------- .../mysql/data/llx_c_hrm_public_holiday.sql | 58 +++- .../install/mysql/migration/10.0.0-11.0.0.sql | 60 +++- .../tables/llx_c_hrm_public_holiday.key.sql | 2 +- .../mysql/tables/llx_c_hrm_public_holiday.sql | 2 +- 5 files changed, 209 insertions(+), 171 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 8b30f56c0d2..04518dade2f 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -82,7 +82,6 @@ function getServerTimeZoneString() */ function getServerTimeZoneInt($refgmtdate = 'now') { - global $conf; if (method_exists('DateTimeZone', 'getOffset')) { // Method 1 (include daylight) @@ -329,6 +328,7 @@ function dolSqlDateFilter($datefield, $day_date, $month_date, $year_date) */ function dol_stringtotime($string, $gm = 1) { + $reg=array(); // Convert date with format DD/MM/YYY HH:MM:SS. This part of code should not be used. if (preg_match('/^([0-9]+)\/([0-9]+)\/([0-9]+)\s?([0-9]+)?:?([0-9]+)?:?([0-9]+)?/i', $string, $reg)) { @@ -595,39 +595,45 @@ function dol_get_first_day_week($day, $month, $year, $gm = false) } /** - * Fonction retournant le nombre de jour feries, samedis et dimanches entre 2 dates entrees en timestamp. Dates must be UTC with hour, day, min to 0 + * Return the number of non working days including saturday and sunday (or not) between 2 dates in timestamp. + * Dates must be UTC with hour, day, min to 0. * Called by function num_open_day * * @param int $timestampStart Timestamp de debut * @param int $timestampEnd Timestamp de fin * @param string $countrycode Country code * @param int $lastday Last day is included, 0: no, 1:yes - * @return int Nombre de jours feries + * @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes) + * @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes) + * @return int|string Number of non working days or error message string if error * @see num_between_day(), num_open_day() */ -function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', $lastday = 0) +function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', $lastday = 0, $includesaturday = -1, $includesunday = -1) { - global $conf; + global $db, $conf, $mysoc; $nbFerie = 0; + $specialdayrule = array(); // Check to ensure we use correct parameters if ((($timestampEnd - $timestampStart) % 86400) != 0) return 'ErrorDates must use same hours and must be GMT dates'; + if ($includesaturday < 0) $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); + if ($includesunday < 0) $includesunday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY : 1); + + $i=0; while (( ($lastday == 0 && $timestampStart < $timestampEnd) || ($lastday && $timestampStart <= $timestampEnd) ) && ($i < 50000)) // Loop end when equals (Test on i is a security loop to avoid infinite loop) { $ferie=false; - $countryfound=0; - $includesaturdayandsunday=1; $jour = date("d", $timestampStart); $mois = date("m", $timestampStart); $annee = date("Y", $timestampStart); - // Check into var $conf->global->HOLIDAY_MORE_DAYS MM-DD,YYYY-MM-DD, ... + // Do not use this anymore, use instead the dictionary of public holidays. if (! empty($conf->global->HOLIDAY_MORE_PUBLIC_HOLIDAYS)) { $arrayofdaystring=explode(',', $conf->global->HOLIDAY_MORE_PUBLIC_HOLIDAYS); @@ -645,29 +651,59 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', } } - if ($countrycode == 'FR') + // Loop on public holiday defined into hrm_public_holiday + $sql = "SELECT code, entity, fk_country, dayrule, year, month, day, active"; + $sql.= " FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday"; + $sql.= " WHERE active = 1 and fk_country IN (0, ".$mysoc->country_id.")"; + + $resql = $db->query($sql); + if ($resql) { - $countryfound=1; + $num_rows = $db->num_rows($resql); + $i=0; + while ($i < $num_rows) + { + $obj = $db->fetch_object($resql); - // Definition of fixed working days - if($jour == 1 && $mois == 1) $ferie=true; // 1er january - if($jour == 1 && $mois == 5) $ferie=true; // 1er may - if($jour == 8 && $mois == 5) $ferie=true; // 5 may - if($jour == 14 && $mois == 7) $ferie=true; // 14 july - if($jour == 15 && $mois == 8) $ferie=true; // 15 august - if($jour == 1 && $mois == 11) $ferie=true; // 1 november - if($jour == 11 && $mois == 11) $ferie=true; // 11 november - if($jour == 25 && $mois == 12) $ferie=true; // 25 december + if (! empty($obj->dayrule) && $obj->dayrule != 'date') // For example 'easter', '...' + { + $specialdayrule[$obj->dayrule] = $obj->dayrule; + } + else + { + $match = 1; + if (! empty($obj->year) && $obj->year != $annee) $match = 0; + if ($obj->month != $mois) $match = 0; + if ($obj->day != $jour) $match = 0; + if ($match) $ferie = true; + } + + $i++; + } + } + else + { + dol_syslog($db->lasterror(), LOG_ERR); + return 'Error sql '.$db->lasterror(); + } + + // Special dayrules + if (in_array('easter', $specialdayrule)) + { // Calculation for easter date $date_paques = easter_date($annee); $jour_paques = date("d", $date_paques); $mois_paques = date("m", $date_paques); if($jour_paques == $jour && $mois_paques == $mois) $ferie=true; - // Pâques + // Easter (sunday) + } + if (in_array('eastermonday', $specialdayrule)) + { // Calculation for the monday of easter date - $date_lundi_paques = mktime( + $date_paques = easter_date($annee); + $date_lundi_paques = mktime( date("H", $date_paques), date("i", $date_paques), date("s", $date_paques), @@ -677,11 +713,15 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', ); $jour_lundi_ascension = date("d", $date_lundi_paques); $mois_lundi_ascension = date("m", $date_lundi_paques); - if($jour_lundi_ascension == $jour && $mois_lundi_ascension == $mois) $ferie=true; - // Lundi de Pâques + if ($jour_lundi_ascension == $jour && $mois_lundi_ascension == $mois) $ferie=true; + // Easter (monday) + } - // Calcul du jour de l'ascension (38 days after easter day) - $date_ascension = mktime( + if (in_array('ascension', $specialdayrule)) + { + // Calcul du jour de l'ascension (39 days after easter day) + $date_paques = easter_date($annee); + $date_ascension = mktime( date("H", $date_paques), date("i", $date_paques), date("s", $date_paques), @@ -692,10 +732,14 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', $jour_ascension = date("d", $date_ascension); $mois_ascension = date("m", $date_ascension); if($jour_ascension == $jour && $mois_ascension == $mois) $ferie=true; - // Ascension + // Ascension (thursday) + } - // Calculation of "Pentecote" (11 days after easter day) - $date_pentecote = mktime( + if (in_array('pentecote', $specialdayrule)) + { + // Calculation of "Pentecote" (49 days after easter day) + $date_paques = easter_date($annee); + $date_pentecote = mktime( date("H", $date_paques), date("i", $date_paques), date("s", $date_paques), @@ -706,71 +750,31 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', $jour_pentecote = date("d", $date_pentecote); $mois_pentecote = date("m", $date_pentecote); if($jour_pentecote == $jour && $mois_pentecote == $mois) $ferie=true; - // "Pentecote" + // "Pentecote" (sunday) } - - // Pentecoste and Ascensione in Italy go to the sunday after: isn't holiday. - // Pentecoste is 50 days after Easter, Ascensione 40 - if ($countrycode == 'IT') + if (in_array('pentecotemonday', $specialdayrule)) { - $countryfound=1; - - // Definition des dates feriees fixes - if($jour == 1 && $mois == 1) $ferie=true; // Capodanno - if($jour == 6 && $mois == 1) $ferie=true; // Epifania - if($jour == 25 && $mois == 4) $ferie=true; // Anniversario Liberazione - if($jour == 1 && $mois == 5) $ferie=true; // Festa del Lavoro - if($jour == 2 && $mois == 6) $ferie=true; // Festa della Repubblica - if($jour == 15 && $mois == 8) $ferie=true; // Ferragosto - if($jour == 1 && $mois == 11) $ferie=true; // Tutti i Santi - if($jour == 8 && $mois == 12) $ferie=true; // Immacolata Concezione - if($jour == 25 && $mois == 12) $ferie=true; // 25 decembre - if($jour == 26 && $mois == 12) $ferie=true; // Santo Stefano - - // Calcul du jour de paques + // Calculation of "Pentecote" (49 days after easter day) $date_paques = easter_date($annee); - $jour_paques = date("d", $date_paques); - $mois_paques = date("m", $date_paques); - if($jour_paques == $jour && $mois_paques == $mois) $ferie=true; - // Paques + $date_pentecote = mktime( + date("H", $date_paques), + date("i", $date_paques), + date("s", $date_paques), + date("m", $date_paques), + date("d", $date_paques) + 50, + date("Y", $date_paques) + ); + $jour_pentecote = date("d", $date_pentecote); + $mois_pentecote = date("m", $date_pentecote); + if($jour_pentecote == $jour && $mois_pentecote == $mois) $ferie=true; + // "Pentecote" (monday) } - if ($countrycode == 'IN') + if (in_array('viernessanto', $specialdayrule)) { - $countryfound=1; - - if($jour == 1 && $mois == 1) $ferie=true; // New Year's Day - if($jour == 26 && $mois == 1) $ferie=true; // Republic Day - if($jour == 1 && $mois == 5) $ferie=true; // May Day - if($jour == 15 && $mois == 8) $ferie=true; // Independence Day - if($jour == 2 && $mois == 10) $ferie=true; // Gandhi Jayanti - if($jour == 25 && $mois == 12) $ferie=true; // Christmas - } - - if ($countrycode == 'ES') - { - $countryfound=1; - - // Definition des dates feriees fixes - if($jour == 1 && $mois == 1) $ferie=true; // Año nuevo - if($jour == 6 && $mois == 1) $ferie=true; // Día Reyes - if($jour == 1 && $mois == 5) $ferie=true; // 1 Mayo - if($jour == 15 && $mois == 8) $ferie=true; // 15 Agosto - if($jour == 12 && $mois == 10) $ferie=true; // Día Hispanidad - if($jour == 1 && $mois == 11) $ferie=true; // 1 noviembre - if($jour == 6 && $mois == 12) $ferie=true; // Constitución - if($jour == 8 && $mois == 12) $ferie=true; // Inmaculada - if($jour == 25 && $mois == 12) $ferie=true; // 25 diciembre - - // Calcul día de Pascua - $date_paques = easter_date($annee); - $jour_paques = date("d", $date_paques); - $mois_paques = date("m", $date_paques); - if($jour_paques == $jour && $mois_paques == $mois) $ferie=true; - // Paques - // Viernes Santo - $date_viernes = mktime( + $date_paques = easter_date($annee); + $date_viernes = mktime( date("H", $date_paques), date("i", $date_paques), date("s", $date_paques), @@ -784,74 +788,10 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', //Viernes Santo } - if ($countrycode == 'AT') + if (in_array('fronleichnam', $specialdayrule)) { - $countryfound=1; - - // Definition des dates feriees fixes - if($jour == 1 && $mois == 1) $ferie=true; // Neujahr - if($jour == 6 && $mois == 1) $ferie=true; // Hl. 3 Koenige - if($jour == 1 && $mois == 5) $ferie=true; // 1. Mai - if($jour == 15 && $mois == 8) $ferie=true; // Mariae Himmelfahrt - if($jour == 26 && $mois == 10) $ferie=true; // 26. Oktober - if($jour == 1 && $mois == 11) $ferie=true; // Allerheiligen - if($jour == 8 && $mois == 12) $ferie=true; // Mariae Empfaengnis - if($jour == 24 && $mois == 12) $ferie=true; // Heilig abend - if($jour == 25 && $mois == 12) $ferie=true; // Christtag - if($jour == 26 && $mois == 12) $ferie=true; // Stefanietag - if($jour == 31 && $mois == 12) $ferie=true; // Silvester - - // Easter calculation - $date_paques = easter_date($annee); - $jour_paques = date("d", $date_paques); - $mois_paques = date("m", $date_paques); - if($jour_paques == $jour && $mois_paques == $mois) $ferie=true; - // Easter sunday - - // Monday after easter - $date_eastermonday = mktime( - date("H", $date_paques), - date("i", $date_paques), - date("s", $date_paques), - date("m", $date_paques), - date("d", $date_paques) + 1, - date("Y", $date_paques) - ); - $jour_eastermonday = date("d", $date_eastermonday); - $mois_eastermonday = date("m", $date_eastermonday); - if($jour_eastermonday == $jour && $mois_eastermonday == $mois) $ferie=true; - // Easter monday - - // Christi Himmelfahrt (39 days after easter sunday) - $date_ch = mktime( - date("H", $date_paques), - date("i", $date_paques), - date("s", $date_paques), - date("m", $date_paques), - date("d", $date_paques) + 39, - date("Y", $date_paques) - ); - $jour_ch = date("d", $date_ch); - $mois_ch = date("m", $date_ch); - if($jour_ch == $jour && $mois_ch == $mois) $ferie=true; - // Christi Himmelfahrt - - // Pfingsten (50 days after easter sunday) - $date_pentecote = mktime( - date("H", $date_paques), - date("i", $date_paques), - date("s", $date_paques), - date("m", $date_paques), - date("d", $date_paques) + 50, - date("Y", $date_paques) - ); - $jour_pentecote = date("d", $date_pentecote); - $mois_pentecote = date("m", $date_pentecote); - if($jour_pentecote == $jour && $mois_pentecote == $mois) $ferie=true; - // Pfingsten - // Fronleichnam (60 days after easter sunday) - $date_fronleichnam = mktime( + $date_fronleichnam = mktime( date("H", $date_paques), date("i", $date_paques), date("s", $date_paques), @@ -866,15 +806,21 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', } // If we have to include saturday and sunday - if ($includesaturdayandsunday) + if ($includesaturday || $includesunday) { $jour_julien = unixtojd($timestampStart); $jour_semaine = jddayofweek($jour_julien, 0); - if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true; - //Saturday (6) and Sunday (0) + if ($includesaturday) //Saturday (6) and Sunday (0) + { + if ($jour_semaine == 6) $ferie=true; + } + if ($includesunday) //Saturday (6) and Sunday (0) + { + if($jour_semaine == 0) $ferie=true; + } } - // On incremente compteur + // We increase the counter of non working day if ($ferie) $nbFerie++; // Increase number of days (on go up into loop) diff --git a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql index 312c30210c8..e66132865de 100644 --- a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql +++ b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql @@ -31,14 +31,52 @@ -- A lot of countries -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('NEWYEARDAY1', 0, 0, 0, 1, 1, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('LABORDAY1', 0, 0, 0, 5, 1, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('CHRISTMASDAY1', 0, 0, 0, 12, 25, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('NEWYEARDAY1', 0, 0, 0, 1, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('LABORDAY1', 0, 0, 0, 5, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('ASSOMPTIONDAY1', 0, 0, 0, 8, 15, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('CHRISTMASDAY1', 0, 0, 0, 12, 25, 1); + +-- France only (1) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-VICTORYDAY', 0, 1, '', 0, 5, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-NATIONALDAY', 0, 1, '', 0, 7, 14, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-ASSOMPTION', 0, 1, '', 0, 8, 15, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-TOUSSAINT', 0, 1, '', 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-ARMISTICE', 0, 1, '', 0, 11, 11, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-EASTER', 0, 1, 'eastermonday', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-ASCENSION', 0, 1, 'ascension', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-PENTECOST', 0, 1, 'pentecost', 0, 0, 0, 1); + +-- Italy (3) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-LIBEAZIONE', 0, 3, 0, 4, 25, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-EPIPHANY', 0, 3, 0, 6, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-REPUBBLICA', 0, 3, 0, 6, 2, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-TUTTISANTIT', 0, 3, 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-IMMACULE', 0, 3, 0, 12, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-SAINTSTEFAN', 0, 3, 0, 12, 26, 1); + +-- Spain (4) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-EASTER', 0, 4, 'easter', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-REYE', 0, 4, '', 0, 6, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-HISPANIDAD', 0, 4, '', 0, 10, 12, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-TOUSSAINT', 0, 4, '', 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-CONSTITUIZION', 0, 4, '', 0, 12, 6, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-IMMACULE', 0, 4, '', 0, 12, 8, 1); + +-- Austria (41) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-EASTER', 0, 41, 'eastermonday', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-ASCENSION', 0, 41, 'ascension', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-PENTECOST', 0, 41, 'pentecost', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Fronleichnam', 0, 41, 'fronleichnam', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-KONEGIE', 0, 41, '', 0, 6, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-26OKT', 0, 41, '', 0, 10, 26, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-TOUSSAINT', 0, 41, '', 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-IMMACULE', 0, 41, '', 0, 12 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-24DEC', 0, 41, '', 0, 12, 24, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-SAINTSTEFAN', 0, 41, '', 0, 12, 26, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Silvester', 0, 41, '', 0, 12, 31, 1); + +-- India (117) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-REPUBLICDAY', 0, 117, '', 0, 1, 26, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-GANDI', 0, 117, '', 0, 10, 2, 1); + --- France only -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRVICTORYDAY', 0, 1, 0, 5, 8, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRNATIONALDAY', 0, 1, 0, 7, 14, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRASSOMPTION', 0, 1, 0, 8, 15, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRTOUSSAINT', 0, 1, 0, 11, 1, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('FRARMISTICE', 0, 1, 0, 11, 11, 1); ---INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('EASTER', 0, 1, 'easter', 0, 0, 0, 1); diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 85dba76eb2e..1d43df2eda9 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -90,6 +90,10 @@ ALTER TABLE llx_projet ADD COLUMN usage_organize_event integer DEFAULT 0; UPDATE llx_projet set usage_opportunity = 1 WHERE fk_opp_status > 0; ALTER TABLE llx_accounting_account MODIFY COLUMN rowid bigint AUTO_INCREMENT; + + +ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_start datetime DEFAULT NULL; +ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_end datetime DEFAULT NULL; create table llx_c_hrm_public_holiday @@ -98,7 +102,7 @@ create table llx_c_hrm_public_holiday entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all fk_country integer, code varchar(62), - dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ... + dayrule varchar(64) DEFAULT 'date', -- 'date', 'xxx', ... day integer, month integer, year integer, -- 0 for all years @@ -106,7 +110,57 @@ create table llx_c_hrm_public_holiday import_key varchar(14) )ENGINE=innodb; +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday(entity, code); +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday2(entity, fk_country, dayrule, day, month, year); + + +-- A lot of countries +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('NEWYEARDAY1', 0, 0, 0, 1, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('LABORDAY1', 0, 0, 0, 5, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('ASSOMPTIONDAY1', 0, 0, 0, 8, 15, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('CHRISTMASDAY1', 0, 0, 0, 12, 25, 1); + +-- France only (1) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-VICTORYDAY', 0, 1, '', 0, 5, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-NATIONALDAY', 0, 1, '', 0, 7, 14, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-ASSOMPTION', 0, 1, '', 0, 8, 15, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-TOUSSAINT', 0, 1, '', 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-ARMISTICE', 0, 1, '', 0, 11, 11, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-EASTER', 0, 1, 'eastermonday', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-ASCENSION', 0, 1, 'ascension', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('FR-PENTECOST', 0, 1, 'pentecost', 0, 0, 0, 1); + +-- Italy (3) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-LIBEAZIONE', 0, 3, 0, 4, 25, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-EPIPHANY', 0, 3, 0, 6, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-REPUBBLICA', 0, 3, 0, 6, 2, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-TUTTISANTIT', 0, 3, 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-IMMACULE', 0, 3, 0, 12, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, year, month, day, active) VALUES('IT-SAINTSTEFAN', 0, 3, 0, 12, 26, 1); + +-- Spain (4) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-EASTER', 0, 4, 'easter', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-REYE', 0, 4, '', 0, 6, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-HISPANIDAD', 0, 4, '', 0, 10, 12, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-TOUSSAINT', 0, 4, '', 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-CONSTITUIZION', 0, 4, '', 0, 12, 6, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('ES-IMMACULE', 0, 4, '', 0, 12, 8, 1); + +-- Austria (41) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-EASTER', 0, 41, 'eastermonday', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-ASCENSION', 0, 41, 'ascension', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-PENTECOST', 0, 41, 'pentecost', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Fronleichnam', 0, 41, 'fronleichnam', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-KONEGIE', 0, 41, '', 0, 6, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-26OKT', 0, 41, '', 0, 10, 26, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-TOUSSAINT', 0, 41, '', 0, 11, 1, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-IMMACULE', 0, 41, '', 0, 12, 8, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-24DEC', 0, 41, '', 0, 12, 24, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-SAINTSTEFAN', 0, 41, '', 0, 12, 26, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Silvester', 0, 41, '', 0, 12, 31, 1); + +-- India (117) +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-REPUBLICDAY', 0, 117, '', 0, 1, 26, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('IN-GANDI', 0, 117, '', 0, 10, 2, 1); -ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_start datetime DEFAULT NULL; -ALTER TABLE llx_supplier_proposaldet ADD COLUMN date_end datetime DEFAULT NULL; diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql index 23dcbf355b4..453eda6b4c3 100644 --- a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.key.sql @@ -17,5 +17,5 @@ -- ======================================================================== ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday(entity, code); -ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday2(entity, day, month, year); +ALTER TABLE llx_c_hrm_public_holiday ADD UNIQUE INDEX uk_c_hrm_public_holiday2(entity, fk_country, dayrule, day, month, year); diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql index 7efbe314875..879643213b9 100644 --- a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql @@ -22,7 +22,7 @@ create table llx_c_hrm_public_holiday entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all fk_country integer, code varchar(62), - dayrule varchar(255) DEFAULT 'date', -- 'date', 'xxx', ... + dayrule varchar(64) DEFAULT 'date', -- 'date', 'xxx', ... day integer, month integer, year integer, -- 0 for all years From 73c3fa40bf65b498751dc787e0938913419090fa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 10:53:13 +0200 Subject: [PATCH 1130/1148] Update phpunit --- htdocs/core/lib/date.lib.php | 10 +++++--- test/phpunit/DateLibTest.php | 47 ++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 04518dade2f..9f1963dc9b9 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -601,14 +601,14 @@ function dol_get_first_day_week($day, $month, $year, $gm = false) * * @param int $timestampStart Timestamp de debut * @param int $timestampEnd Timestamp de fin - * @param string $countrycode Country code + * @param string $country_code Country code * @param int $lastday Last day is included, 0: no, 1:yes * @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes) * @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes) * @return int|string Number of non working days or error message string if error * @see num_between_day(), num_open_day() */ -function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', $lastday = 0, $includesaturday = -1, $includesunday = -1) +function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1) { global $db, $conf, $mysoc; @@ -618,6 +618,8 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', // Check to ensure we use correct parameters if ((($timestampEnd - $timestampStart) % 86400) != 0) return 'ErrorDates must use same hours and must be GMT dates'; + if (empty($country_code)) $country_code = $mysoc->country_code; + if ($includesaturday < 0) $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); if ($includesunday < 0) $includesunday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY : 1); @@ -651,10 +653,12 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode = 'FR', } } + $country_id = dol_getIdFromCode($db, $country_code, 'c_country', 'code', 'rowid'); + // Loop on public holiday defined into hrm_public_holiday $sql = "SELECT code, entity, fk_country, dayrule, year, month, day, active"; $sql.= " FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday"; - $sql.= " WHERE active = 1 and fk_country IN (0, ".$mysoc->country_id.")"; + $sql.= " WHERE active = 1 and fk_country IN (0".($country_id > 0 ? ", ".$country_id : 0).")"; $resql = $db->query($sql); if ($resql) diff --git a/test/phpunit/DateLibTest.php b/test/phpunit/DateLibTest.php index cc4f50705e0..29b34297a38 100644 --- a/test/phpunit/DateLibTest.php +++ b/test/phpunit/DateLibTest.php @@ -185,16 +185,33 @@ class DateLibTest extends PHPUnit\Framework\TestCase // With same hours - Tuesday/Wednesday jan 2013 $date1=dol_mktime(0, 0, 0, 1, 1, 2013); $date2=dol_mktime(0, 0, 0, 1, 2, 2013); + $date3=dol_mktime(0, 0, 0, 1, 3, 2013); $result=num_public_holiday($date1, $date2, 'FR', 1); print __METHOD__." result=".$result."\n"; - $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday/Wednesday jan 2013 for FR'); // 1 closed days + $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday 1 - Wednesday 2 jan 2013 for FR'); // 1 closed days (country france) $result=num_public_holiday($date1, $date2, 'XX', 1); print __METHOD__." result=".$result."\n"; - $this->assertEquals(0, $result, 'NumPublicHoliday for Tuesday/Wednesday jan 2013 for XX'); // no closed days (country unknown) + $this->assertEquals(1, $result, 'NumPublicHoliday for Tuesday 1 - Wednesday 2 jan 2013 for XX'); // 1 closed days (country unknown) - // With same hours - Friday/Sunday jan 2013 + $result=num_public_holiday($date2, $date3, 'FR', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(0, $result, 'NumPublicHoliday for Wednesday 2 - Thursday 3 jan 2013 for FR'); // no closed days + + // Check with easter monday + $date1=dol_mktime(0, 0, 0, 4, 21, 2019); + $date2=dol_mktime(0, 0, 0, 4, 23, 2019); + + $result=num_public_holiday($date1, $date2, 'XX', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(1, $result, 'NumPublicHoliday including eastermonday for XX'); // 2 opened day, 1 closed days (sunday) + + $result=num_public_holiday($date1, $date2, 'FR', 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(2, $result, 'NumPublicHoliday including eastermonday for FR'); // 1 opened day, 2 closed days (sunday + easter monday) + + // Check for sunday/saturday - Friday 4 - Sunday 6 jan 2013 $date1=dol_mktime(0, 0, 0, 1, 4, 2013); $date2=dol_mktime(0, 0, 0, 1, 6, 2013); @@ -202,10 +219,25 @@ class DateLibTest extends PHPUnit\Framework\TestCase print __METHOD__." result=".$result."\n"; $this->assertEquals(2, $result, 'NumPublicHoliday for FR'); // 1 opened day, 2 closed days + $result=num_public_holiday($date1, $date2, 'FR', 1, 1, 1); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(2, $result, 'NumPublicHoliday for FR'); // 1 opened day, 2 closed days + + $result=num_public_holiday($date1, $date2, 'FR', 1, 1, 0); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(1, $result, 'NumPublicHoliday for FR'); // 2 opened day, 1 closed days + + $result=num_public_holiday($date1, $date2, 'FR', 1, 0, 0); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(0, $result, 'NumPublicHoliday for FR'); // 3 opened day, 0 closed days + $result=num_public_holiday($date1, $date2, 'XX', 1); print __METHOD__." result=".$result."\n"; $this->assertEquals(2, $result, 'NumPublicHoliday for XX'); // 1 opened day, 2 closed days (even if country unknown) + + + // Add more holiday with constant HOLIDAY_MORE_PUBLIC_HOLIDAYS $conf->global->HOLIDAY_MORE_PUBLIC_HOLIDAYS='12-13,2019-12-14'; $date1=dol_mktime(0, 0, 0, 12, 13, 2018); @@ -243,14 +275,19 @@ class DateLibTest extends PHPUnit\Framework\TestCase // With same hours - Tuesday/Wednesday jan 2013 $date1=dol_mktime(0, 0, 0, 1, 1, 2013); $date2=dol_mktime(0, 0, 0, 1, 2, 2013); + $date3=dol_mktime(0, 0, 0, 1, 3, 2013); $result=num_open_day($date1, $date2, 0, 1, 0, 'FR'); print __METHOD__." result=".$result."\n"; - $this->assertEquals(1, $result, 'NumOpenDay Tuesday/Wednesday jan 2013 for FR'); // 1 opened days + $this->assertEquals(1, $result, 'NumOpenDay Tuesday 1 - Wednesday 2 jan 2013 for FR'); // 1 opened days (country france) $result=num_open_day($date1, $date2, 0, 1, 0, 'XX'); print __METHOD__." result=".$result."\n"; - $this->assertEquals(2, $result, 'NumOpenDay Tuesday/Wednesday jan 2013 for XX'); // 2 opened days (country unknown) + $this->assertEquals(1, $result, 'NumOpenDay Tuesday 1 - Wednesday 2 jan 2013 for XX'); // 1 opened days (country unknown) + + $result=num_open_day($date2, $date3, 0, 1, 0, 'FR'); + print __METHOD__." result=".$result."\n"; + $this->assertEquals(2, $result, 'NumOpenDay Wednesday 2 - Thursday 3 jan 2013 for FR'); // 2 opened days // With same hours - Friday/Sunday jan 2013 $date1=dol_mktime(0, 0, 0, 1, 4, 2013); From 8381b93e802fbffa832e9ed1d28942a45ae7e604 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 11:06:54 +0200 Subject: [PATCH 1131/1148] Fix init of public holidays --- htdocs/admin/dict.php | 12 ++++++------ .../install/mysql/data/llx_c_hrm_public_holiday.sql | 2 +- htdocs/install/mysql/migration/10.0.0-11.0.0.sql | 4 ++-- .../mysql/tables/llx_c_hrm_public_holiday.sql | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php index 2c6b41b7796..ff4c3cc6a6b 100644 --- a/htdocs/admin/dict.php +++ b/htdocs/admin/dict.php @@ -204,7 +204,7 @@ $tabsql[28]= "SELECT h.rowid as rowid, h.code, h.label, h.affect, h.delay, h.new $tabsql[29]= "SELECT rowid as rowid, code, label, percent, position, active FROM ".MAIN_DB_PREFIX."c_lead_status"; $tabsql[30]= "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, topmargin, nx, ny, spacex, spacey, width, height, font_size, custom_x, custom_y, active FROM ".MAIN_DB_PREFIX."c_format_cards"; //$tabsql[31]= "SELECT s.rowid as rowid, pcg_version, s.label, s.active FROM ".MAIN_DB_PREFIX."accounting_system as s"; -$tabsql[32]= "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1"; +$tabsql[32]= "SELECT a.id as rowid, a.entity, a.code, a.fk_country as country_id, c.code as country_code, c.label as country, a.dayrule, a.day, a.month, a.year, a.active FROM ".MAIN_DB_PREFIX."c_hrm_public_holiday as a LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON a.fk_country=c.rowid AND c.active=1"; $tabsql[33]= "SELECT rowid, pos, code, label, active FROM ".MAIN_DB_PREFIX."c_hrm_department"; $tabsql[34]= "SELECT rowid, pos, code, label, c_level, active FROM ".MAIN_DB_PREFIX."c_hrm_function"; $tabsql[35]= "SELECT c.rowid, c.label, c.active, c.entity FROM ".MAIN_DB_PREFIX."c_exp_tax_cat c"; @@ -244,7 +244,7 @@ $tabsqlsort[28]="country ASC, code ASC"; $tabsqlsort[29]="position ASC"; $tabsqlsort[30]="code ASC"; //$tabsqlsort[31]="pcg_version ASC"; -$tabsqlsort[32]="year ASC, month ASC, day ASC"; +$tabsqlsort[32]="country, year ASC, month ASC, day ASC"; $tabsqlsort[33]="code ASC"; $tabsqlsort[34]="code ASC"; $tabsqlsort[35]="c.label ASC"; @@ -284,7 +284,7 @@ $tabfield[28]= "code,label,affect,delay,newbymonth,country_id,country"; $tabfield[29]= "code,label,percent,position"; $tabfield[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfield[31]= "pcg_version,label"; -$tabfield[32]= "code,year,month,day,country_id,country"; +$tabfield[32]= "code,dayrule,year,month,day,country_id,country"; $tabfield[33]= "code,label"; $tabfield[34]= "code,label"; $tabfield[35]= "label"; @@ -324,7 +324,7 @@ $tabfieldvalue[28]= "code,label,affect,delay,newbymonth,country"; $tabfieldvalue[29]= "code,label,percent,position"; $tabfieldvalue[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldvalue[31]= "pcg_version,label"; -$tabfieldvalue[32]= "code,day,month,year,country"; +$tabfieldvalue[32]= "code,dayrule,day,month,year,country"; $tabfieldvalue[33]= "code,label"; $tabfieldvalue[34]= "code,label"; $tabfieldvalue[35]= "label"; @@ -365,7 +365,7 @@ $tabfieldinsert[29]= "code,label,percent,position"; $tabfieldinsert[30]= "code,name,paper_size,orientation,metric,leftmargin,topmargin,nx,ny,spacex,spacey,width,height,font_size,custom_x,custom_y"; //$tabfieldinsert[31]= "pcg_version,label"; //$tabfieldinsert[32]= "code,label,range_account,sens,category_type,formula,position,fk_country"; -$tabfieldinsert[32]= "code,day,month,year,fk_country"; +$tabfieldinsert[32]= "code,dayrule,day,month,year,fk_country"; $tabfieldinsert[33]= "code,label"; $tabfieldinsert[34]= "code,label"; $tabfieldinsert[35]= "label"; @@ -487,7 +487,7 @@ $tabhelp[28] = array('affect'=>$langs->trans("FollowedByACounter"),'delay'=>$lan $tabhelp[29] = array('code'=>$langs->trans("EnterAnyCode"), 'percent'=>$langs->trans("OpportunityPercent"), 'position'=>$langs->trans("PositionIntoComboList")); $tabhelp[30] = array('code'=>$langs->trans("EnterAnyCode"), 'name'=>$langs->trans("LabelName"), 'paper_size'=>$langs->trans("LabelPaperSize")); //$tabhelp[31] = array('pcg_version'=>$langs->trans("EnterAnyCode")); -$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'daterule'=>"Use 'date'", 'country'=>$langs->trans("EnterACountryOnlyIfSpecificToOneCountry"), 'year'=>$langs->trans("ZeroMeansEveryYear")); +$tabhelp[32] = array('code'=>$langs->trans("EnterAnyCode"), 'dayrule'=>"Keep empty for a date defined with month and day (most common case).
Use a keyword like 'easter', 'eastermonday', ... for a date predefined by complex rules.", 'country'=>$langs->trans("EnterACountryOnlyIfSpecificToOneCountry"), 'year'=>$langs->trans("ZeroMeansEveryYear")); $tabhelp[33] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[34] = array('code'=>$langs->trans("EnterAnyCode")); $tabhelp[35] = array(); diff --git a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql index e66132865de..70750494a10 100644 --- a/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql +++ b/htdocs/install/mysql/data/llx_c_hrm_public_holiday.sql @@ -66,7 +66,7 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, m INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-EASTER', 0, 41, 'eastermonday', 0, 0, 0, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-ASCENSION', 0, 41, 'ascension', 0, 0, 0, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-PENTECOST', 0, 41, 'pentecost', 0, 0, 0, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Fronleichnam', 0, 41, 'fronleichnam', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-FRONLEICHNAM', 0, 41, 'fronleichnam', 0, 0, 0, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-KONEGIE', 0, 41, '', 0, 6, 1, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-26OKT', 0, 41, '', 0, 10, 26, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-TOUSSAINT', 0, 41, '', 0, 11, 1, 1); diff --git a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql index 1d43df2eda9..cc375e72714 100644 --- a/htdocs/install/mysql/migration/10.0.0-11.0.0.sql +++ b/htdocs/install/mysql/migration/10.0.0-11.0.0.sql @@ -102,7 +102,7 @@ create table llx_c_hrm_public_holiday entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all fk_country integer, code varchar(62), - dayrule varchar(64) DEFAULT 'date', -- 'date', 'xxx', ... + dayrule varchar(64) DEFAULT '', -- 'easter', 'eastermonday', ... day integer, month integer, year integer, -- 0 for all years @@ -150,7 +150,7 @@ INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, m INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-EASTER', 0, 41, 'eastermonday', 0, 0, 0, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-ASCENSION', 0, 41, 'ascension', 0, 0, 0, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-PENTECOST', 0, 41, 'pentecost', 0, 0, 0, 1); -INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-Fronleichnam', 0, 41, 'fronleichnam', 0, 0, 0, 1); +INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-FRONLEICHNAM', 0, 41, 'fronleichnam', 0, 0, 0, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-KONEGIE', 0, 41, '', 0, 6, 1, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-26OKT', 0, 41, '', 0, 10, 26, 1); INSERT INTO llx_c_hrm_public_holiday (code, entity, fk_country, dayrule, year, month, day, active) VALUES('AT-TOUSSAINT', 0, 41, '', 0, 11, 1, 1); diff --git a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql index 879643213b9..e26d6ee4772 100644 --- a/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql +++ b/htdocs/install/mysql/tables/llx_c_hrm_public_holiday.sql @@ -22,7 +22,7 @@ create table llx_c_hrm_public_holiday entity integer DEFAULT 0 NOT NULL, -- multi company id, 0 = all fk_country integer, code varchar(62), - dayrule varchar(64) DEFAULT 'date', -- 'date', 'xxx', ... + dayrule varchar(64) DEFAULT '', -- 'easter', 'eastermonday', ... day integer, month integer, year integer, -- 0 for all years From ac539d20b97510caf15095f01fe4a9ce685c7b8b Mon Sep 17 00:00:00 2001 From: david Date: Sun, 8 Sep 2019 05:15:26 +0200 Subject: [PATCH 1132/1148] FIX #10460 compatibility with MariaDB 10.4 --- htdocs/core/class/html.form.class.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 28053f5d441..b87f2118ac8 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1152,9 +1152,8 @@ class Form $sql .= ", dictp.code as country_code"; } - $sql.= " FROM (".MAIN_DB_PREFIX ."societe as s"; + $sql.= " FROM ".MAIN_DB_PREFIX ."societe as s"; if (!$user->rights->societe->client->voir && !$user->socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= " )"; if ($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST) { $sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."c_country as dictp ON dictp.rowid=s.fk_pays"; } From ed02cdfddb8e8451bc7eb8831713026bc2ae17a8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 11:23:53 +0200 Subject: [PATCH 1133/1148] Fix phpcs --- htdocs/modulebuilder/index.php | 122 ++++++++++++++++----------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php index 4b7efffdfed..e5ba591dce7 100644 --- a/htdocs/modulebuilder/index.php +++ b/htdocs/modulebuilder/index.php @@ -2390,68 +2390,68 @@ elseif (! empty($module)) { foreach ($menus as $menu) { - print '
'; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; + print ''; - print ''; - } - } - else - { + print ''; + } + } + else + { print ''; - } + } - print '
'; - print $menu['type']; - print ''; + print $menu['type']; + print ''; - print $menu['fk_menu']; - print ''; + print $menu['fk_menu']; + print ''; - print $menu['titre']; - print ''; + print $menu['titre']; + print ''; - print $menu['mainmenu']; - print ''; + print $menu['mainmenu']; + print ''; - print $menu['left']; - print ''; + print $menu['left']; + print ''; - print $menu['url']; - print ''; + print $menu['url']; + print ''; - print $menu['langs']; - print ''; + print $menu['langs']; + print ''; - print $menu['position']; - print ''; + print $menu['position']; + print ''; - print $menu['enabled']; - print ''; + print $menu['enabled']; + print ''; - print $menu['perms']; - print ''; + print $menu['perms']; + print ''; - print $menu['target']; - print ''; + print $menu['target']; + print ''; - print $menu['user']; - print ''; + print $menu['user']; + print '
'.$langs->trans("None").'
'; - print ''; + print ''; + print ''; - print ''; + print ''; } else { @@ -2523,26 +2523,26 @@ elseif (! empty($module)) { foreach ($perms as $perm) { - print ''; + print ''; - print ''; - print $perm[0]; - print ''; + print ''; + print $perm[0]; + print ''; - print ''; - print $perm[1]; - print ''; + print ''; + print $perm[1]; + print ''; - print ''; - print $perm[4]; - print ''; + print ''; + print $perm[4]; + print ''; - print ''; - print $perm[5]; - print ''; + print ''; + print $perm[5]; + print ''; - print ''; - } + print ''; + } } else { From 21d84f63a54f2f00cc2c5f6bafafd85ce9725f17 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 12:58:32 +0200 Subject: [PATCH 1134/1148] Work on template --- htdocs/core/menus/standard/eldy.lib.php | 2 +- htdocs/core/modules/modBom.class.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 9efb4dd1e27..a4eb2d57053 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -176,7 +176,7 @@ function print_eldy_menu($db, $atarget, $type_user, &$tabMenu, &$menu, $noout = $menu_arr[] = array( 'name' => 'TMenuMRP', 'link' => '/mrp/index.php?mainmenu=mrp&leftmenu=', - 'title' => $langs->trans("TMenuMRP"), + 'title' => "TMenuMRP", 'level' => 0, 'enabled' => $showmode = isVisibleToUserType($type_user, $tmpentry, $listofmodulesforexternal), 'target' => $atarget, diff --git a/htdocs/core/modules/modBom.class.php b/htdocs/core/modules/modBom.class.php index 8e1e1f1288b..d8d75eced2a 100644 --- a/htdocs/core/modules/modBom.class.php +++ b/htdocs/core/modules/modBom.class.php @@ -66,7 +66,7 @@ class modBom extends DolibarrModules $this->descriptionlong = "Bill of Materials definitions. They can be used to make Manufacturing Resource Planning"; // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z' - $this->version = 'experimental'; + $this->version = 'dolibarr'; //Url to the file with your last numberversion of this module //$this->url_last_version = 'http://www.example.com/versionmodule.txt'; @@ -105,7 +105,7 @@ class modBom extends DolibarrModules // Dependencies $this->hidden = false; // A condition to hide module $this->depends = array('modProduct'); // List of module class names as string that must be enabled if this module is enabled. Example: array('always1'=>'modModuleToEnable1','always2'=>'modModuleToEnable2', 'FR1'=>'modModuleToEnableFR'...) - $this->requiredby = array(); // List of module class names as string to disable if this one is disabled. Example: array('modModuleToDisable1', ...) + $this->requiredby = array('modMrp'); // List of module class names as string to disable if this one is disabled. Example: array('modModuleToDisable1', ...) $this->conflictwith = array(); // List of module class names as string this module is in conflict with. Example: array('modModuleToDisable1', ...) $this->langfiles = array("mrp"); //$this->phpmin = array(5,4); // Minimum version of PHP required by module From c7bab8681ad001667d178e54b783c6d7a3dbf00a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 13:05:08 +0200 Subject: [PATCH 1135/1148] Fix sql error #11845 --- htdocs/adherents/list.php | 2 +- htdocs/modulebuilder/template/myobject_list.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 3ddf739c813..f78059c2969 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -261,7 +261,7 @@ if (! empty($extrafields->attributes[$object->table_element]['label'])) $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters); // Note that $action and $object may have been modified by hook $sql.=preg_replace('/^,/', '', $hookmanager->resPrint); -$sql =preg_replace('/, $/', '', $sql); +$sql =preg_replace('/,\s*$/', '', $sql); $sql.= " FROM ".MAIN_DB_PREFIX."adherent as d"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (d.rowid = ef.fk_object)"; if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_member as cm ON d.rowid = cm.fk_member"; // We need this table joined to the select in order to filter by categ diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 60f64834583..497f46919fd 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -222,7 +222,7 @@ if (! empty($extrafields->attributes[$object->table_element]['label'])) $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook $sql.=preg_replace('/^,/', '', $hookmanager->resPrint); -$sql =preg_replace('/, $/', '', $sql); +$sql =preg_replace('/,\s*$/', '', $sql); $sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; From f6e04ba3142415c39968bc0dd3c0808ae9ab40d8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 13:05:41 +0200 Subject: [PATCH 1136/1148] Fix sql error --- htdocs/modulebuilder/template/myobject_list.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php index 60f64834583..497f46919fd 100644 --- a/htdocs/modulebuilder/template/myobject_list.php +++ b/htdocs/modulebuilder/template/myobject_list.php @@ -222,7 +222,7 @@ if (! empty($extrafields->attributes[$object->table_element]['label'])) $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook $sql.=preg_replace('/^,/', '', $hookmanager->resPrint); -$sql =preg_replace('/, $/', '', $sql); +$sql =preg_replace('/,\s*$/', '', $sql); $sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t"; if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)"; if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")"; From f2b9517dac9e8fc2a3b91e7f2713d8aa8d7fb540 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 13:16:31 +0200 Subject: [PATCH 1137/1148] FIX #11834 --- htdocs/projet/activity/perday.php | 2 +- htdocs/projet/activity/perweek.php | 2 +- htdocs/projet/list.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/projet/activity/perday.php b/htdocs/projet/activity/perday.php index 3c9fc7cd3dc..1f7209e1f65 100644 --- a/htdocs/projet/activity/perday.php +++ b/htdocs/projet/activity/perday.php @@ -443,7 +443,7 @@ $moreforfilter=''; // If the user can view user other than himself $moreforfilter.='
'; $moreforfilter.='
'.$langs->trans('User'). '
'; -$includeonly='hierachyme'; +$includeonly='hierarchyme'; if (empty($user->rights->user->user->lire)) $includeonly=array($user->id); $moreforfilter.=$form->select_dolusers($search_usertoprocessid?$search_usertoprocessid:$usertoprocess->id, 'search_usertoprocessid', $user->rights->user->user->lire?0:0, null, 0, $includeonly, null, 0, 0, 0, '', 0, '', 'maxwidth200 marginleftonly'); $moreforfilter.='
'; diff --git a/htdocs/projet/activity/perweek.php b/htdocs/projet/activity/perweek.php index 075245ec7d8..4dfdad7879a 100644 --- a/htdocs/projet/activity/perweek.php +++ b/htdocs/projet/activity/perweek.php @@ -480,7 +480,7 @@ if (! empty($conf->categorie->enabled)) // If the user can view user other than himself $moreforfilter.='
'; $moreforfilter.='
'.$langs->trans('User'). '
'; -$includeonly='hierachyme'; +$includeonly='hierarchyme'; if (empty($user->rights->user->user->lire)) $includeonly=array($user->id); $moreforfilter.=$form->select_dolusers($search_usertoprocessid?$search_usertoprocessid:$usertoprocess->id, 'search_usertoprocessid', $user->rights->user->user->lire?0:0, null, 0, $includeonly, null, 0, 0, 0, '', 0, '', 'maxwidth200'); $moreforfilter.='
'; diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index aa03eada135..a0e068c79f6 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -505,7 +505,7 @@ if (! empty($conf->categorie->enabled)) // If the user can view user other than himself $moreforfilter.='
'; $moreforfilter.=$langs->trans('ProjectsWithThisUserAsContact'). ': '; -$includeonly='hierachyme'; +$includeonly='hierarchyme'; if (empty($user->rights->user->user->lire)) $includeonly=array($user->id); $moreforfilter.=$form->select_dolusers($search_project_user?$search_project_user:'', 'search_project_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth200'); $moreforfilter.='
'; From 28ba5abb89750db238ba2469517b612e35a89217 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 13:31:14 +0200 Subject: [PATCH 1138/1148] Clean code --- htdocs/comm/mailing/class/mailing.class.php | 36 ++++++++++--------- .../mailings/advthirdparties.modules.php | 2 -- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index d82ec07612d..1538cbd7c81 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -335,15 +335,15 @@ class Mailing extends CommonObject $target_array=array(); - $sql = "SELECT fk_contact, "; - $sql.=" lastname, "; - $sql.=" firstname,"; - $sql.=" email,"; - $sql.=" other,"; - $sql.=" source_url,"; - $sql.=" source_id ,"; - $sql.=" source_type "; - $sql.= " FROM ".MAIN_DB_PREFIX."mailing_cibles "; + $sql = "SELECT fk_contact,"; + $sql.= " lastname,"; + $sql.= " firstname,"; + $sql.= " email,"; + $sql.= " other,"; + $sql.= " source_url,"; + $sql.= " source_id ,"; + $sql.= " source_type"; + $sql.= " FROM ".MAIN_DB_PREFIX."mailing_cibles"; $sql.= " WHERE fk_mailing = ".$fromid; $result=$this->db->query($sql); @@ -353,14 +353,16 @@ class Mailing extends CommonObject { while ($obj = $this->db->fetch_object($result)) { - $target_array[]=array('fk_contact'=>$obj->fk_contact, - 'lastname'=>$obj->lastname, - 'firstname'=>$obj->firstname, - 'email'=>$obj->email, - 'other'=>$obj->other, - 'source_url'=>$obj->source_url, - 'source_id'=>$obj->source_id, - 'source_type'=>$obj->source_type); + $target_array[]=array( + 'fk_contact'=>$obj->fk_contact, + 'lastname'=>$obj->lastname, + 'firstname'=>$obj->firstname, + 'email'=>$obj->email, + 'other'=>$obj->other, + 'source_url'=>$obj->source_url, + 'source_id'=>$obj->source_id, + 'source_type'=>$obj->source_type + ); } } } diff --git a/htdocs/core/modules/mailings/advthirdparties.modules.php b/htdocs/core/modules/mailings/advthirdparties.modules.php index a29fdd119bf..370f05e4232 100644 --- a/htdocs/core/modules/mailings/advthirdparties.modules.php +++ b/htdocs/core/modules/mailings/advthirdparties.modules.php @@ -88,7 +88,6 @@ class mailing_advthirdparties extends MailingTargets dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found", LOG_DEBUG); - $old = ''; while ($i < $num) { $obj = $this->db->fetch_object($result); @@ -144,7 +143,6 @@ class mailing_advthirdparties extends MailingTargets dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found"); - $old = ''; while ($i < $num) { $obj = $this->db->fetch_object($result); From d061e61d25a06bbd74d497bd16275721382474c7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 13:45:25 +0200 Subject: [PATCH 1139/1148] Fix add_to_target has only 1 param. --- .../mailings/mailinglist_mymodule_myobject.modules.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php index 07419af532d..854e7f37bd5 100644 --- a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php +++ b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php @@ -97,16 +97,14 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets * This is the main function that returns the array of emails * * @param int $mailing_id Id of emailing - * @param array $cibles Array with targets * @return int <0 if error, number of emails added if ok */ - public function add_to_target($mailing_id, $cibles) + public function add_to_target($mailing_id) { // phpcs:enable $target = array(); $j = 0; - $sql = " select rowid as id, email, firstname, lastname, plan, partner"; $sql.= " from ".MAIN_DB_PREFIX."myobject"; $sql.= " where email IS NOT NULL AND email != ''"; @@ -161,7 +159,7 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets // ----- Your code end here ----- - return parent::add_to_target($mailing_id, $target); + return parent::addTargetsToDatabase($mailing_id, $target); } From d2131a0be83c235427d46e62dd3c3ea9e3132380 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 14:08:10 +0200 Subject: [PATCH 1140/1148] Add filter on usage on project list --- .../modules/mailings/xinputuser.modules.php | 3 +- htdocs/langs/en_US/projects.lang | 5 +- htdocs/projet/list.php | 56 +++++++++++++++++-- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/htdocs/core/modules/mailings/xinputuser.modules.php b/htdocs/core/modules/mailings/xinputuser.modules.php index 62990ec6f90..cd3a6f79b0f 100644 --- a/htdocs/core/modules/mailings/xinputuser.modules.php +++ b/htdocs/core/modules/mailings/xinputuser.modules.php @@ -113,9 +113,10 @@ class mailing_xinputuser extends MailingTargets * Ajoute destinataires dans table des cibles * * @param int $mailing_id Id of emailing + * @param array $cibles Array with targets * @return int < 0 si erreur, nb ajout si ok */ - public function add_to_target($mailing_id) + public function add_to_target($mailing_id, $cibles) { // phpcs:enable global $conf,$langs,$_FILES; diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang index 4b4a787b6ad..8d3297b6587 100644 --- a/htdocs/langs/en_US/projects.lang +++ b/htdocs/langs/en_US/projects.lang @@ -249,4 +249,7 @@ TimeSpentForInvoice=Time spent OneLinePerUser=One line per user ServiceToUseOnLines=Service to use on lines InvoiceGeneratedFromTimeSpent=Invoice %s has been generated from time spent on project -ProjectBillTimeDescription=Check if you enter timesheet on tasks of project AND you plan to generate invoice(s) from the timesheet to bill the customer of the project (do not check if you plan to create invoice that is not based on entered timesheets). \ No newline at end of file +ProjectBillTimeDescription=Check if you enter timesheet on tasks of project AND you plan to generate invoice(s) from the timesheet to bill the customer of the project (do not check if you plan to create invoice that is not based on entered timesheets). +UsageOpportunity=Usage: Opportunity +UsageTasks=Usage: Tasks +UsageBillTimeShort=Usage: Bill time \ No newline at end of file diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 5aa28bcddc8..03c814d65bf 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -85,6 +85,9 @@ $search_budget_amount=GETPOST("search_budget_amount", 'alpha'); $search_public=GETPOST("search_public", 'int'); $search_project_user=GETPOST('search_project_user', 'int'); $search_sale=GETPOST('search_sale', 'int'); +$search_usage_opportunity=GETPOST('search_usage_opportunity', 'int'); +$search_usage_task=GETPOST('search_usage_task', 'int'); +$search_usage_bill_time=GETPOST('search_usage_bill_time', 'int'); $optioncss = GETPOST('optioncss', 'alpha'); $mine = $_REQUEST['mode']=='mine' ? 1 : 0; @@ -129,7 +132,9 @@ $arrayfields=array( 'p.fk_opp_status'=>array('label'=>$langs->trans("OpportunityStatusShort"), 'checked'=>1, 'enabled'=>($conf->global->PROJECT_USE_OPPORTUNITIES?1:0), 'position'=>104), 'p.opp_percent'=>array('label'=>$langs->trans("OpportunityProbabilityShort"), 'checked'=>1, 'enabled'=>($conf->global->PROJECT_USE_OPPORTUNITIES?1:0), 'position'=>105), 'p.budget_amount'=>array('label'=>$langs->trans("Budget"), 'checked'=>0, 'position'=>110), - 'p.usage_bill_time'=>array('label'=>$langs->trans("BillTimeShort"), 'checked'=>0, 'position'=>115), + 'p.usage_opportunity'=>array('label'=>$langs->trans("UsageOpportunity"), 'checked'=>0, 'enabled'=>($conf->global->PROJECT_USE_OPPORTUNITIES?1:0), 'position'=>115), + 'p.usage_task'=>array('label'=>$langs->trans("UsageTasks"), 'checked'=>0, 'enabled'=>($conf->global->PROJECT_HIDE_TASKS?0:1), 'position'=>116), + 'p.usage_bill_time'=>array('label'=>$langs->trans("UsageBillTimeShort"), 'checked'=>0, 'enabled'=>($conf->global->PROJECT_HIDE_TASKS?0:1), 'position'=>117), 'p.datec'=>array('label'=>$langs->trans("DateCreationShort"), 'checked'=>0, 'position'=>500), 'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), 'p.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000), @@ -184,6 +189,9 @@ if (empty($reshook)) $search_eday=""; $search_emonth=""; $search_eyear=""; + $search_usage_opportunity=''; + $search_usage_task=''; + $search_usage_bill_time=''; $toselect=''; $search_array_options=array(); } @@ -279,7 +287,7 @@ if (count($listofprojectcontacttype) == 0) $listofprojectcontacttype[0]='0'; $distinct='DISTINCT'; // We add distinct until we are added a protection to be sure a contact of a project and task is only once. $sql = "SELECT ".$distinct." p.rowid as id, p.ref, p.title, p.fk_statut, p.fk_opp_status, p.public, p.fk_user_creat"; -$sql.= ", p.datec as date_creation, p.dateo as date_start, p.datee as date_end, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount, p.usage_bill_time"; +$sql.= ", p.datec as date_creation, p.dateo as date_start, p.datee as date_end, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount, p.usage_opportunity, p.usage_task, p.usage_bill_time"; $sql.= ", s.rowid as socid, s.nom as name, s.email"; $sql.= ", cls.code as opp_status_code"; // We'll need these fields in order to filter by categ @@ -364,6 +372,9 @@ if ($search_sale > 0) $sql.= " AND sc.fk_user = " .$search_sale; if ($search_project_user > 0) $sql.= " AND ecp.fk_c_type_contact IN (".join(',', array_keys($listofprojectcontacttype)).") AND ecp.element_id = p.rowid AND ecp.fk_socpeople = ".$search_project_user; if ($search_opp_amount != '') $sql .= natural_search('p.opp_amount', $search_opp_amount, 1); if ($search_budget_amount != '') $sql .= natural_search('p.budget_amount', $search_budget_amount, 1); +if ($search_usage_opportunity != '' && $search_usage_opportunity >= 0) $sql .= natural_search('p.usage_opportunity', $search_usage_opportunity, 2); +if ($search_usage_task != '' && $search_usage_task >= 0) $sql .= natural_search('p.usage_task', $search_usage_task, 2); +if ($search_usage_bill_time != '' && $search_usage_bill_time >= 0) $sql .= natural_search('p.usage_bill_time', $search_usage_bill_time, 2); // Add where from extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php'; // Add where from hooks @@ -619,10 +630,23 @@ if (! empty($arrayfields['p.budget_amount']['checked'])) print ''; print ''; } +if (! empty($arrayfields['p.usage_opportunity']['checked'])) +{ + print ''; + print $form->selectyesno('search_usage_opportunity', $search_usage_opportunity, 1, false, 1); + print ''; + print ''; +} +if (! empty($arrayfields['p.usage_task']['checked'])) +{ + print ''; + print $form->selectyesno('search_usage_task', $search_usage_task, 1, false, 1); + print ''; +} if (! empty($arrayfields['p.usage_bill_time']['checked'])) { print ''; - print ''; + print $form->selectyesno('search_usage_bill_time', $search_usage_bill_time, 1, false, 1); print ''; } // Extra fields @@ -674,7 +698,9 @@ if (! empty($arrayfields['p.fk_opp_status']['checked'])) print_liste_field_titre if (! empty($arrayfields['p.opp_amount']['checked'])) print_liste_field_titre($arrayfields['p.opp_amount']['label'], $_SERVER["PHP_SELF"], 'p.opp_amount', "", $param, '', $sortfield, $sortorder, 'right '); if (! empty($arrayfields['p.opp_percent']['checked'])) print_liste_field_titre($arrayfields['p.opp_percent']['label'], $_SERVER["PHP_SELF"], 'p.opp_percent', "", $param, '', $sortfield, $sortorder, 'right '); if (! empty($arrayfields['p.budget_amount']['checked'])) print_liste_field_titre($arrayfields['p.budget_amount']['label'], $_SERVER["PHP_SELF"], 'p.budget_amount', "", $param, '', $sortfield, $sortorder, 'right '); -if (! empty($arrayfields['p.usage_bill_time']['checked'])) print_liste_field_titre($arrayfields['p.usage_bill_time']['label'], $_SERVER["PHP_SELF"], 'p.usage_bill_time', "", $param, '', $sortfield, $sortorder, 'right '); +if (! empty($arrayfields['p.usage_opportunity']['checked'])) print_liste_field_titre($arrayfields['p.usage_opportunity']['label'], $_SERVER["PHP_SELF"], 'p.usage_opportunity', "", $param, '', $sortfield, $sortorder, 'right '); +if (! empty($arrayfields['p.usage_task']['checked'])) print_liste_field_titre($arrayfields['p.usage_task']['label'], $_SERVER["PHP_SELF"], 'p.usage_task', "", $param, '', $sortfield, $sortorder, 'right '); +if (! empty($arrayfields['p.usage_bill_time']['checked'])) print_liste_field_titre($arrayfields['p.usage_bill_time']['label'], $_SERVER["PHP_SELF"], 'p.usage_bill_time', "", $param, '', $sortfield, $sortorder, 'right '); // Extra fields include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php'; // Hook fields @@ -855,6 +881,28 @@ while ($i < min($num, $limit)) if (! $i) $totalarray['nbfield']++; if (! $i) $totalarray['totalbudgetfield']=$totalarray['nbfield']; } + // Usage opportunity + if (! empty($arrayfields['p.usage_opportunity']['checked'])) + { + print ''; + if ($obj->usage_opportunity) + { + print yn($obj->usage_opportunity); + } + print ''; + if (! $i) $totalarray['nbfield']++; + } + // Usage task + if (! empty($arrayfields['p.usage_task']['checked'])) + { + print ''; + if ($obj->usage_task) + { + print yn($obj->usage_task); + } + print ''; + if (! $i) $totalarray['nbfield']++; + } // Bill time if (! empty($arrayfields['p.usage_bill_time']['checked'])) { From 66a9fabd06ee295870a8b14039d801a730816021 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 14:18:25 +0200 Subject: [PATCH 1141/1148] If you develop your own emailing target selector and used parent::add_to_target(...), you must now use parent::addToTargets(...) --- ChangeLog | 1 + htdocs/comm/mailing/class/mailing.class.php | 2 +- htdocs/core/modules/mailings/README | 3 +++ .../core/modules/mailings/advthirdparties.modules.php | 11 ++++++----- htdocs/core/modules/mailings/contacts1.modules.php | 2 +- htdocs/core/modules/mailings/example.modules.php | 2 +- htdocs/core/modules/mailings/fraise.modules.php | 2 +- htdocs/core/modules/mailings/modules_mailings.php | 6 ++---- htdocs/core/modules/mailings/pomme.modules.php | 2 +- htdocs/core/modules/mailings/thirdparties.modules.php | 2 +- .../thirdparties_services_expired.modules.php | 2 +- htdocs/core/modules/mailings/xinputfile.modules.php | 2 +- htdocs/core/modules/mailings/xinputuser.modules.php | 5 ++--- .../mailinglist_mymodule_myobject.modules.php | 2 +- 14 files changed, 23 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2e0bbf78352..3aa4f789f3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,7 @@ Following changes may create regressions for some external modules, but were nec * The deprecated method get_OutstandingBill has been removed. You can use getOutstandingBills() instead. * The hook "moreFamily" must return payment into var "totalpayment" and no more "paiement" (english replace french). * Removed deprecated method actioncomm->add(), use create() instead +* If you develop your own emailing target selector and used parent::add_to_target(...), you must now use parent::addToTargets(...) ***** ChangeLog for 10.0.1 compared to 10.0.0 ***** diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php index d82ec07612d..adb817f418f 100644 --- a/htdocs/comm/mailing/class/mailing.class.php +++ b/htdocs/comm/mailing/class/mailing.class.php @@ -370,7 +370,7 @@ class Mailing extends CommonObject return -1; } - $mailing_target->add_to_target($object->id, $target_array); + $mailing_target->addTargetsToDatabase($object->id, $target_array); } } diff --git a/htdocs/core/modules/mailings/README b/htdocs/core/modules/mailings/README index 096f680bd38..a69265a9424 100644 --- a/htdocs/core/modules/mailings/README +++ b/htdocs/core/modules/mailings/README @@ -43,6 +43,9 @@ $target[0]=array('email'=>'email_0','name'=>'name_0','firstname'=>'firstname_0', $target[n]=array('email'=>'email_n','name'=>'name_n','firstname'=>'firstname_n', 'other'=>'other_n'); // ----- Your code end here ----- +and call the method + +parent::addTargetsToDatabase($mailing_id, $target); ***** STEP 3 ***** diff --git a/htdocs/core/modules/mailings/advthirdparties.modules.php b/htdocs/core/modules/mailings/advthirdparties.modules.php index a29fdd119bf..a27863cf055 100644 --- a/htdocs/core/modules/mailings/advthirdparties.modules.php +++ b/htdocs/core/modules/mailings/advthirdparties.modules.php @@ -65,7 +65,7 @@ class mailing_advthirdparties extends MailingTargets // phpcs:enable global $conf, $langs; - dol_syslog(get_class($this)."::add_to_target socid=".var_export($socid, true).' contactid='.var_export($contactid, true)); + dol_syslog(get_class($this)."::add_to_target_spec socid=".var_export($socid, true).' contactid='.var_export($contactid, true)); $cibles = array(); @@ -86,7 +86,7 @@ class mailing_advthirdparties extends MailingTargets $num = $this->db->num_rows($result); $i = 0; - dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found", LOG_DEBUG); + dol_syslog(get_class($this)."::add_to_target_spec mailing ".$num." targets found", LOG_DEBUG); $old = ''; while ($i < $num) @@ -142,7 +142,7 @@ class mailing_advthirdparties extends MailingTargets $num = $this->db->num_rows($result); $i = 0; - dol_syslog(get_class($this)."::add_to_target mailing ".$num." targets found"); + dol_syslog(get_class($this)."::add_to_target_spec mailing ".$num." targets found"); $old = ''; while ($i < $num) @@ -177,8 +177,9 @@ class mailing_advthirdparties extends MailingTargets } - dol_syslog(get_class($this)."::add_to_target mailing cibles=".var_export($cibles, true), LOG_DEBUG); - return parent::add_to_target($mailing_id, $cibles); + dol_syslog(get_class($this)."::add_to_target_spec mailing cibles=".var_export($cibles, true), LOG_DEBUG); + + return parent::addTargetsToDatabase($mailing_id, $cibles); } diff --git a/htdocs/core/modules/mailings/contacts1.modules.php b/htdocs/core/modules/mailings/contacts1.modules.php index 79c58b1c7ce..bc67c8d3fec 100644 --- a/htdocs/core/modules/mailings/contacts1.modules.php +++ b/htdocs/core/modules/mailings/contacts1.modules.php @@ -447,6 +447,6 @@ class mailing_contacts1 extends MailingTargets return -1; } - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } } diff --git a/htdocs/core/modules/mailings/example.modules.php b/htdocs/core/modules/mailings/example.modules.php index 45af3dd5b4d..a96457c2625 100644 --- a/htdocs/core/modules/mailings/example.modules.php +++ b/htdocs/core/modules/mailings/example.modules.php @@ -80,7 +80,7 @@ class mailing_example extends MailingTargets // ----- Your code end here ----- - return parent::add_to_target($mailing_id, $target); + return parent::addTargetsToDatabase($mailing_id, $target); } diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php index 2ea4ba8e3b5..60196b23784 100644 --- a/htdocs/core/modules/mailings/fraise.modules.php +++ b/htdocs/core/modules/mailings/fraise.modules.php @@ -315,6 +315,6 @@ class mailing_fraise extends MailingTargets return -1; } - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } } diff --git a/htdocs/core/modules/mailings/modules_mailings.php b/htdocs/core/modules/mailings/modules_mailings.php index 6c97e165199..42a9868cf7c 100644 --- a/htdocs/core/modules/mailings/modules_mailings.php +++ b/htdocs/core/modules/mailings/modules_mailings.php @@ -151,17 +151,15 @@ class MailingTargets // This can't be abstract as it is used for some method return $nb; } - // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps /** - * Ajoute destinataires dans table des cibles + * Add a list of targets int the database * * @param int $mailing_id Id of emailing * @param array $cibles Array with targets * @return int < 0 si erreur, nb ajout si ok */ - public function add_to_target($mailing_id, $cibles) + public function addTargetsToDatabase($mailing_id, $cibles) { - // phpcs:enable global $conf; $this->db->begin(); diff --git a/htdocs/core/modules/mailings/pomme.modules.php b/htdocs/core/modules/mailings/pomme.modules.php index 74dc86c1d9a..1f4fff68bf1 100644 --- a/htdocs/core/modules/mailings/pomme.modules.php +++ b/htdocs/core/modules/mailings/pomme.modules.php @@ -217,6 +217,6 @@ class mailing_pomme extends MailingTargets return -1; } - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } } diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php index 10e5f9e93c9..00db6eb89ea 100644 --- a/htdocs/core/modules/mailings/thirdparties.modules.php +++ b/htdocs/core/modules/mailings/thirdparties.modules.php @@ -190,7 +190,7 @@ class mailing_thirdparties extends MailingTargets return -1; } - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } diff --git a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php index a19c5480722..75dc4b9499b 100644 --- a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php +++ b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php @@ -159,7 +159,7 @@ class mailing_thirdparties_services_expired extends MailingTargets // ----- Your code end here ----- - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } diff --git a/htdocs/core/modules/mailings/xinputfile.modules.php b/htdocs/core/modules/mailings/xinputfile.modules.php index f4eac646db6..6a7af95b17b 100644 --- a/htdocs/core/modules/mailings/xinputfile.modules.php +++ b/htdocs/core/modules/mailings/xinputfile.modules.php @@ -221,6 +221,6 @@ class mailing_xinputfile extends MailingTargets ini_set('auto_detect_line_endings', false); - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } } diff --git a/htdocs/core/modules/mailings/xinputuser.modules.php b/htdocs/core/modules/mailings/xinputuser.modules.php index cd3a6f79b0f..e56bfbc66a2 100644 --- a/htdocs/core/modules/mailings/xinputuser.modules.php +++ b/htdocs/core/modules/mailings/xinputuser.modules.php @@ -113,10 +113,9 @@ class mailing_xinputuser extends MailingTargets * Ajoute destinataires dans table des cibles * * @param int $mailing_id Id of emailing - * @param array $cibles Array with targets * @return int < 0 si erreur, nb ajout si ok */ - public function add_to_target($mailing_id, $cibles) + public function add_to_target($mailing_id) { // phpcs:enable global $conf,$langs,$_FILES; @@ -144,7 +143,7 @@ class mailing_xinputuser extends MailingTargets 'source_type' => 'file' ); - return parent::add_to_target($mailing_id, $cibles); + return parent::addTargetsToDatabase($mailing_id, $cibles); } else { diff --git a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php index 07419af532d..41974ca8b79 100644 --- a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php +++ b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php @@ -161,7 +161,7 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets // ----- Your code end here ----- - return parent::add_to_target($mailing_id, $target); + return parent::addTargetsToDatabase($mailing_id, $target); } From 28785b31d70856eb5688bd431d2dd893222dda0a Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 9 Sep 2019 19:18:01 +0200 Subject: [PATCH 1142/1148] Removed useless div --- build/doxygen/doxygen_footer.html | 20 ++++++++++++++++++-- build/doxygen/doxygen_header.html | 1 - 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/build/doxygen/doxygen_footer.html b/build/doxygen/doxygen_footer.html index 8ffdc5341fe..1426885a565 100644 --- a/build/doxygen/doxygen_footer.html +++ b/build/doxygen/doxygen_footer.html @@ -10,7 +10,6 @@ File added into doxygen generated documentation
- @@ -24,13 +23,30 @@ File added into doxygen generated documentation + + + + + + - + + \ No newline at end of file diff --git a/build/doxygen/doxygen_header.html b/build/doxygen/doxygen_header.html index c83191268d7..5810182050f 100644 --- a/build/doxygen/doxygen_header.html +++ b/build/doxygen/doxygen_header.html @@ -30,7 +30,6 @@ src="https://www.facebook.com/tr?id=1998533953704960&ev=PageView&noscript=1" -
From 08f8ad6f300894e15bd1beb5c6035b801ee2e481 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 10 Sep 2019 00:09:18 +0200 Subject: [PATCH 1143/1148] FIX javascript error when using dol_use_jmobile=1 --- htdocs/core/class/html.form.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index b87f2118ac8..dce42c79d33 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -4237,7 +4237,7 @@ class Form $formconfirm.= ''; $formconfirm.= $this->selectyesno("confirm", $newselectedchoice); $formconfirm.= ''; - $formconfirm.= 'trans("Validate").'">'; + $formconfirm.= ''; $formconfirm.= ''."\n"; $formconfirm.= ''."\n"; From bf104f609afc098402c96fbe4e266d5f20333e65 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 10 Sep 2019 01:44:36 +0200 Subject: [PATCH 1144/1148] NEW Add pagination on list of object of a category --- htdocs/categories/class/categorie.class.php | 23 ++- htdocs/categories/viewcat.php | 192 +++++++++++++++++--- 2 files changed, 181 insertions(+), 34 deletions(-) diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php index b9a92f85d5e..60fb76293ea 100644 --- a/htdocs/categories/class/categorie.class.php +++ b/htdocs/categories/class/categorie.class.php @@ -746,13 +746,19 @@ class Categorie extends CommonObject /** * Return list of fetched instance of elements having this category * - * @param string $type Type of category ('customer', 'supplier', 'contact', 'product', 'member') - * @param int $onlyids Return only ids of objects (consume less memory) - * @return array|int -1 if KO, array of instance of object if OK + * @param string $type Type of category ('customer', 'supplier', 'contact', 'product', 'member') + * @param int $onlyids Return only ids of objects (consume less memory) + * @param int $limit Limit + * @param int $offset Offset + * @param string $sortfield Sort fields + * @param string $sortorder Sort order ('ASC' or 'DESC'); + * @return array|int -1 if KO, array of instance of object if OK * @see containsObject() */ - public function getObjectsInCateg($type, $onlyids = 0) + public function getObjectsInCateg($type, $onlyids = 0, $limit = 0, $offset = 0, $sortfield = '', $sortorder = 'ASC') { + global $user; + $objs = array(); $obj = new $this->MAP_OBJ_CLASS[$type]( $this->db ); @@ -761,8 +767,15 @@ class Categorie extends CommonObject $sql .= " FROM " . MAIN_DB_PREFIX . "categorie_" . $this->MAP_CAT_TABLE[$type] . " as c"; $sql .= ", " . MAIN_DB_PREFIX . $this->MAP_OBJ_TABLE[$type] . " as o"; $sql .= " WHERE o.entity IN (" . getEntity($obj->element).")"; - $sql.= " AND c.fk_categorie = ".$this->id; + $sql .= " AND c.fk_categorie = ".$this->id; $sql .= " AND c.fk_" . $this->MAP_CAT_FK[$type] . " = o.rowid"; + // Protection for external users + if (($type == 'customer' || $type == 'supplier') && $user->societe_id > 0) + { + $sql.= " AND o.rowid = ".$user->societe_id; + } + if ($limit > 0 || $offset > 0) $sql .= $this->db->plimit($limit + 1, $offset); + $sql .= $this->db->order($sortfield, $sortorder); dol_syslog(get_class($this)."::getObjectsInCateg", LOG_DEBUG); $resql = $this->db->query($sql); diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php index a7a0767c6b5..67ef7905235 100644 --- a/htdocs/categories/viewcat.php +++ b/htdocs/categories/viewcat.php @@ -34,14 +34,33 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; // Load translation files required by the page $langs->load("categories"); -$id = GETPOST('id', 'int'); -$label= GETPOST('label', 'alpha'); -$type = GETPOST('type', 'az09'); -$action=GETPOST('action', 'aZ09'); -$confirm = GETPOST('confirm', 'alpha'); +$id = GETPOST('id', 'int'); +$label = GETPOST('label', 'alpha'); +$type = GETPOST('type', 'az09'); $removeelem = GETPOST('removeelem', 'int'); $elemid = GETPOST('elemid', 'int'); +$action = GETPOST('action', 'aZ09')?GETPOST('action', 'aZ09'):'view'; // The action 'add', 'create', 'edit', 'update', 'view', ... +$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists) +$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ? +$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation +$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button +$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list +$contextpage= GETPOST('contextpage', 'aZ')?GETPOST('contextpage', 'aZ'):'myobjectlist'; // To manage different context of search +$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page +$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print') + + +// Load variable for pagination +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit; +$sortfield = GETPOST('sortfield', 'alpha'); +$sortorder = GETPOST('sortorder', 'alpha'); +$page = GETPOST('page', 'int'); +if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; } // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action +$offset = $limit * $page; +$pageprev = $page - 1; +$pagenext = $page + 1; + if ($id == "" && $label == "") { dol_print_error('', 'Missing parameter id'); @@ -319,10 +338,20 @@ else } +// List of mass actions available +$arrayofmassactions = array( + //'validate'=>$langs->trans("Validate"), + //'generate_doc'=>$langs->trans("ReGeneratePDF"), + //'builddoc'=>$langs->trans("PDFMerge"), + //'presend'=>$langs->trans("SendByMail"), +); +$massactionbutton=$form->selectMassAction('', $arrayofmassactions); + + // List of products or services (type is type of category) if ($type == Categorie::TYPE_PRODUCT) { - $prods = $object->getObjectsInCateg("product"); + $prods = $object->getObjectsInCateg("product", 0, $limit, $offset); if ($prods < 0) { dol_print_error($db, $prods->error, $prods->errors); @@ -351,14 +380,28 @@ if ($type == Categorie::TYPE_PRODUCT) print ''; } - print "
"; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($prods); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("ProductsAndServices"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + print "\n"; - print ''."\n"; + print ''."\n"; if (count($prods) > 0) { + $i = 0; foreach ($prods as $prod) { + $i++; + if ($i > $limit) break; + print "\t".''."\n"; print ''; } print "
'.$langs->trans("ProductsAndServices").' '.count($prods).'
'.$langs->trans("Ref").'
'; print $prod->getNomUrl(1); @@ -388,26 +431,42 @@ if ($type == Categorie::TYPE_PRODUCT) print '
'.$langs->trans("ThisCategoryHasNoProduct").'
\n"; + + print '
'."\n"; } } if ($type == Categorie::TYPE_SUPPLIER) { - $socs = $object->getObjectsInCateg("supplier"); + $socs = $object->getObjectsInCateg("supplier", 0, $limit, $offset); if ($socs < 0) { dol_print_error($db, $socs->error, $socs->errors); } else { - print "
"; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($socs); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("Suppliers"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + print ''."\n"; - print '\n"; + print '\n"; if (count($socs) > 0) { + $i = 0; foreach ($socs as $soc) { + $i++; + if ($i > $limit) break; + print "\t".''."\n"; print ''; } print "
'.$langs->trans("Suppliers").' '.count($socs)."
'.$langs->trans("Name")."
'; print $soc->getNomUrl(1); @@ -437,30 +496,41 @@ if ($type == Categorie::TYPE_SUPPLIER) print '
'.$langs->trans("ThisCategoryHasNoSupplier").'
\n"; + + print '
'."\n"; } } if($type == Categorie::TYPE_CUSTOMER) { - $socs = $object->getObjectsInCateg("customer"); + $socs = $object->getObjectsInCateg("customer", 0, $limit, $offset); if ($socs < 0) { dol_print_error($db, $socs->error, $socs->errors); } else { - print "
"; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($socs); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("Customers"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + print ''."\n"; - print ''."\n"; + print ''."\n"; if (count($socs) > 0) { $i = 0; foreach ($socs as $key => $soc) { - if ($user->societe_id > 0 && $soc->id != $user->societe_id) continue; // External user always see only themself - $i++; + if ($i > $limit) break; print "\t".''."\n"; print ''; } print "
'.$langs->trans("Customers").' '.count($socs).'
'.$langs->trans("Name").'
'; @@ -490,6 +560,8 @@ if($type == Categorie::TYPE_CUSTOMER) print '
'.$langs->trans("ThisCategoryHasNoCustomer").'
\n"; + + print '
'."\n"; } } @@ -498,21 +570,35 @@ if ($type == Categorie::TYPE_MEMBER) { require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; - $prods = $object->getObjectsInCateg("member"); + $prods = $object->getObjectsInCateg("member", 0, $limit, $offset); if ($prods < 0) { dol_print_error($db, $prods->error, $prods->errors); } else { - print "
"; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($prods); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("Member"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + print "\n"; - print ''."\n"; + print ''."\n"; if (count($prods) > 0) { + $i = 0; foreach ($prods as $key => $member) { + $i++; + if ($i > $limit) break; + print "\t".''."\n"; print ''; } print "
'.$langs->trans("Member").' '.count($prods).'
'.$langs->trans("Name").'
'; $member->ref=$member->login; @@ -543,22 +629,35 @@ if ($type == Categorie::TYPE_MEMBER) print '
'.$langs->trans("ThisCategoryHasNoMember").'
\n"; + + print '
'."\n"; } } // Categorie contact if ($type == Categorie::TYPE_CONTACT) { - $contacts = $object->getObjectsInCateg("contact"); + $contacts = $object->getObjectsInCateg("contact", 0, $limit, $offset); if ($contacts < 0) { dol_print_error($db, $contacts->error, $contacts->errors); } else { - print "
"; + + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($contacts); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("Contact"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + print ''."\n"; - print ''."\n"; + print ''."\n"; if (count($contacts) > 0) { @@ -566,6 +665,7 @@ if ($type == Categorie::TYPE_CONTACT) foreach ($contacts as $key => $contact) { $i++; + if ($i > $limit) break; print "\t".''."\n"; print ''; } print "
'.$langs->trans("Contact").' '.count($contacts).'
'.$langs->trans("Ref").'
'; @@ -595,6 +695,8 @@ if ($type == Categorie::TYPE_CONTACT) print '
'.$langs->trans("ThisCategoryHasNoContact").'
\n"; + + print '
'."\n"; } } @@ -603,21 +705,35 @@ if ($type == Categorie::TYPE_ACCOUNT) { require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; - $accounts = $object->getObjectsInCateg("account"); + $accounts = $object->getObjectsInCateg("account", 0, $limit, $offset); if ($accounts < 0) { dol_print_error($db, $accounts->error, $accounts->errors); } else { - print "
"; - print "\n"; - print ''."\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($accounts); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("Account"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + + print "
'.$langs->trans("Account").' '.count($accounts).'
\n"; + print ''."\n"; if (count($accounts) > 0) { + $i = 0; foreach ($accounts as $key => $account) { + $i++; + if ($i > $limit) break; + print "\t".''."\n"; print ''; } print "
'.$langs->trans("Ref").'
'; print $account->getNomUrl(1, 0); @@ -647,6 +763,8 @@ if ($type == Categorie::TYPE_ACCOUNT) print '
'.$langs->trans("ThisCategoryHasNoAccount").'
\n"; + + print ''."\n"; } } @@ -655,21 +773,35 @@ if ($type == Categorie::TYPE_PROJECT) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - $projects = $object->getObjectsInCateg("project"); + $projects = $object->getObjectsInCateg("project", 0, $limit, $offset); if ($projects < 0) { dol_print_error($db, $object->error, $object->errors); } else { - print "
"; + print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + + print '
'; + $param = '&limit='.$limit.'&id='.$id.'&type='.$type; $num = count($projects); $nbtotalofrecords = ''; $newcardbutton = ''; + print_barre_liste($langs->trans("Project"), $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, '', 0, $newcardbutton, '', $limit); + print "\n"; - print ''."\n"; + print ''."\n"; if (count($projects) > 0) { + $i = 0; foreach ($projects as $key => $project) { + $i++; + if ($i > $limit) break; + print "\t".''."\n"; print ''; } print "
'.$langs->trans("Project").' '.count($projects).'
'.$langs->trans("Ref").'
'; print $project->getNomUrl(1); @@ -699,6 +831,8 @@ if ($type == Categorie::TYPE_PROJECT) print '
'.$langs->trans("ThisCategoryHasNoProject").'
\n"; + + print '
'."\n"; } } From d4e26fcc5517404159e0e11084583765e8b2c631 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 10 Sep 2019 15:29:33 +0200 Subject: [PATCH 1145/1148] FIX missing include (dol_convert_file not found) --- htdocs/core/lib/functions.lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index dfc46eccddb..8d301275b5e 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1436,6 +1436,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r { if (empty($conf->global->MAIN_DISABLE_PDF_THUMBS)) // If you experienc trouble with pdf thumb generation and imagick, you can disable here. { + include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $ret = dol_convert_file($file, 'png', $fileimage); if ($ret < 0) $error++; } From eb2f48332b0781594754f2c81278ab6226439aaa Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 10 Sep 2019 15:58:56 +0200 Subject: [PATCH 1146/1148] Show first line of code --- htdocs/core/lib/website.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 60016b2f2e9..b65dd813bfd 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -55,7 +55,7 @@ function dolStripPhpCode($str, $replacewith = '') //remove content before closing tag if (count($partlings) > 1) $partlings[0] = ''; // Todo why a count > 1 and not >= 1 ? //append to out string - $newstr .= ''.$replacewith.''.implode('', $partlings); + $newstr .= ''.$replacewith.''.implode('', $partlings); } } } From d2b2cc010bb05aab1ac3f4afc5dfcf9299669d36 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 10 Sep 2019 17:50:55 +0200 Subject: [PATCH 1147/1148] Update ckeditor 4.12 --- COPYRIGHT | 2 +- htdocs/includes/ckeditor/UPGRADE.md | 8 + htdocs/includes/ckeditor/ckeditor/CHANGES.md | 57 +- htdocs/includes/ckeditor/ckeditor/LICENSE.md | 1 + .../ckeditor/ckeditor/adapters/jquery.js | 10 +- htdocs/includes/ckeditor/ckeditor/bower.json | 10 - .../ckeditor/ckeditor/build-config.js | 74 +- htdocs/includes/ckeditor/ckeditor/ckeditor.js | 863 +++++++++--------- .../includes/ckeditor/ckeditor/composer.json | 20 - htdocs/includes/ckeditor/ckeditor/config.js | 2 +- .../includes/ckeditor/ckeditor/contents.css | 2 +- .../ckeditor/lang/_translationstatus.txt | 63 -- htdocs/includes/ckeditor/ckeditor/lang/af.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ar.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/az.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/bg.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/bn.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/bs.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ca.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/cs.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/cy.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/da.js | 5 - .../includes/ckeditor/ckeditor/lang/de-ch.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/de.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/el.js | 5 - .../includes/ckeditor/ckeditor/lang/en-au.js | 5 - .../includes/ckeditor/ckeditor/lang/en-ca.js | 5 - .../includes/ckeditor/ckeditor/lang/en-gb.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/en.js | 2 +- htdocs/includes/ckeditor/ckeditor/lang/eo.js | 5 - .../includes/ckeditor/ckeditor/lang/es-mx.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/es.js | 2 +- htdocs/includes/ckeditor/ckeditor/lang/et.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/eu.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/fa.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/fi.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/fo.js | 5 - .../includes/ckeditor/ckeditor/lang/fr-ca.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/fr.js | 2 +- htdocs/includes/ckeditor/ckeditor/lang/gl.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/gu.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/he.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/hi.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/hr.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/hu.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/id.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/is.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/it.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ja.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ka.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/km.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ko.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ku.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/lt.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/lv.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/mk.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/mn.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ms.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/nb.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/nl.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/no.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/oc.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/pl.js | 5 - .../includes/ckeditor/ckeditor/lang/pt-br.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/pt.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ro.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ru.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/si.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/sk.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/sl.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/sq.js | 5 - .../ckeditor/ckeditor/lang/sr-latn.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/sr.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/sv.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/th.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/tr.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/tt.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/ug.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/uk.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/vi.js | 5 - .../includes/ckeditor/ckeditor/lang/zh-cn.js | 5 - htdocs/includes/ckeditor/ckeditor/lang/zh.js | 5 - .../includes/ckeditor/ckeditor/package.json | 26 - .../plugins/a11yhelp/dialogs/lang/az.js | 2 +- .../plugins/a11yhelp/dialogs/lang/et.js | 14 +- .../plugins/a11yhelp/dialogs/lang/nl.js | 2 +- .../plugins/a11yhelp/dialogs/lang/no.js | 4 +- .../plugins/a11yhelp/dialogs/lang/uk.js | 6 +- .../colordialog/dialogs/colordialog.js | 20 +- .../ckeditor/plugins/colordialog/lang/af.js | 1 - .../ckeditor/plugins/colordialog/lang/ar.js | 1 - .../ckeditor/plugins/colordialog/lang/az.js | 1 - .../ckeditor/plugins/colordialog/lang/bg.js | 1 - .../ckeditor/plugins/colordialog/lang/bn.js | 1 - .../ckeditor/plugins/colordialog/lang/bs.js | 1 - .../ckeditor/plugins/colordialog/lang/ca.js | 1 - .../ckeditor/plugins/colordialog/lang/cs.js | 1 - .../ckeditor/plugins/colordialog/lang/cy.js | 1 - .../ckeditor/plugins/colordialog/lang/da.js | 1 - .../plugins/colordialog/lang/de-ch.js | 1 - .../ckeditor/plugins/colordialog/lang/de.js | 1 - .../ckeditor/plugins/colordialog/lang/el.js | 1 - .../plugins/colordialog/lang/en-au.js | 1 - .../plugins/colordialog/lang/en-ca.js | 1 - .../plugins/colordialog/lang/en-gb.js | 1 - .../ckeditor/plugins/colordialog/lang/en.js | 1 - .../ckeditor/plugins/colordialog/lang/eo.js | 1 - .../ckeditor/plugins/colordialog/lang/es.js | 1 - .../ckeditor/plugins/colordialog/lang/et.js | 1 - .../ckeditor/plugins/colordialog/lang/eu.js | 1 - .../ckeditor/plugins/colordialog/lang/fa.js | 1 - .../ckeditor/plugins/colordialog/lang/fi.js | 1 - .../ckeditor/plugins/colordialog/lang/fo.js | 1 - .../plugins/colordialog/lang/fr-ca.js | 1 - .../ckeditor/plugins/colordialog/lang/fr.js | 1 - .../ckeditor/plugins/colordialog/lang/gl.js | 1 - .../ckeditor/plugins/colordialog/lang/gu.js | 1 - .../ckeditor/plugins/colordialog/lang/he.js | 1 - .../ckeditor/plugins/colordialog/lang/hi.js | 1 - .../ckeditor/plugins/colordialog/lang/hr.js | 1 - .../ckeditor/plugins/colordialog/lang/hu.js | 1 - .../ckeditor/plugins/colordialog/lang/id.js | 1 - .../ckeditor/plugins/colordialog/lang/is.js | 1 - .../ckeditor/plugins/colordialog/lang/it.js | 1 - .../ckeditor/plugins/colordialog/lang/ja.js | 1 - .../ckeditor/plugins/colordialog/lang/ka.js | 1 - .../ckeditor/plugins/colordialog/lang/km.js | 1 - .../ckeditor/plugins/colordialog/lang/ko.js | 1 - .../ckeditor/plugins/colordialog/lang/ku.js | 1 - .../ckeditor/plugins/colordialog/lang/lt.js | 1 - .../ckeditor/plugins/colordialog/lang/lv.js | 1 - .../ckeditor/plugins/colordialog/lang/mk.js | 1 - .../ckeditor/plugins/colordialog/lang/mn.js | 1 - .../ckeditor/plugins/colordialog/lang/ms.js | 1 - .../ckeditor/plugins/colordialog/lang/nb.js | 1 - .../ckeditor/plugins/colordialog/lang/nl.js | 1 - .../ckeditor/plugins/colordialog/lang/no.js | 1 - .../ckeditor/plugins/colordialog/lang/oc.js | 1 - .../ckeditor/plugins/colordialog/lang/pl.js | 1 - .../plugins/colordialog/lang/pt-br.js | 1 - .../ckeditor/plugins/colordialog/lang/pt.js | 1 - .../ckeditor/plugins/colordialog/lang/ro.js | 1 - .../ckeditor/plugins/colordialog/lang/ru.js | 1 - .../ckeditor/plugins/colordialog/lang/si.js | 1 - .../ckeditor/plugins/colordialog/lang/sk.js | 1 - .../ckeditor/plugins/colordialog/lang/sl.js | 1 - .../ckeditor/plugins/colordialog/lang/sq.js | 1 - .../plugins/colordialog/lang/sr-latn.js | 1 - .../ckeditor/plugins/colordialog/lang/sr.js | 1 - .../ckeditor/plugins/colordialog/lang/sv.js | 1 - .../ckeditor/plugins/colordialog/lang/th.js | 1 - .../ckeditor/plugins/colordialog/lang/tr.js | 1 - .../ckeditor/plugins/colordialog/lang/tt.js | 1 - .../ckeditor/plugins/colordialog/lang/ug.js | 1 - .../ckeditor/plugins/colordialog/lang/uk.js | 1 - .../ckeditor/plugins/colordialog/lang/vi.js | 1 - .../plugins/colordialog/lang/zh-cn.js | 1 - .../ckeditor/plugins/colordialog/lang/zh.js | 1 - .../ckeditor/plugins/colordialog/plugin.js | 7 - .../copyformatting/icons/copyformatting.png | Bin 707 -> 0 bytes .../icons/hidpi/copyformatting.png | Bin 1245 -> 0 bytes .../plugins/copyformatting/lang/en.js | 1 - .../ckeditor/plugins/copyformatting/plugin.js | 27 - .../ckeditor/plugins/div/icons/creatediv.png | Bin 569 -> 0 bytes .../plugins/div/icons/hidpi/creatediv.png | Bin 1678 -> 0 bytes .../ckeditor/ckeditor/plugins/div/lang/af.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ar.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/az.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/bg.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/bn.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/bs.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ca.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/cs.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/cy.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/da.js | 1 - .../ckeditor/plugins/div/lang/de-ch.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/de.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/el.js | 1 - .../ckeditor/plugins/div/lang/en-au.js | 1 - .../ckeditor/plugins/div/lang/en-ca.js | 1 - .../ckeditor/plugins/div/lang/en-gb.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/en.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/eo.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/es.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/et.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/eu.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/fa.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/fi.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/fo.js | 1 - .../ckeditor/plugins/div/lang/fr-ca.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/fr.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/gl.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/gu.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/he.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/hi.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/hr.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/hu.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/id.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/is.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/it.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ja.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ka.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/km.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ko.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ku.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/lt.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/lv.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/mk.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/mn.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ms.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/nb.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/nl.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/no.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/oc.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/pl.js | 1 - .../ckeditor/plugins/div/lang/pt-br.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/pt.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ro.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ru.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/si.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/sk.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/sl.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/sq.js | 1 - .../ckeditor/plugins/div/lang/sr-latn.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/sr.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/sv.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/th.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/tr.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/tt.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/ug.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/uk.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/vi.js | 1 - .../ckeditor/plugins/div/lang/zh-cn.js | 1 - .../ckeditor/ckeditor/plugins/div/lang/zh.js | 1 - .../ckeditor/ckeditor/plugins/div/plugin.js | 9 - .../ckeditor/plugins/find/dialogs/find.js | 6 +- .../ckeditor/plugins/find/icons/find-rtl.png | Bin 696 -> 0 bytes .../ckeditor/plugins/find/icons/find.png | Bin 696 -> 0 bytes .../plugins/find/icons/hidpi/find-rtl.png | Bin 1384 -> 0 bytes .../plugins/find/icons/hidpi/find.png | Bin 1384 -> 0 bytes .../plugins/find/icons/hidpi/replace.png | Bin 1402 -> 0 bytes .../ckeditor/plugins/find/icons/replace.png | Bin 549 -> 0 bytes .../ckeditor/ckeditor/plugins/find/lang/af.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ar.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/az.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/bg.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/bn.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/bs.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ca.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/cs.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/cy.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/da.js | 1 - .../ckeditor/plugins/find/lang/de-ch.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/de.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/el.js | 1 - .../ckeditor/plugins/find/lang/en-au.js | 1 - .../ckeditor/plugins/find/lang/en-ca.js | 1 - .../ckeditor/plugins/find/lang/en-gb.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/en.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/eo.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/es.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/et.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/eu.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/fa.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/fi.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/fo.js | 1 - .../ckeditor/plugins/find/lang/fr-ca.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/fr.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/gl.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/gu.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/he.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/hi.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/hr.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/hu.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/id.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/is.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/it.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ja.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ka.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/km.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ko.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ku.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/lt.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/lv.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/mk.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/mn.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ms.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/nb.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/nl.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/no.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/oc.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/pl.js | 1 - .../ckeditor/plugins/find/lang/pt-br.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/pt.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ro.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ru.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/si.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/sk.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/sl.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/sq.js | 1 - .../ckeditor/plugins/find/lang/sr-latn.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/sr.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/sv.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/th.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/tr.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/tt.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/ug.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/uk.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/vi.js | 1 - .../ckeditor/plugins/find/lang/zh-cn.js | 1 - .../ckeditor/ckeditor/plugins/find/lang/zh.js | 1 - .../ckeditor/ckeditor/plugins/find/plugin.js | 6 - .../ckeditor/plugins/flash/icons/flash.png | Bin 633 -> 0 bytes .../plugins/flash/icons/hidpi/flash.png | Bin 1385 -> 0 bytes .../ckeditor/plugins/flash/lang/af.js | 2 - .../ckeditor/plugins/flash/lang/ar.js | 2 - .../ckeditor/plugins/flash/lang/az.js | 3 - .../ckeditor/plugins/flash/lang/bg.js | 3 - .../ckeditor/plugins/flash/lang/bn.js | 2 - .../ckeditor/plugins/flash/lang/bs.js | 2 - .../ckeditor/plugins/flash/lang/ca.js | 3 - .../ckeditor/plugins/flash/lang/cs.js | 3 - .../ckeditor/plugins/flash/lang/cy.js | 2 - .../ckeditor/plugins/flash/lang/da.js | 3 - .../ckeditor/plugins/flash/lang/de-ch.js | 3 - .../ckeditor/plugins/flash/lang/de.js | 3 - .../ckeditor/plugins/flash/lang/el.js | 3 - .../ckeditor/plugins/flash/lang/en-au.js | 2 - .../ckeditor/plugins/flash/lang/en-ca.js | 2 - .../ckeditor/plugins/flash/lang/en-gb.js | 2 - .../ckeditor/plugins/flash/lang/en.js | 2 - .../ckeditor/plugins/flash/lang/eo.js | 3 - .../ckeditor/plugins/flash/lang/es.js | 2 - .../ckeditor/plugins/flash/lang/et.js | 3 - .../ckeditor/plugins/flash/lang/eu.js | 3 - .../ckeditor/plugins/flash/lang/fa.js | 2 - .../ckeditor/plugins/flash/lang/fi.js | 3 - .../ckeditor/plugins/flash/lang/fo.js | 3 - .../ckeditor/plugins/flash/lang/fr-ca.js | 3 - .../ckeditor/plugins/flash/lang/fr.js | 3 - .../ckeditor/plugins/flash/lang/gl.js | 3 - .../ckeditor/plugins/flash/lang/gu.js | 2 - .../ckeditor/plugins/flash/lang/he.js | 2 - .../ckeditor/plugins/flash/lang/hi.js | 2 - .../ckeditor/plugins/flash/lang/hr.js | 2 - .../ckeditor/plugins/flash/lang/hu.js | 3 - .../ckeditor/plugins/flash/lang/id.js | 2 - .../ckeditor/plugins/flash/lang/is.js | 2 - .../ckeditor/plugins/flash/lang/it.js | 3 - .../ckeditor/plugins/flash/lang/ja.js | 2 - .../ckeditor/plugins/flash/lang/ka.js | 3 - .../ckeditor/plugins/flash/lang/km.js | 2 - .../ckeditor/plugins/flash/lang/ko.js | 2 - .../ckeditor/plugins/flash/lang/ku.js | 3 - .../ckeditor/plugins/flash/lang/lt.js | 3 - .../ckeditor/plugins/flash/lang/lv.js | 3 - .../ckeditor/plugins/flash/lang/mk.js | 2 - .../ckeditor/plugins/flash/lang/mn.js | 2 - .../ckeditor/plugins/flash/lang/ms.js | 2 - .../ckeditor/plugins/flash/lang/nb.js | 2 - .../ckeditor/plugins/flash/lang/nl.js | 3 - .../ckeditor/plugins/flash/lang/no.js | 2 - .../ckeditor/plugins/flash/lang/oc.js | 3 - .../ckeditor/plugins/flash/lang/pl.js | 3 - .../ckeditor/plugins/flash/lang/pt-br.js | 3 - .../ckeditor/plugins/flash/lang/pt.js | 3 - .../ckeditor/plugins/flash/lang/ro.js | 3 - .../ckeditor/plugins/flash/lang/ru.js | 3 - .../ckeditor/plugins/flash/lang/si.js | 2 - .../ckeditor/plugins/flash/lang/sk.js | 3 - .../ckeditor/plugins/flash/lang/sl.js | 3 - .../ckeditor/plugins/flash/lang/sq.js | 3 - .../ckeditor/plugins/flash/lang/sr-latn.js | 2 - .../ckeditor/plugins/flash/lang/sr.js | 2 - .../ckeditor/plugins/flash/lang/sv.js | 3 - .../ckeditor/plugins/flash/lang/th.js | 3 - .../ckeditor/plugins/flash/lang/tr.js | 2 - .../ckeditor/plugins/flash/lang/tt.js | 2 - .../ckeditor/plugins/flash/lang/ug.js | 3 - .../ckeditor/plugins/flash/lang/uk.js | 3 - .../ckeditor/plugins/flash/lang/vi.js | 3 - .../ckeditor/plugins/flash/lang/zh-cn.js | 2 - .../ckeditor/plugins/flash/lang/zh.js | 2 - .../ckeditor/ckeditor/plugins/flash/plugin.js | 9 - .../ckeditor/plugins/forms/icons/button.png | Bin 493 -> 0 bytes .../ckeditor/plugins/forms/icons/checkbox.png | Bin 544 -> 0 bytes .../ckeditor/plugins/forms/icons/form.png | Bin 380 -> 0 bytes .../plugins/forms/icons/hiddenfield.png | Bin 613 -> 0 bytes .../plugins/forms/icons/hidpi/button.png | Bin 833 -> 0 bytes .../plugins/forms/icons/hidpi/checkbox.png | Bin 1024 -> 0 bytes .../plugins/forms/icons/hidpi/form.png | Bin 660 -> 0 bytes .../plugins/forms/icons/hidpi/hiddenfield.png | Bin 1129 -> 0 bytes .../plugins/forms/icons/hidpi/imagebutton.png | Bin 1345 -> 0 bytes .../plugins/forms/icons/hidpi/radio.png | Bin 1426 -> 0 bytes .../plugins/forms/icons/hidpi/select-rtl.png | Bin 920 -> 0 bytes .../plugins/forms/icons/hidpi/select.png | Bin 905 -> 0 bytes .../forms/icons/hidpi/textarea-rtl.png | Bin 1081 -> 0 bytes .../plugins/forms/icons/hidpi/textarea.png | Bin 1048 -> 0 bytes .../forms/icons/hidpi/textfield-rtl.png | Bin 805 -> 0 bytes .../plugins/forms/icons/hidpi/textfield.png | Bin 805 -> 0 bytes .../plugins/forms/icons/imagebutton.png | Bin 755 -> 0 bytes .../ckeditor/plugins/forms/icons/radio.png | Bin 655 -> 0 bytes .../plugins/forms/icons/select-rtl.png | Bin 455 -> 0 bytes .../ckeditor/plugins/forms/icons/select.png | Bin 451 -> 0 bytes .../plugins/forms/icons/textarea-rtl.png | Bin 568 -> 0 bytes .../ckeditor/plugins/forms/icons/textarea.png | Bin 524 -> 0 bytes .../plugins/forms/icons/textfield-rtl.png | Bin 419 -> 0 bytes .../plugins/forms/icons/textfield.png | Bin 419 -> 0 bytes .../ckeditor/plugins/forms/lang/af.js | 3 - .../ckeditor/plugins/forms/lang/ar.js | 3 - .../ckeditor/plugins/forms/lang/az.js | 3 - .../ckeditor/plugins/forms/lang/bg.js | 3 - .../ckeditor/plugins/forms/lang/bn.js | 3 - .../ckeditor/plugins/forms/lang/bs.js | 3 - .../ckeditor/plugins/forms/lang/ca.js | 3 - .../ckeditor/plugins/forms/lang/cs.js | 3 - .../ckeditor/plugins/forms/lang/cy.js | 3 - .../ckeditor/plugins/forms/lang/da.js | 3 - .../ckeditor/plugins/forms/lang/de-ch.js | 3 - .../ckeditor/plugins/forms/lang/de.js | 3 - .../ckeditor/plugins/forms/lang/el.js | 3 - .../ckeditor/plugins/forms/lang/en-au.js | 3 - .../ckeditor/plugins/forms/lang/en-ca.js | 3 - .../ckeditor/plugins/forms/lang/en-gb.js | 3 - .../ckeditor/plugins/forms/lang/en.js | 3 - .../ckeditor/plugins/forms/lang/eo.js | 3 - .../ckeditor/plugins/forms/lang/es.js | 3 - .../ckeditor/plugins/forms/lang/et.js | 3 - .../ckeditor/plugins/forms/lang/eu.js | 3 - .../ckeditor/plugins/forms/lang/fa.js | 3 - .../ckeditor/plugins/forms/lang/fi.js | 3 - .../ckeditor/plugins/forms/lang/fo.js | 3 - .../ckeditor/plugins/forms/lang/fr-ca.js | 3 - .../ckeditor/plugins/forms/lang/fr.js | 3 - .../ckeditor/plugins/forms/lang/gl.js | 3 - .../ckeditor/plugins/forms/lang/gu.js | 3 - .../ckeditor/plugins/forms/lang/he.js | 3 - .../ckeditor/plugins/forms/lang/hi.js | 3 - .../ckeditor/plugins/forms/lang/hr.js | 3 - .../ckeditor/plugins/forms/lang/hu.js | 3 - .../ckeditor/plugins/forms/lang/id.js | 3 - .../ckeditor/plugins/forms/lang/is.js | 3 - .../ckeditor/plugins/forms/lang/it.js | 3 - .../ckeditor/plugins/forms/lang/ja.js | 2 - .../ckeditor/plugins/forms/lang/ka.js | 3 - .../ckeditor/plugins/forms/lang/km.js | 3 - .../ckeditor/plugins/forms/lang/ko.js | 2 - .../ckeditor/plugins/forms/lang/ku.js | 3 - .../ckeditor/plugins/forms/lang/lt.js | 3 - .../ckeditor/plugins/forms/lang/lv.js | 3 - .../ckeditor/plugins/forms/lang/mk.js | 3 - .../ckeditor/plugins/forms/lang/mn.js | 3 - .../ckeditor/plugins/forms/lang/ms.js | 3 - .../ckeditor/plugins/forms/lang/nb.js | 3 - .../ckeditor/plugins/forms/lang/nl.js | 3 - .../ckeditor/plugins/forms/lang/no.js | 3 - .../ckeditor/plugins/forms/lang/oc.js | 3 - .../ckeditor/plugins/forms/lang/pl.js | 3 - .../ckeditor/plugins/forms/lang/pt-br.js | 3 - .../ckeditor/plugins/forms/lang/pt.js | 3 - .../ckeditor/plugins/forms/lang/ro.js | 3 - .../ckeditor/plugins/forms/lang/ru.js | 3 - .../ckeditor/plugins/forms/lang/si.js | 3 - .../ckeditor/plugins/forms/lang/sk.js | 3 - .../ckeditor/plugins/forms/lang/sl.js | 3 - .../ckeditor/plugins/forms/lang/sq.js | 3 - .../ckeditor/plugins/forms/lang/sr-latn.js | 3 - .../ckeditor/plugins/forms/lang/sr.js | 3 - .../ckeditor/plugins/forms/lang/sv.js | 3 - .../ckeditor/plugins/forms/lang/th.js | 3 - .../ckeditor/plugins/forms/lang/tr.js | 3 - .../ckeditor/plugins/forms/lang/tt.js | 3 - .../ckeditor/plugins/forms/lang/ug.js | 3 - .../ckeditor/plugins/forms/lang/uk.js | 3 - .../ckeditor/plugins/forms/lang/vi.js | 3 - .../ckeditor/plugins/forms/lang/zh-cn.js | 2 - .../ckeditor/plugins/forms/lang/zh.js | 2 - .../ckeditor/ckeditor/plugins/forms/plugin.js | 14 - .../ckeditor/ckeditor/plugins/icons.png | Bin 12421 -> 12453 bytes .../ckeditor/ckeditor/plugins/icons_hidpi.png | Bin 40265 -> 41377 bytes .../plugins/iframe/icons/hidpi/iframe.png | Bin 1837 -> 0 bytes .../ckeditor/plugins/iframe/icons/iframe.png | Bin 816 -> 0 bytes .../ckeditor/plugins/iframe/lang/af.js | 1 - .../ckeditor/plugins/iframe/lang/ar.js | 1 - .../ckeditor/plugins/iframe/lang/az.js | 1 - .../ckeditor/plugins/iframe/lang/bg.js | 1 - .../ckeditor/plugins/iframe/lang/bn.js | 1 - .../ckeditor/plugins/iframe/lang/bs.js | 1 - .../ckeditor/plugins/iframe/lang/ca.js | 1 - .../ckeditor/plugins/iframe/lang/cs.js | 1 - .../ckeditor/plugins/iframe/lang/cy.js | 1 - .../ckeditor/plugins/iframe/lang/da.js | 1 - .../ckeditor/plugins/iframe/lang/de-ch.js | 1 - .../ckeditor/plugins/iframe/lang/de.js | 1 - .../ckeditor/plugins/iframe/lang/el.js | 1 - .../ckeditor/plugins/iframe/lang/en-au.js | 1 - .../ckeditor/plugins/iframe/lang/en-ca.js | 1 - .../ckeditor/plugins/iframe/lang/en-gb.js | 1 - .../ckeditor/plugins/iframe/lang/en.js | 1 - .../ckeditor/plugins/iframe/lang/eo.js | 1 - .../ckeditor/plugins/iframe/lang/es.js | 1 - .../ckeditor/plugins/iframe/lang/et.js | 1 - .../ckeditor/plugins/iframe/lang/eu.js | 1 - .../ckeditor/plugins/iframe/lang/fa.js | 1 - .../ckeditor/plugins/iframe/lang/fi.js | 1 - .../ckeditor/plugins/iframe/lang/fo.js | 1 - .../ckeditor/plugins/iframe/lang/fr-ca.js | 1 - .../ckeditor/plugins/iframe/lang/fr.js | 1 - .../ckeditor/plugins/iframe/lang/gl.js | 1 - .../ckeditor/plugins/iframe/lang/gu.js | 1 - .../ckeditor/plugins/iframe/lang/he.js | 1 - .../ckeditor/plugins/iframe/lang/hi.js | 1 - .../ckeditor/plugins/iframe/lang/hr.js | 1 - .../ckeditor/plugins/iframe/lang/hu.js | 1 - .../ckeditor/plugins/iframe/lang/id.js | 1 - .../ckeditor/plugins/iframe/lang/is.js | 1 - .../ckeditor/plugins/iframe/lang/it.js | 1 - .../ckeditor/plugins/iframe/lang/ja.js | 1 - .../ckeditor/plugins/iframe/lang/ka.js | 1 - .../ckeditor/plugins/iframe/lang/km.js | 1 - .../ckeditor/plugins/iframe/lang/ko.js | 1 - .../ckeditor/plugins/iframe/lang/ku.js | 1 - .../ckeditor/plugins/iframe/lang/lt.js | 1 - .../ckeditor/plugins/iframe/lang/lv.js | 1 - .../ckeditor/plugins/iframe/lang/mk.js | 1 - .../ckeditor/plugins/iframe/lang/mn.js | 1 - .../ckeditor/plugins/iframe/lang/ms.js | 1 - .../ckeditor/plugins/iframe/lang/nb.js | 1 - .../ckeditor/plugins/iframe/lang/nl.js | 1 - .../ckeditor/plugins/iframe/lang/no.js | 1 - .../ckeditor/plugins/iframe/lang/oc.js | 1 - .../ckeditor/plugins/iframe/lang/pl.js | 1 - .../ckeditor/plugins/iframe/lang/pt-br.js | 1 - .../ckeditor/plugins/iframe/lang/pt.js | 1 - .../ckeditor/plugins/iframe/lang/ro.js | 1 - .../ckeditor/plugins/iframe/lang/ru.js | 1 - .../ckeditor/plugins/iframe/lang/si.js | 1 - .../ckeditor/plugins/iframe/lang/sk.js | 1 - .../ckeditor/plugins/iframe/lang/sl.js | 1 - .../ckeditor/plugins/iframe/lang/sq.js | 1 - .../ckeditor/plugins/iframe/lang/sr-latn.js | 1 - .../ckeditor/plugins/iframe/lang/sr.js | 1 - .../ckeditor/plugins/iframe/lang/sv.js | 1 - .../ckeditor/plugins/iframe/lang/th.js | 1 - .../ckeditor/plugins/iframe/lang/tr.js | 1 - .../ckeditor/plugins/iframe/lang/tt.js | 1 - .../ckeditor/plugins/iframe/lang/ug.js | 1 - .../ckeditor/plugins/iframe/lang/uk.js | 1 - .../ckeditor/plugins/iframe/lang/vi.js | 1 - .../ckeditor/plugins/iframe/lang/zh-cn.js | 1 - .../ckeditor/plugins/iframe/lang/zh.js | 1 - .../ckeditor/plugins/iframe/plugin.js | 8 - .../ckeditor/plugins/liststyle/lang/af.js | 2 - .../ckeditor/plugins/liststyle/lang/ar.js | 2 - .../ckeditor/plugins/liststyle/lang/az.js | 2 - .../ckeditor/plugins/liststyle/lang/bg.js | 2 - .../ckeditor/plugins/liststyle/lang/bn.js | 2 - .../ckeditor/plugins/liststyle/lang/bs.js | 2 - .../ckeditor/plugins/liststyle/lang/ca.js | 2 - .../ckeditor/plugins/liststyle/lang/cs.js | 2 - .../ckeditor/plugins/liststyle/lang/cy.js | 2 - .../ckeditor/plugins/liststyle/lang/da.js | 2 - .../ckeditor/plugins/liststyle/lang/de-ch.js | 2 - .../ckeditor/plugins/liststyle/lang/de.js | 2 - .../ckeditor/plugins/liststyle/lang/el.js | 2 - .../ckeditor/plugins/liststyle/lang/en-au.js | 2 - .../ckeditor/plugins/liststyle/lang/en-ca.js | 2 - .../ckeditor/plugins/liststyle/lang/en-gb.js | 2 - .../ckeditor/plugins/liststyle/lang/en.js | 2 - .../ckeditor/plugins/liststyle/lang/eo.js | 2 - .../ckeditor/plugins/liststyle/lang/es.js | 2 - .../ckeditor/plugins/liststyle/lang/et.js | 2 - .../ckeditor/plugins/liststyle/lang/eu.js | 2 - .../ckeditor/plugins/liststyle/lang/fa.js | 2 - .../ckeditor/plugins/liststyle/lang/fi.js | 2 - .../ckeditor/plugins/liststyle/lang/fo.js | 2 - .../ckeditor/plugins/liststyle/lang/fr-ca.js | 2 - .../ckeditor/plugins/liststyle/lang/fr.js | 2 - .../ckeditor/plugins/liststyle/lang/gl.js | 2 - .../ckeditor/plugins/liststyle/lang/gu.js | 2 - .../ckeditor/plugins/liststyle/lang/he.js | 2 - .../ckeditor/plugins/liststyle/lang/hi.js | 2 - .../ckeditor/plugins/liststyle/lang/hr.js | 2 - .../ckeditor/plugins/liststyle/lang/hu.js | 2 - .../ckeditor/plugins/liststyle/lang/id.js | 2 - .../ckeditor/plugins/liststyle/lang/is.js | 2 - .../ckeditor/plugins/liststyle/lang/it.js | 2 - .../ckeditor/plugins/liststyle/lang/ja.js | 2 - .../ckeditor/plugins/liststyle/lang/ka.js | 2 - .../ckeditor/plugins/liststyle/lang/km.js | 2 - .../ckeditor/plugins/liststyle/lang/ko.js | 2 - .../ckeditor/plugins/liststyle/lang/ku.js | 2 - .../ckeditor/plugins/liststyle/lang/lt.js | 2 - .../ckeditor/plugins/liststyle/lang/lv.js | 2 - .../ckeditor/plugins/liststyle/lang/mk.js | 2 - .../ckeditor/plugins/liststyle/lang/mn.js | 2 - .../ckeditor/plugins/liststyle/lang/ms.js | 2 - .../ckeditor/plugins/liststyle/lang/nb.js | 2 - .../ckeditor/plugins/liststyle/lang/nl.js | 2 - .../ckeditor/plugins/liststyle/lang/no.js | 2 - .../ckeditor/plugins/liststyle/lang/oc.js | 2 - .../ckeditor/plugins/liststyle/lang/pl.js | 2 - .../ckeditor/plugins/liststyle/lang/pt-br.js | 2 - .../ckeditor/plugins/liststyle/lang/pt.js | 2 - .../ckeditor/plugins/liststyle/lang/ro.js | 2 - .../ckeditor/plugins/liststyle/lang/ru.js | 2 - .../ckeditor/plugins/liststyle/lang/si.js | 2 - .../ckeditor/plugins/liststyle/lang/sk.js | 2 - .../ckeditor/plugins/liststyle/lang/sl.js | 2 - .../ckeditor/plugins/liststyle/lang/sq.js | 2 - .../plugins/liststyle/lang/sr-latn.js | 2 - .../ckeditor/plugins/liststyle/lang/sr.js | 2 - .../ckeditor/plugins/liststyle/lang/sv.js | 2 - .../ckeditor/plugins/liststyle/lang/th.js | 2 - .../ckeditor/plugins/liststyle/lang/tr.js | 2 - .../ckeditor/plugins/liststyle/lang/tt.js | 2 - .../ckeditor/plugins/liststyle/lang/ug.js | 2 - .../ckeditor/plugins/liststyle/lang/uk.js | 2 - .../ckeditor/plugins/liststyle/lang/vi.js | 2 - .../ckeditor/plugins/liststyle/lang/zh-cn.js | 2 - .../ckeditor/plugins/liststyle/lang/zh.js | 2 - .../ckeditor/plugins/liststyle/plugin.js | 7 - .../pagebreak/icons/hidpi/pagebreak-rtl.png | Bin 807 -> 0 bytes .../pagebreak/icons/hidpi/pagebreak.png | Bin 809 -> 0 bytes .../plugins/pagebreak/icons/pagebreak-rtl.png | Bin 468 -> 0 bytes .../plugins/pagebreak/icons/pagebreak.png | Bin 459 -> 0 bytes .../ckeditor/plugins/pagebreak/lang/af.js | 1 - .../ckeditor/plugins/pagebreak/lang/ar.js | 1 - .../ckeditor/plugins/pagebreak/lang/az.js | 1 - .../ckeditor/plugins/pagebreak/lang/bg.js | 1 - .../ckeditor/plugins/pagebreak/lang/bn.js | 1 - .../ckeditor/plugins/pagebreak/lang/bs.js | 1 - .../ckeditor/plugins/pagebreak/lang/ca.js | 1 - .../ckeditor/plugins/pagebreak/lang/cs.js | 1 - .../ckeditor/plugins/pagebreak/lang/cy.js | 1 - .../ckeditor/plugins/pagebreak/lang/da.js | 1 - .../ckeditor/plugins/pagebreak/lang/de-ch.js | 1 - .../ckeditor/plugins/pagebreak/lang/de.js | 1 - .../ckeditor/plugins/pagebreak/lang/el.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-au.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-ca.js | 1 - .../ckeditor/plugins/pagebreak/lang/en-gb.js | 1 - .../ckeditor/plugins/pagebreak/lang/en.js | 1 - .../ckeditor/plugins/pagebreak/lang/eo.js | 1 - .../ckeditor/plugins/pagebreak/lang/es.js | 1 - .../ckeditor/plugins/pagebreak/lang/et.js | 1 - .../ckeditor/plugins/pagebreak/lang/eu.js | 1 - .../ckeditor/plugins/pagebreak/lang/fa.js | 1 - .../ckeditor/plugins/pagebreak/lang/fi.js | 1 - .../ckeditor/plugins/pagebreak/lang/fo.js | 1 - .../ckeditor/plugins/pagebreak/lang/fr-ca.js | 1 - .../ckeditor/plugins/pagebreak/lang/fr.js | 1 - .../ckeditor/plugins/pagebreak/lang/gl.js | 1 - .../ckeditor/plugins/pagebreak/lang/gu.js | 1 - .../ckeditor/plugins/pagebreak/lang/he.js | 1 - .../ckeditor/plugins/pagebreak/lang/hi.js | 1 - .../ckeditor/plugins/pagebreak/lang/hr.js | 1 - .../ckeditor/plugins/pagebreak/lang/hu.js | 1 - .../ckeditor/plugins/pagebreak/lang/id.js | 1 - .../ckeditor/plugins/pagebreak/lang/is.js | 1 - .../ckeditor/plugins/pagebreak/lang/it.js | 1 - .../ckeditor/plugins/pagebreak/lang/ja.js | 1 - .../ckeditor/plugins/pagebreak/lang/ka.js | 1 - .../ckeditor/plugins/pagebreak/lang/km.js | 1 - .../ckeditor/plugins/pagebreak/lang/ko.js | 1 - .../ckeditor/plugins/pagebreak/lang/ku.js | 1 - .../ckeditor/plugins/pagebreak/lang/lt.js | 1 - .../ckeditor/plugins/pagebreak/lang/lv.js | 1 - .../ckeditor/plugins/pagebreak/lang/mk.js | 1 - .../ckeditor/plugins/pagebreak/lang/mn.js | 1 - .../ckeditor/plugins/pagebreak/lang/ms.js | 1 - .../ckeditor/plugins/pagebreak/lang/nb.js | 1 - .../ckeditor/plugins/pagebreak/lang/nl.js | 1 - .../ckeditor/plugins/pagebreak/lang/no.js | 1 - .../ckeditor/plugins/pagebreak/lang/oc.js | 1 - .../ckeditor/plugins/pagebreak/lang/pl.js | 1 - .../ckeditor/plugins/pagebreak/lang/pt-br.js | 1 - .../ckeditor/plugins/pagebreak/lang/pt.js | 1 - .../ckeditor/plugins/pagebreak/lang/ro.js | 1 - .../ckeditor/plugins/pagebreak/lang/ru.js | 1 - .../ckeditor/plugins/pagebreak/lang/si.js | 1 - .../ckeditor/plugins/pagebreak/lang/sk.js | 1 - .../ckeditor/plugins/pagebreak/lang/sl.js | 1 - .../ckeditor/plugins/pagebreak/lang/sq.js | 1 - .../plugins/pagebreak/lang/sr-latn.js | 1 - .../ckeditor/plugins/pagebreak/lang/sr.js | 1 - .../ckeditor/plugins/pagebreak/lang/sv.js | 1 - .../ckeditor/plugins/pagebreak/lang/th.js | 1 - .../ckeditor/plugins/pagebreak/lang/tr.js | 1 - .../ckeditor/plugins/pagebreak/lang/tt.js | 1 - .../ckeditor/plugins/pagebreak/lang/ug.js | 1 - .../ckeditor/plugins/pagebreak/lang/uk.js | 1 - .../ckeditor/plugins/pagebreak/lang/vi.js | 1 - .../ckeditor/plugins/pagebreak/lang/zh-cn.js | 1 - .../ckeditor/plugins/pagebreak/lang/zh.js | 1 - .../ckeditor/plugins/pagebreak/plugin.js | 9 - .../plugins/pastefromword/filter/default.js | 105 +-- .../preview/icons/hidpi/preview-rtl.png | Bin 1241 -> 0 bytes .../plugins/preview/icons/hidpi/preview.png | Bin 1254 -> 0 bytes .../plugins/preview/icons/preview-rtl.png | Bin 625 -> 0 bytes .../plugins/preview/icons/preview.png | Bin 632 -> 0 bytes .../ckeditor/plugins/preview/lang/af.js | 1 - .../ckeditor/plugins/preview/lang/ar.js | 1 - .../ckeditor/plugins/preview/lang/az.js | 1 - .../ckeditor/plugins/preview/lang/bg.js | 1 - .../ckeditor/plugins/preview/lang/bn.js | 1 - .../ckeditor/plugins/preview/lang/bs.js | 1 - .../ckeditor/plugins/preview/lang/ca.js | 1 - .../ckeditor/plugins/preview/lang/cs.js | 1 - .../ckeditor/plugins/preview/lang/cy.js | 1 - .../ckeditor/plugins/preview/lang/da.js | 1 - .../ckeditor/plugins/preview/lang/de-ch.js | 1 - .../ckeditor/plugins/preview/lang/de.js | 1 - .../ckeditor/plugins/preview/lang/el.js | 1 - .../ckeditor/plugins/preview/lang/en-au.js | 1 - .../ckeditor/plugins/preview/lang/en-ca.js | 1 - .../ckeditor/plugins/preview/lang/en-gb.js | 1 - .../ckeditor/plugins/preview/lang/en.js | 1 - .../ckeditor/plugins/preview/lang/eo.js | 1 - .../ckeditor/plugins/preview/lang/es.js | 1 - .../ckeditor/plugins/preview/lang/et.js | 1 - .../ckeditor/plugins/preview/lang/eu.js | 1 - .../ckeditor/plugins/preview/lang/fa.js | 1 - .../ckeditor/plugins/preview/lang/fi.js | 1 - .../ckeditor/plugins/preview/lang/fo.js | 1 - .../ckeditor/plugins/preview/lang/fr-ca.js | 1 - .../ckeditor/plugins/preview/lang/fr.js | 1 - .../ckeditor/plugins/preview/lang/gl.js | 1 - .../ckeditor/plugins/preview/lang/gu.js | 1 - .../ckeditor/plugins/preview/lang/he.js | 1 - .../ckeditor/plugins/preview/lang/hi.js | 1 - .../ckeditor/plugins/preview/lang/hr.js | 1 - .../ckeditor/plugins/preview/lang/hu.js | 1 - .../ckeditor/plugins/preview/lang/id.js | 1 - .../ckeditor/plugins/preview/lang/is.js | 1 - .../ckeditor/plugins/preview/lang/it.js | 1 - .../ckeditor/plugins/preview/lang/ja.js | 1 - .../ckeditor/plugins/preview/lang/ka.js | 1 - .../ckeditor/plugins/preview/lang/km.js | 1 - .../ckeditor/plugins/preview/lang/ko.js | 1 - .../ckeditor/plugins/preview/lang/ku.js | 1 - .../ckeditor/plugins/preview/lang/lt.js | 1 - .../ckeditor/plugins/preview/lang/lv.js | 1 - .../ckeditor/plugins/preview/lang/mk.js | 1 - .../ckeditor/plugins/preview/lang/mn.js | 1 - .../ckeditor/plugins/preview/lang/ms.js | 1 - .../ckeditor/plugins/preview/lang/nb.js | 1 - .../ckeditor/plugins/preview/lang/nl.js | 1 - .../ckeditor/plugins/preview/lang/no.js | 1 - .../ckeditor/plugins/preview/lang/oc.js | 1 - .../ckeditor/plugins/preview/lang/pl.js | 1 - .../ckeditor/plugins/preview/lang/pt-br.js | 1 - .../ckeditor/plugins/preview/lang/pt.js | 1 - .../ckeditor/plugins/preview/lang/ro.js | 1 - .../ckeditor/plugins/preview/lang/ru.js | 1 - .../ckeditor/plugins/preview/lang/si.js | 1 - .../ckeditor/plugins/preview/lang/sk.js | 1 - .../ckeditor/plugins/preview/lang/sl.js | 1 - .../ckeditor/plugins/preview/lang/sq.js | 1 - .../ckeditor/plugins/preview/lang/sr-latn.js | 1 - .../ckeditor/plugins/preview/lang/sr.js | 1 - .../ckeditor/plugins/preview/lang/sv.js | 1 - .../ckeditor/plugins/preview/lang/th.js | 1 - .../ckeditor/plugins/preview/lang/tr.js | 1 - .../ckeditor/plugins/preview/lang/tt.js | 1 - .../ckeditor/plugins/preview/lang/ug.js | 1 - .../ckeditor/plugins/preview/lang/uk.js | 1 - .../ckeditor/plugins/preview/lang/vi.js | 1 - .../ckeditor/plugins/preview/lang/zh-cn.js | 1 - .../ckeditor/plugins/preview/lang/zh.js | 1 - .../ckeditor/plugins/preview/plugin.js | 9 - .../showblocks/icons/hidpi/showblocks-rtl.png | Bin 910 -> 0 bytes .../showblocks/icons/hidpi/showblocks.png | Bin 918 -> 0 bytes .../showblocks/icons/showblocks-rtl.png | Bin 490 -> 0 bytes .../plugins/showblocks/icons/showblocks.png | Bin 483 -> 0 bytes .../ckeditor/plugins/showblocks/lang/af.js | 1 - .../ckeditor/plugins/showblocks/lang/ar.js | 1 - .../ckeditor/plugins/showblocks/lang/az.js | 1 - .../ckeditor/plugins/showblocks/lang/bg.js | 1 - .../ckeditor/plugins/showblocks/lang/bn.js | 1 - .../ckeditor/plugins/showblocks/lang/bs.js | 1 - .../ckeditor/plugins/showblocks/lang/ca.js | 1 - .../ckeditor/plugins/showblocks/lang/cs.js | 1 - .../ckeditor/plugins/showblocks/lang/cy.js | 1 - .../ckeditor/plugins/showblocks/lang/da.js | 1 - .../ckeditor/plugins/showblocks/lang/de-ch.js | 1 - .../ckeditor/plugins/showblocks/lang/de.js | 1 - .../ckeditor/plugins/showblocks/lang/el.js | 1 - .../ckeditor/plugins/showblocks/lang/en-au.js | 1 - .../ckeditor/plugins/showblocks/lang/en-ca.js | 1 - .../ckeditor/plugins/showblocks/lang/en-gb.js | 1 - .../ckeditor/plugins/showblocks/lang/en.js | 1 - .../ckeditor/plugins/showblocks/lang/eo.js | 1 - .../ckeditor/plugins/showblocks/lang/es.js | 1 - .../ckeditor/plugins/showblocks/lang/et.js | 1 - .../ckeditor/plugins/showblocks/lang/eu.js | 1 - .../ckeditor/plugins/showblocks/lang/fa.js | 1 - .../ckeditor/plugins/showblocks/lang/fi.js | 1 - .../ckeditor/plugins/showblocks/lang/fo.js | 1 - .../ckeditor/plugins/showblocks/lang/fr-ca.js | 1 - .../ckeditor/plugins/showblocks/lang/fr.js | 1 - .../ckeditor/plugins/showblocks/lang/gl.js | 1 - .../ckeditor/plugins/showblocks/lang/gu.js | 1 - .../ckeditor/plugins/showblocks/lang/he.js | 1 - .../ckeditor/plugins/showblocks/lang/hi.js | 1 - .../ckeditor/plugins/showblocks/lang/hr.js | 1 - .../ckeditor/plugins/showblocks/lang/hu.js | 1 - .../ckeditor/plugins/showblocks/lang/id.js | 1 - .../ckeditor/plugins/showblocks/lang/is.js | 1 - .../ckeditor/plugins/showblocks/lang/it.js | 1 - .../ckeditor/plugins/showblocks/lang/ja.js | 1 - .../ckeditor/plugins/showblocks/lang/ka.js | 1 - .../ckeditor/plugins/showblocks/lang/km.js | 1 - .../ckeditor/plugins/showblocks/lang/ko.js | 1 - .../ckeditor/plugins/showblocks/lang/ku.js | 1 - .../ckeditor/plugins/showblocks/lang/lt.js | 1 - .../ckeditor/plugins/showblocks/lang/lv.js | 1 - .../ckeditor/plugins/showblocks/lang/mk.js | 1 - .../ckeditor/plugins/showblocks/lang/mn.js | 1 - .../ckeditor/plugins/showblocks/lang/ms.js | 1 - .../ckeditor/plugins/showblocks/lang/nb.js | 1 - .../ckeditor/plugins/showblocks/lang/nl.js | 1 - .../ckeditor/plugins/showblocks/lang/no.js | 1 - .../ckeditor/plugins/showblocks/lang/oc.js | 1 - .../ckeditor/plugins/showblocks/lang/pl.js | 1 - .../ckeditor/plugins/showblocks/lang/pt-br.js | 1 - .../ckeditor/plugins/showblocks/lang/pt.js | 1 - .../ckeditor/plugins/showblocks/lang/ro.js | 1 - .../ckeditor/plugins/showblocks/lang/ru.js | 1 - .../ckeditor/plugins/showblocks/lang/si.js | 1 - .../ckeditor/plugins/showblocks/lang/sk.js | 1 - .../ckeditor/plugins/showblocks/lang/sl.js | 1 - .../ckeditor/plugins/showblocks/lang/sq.js | 1 - .../plugins/showblocks/lang/sr-latn.js | 1 - .../ckeditor/plugins/showblocks/lang/sr.js | 1 - .../ckeditor/plugins/showblocks/lang/sv.js | 1 - .../ckeditor/plugins/showblocks/lang/th.js | 1 - .../ckeditor/plugins/showblocks/lang/tr.js | 1 - .../ckeditor/plugins/showblocks/lang/tt.js | 1 - .../ckeditor/plugins/showblocks/lang/ug.js | 1 - .../ckeditor/plugins/showblocks/lang/uk.js | 1 - .../ckeditor/plugins/showblocks/lang/vi.js | 1 - .../ckeditor/plugins/showblocks/lang/zh-cn.js | 1 - .../ckeditor/plugins/showblocks/lang/zh.js | 1 - .../ckeditor/plugins/showblocks/plugin.js | 9 - .../plugins/smiley/icons/hidpi/smiley.png | Bin 1708 -> 0 bytes .../ckeditor/plugins/smiley/icons/smiley.png | Bin 783 -> 0 bytes .../ckeditor/plugins/smiley/lang/af.js | 1 - .../ckeditor/plugins/smiley/lang/ar.js | 1 - .../ckeditor/plugins/smiley/lang/az.js | 1 - .../ckeditor/plugins/smiley/lang/bg.js | 1 - .../ckeditor/plugins/smiley/lang/bn.js | 1 - .../ckeditor/plugins/smiley/lang/bs.js | 1 - .../ckeditor/plugins/smiley/lang/ca.js | 1 - .../ckeditor/plugins/smiley/lang/cs.js | 1 - .../ckeditor/plugins/smiley/lang/cy.js | 1 - .../ckeditor/plugins/smiley/lang/da.js | 1 - .../ckeditor/plugins/smiley/lang/de-ch.js | 1 - .../ckeditor/plugins/smiley/lang/de.js | 1 - .../ckeditor/plugins/smiley/lang/el.js | 1 - .../ckeditor/plugins/smiley/lang/en-au.js | 1 - .../ckeditor/plugins/smiley/lang/en-ca.js | 1 - .../ckeditor/plugins/smiley/lang/en-gb.js | 1 - .../ckeditor/plugins/smiley/lang/en.js | 1 - .../ckeditor/plugins/smiley/lang/eo.js | 1 - .../ckeditor/plugins/smiley/lang/es.js | 1 - .../ckeditor/plugins/smiley/lang/et.js | 1 - .../ckeditor/plugins/smiley/lang/eu.js | 1 - .../ckeditor/plugins/smiley/lang/fa.js | 1 - .../ckeditor/plugins/smiley/lang/fi.js | 1 - .../ckeditor/plugins/smiley/lang/fo.js | 1 - .../ckeditor/plugins/smiley/lang/fr-ca.js | 1 - .../ckeditor/plugins/smiley/lang/fr.js | 1 - .../ckeditor/plugins/smiley/lang/gl.js | 1 - .../ckeditor/plugins/smiley/lang/gu.js | 1 - .../ckeditor/plugins/smiley/lang/he.js | 1 - .../ckeditor/plugins/smiley/lang/hi.js | 1 - .../ckeditor/plugins/smiley/lang/hr.js | 1 - .../ckeditor/plugins/smiley/lang/hu.js | 1 - .../ckeditor/plugins/smiley/lang/id.js | 1 - .../ckeditor/plugins/smiley/lang/is.js | 1 - .../ckeditor/plugins/smiley/lang/it.js | 1 - .../ckeditor/plugins/smiley/lang/ja.js | 1 - .../ckeditor/plugins/smiley/lang/ka.js | 1 - .../ckeditor/plugins/smiley/lang/km.js | 1 - .../ckeditor/plugins/smiley/lang/ko.js | 1 - .../ckeditor/plugins/smiley/lang/ku.js | 1 - .../ckeditor/plugins/smiley/lang/lt.js | 1 - .../ckeditor/plugins/smiley/lang/lv.js | 1 - .../ckeditor/plugins/smiley/lang/mk.js | 1 - .../ckeditor/plugins/smiley/lang/mn.js | 1 - .../ckeditor/plugins/smiley/lang/ms.js | 1 - .../ckeditor/plugins/smiley/lang/nb.js | 1 - .../ckeditor/plugins/smiley/lang/nl.js | 1 - .../ckeditor/plugins/smiley/lang/no.js | 1 - .../ckeditor/plugins/smiley/lang/oc.js | 1 - .../ckeditor/plugins/smiley/lang/pl.js | 1 - .../ckeditor/plugins/smiley/lang/pt-br.js | 1 - .../ckeditor/plugins/smiley/lang/pt.js | 1 - .../ckeditor/plugins/smiley/lang/ro.js | 1 - .../ckeditor/plugins/smiley/lang/ru.js | 1 - .../ckeditor/plugins/smiley/lang/si.js | 1 - .../ckeditor/plugins/smiley/lang/sk.js | 1 - .../ckeditor/plugins/smiley/lang/sl.js | 1 - .../ckeditor/plugins/smiley/lang/sq.js | 1 - .../ckeditor/plugins/smiley/lang/sr-latn.js | 1 - .../ckeditor/plugins/smiley/lang/sr.js | 1 - .../ckeditor/plugins/smiley/lang/sv.js | 1 - .../ckeditor/plugins/smiley/lang/th.js | 1 - .../ckeditor/plugins/smiley/lang/tr.js | 1 - .../ckeditor/plugins/smiley/lang/tt.js | 1 - .../ckeditor/plugins/smiley/lang/ug.js | 1 - .../ckeditor/plugins/smiley/lang/uk.js | 1 - .../ckeditor/plugins/smiley/lang/vi.js | 1 - .../ckeditor/plugins/smiley/lang/zh-cn.js | 1 - .../ckeditor/plugins/smiley/lang/zh.js | 1 - .../ckeditor/plugins/smiley/plugin.js | 7 - .../sourcedialog/dialogs/sourcedialog.js | 6 + .../plugins/specialchar/dialogs/lang/et.js | 16 +- .../plugins/tabletools/dialogs/tableCell.js | 29 +- .../templates/icons/hidpi/templates-rtl.png | Bin 796 -> 0 bytes .../templates/icons/hidpi/templates.png | Bin 796 -> 0 bytes .../plugins/templates/icons/templates-rtl.png | Bin 442 -> 0 bytes .../plugins/templates/icons/templates.png | Bin 442 -> 0 bytes .../ckeditor/plugins/templates/lang/af.js | 1 - .../ckeditor/plugins/templates/lang/ar.js | 1 - .../ckeditor/plugins/templates/lang/az.js | 1 - .../ckeditor/plugins/templates/lang/bg.js | 1 - .../ckeditor/plugins/templates/lang/bn.js | 1 - .../ckeditor/plugins/templates/lang/bs.js | 1 - .../ckeditor/plugins/templates/lang/ca.js | 1 - .../ckeditor/plugins/templates/lang/cs.js | 1 - .../ckeditor/plugins/templates/lang/cy.js | 1 - .../ckeditor/plugins/templates/lang/da.js | 1 - .../ckeditor/plugins/templates/lang/de-ch.js | 1 - .../ckeditor/plugins/templates/lang/de.js | 1 - .../ckeditor/plugins/templates/lang/el.js | 1 - .../ckeditor/plugins/templates/lang/en-au.js | 1 - .../ckeditor/plugins/templates/lang/en-ca.js | 1 - .../ckeditor/plugins/templates/lang/en-gb.js | 1 - .../ckeditor/plugins/templates/lang/en.js | 1 - .../ckeditor/plugins/templates/lang/eo.js | 1 - .../ckeditor/plugins/templates/lang/es.js | 1 - .../ckeditor/plugins/templates/lang/et.js | 1 - .../ckeditor/plugins/templates/lang/eu.js | 1 - .../ckeditor/plugins/templates/lang/fa.js | 1 - .../ckeditor/plugins/templates/lang/fi.js | 1 - .../ckeditor/plugins/templates/lang/fo.js | 1 - .../ckeditor/plugins/templates/lang/fr-ca.js | 1 - .../ckeditor/plugins/templates/lang/fr.js | 1 - .../ckeditor/plugins/templates/lang/gl.js | 1 - .../ckeditor/plugins/templates/lang/gu.js | 1 - .../ckeditor/plugins/templates/lang/he.js | 1 - .../ckeditor/plugins/templates/lang/hi.js | 1 - .../ckeditor/plugins/templates/lang/hr.js | 1 - .../ckeditor/plugins/templates/lang/hu.js | 1 - .../ckeditor/plugins/templates/lang/id.js | 1 - .../ckeditor/plugins/templates/lang/is.js | 1 - .../ckeditor/plugins/templates/lang/it.js | 1 - .../ckeditor/plugins/templates/lang/ja.js | 1 - .../ckeditor/plugins/templates/lang/ka.js | 1 - .../ckeditor/plugins/templates/lang/km.js | 1 - .../ckeditor/plugins/templates/lang/ko.js | 1 - .../ckeditor/plugins/templates/lang/ku.js | 1 - .../ckeditor/plugins/templates/lang/lt.js | 1 - .../ckeditor/plugins/templates/lang/lv.js | 1 - .../ckeditor/plugins/templates/lang/mk.js | 1 - .../ckeditor/plugins/templates/lang/mn.js | 1 - .../ckeditor/plugins/templates/lang/ms.js | 1 - .../ckeditor/plugins/templates/lang/nb.js | 1 - .../ckeditor/plugins/templates/lang/nl.js | 1 - .../ckeditor/plugins/templates/lang/no.js | 1 - .../ckeditor/plugins/templates/lang/oc.js | 1 - .../ckeditor/plugins/templates/lang/pl.js | 1 - .../ckeditor/plugins/templates/lang/pt-br.js | 1 - .../ckeditor/plugins/templates/lang/pt.js | 1 - .../ckeditor/plugins/templates/lang/ro.js | 1 - .../ckeditor/plugins/templates/lang/ru.js | 1 - .../ckeditor/plugins/templates/lang/si.js | 1 - .../ckeditor/plugins/templates/lang/sk.js | 1 - .../ckeditor/plugins/templates/lang/sl.js | 1 - .../ckeditor/plugins/templates/lang/sq.js | 1 - .../plugins/templates/lang/sr-latn.js | 1 - .../ckeditor/plugins/templates/lang/sr.js | 1 - .../ckeditor/plugins/templates/lang/sv.js | 1 - .../ckeditor/plugins/templates/lang/th.js | 1 - .../ckeditor/plugins/templates/lang/tr.js | 1 - .../ckeditor/plugins/templates/lang/tt.js | 1 - .../ckeditor/plugins/templates/lang/ug.js | 1 - .../ckeditor/plugins/templates/lang/uk.js | 1 - .../ckeditor/plugins/templates/lang/vi.js | 1 - .../ckeditor/plugins/templates/lang/zh-cn.js | 1 - .../ckeditor/plugins/templates/lang/zh.js | 1 - .../ckeditor/plugins/templates/plugin.js | 7 - .../ckeditor/skins/moono-lisa/editor.css | 2 +- .../skins/moono-lisa/editor_gecko.css | 2 +- .../ckeditor/skins/moono-lisa/editor_ie.css | 2 +- .../ckeditor/skins/moono-lisa/editor_ie8.css | 2 +- .../skins/moono-lisa/editor_iequirks.css | 2 +- .../ckeditor/skins/moono-lisa/icons.png | Bin 12421 -> 12453 bytes .../ckeditor/skins/moono-lisa/icons_hidpi.png | Bin 40265 -> 41377 bytes .../ckeditor/ckeditor/vendor/promise.js | 13 + htdocs/main.inc.php | 15 +- htdocs/website/index.php | 6 +- 1004 files changed, 655 insertions(+), 2344 deletions(-) create mode 100644 htdocs/includes/ckeditor/UPGRADE.md delete mode 100644 htdocs/includes/ckeditor/ckeditor/bower.json delete mode 100644 htdocs/includes/ckeditor/ckeditor/composer.json delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/_translationstatus.txt delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/es-mx.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/package.json delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/colordialog/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/copyformatting/icons/copyformatting.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/copyformatting/icons/hidpi/copyformatting.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/copyformatting/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/copyformatting/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/icons/creatediv.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/icons/hidpi/creatediv.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/div/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/icons/find-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/icons/find.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/icons/hidpi/find-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/icons/hidpi/find.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/icons/hidpi/replace.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/icons/replace.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/find/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/icons/flash.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/icons/hidpi/flash.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/flash/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/button.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/checkbox.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/form.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hiddenfield.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/button.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/checkbox.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/form.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/hiddenfield.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/imagebutton.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/radio.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/select-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/select.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/textarea-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/textarea.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/textfield-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/hidpi/textfield.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/imagebutton.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/radio.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/select-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/select.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/textarea-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/textarea.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/textfield-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/icons/textfield.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/forms/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/icons/hidpi/iframe.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/icons/iframe.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/iframe/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/liststyle/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/icons/hidpi/pagebreak.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/icons/pagebreak-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/icons/pagebreak.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/pagebreak/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/icons/hidpi/preview-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/icons/hidpi/preview.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/icons/preview-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/icons/preview.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/preview/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/icons/hidpi/showblocks-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/icons/hidpi/showblocks.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/icons/showblocks-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/icons/showblocks.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/showblocks/plugin.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/icons/hidpi/smiley.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/icons/smiley.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/smiley/plugin.js create mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/sourcedialog/dialogs/sourcedialog.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/icons/hidpi/templates-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/icons/hidpi/templates.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/icons/templates-rtl.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/icons/templates.png delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/af.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ar.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/az.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/bg.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/bn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/bs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/cs.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/cy.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/da.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/de-ch.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/de.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/el.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/en-au.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/en-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/en-gb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/en.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/eo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/es.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/et.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/eu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/fa.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/fi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/fo.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/fr-ca.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/fr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/gl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/gu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/he.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/hi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/hr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/hu.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/id.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/is.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/it.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ja.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ka.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/km.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ko.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ku.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/lt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/lv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/mk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/mn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ms.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/nb.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/nl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/no.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/oc.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/pl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/pt-br.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/pt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ro.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ru.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/si.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/sk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/sl.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/sq.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/sr-latn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/sr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/sv.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/th.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/tr.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/tt.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/ug.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/uk.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/vi.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/zh-cn.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/lang/zh.js delete mode 100644 htdocs/includes/ckeditor/ckeditor/plugins/templates/plugin.js create mode 100644 htdocs/includes/ckeditor/ckeditor/vendor/promise.js diff --git a/COPYRIGHT b/COPYRIGHT index 65ca76117cd..b9560cdaa45 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -13,7 +13,7 @@ Component Version License GPL Compatible ------------------------------------------------------------------------------------- PHP libraries: AdoDb-Date 0.36 Modified BSD License Yes Date convertion (not into rpm package) -CKEditor 4.11.4 LGPL-2.1+ Yes Editor WYSIWYG +CKEditor 4.12.1 LGPL-2.1+ Yes Editor WYSIWYG EvalMath 1.0 BSD Yes Safe math expressions evaluation Escpos-php ? MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers GeoIP 1.4 LGPL-2.1+ Yes Sample code to make geoip convert (not into deb package) diff --git a/htdocs/includes/ckeditor/UPGRADE.md b/htdocs/includes/ckeditor/UPGRADE.md new file mode 100644 index 00000000000..633f783fa79 --- /dev/null +++ b/htdocs/includes/ckeditor/UPGRADE.md @@ -0,0 +1,8 @@ +To upgrade ckeditor: +- Go on web site. +- Choose profile "Online builder" +- Choose Full package +- Add plugin SourceDialog (for "source" button on edit inline) +- Choose skin mona-lisa +- Choose all languages +- Download \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/CHANGES.md b/htdocs/includes/ckeditor/ckeditor/CHANGES.md index acb979c1d2b..225251b7913 100644 --- a/htdocs/includes/ckeditor/ckeditor/CHANGES.md +++ b/htdocs/includes/ckeditor/ckeditor/CHANGES.md @@ -1,6 +1,60 @@ CKEditor 4 Changelog ==================== +## CKEditor 4.12.1 + +Fixed Issues: + +* [#3220](https://github.com/ckeditor/ckeditor-dev/issues/3220): Fixed: Prevent [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) filter from deleting [Page Break](https://ckeditor.com/cke4/addon/pagebreak) elements on paste. + +## CKEditor 4.12 + +New Features: + +* [#2598](https://github.com/ckeditor/ckeditor-dev/issues/2598): Added the [Page Break](https://ckeditor.com/cke4/addon/pagebreak) feature support for the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#1490](https://github.com/ckeditor/ckeditor-dev/issues/1490): Improved the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin to retain table cell borders. +* [#2870](https://github.com/ckeditor/ckeditor-dev/issues/2870): Improved support for preserving the indentation of list items for nested lists pasted with the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#2048](https://github.com/ckeditor/ckeditor-dev/issues/2048): New [`CKEDITOR.config.image2_maxSize`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-image2_maxSize) configuration option for the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) plugin that allows setting a maximum size that an image can be resized to with the resizer. +* [#2639](https://github.com/ckeditor/ckeditor-dev/issues/2639): The [Color Dialog](https://ckeditor.com/cke4/addon/colordialog) plugin now shows the current selection's color when opened. +* [#2084](https://github.com/ckeditor/ckeditor-dev/issues/2084): The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin now allows to change the cell height unit type to either pixels or percent. +* [#3164](https://github.com/ckeditor/ckeditor-dev/issues/3164): The [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin now accepts floating point values as the table cell width and height. + +Fixed Issues: + +* [#2672](https://github.com/ckeditor/ckeditor-dev/issues/2672): Fixed: When resizing an [Enhanced Image](https://ckeditor.com/cke4/addon/image2) to a minimum size with the resizer, the image dialog does not show actual values. +* [#1478](https://github.com/ckeditor/ckeditor-dev/issues/1478): Fixed: Custom colors added to [Color Button](https://ckeditor.com/cke4/addon/colorbutton) with the [`config.colorButton_colors`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-colorButton_colors) configuration option in the form of a label or code do not work correctly. +* [#1469](https://github.com/ckeditor/ckeditor-dev/issues/1469): Fixed: Trying to get data from a nested editable inside a freshly pasted widget throws an error. +* [#2235](https://github.com/ckeditor/ckeditor-dev/issues/2235): Fixed: An [Image](https://ckeditor.com/cke4/addon/image) in a table cell has an empty URL field when edited from the context menu opened by right-click when the [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin is in use. +* [#3098](https://github.com/ckeditor/ckeditor-dev/issues/3098): Fixed: Unit pickers for table cell width and height in the [Table Tools](https://ckeditor.com/cke4/addon/tabletools) plugin have a different width. +* [#2923](https://github.com/ckeditor/ckeditor-dev/issues/2923): Fixed: The CSS `windowtext` color is not correctly recognized by the [`CKEDITOR.tools.style.parse`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html) methods. +* [#3120](https://github.com/ckeditor/ckeditor-dev/issues/3120): [IE8] Fixed: The [`CKEDITOR.tools.extend()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tool.html#method-extend) method does not work with the [`DontEnum`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Properties) object property attribute. +* [#2813](https://github.com/ckeditor/ckeditor-dev/issues/2813): Fixed: Editor HTML insertion methods ([`editor.insertHtml()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertHtml), [`editor.insertHtmlIntoRange()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertHtmlIntoRange), [`editor.insertElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertElement) and [`editor.insertElementIntoRange()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#method-insertElementIntoRange)) pollute the editable with empty `` elements. +* [#2751](https://github.com/ckeditor/ckeditor-dev/issues/2751): Fixed: An editor with [`config.enterMode`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-enterMode) set to [`ENTER_DIV`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#property-ENTER_DIV) alters pasted content. + +API Changes: + +* [#1496](https://github.com/ckeditor/ckeditor-dev/issues/1496): The [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) plugin exposes the [`CKEDITOR.ui.balloonToolbar.reposition()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonToolbar.html#reposition) and [`CKEDITOR.ui.balloonToolbarView.reposition()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_balloonToolbarView.html#reposition) methods. +* [#2021](https://github.com/ckeditor/ckeditor-dev/issues/2021): Added new [`CKEDITOR.dom.documentFragment.find()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_documentFragment.html#method-find) and [`CKEDITOR.dom.documentFragment.findOne()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_documentFragment.html#method-findOne) methods. +* [#2700](https://github.com/ckeditor/ckeditor-dev/issues/2700): Added the [`CKEDITOR.tools.array.find()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_array.html#method-find) method. +* [#3123](https://github.com/ckeditor/ckeditor-dev/issues/3123): Added the [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method. +* [#3123](https://github.com/ckeditor/ckeditor-dev/issues/3123): Added the [`CKEDITOR.tools.object.entries()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-entries) method. +* [#3123](https://github.com/ckeditor/ckeditor-dev/issues/3123): Added the [`CKEDITOR.tools.object.values()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-values) method. +* [#2821](https://github.com/ckeditor/ckeditor-dev/issues/2821): The [`CKEDITOR.template#source`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_template.html#property-source) property can now be a function, so it can return the changed template values during the runtime. Thanks to [Jacek Pulit](https://github.com/jacek-pulit)! +* [#2598](https://github.com/ckeditor/ckeditor-dev/issues/2598): Added the [`CKEDITOR.plugins.pagebreak.createElement()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_pagebreak.html#method-createElement) method allowing to create a [Page Break](https://ckeditor.com/cke4/addon/pagebreak) plugin [`CKEDITOR.dom.element`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dom_element.html) instance. +* [#2748](https://github.com/ckeditor/ckeditor-dev/issues/2748): Enhanced error messages thrown when creating an editor on a non-existent element or when trying to instantiate the second editor on the same element. Thanks to [Byran Zaugg](https://github.com/blzaugg)! +* [#2698](https://github.com/ckeditor/ckeditor-dev/issues/2698): Added the [`CKEDITOR.htmlParser.element.findOne()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_htmlParser_element.html#method-findOne) method. +* [#2935](https://github.com/ckeditor/ckeditor-dev/issues/2935): Introduced the [`CKEDITOR.config.pasteFromWord_keepZeroMargins`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-pasteFromWord_keepZeroMargins) configuration option that allows for keeping any `margin-*: 0` style that would be otherwise removed when pasting content with the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin. +* [#2962](https://github.com/ckeditor/ckeditor-dev/issues/2962): Added the [`CKEDITOR.tools.promise`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_promise.html) class. +* [#2924](https://github.com/ckeditor/ckeditor-dev/issues/2924): Added the [`CKEDITOR.tools.style.border`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_border.html) object wrapping CSS border style helpers under a single type. +* [#2495](https://github.com/ckeditor/ckeditor-dev/issues/2495): The [Table Selection](https://ckeditor.com/cke4/addon/tableselection) plugin can now be disabled for the given table with the `data-cke-tableselection-ignored` attribute. +* [#2692](https://github.com/ckeditor/ckeditor-dev/issues/2692): Plugins can now expose information about the supported environment by implementing the [`pluginDefinition.isSupportedEnvironment()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#method-isSupportedEnvironment) method. + +Other Changes: + +* [#2741](https://github.com/ckeditor/ckeditor-dev/issues/2741): Replaced deprecated `arguments.callee` calls with named function expressions to allow the editor to work in strict mode. +* [#2924](https://github.com/ckeditor/ckeditor-dev/issues/2924): Marked [`CKEDITOR.tools.style.parse.border()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_parse.html#method-border) as deprecated in favor of the [`CKEDITOR.tools.style.border.fromCssRule()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_style_border.html#static-method-fromCssRule) method. +* [#3132](https://github.com/ckeditor/ckeditor-dev/issues/2924): Marked [`CKEDITOR.tools.objectKeys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-objectKeys) as deprecated in favor of the [`CKEDITOR.tools.object.keys()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools_object.html#method-keys) method. + ## CKEditor 4.11.4 Fixed Issues: @@ -270,6 +324,7 @@ Fixed Issues: * [#1570](https://github.com/ckeditor/ckeditor-dev/issues/1570): Fixed: Fake selection allows cutting content in read-only mode using the Ctrl/Cmd + X keys. * [#1363](https://github.com/ckeditor/ckeditor-dev/issues/1363): Fixed: Paste notification is unclear and it might confuse users. + API Changes: * [#1346](https://github.com/ckeditor/ckeditor-dev/issues/1346): [Balloon Toolbar](https://ckeditor.com/cke4/addon/balloontoolbar) [context manager API](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.plugins.balloontoolbar.contextManager.html) is now available in the [`pluginDefinition.init()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#method-init) method of the [requiring](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_pluginDefinition.html#property-requires) plugin. @@ -899,7 +954,7 @@ New Features: * Direct access to clipboard could only be implemented in Chrome, Safari on Mac OS, Opera and Firefox. In other browsers the pastebin must still be used. * [#12875](https://dev.ckeditor.com/ticket/12875): Samples and toolbar configuration tools. - * The old set of samples shipped with every CKEditor package was replaced with a shiny new single-page sample. This change concluded a long term plan which started from introducing the [CKEditor SDK](https://ckeditor.com/docs/ckeditor4/latest/examples/index.html) and [CKEditor Functionality Overview](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_features.html) section in the documentation which essentially redefined the old samples. + * The old set of samples shipped with every CKEditor package was replaced with a shiny new single-page sample. This change concluded a long term plan which started from introducing the [CKEditor SDK](https://ckeditor.com/docs/ckeditor4/latest/examples/index.html) and [CKEditor Features Overview](https://ckeditor.com/docs/ckeditor4/latest/features.html) section in the documentation which essentially redefined the old samples. * Toolbar configurators with live previews were introduced. They will be shipped with every CKEditor package and are meant to help in configuring toolbar layouts. * [#10925](https://dev.ckeditor.com/ticket/10925): The [Media Embed](https://ckeditor.com/cke4/addon/embed) and [Semantic Media Embed](https://ckeditor.com/cke4/addon/embedsemantic) plugins were introduced. Read more about the new features in the [Embedding Content](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_media_embed.html) article. diff --git a/htdocs/includes/ckeditor/ckeditor/LICENSE.md b/htdocs/includes/ckeditor/ckeditor/LICENSE.md index e83d3cb655e..9ab2d17459a 100644 --- a/htdocs/includes/ckeditor/ckeditor/LICENSE.md +++ b/htdocs/includes/ckeditor/ckeditor/LICENSE.md @@ -40,6 +40,7 @@ The following libraries are included in CKEditor under the MIT license (see Appe * CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2019, CKSource - Frederico Knabben. * PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca. * CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke and others. +* ES6Promise - Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors. Parts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D): diff --git a/htdocs/includes/ckeditor/ckeditor/adapters/jquery.js b/htdocs/includes/ckeditor/ckeditor/adapters/jquery.js index 369bfe67a1b..ba745105ecf 100644 --- a/htdocs/includes/ckeditor/ckeditor/adapters/jquery.js +++ b/htdocs/includes/ckeditor/ckeditor/adapters/jquery.js @@ -3,8 +3,8 @@ For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ (function(a){if("undefined"==typeof a)throw Error("jQuery should be loaded before CKEditor jQuery adapter.");if("undefined"==typeof CKEDITOR)throw Error("CKEditor should be loaded before CKEditor jQuery adapter.");CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a}, -ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g)){var m=d;d=g;g=m}var k=[];d=d||{};this.each(function(){var b=a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,l=new a.Deferred;k.push(l.promise());if(c&&!f)g&&g.apply(c,[this]),l.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),l.resolve()):setTimeout(arguments.callee,100)},0)}, -null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock",!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor", -[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit();return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize", -c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);l.resolve()}else setTimeout(arguments.callee,100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,k).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}});CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var m= -this,k=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});k.push(f.promise());return!0}return g.call(b,d)});if(k.length){var b=new a.Deferred;a.when.apply(this,k).done(function(){b.resolveWith(m)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}}))})(window.jQuery); \ No newline at end of file +ckeditor:function(g,e){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g)){var m=e;e=g;g=m}var k=[];e=e||{};this.each(function(){var b=a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,l=new a.Deferred;k.push(l.promise());if(c&&!f)g&&g.apply(c,[this]),l.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function d(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),l.resolve()):setTimeout(d,100)},0)},null,null,9999); +else{if(e.autoUpdateElement||"undefined"==typeof e.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)e.autoUpdateElementJquery=!0;e.autoUpdateElement=!1;b.data("_ckeditorInstanceLock",!0);c=a(this).is("textarea")?CKEDITOR.replace(h,e):CKEDITOR.inline(h,e);b.data("ckeditorInstance",c);c.on("instanceReady",function(e){var d=e.editor;setTimeout(function n(){if(d.element){e.removeListener();d.on("dataReady",function(){b.trigger("dataReady.ckeditor",[d])});d.on("setData",function(a){b.trigger("setData.ckeditor", +[d,a.data])});d.on("getData",function(a){b.trigger("getData.ckeditor",[d,a.data])},999);d.on("destroy",function(){b.trigger("destroy.ckeditor",[d])});d.on("save",function(){a(h.form).submit();return!1},null,null,20);if(d.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){d.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize", +c)})}d.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[d]);g&&g.apply(d,[h]);l.resolve()}else setTimeout(n,100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,k).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}});CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(e){if(arguments.length){var m= +this,k=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(e,function(){f.resolve()});k.push(f.promise());return!0}return g.call(b,e)});if(k.length){var b=new a.Deferred;a.when.apply(this,k).done(function(){b.resolveWith(m)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}}))})(window.jQuery); \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/bower.json b/htdocs/includes/ckeditor/ckeditor/bower.json deleted file mode 100644 index 1adf76eff5f..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/bower.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "keywords": [ "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ], - "authors": "CKSource (http://cksource.com/)", - "license": "For licensing, see LICENSE.md or http://ckeditor.com/license.", - "homepage": "http://ckeditor.com", - "main": "./ckeditor.js", - "moduleType": "globals" -} diff --git a/htdocs/includes/ckeditor/ckeditor/build-config.js b/htdocs/includes/ckeditor/ckeditor/build-config.js index 1eaa2f2c38f..675ae52f46c 100644 --- a/htdocs/includes/ckeditor/ckeditor/build-config.js +++ b/htdocs/includes/ckeditor/ckeditor/build-config.js @@ -13,10 +13,10 @@ * (1) https://ckeditor.com/cke4/builder * Visit online builder to build CKEditor from scratch. * - * (2) https://ckeditor.com/cke4/builder/c3fc0dcaa9c80d707aab3e60fdcddbfb + * (2) https://ckeditor.com/cke4/builder/c0b7b44e9f5c0f0cac8bacb78b968de8 * Visit online builder to build CKEditor, starting with the same setup as before. * - * (3) https://ckeditor.com/cke4/builder/download/c3fc0dcaa9c80d707aab3e60fdcddbfb + * (3) https://ckeditor.com/cke4/builder/download/c0b7b44e9f5c0f0cac8bacb78b968de8 * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before. * * NOTE: @@ -102,6 +102,7 @@ var CKBUILDER_CONFIG = { 'showborders' : 1, 'smiley' : 1, 'sourcearea' : 1, + 'sourcedialog' : 1, 'specialchar' : 1, 'stylescombo' : 1, 'tab' : 1, @@ -116,75 +117,8 @@ var CKBUILDER_CONFIG = { 'wysiwygarea' : 1 }, languages : { - 'af' : 1, - 'ar' : 1, - 'az' : 1, - 'bg' : 1, - 'bn' : 1, - 'bs' : 1, - 'ca' : 1, - 'cs' : 1, - 'cy' : 1, - 'da' : 1, - 'de' : 1, - 'de-ch' : 1, - 'el' : 1, 'en' : 1, - 'en-au' : 1, - 'en-ca' : 1, - 'en-gb' : 1, - 'eo' : 1, 'es' : 1, - 'es-mx' : 1, - 'et' : 1, - 'eu' : 1, - 'fa' : 1, - 'fi' : 1, - 'fo' : 1, - 'fr' : 1, - 'fr-ca' : 1, - 'gl' : 1, - 'gu' : 1, - 'he' : 1, - 'hi' : 1, - 'hr' : 1, - 'hu' : 1, - 'id' : 1, - 'is' : 1, - 'it' : 1, - 'ja' : 1, - 'ka' : 1, - 'km' : 1, - 'ko' : 1, - 'ku' : 1, - 'lt' : 1, - 'lv' : 1, - 'mk' : 1, - 'mn' : 1, - 'ms' : 1, - 'nb' : 1, - 'nl' : 1, - 'no' : 1, - 'oc' : 1, - 'pl' : 1, - 'pt' : 1, - 'pt-br' : 1, - 'ro' : 1, - 'ru' : 1, - 'si' : 1, - 'sk' : 1, - 'sl' : 1, - 'sq' : 1, - 'sr' : 1, - 'sr-latn' : 1, - 'sv' : 1, - 'th' : 1, - 'tr' : 1, - 'tt' : 1, - 'ug' : 1, - 'uk' : 1, - 'vi' : 1, - 'zh' : 1, - 'zh-cn' : 1 + 'fr' : 1 } }; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/ckeditor.js b/htdocs/includes/ckeditor/ckeditor/ckeditor.js index 3017d34469d..c07edd62edf 100644 --- a/htdocs/includes/ckeditor/ckeditor/ckeditor.js +++ b/htdocs/includes/ckeditor/ckeditor/ckeditor.js @@ -2,14 +2,14 @@ Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ -(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,d={timestamp:"J39A",version:"4.11.4",revision:"e1836357e",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var c=document.getElementsByTagName("script"),d=0;de.getListenerIndex(d)){e=e.listeners;g||(g=this);isNaN(h)&&(h=10);var y=this;p.fn=d;p.priority=h;for(var v=e.length-1;0<=v;v--)if(e[v].priority<=h)return e.splice(v+1,0,p),{removeListener:q};e.unshift(p)}return{removeListener:q}}, -once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},g=0,k=function(){g=1};return function(h,p,q){var e=d(this)[h];h=a;var y=g;a=g=0;if(e){var v=e.listeners;if(v.length)for(var v=v.slice(0),x,F=0;Fe.getListenerIndex(d)){e=e.listeners;h||(h=this);isNaN(g)&&(g=10);var x=this;l.fn=d;l.priority=g;for(var t=e.length-1;0<=t;t--)if(e[t].priority<=g)return e.splice(t+1,0,l),{removeListener:u};e.unshift(l)}return{removeListener:u}}, +once:function(){var a=Array.prototype.slice.call(arguments),b=a[1];a[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},h=0,k=function(){h=1};return function(g,l,u){var e=d(this)[g];g=a;var x=h;a=h=0;if(e){var t=e.listeners;if(t.length)for(var t=t.slice(0),z,I=0;Idocument.documentMode),mobile:-1c||b.quirks);b.gecko&&(d=a.match(/rv:([\d\.]+)/))&&(d=d[1].split("."),c=1E4*d[0]+100*(d[1]||0)+1*(d[2]||0));b.air&&(c=parseFloat(a.match(/ adobeair\/(\d+)/)[1])); @@ -19,45 +19,49 @@ b.iOS&&(b.cssClass+=" cke_browser_ios");b.hidpi&&(b.cssClass+=" cke_hidpi");retu CKEDITOR.loadFullCore,d=CKEDITOR.loadFullCoreTimeout;a&&(CKEDITOR.status="basic_ready",a&&a._load?a():d&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},1E3*d))})})();CKEDITOR.status="basic_loaded"}();"use strict";CKEDITOR.VERBOSITY_WARN=1;CKEDITOR.VERBOSITY_ERROR=2;CKEDITOR.verbosity=CKEDITOR.VERBOSITY_WARN|CKEDITOR.VERBOSITY_ERROR;CKEDITOR.warn=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_WARN&&CKEDITOR.fire("log",{type:"warn",errorCode:a,additionalData:d})}; CKEDITOR.error=function(a,d){CKEDITOR.verbosity&CKEDITOR.VERBOSITY_ERROR&&CKEDITOR.fire("log",{type:"error",errorCode:a,additionalData:d})}; CKEDITOR.on("log",function(a){if(window.console&&window.console.log){var d=console[a.data.type]?a.data.type:"log",b=a.data.errorCode;if(a=a.data.additionalData)console[d]("[CKEDITOR] Error code: "+b+".",a);else console[d]("[CKEDITOR] Error code: "+b+".");console[d]("[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#"+b)}},null,null,999);CKEDITOR.dom={}; -(function(){function a(a,b,e){this._minInterval=a;this._context=e;this._lastOutput=this._scheduledTimer=0;this._output=CKEDITOR.tools.bind(b,e||{});var c=this;this.input=function(){function a(){c._lastOutput=(new Date).getTime();c._scheduledTimer=0;c._call()}if(!c._scheduledTimer||!1!==c._reschedule()){var y=(new Date).getTime()-c._lastOutput;y/g,k=//g,k=/|\s) /g,function(a,b){return b+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",b=0;8>b;b++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a,b){var e=b(a);e.prototype=a.prototype;return e},setTimeout:function(a,b,e,c,h){h||(h=window);e||(e= -h);return h.setTimeout(function(){c?a.apply(e,[].concat(c)):a.apply(e)},b||0)},throttle:function(a,b,e){return new this.buffers.throttle(a,b,e)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(b){return b.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(b){return b.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(b){return b.replace(a,"")}}(),indexOf:function(a,b){if("function"==typeof b)for(var e=0,c=a.length;eparseFloat(b);e&&(b=b.replace("-",""));a.setStyle("width",b);b=a.$.clientWidth; -return e?-b:b}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,e=arguments.length;bb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,e,c){a=b.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+c})},parseCssText:function(a,b,e){var c={};e&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style", -a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,e,y){b&&(e=e.toLowerCase(),"font-family"==e&&(y=y.replace(/\s*,\s*/g,",")),y=CKEDITOR.tools.trim(y));c[e]=y});return c},writeCssText:function(a,b){var e,c=[];for(e in a)c.push(e+":"+a[e]);b&&c.sort();return c.join("; ")},objectCompare:function(a,b,e){var c;if(!a&&!b)return!0;if(!a||!b)return!1; -for(c in a)if(a[c]!=b[c])return!1;if(!e)for(c in b)if(a[c]!=b[c])return!1;return!0},objectKeys:function(a){var b=[],e;for(e in a)b.push(e);return b},convertArrayToObject:function(a,b){var e={};1==arguments.length&&(b=!0);for(var c=0,h=a.length;ce;e++)a.push(Math.floor(256*Math.random()));for(e=0;eCKEDITOR.env.version||CKEDITOR.env.ie6Compat)?4===a.button?CKEDITOR.MOUSE_BUTTON_MIDDLE:1===a.button?CKEDITOR.MOUSE_BUTTON_LEFT:CKEDITOR.MOUSE_BUTTON_RIGHT:a.button:!1},convertHexStringToBytes:function(a){var b=[],e=a.length/2,c;for(c=0;cm)for(p=m;3>p;p++)h[p]=0;d[0]=(h[0]&252)>>2;d[1]=(h[0]&3)<<4|h[1]>>4; -d[2]=(h[1]&15)<<2|(h[2]&192)>>6;d[3]=h[2]&63;for(p=0;4>p;p++)b=p<=m?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d[p]):b+"\x3d"}return b},style:{parse:{_colors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50", -cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493", -deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6", -lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371", -mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD", -powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF", -whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi,background:function(a){var b={},e=this._findColor(a);e.length&&(b.color=e[0],CKEDITOR.tools.array.forEach(e, -function(b){a=a.replace(b,"")}));if(a=CKEDITOR.tools.trim(a))b.unprocessed=a;return b},margin:function(a){function b(a){e.top=c[a[0]];e.right=c[a[1]];e.bottom=c[a[2]];e.left=c[a[3]]}var e={},c=a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset)/g)||["0px"];switch(c.length){case 1:b([0,0,0,0]);break;case 2:b([0,1,0,1]);break;case 3:b([0,1,2,1]);break;case 4:b([0,1,2,3])}return e},border:function(a){var b={},e=a.split(/\s+/g);a=CKEDITOR.tools.style.parse._findColor(a);a.length&&(b.color=a[0]); -CKEDITOR.tools.array.forEach(e,function(a){b.style||-1===CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle,a)?!b.width&&CKEDITOR.tools.style.parse._widthRegExp.test(a)&&(b.width=a):b.style=a});return b},_findColor:function(a){var b=[],e=CKEDITOR.tools.array,b=b.concat(a.match(this._rgbaRegExp)||[]),b=b.concat(a.match(this._hslaRegExp)||[]);return b=b.concat(e.filter(a.split(/\s+/),function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}}, -array:{filter:function(a,b,e){var c=[];this.forEach(a,function(h,d){b.call(e,h,d,a)&&c.push(h)});return c},forEach:function(a,b,e){var c=a.length,h;for(h=0;h|\s) /g,function(a,b){return b+"\x26nbsp;"}).replace(/ (?=<)/g,"\x26nbsp;")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},getUniqueId:function(){for(var a="e",b=0;8>b;b++)a+=Math.floor(65536*(1+Math.random())).toString(16).substring(1);return a},override:function(a, +b){var e=b(a);e.prototype=a.prototype;return e},setTimeout:function(a,b,e,c,g){g||(g=window);e||(e=g);return g.setTimeout(function(){c?a.apply(e,[].concat(c)):a.apply(e)},b||0)},throttle:function(a,b,e){return new this.buffers.throttle(a,b,e)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(b){return b.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(b){return b.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(b){return b.replace(a, +"")}}(),indexOf:function(a,b){if("function"==typeof b)for(var e=0,c=a.length;eparseFloat(b);e&&(b=b.replace("-",""));a.setStyle("width",b);b=a.$.clientWidth;return e?-b:b}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,e=arguments.length;bb;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},normalizeHex:function(a){return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi,function(a,b,e,c){a=b.toLowerCase();3==a.length&&(a=a.split(""),a=[a[0],a[0],a[1],a[1],a[2],a[2]].join(""));return"#"+a+c})},parseCssText:function(a, +b,e){var c={};e&&(a=(new CKEDITOR.dom.element("span")).setAttribute("style",a).getAttribute("style")||"");a&&(a=CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a)));if(!a||";"==a)return c;a.replace(/"/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,e,x){b&&(e=e.toLowerCase(),"font-family"==e&&(x=x.replace(/\s*,\s*/g,",")),x=CKEDITOR.tools.trim(x));c[e]=x});return c},writeCssText:function(a,b){var e,c=[];for(e in a)c.push(e+":"+a[e]);b&&c.sort();return c.join("; ")}, +objectCompare:function(a,b,e){var c;if(!a&&!b)return!0;if(!a||!b)return!1;for(c in a)if(a[c]!=b[c])return!1;if(!e)for(c in b)if(a[c]!=b[c])return!1;return!0},objectKeys:function(a){return CKEDITOR.tools.object.keys(a)},convertArrayToObject:function(a,b){var e={};1==arguments.length&&(b=!0);for(var c=0,g=a.length;ce;e++)a.push(Math.floor(256*Math.random()));for(e=0;eCKEDITOR.env.version||CKEDITOR.env.ie6Compat)?4===a.button?CKEDITOR.MOUSE_BUTTON_MIDDLE:1===a.button?CKEDITOR.MOUSE_BUTTON_LEFT:CKEDITOR.MOUSE_BUTTON_RIGHT:a.button:!1},convertHexStringToBytes:function(a){var b=[],e=a.length/2,c;for(c=0;cm)for(l=m;3>l;l++)g[l]=0;d[0]=(g[0]&252)>>2;d[1]=(g[0]&3)<<4|g[1]>>4;d[2]=(g[1]&15)<<2|(g[2]&192)>>6;d[3]=g[2]&63;for(l=0;4>l;l++)b=l<=m?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d[l]):b+"\x3d"}return b},style:{parse:{_colors:{aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD", +blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F", +darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",green:"#008000",greenyellow:"#ADFF2F",grey:"#808080",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082", +ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6", +magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA", +palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F", +steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",windowtext:"windowtext",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"},_borderStyle:"none hidden dotted dashed solid double groove ridge inset outset".split(" "),_widthRegExp:/^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/,_rgbaRegExp:/rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi,_hslaRegExp:/hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi, +background:function(a){var b={},e=this._findColor(a);e.length&&(b.color=e[0],CKEDITOR.tools.array.forEach(e,function(b){a=a.replace(b,"")}));if(a=CKEDITOR.tools.trim(a))b.unprocessed=a;return b},margin:function(a){return CKEDITOR.tools.style.parse.sideShorthand(a,function(a){return a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset|revert)/g)||["0px"]})},sideShorthand:function(a,b){function e(a){c.top=g[a[0]];c.right=g[a[1]];c.bottom=g[a[2]];c.left=g[a[3]]}var c={},g=b?b(a):a.split(/\s+/); +switch(g.length){case 1:e([0,0,0,0]);break;case 2:e([0,1,0,1]);break;case 3:e([0,1,2,1]);break;case 4:e([0,1,2,3])}return c},border:function(a){return CKEDITOR.tools.style.border.fromCssRule(a)},_findColor:function(a){var b=[],e=CKEDITOR.tools.array,b=b.concat(a.match(this._rgbaRegExp)||[]),b=b.concat(a.match(this._hslaRegExp)||[]);return b=b.concat(e.filter(a.split(/\s+/),function(a){return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi)?!0:a.toLowerCase()in CKEDITOR.tools.style.parse._colors}))}}}, +array:{filter:function(a,b,e){var c=[];this.forEach(a,function(g,m){b.call(e,g,m,a)&&c.push(g)});return c},find:function(a,b,e){for(var c=a.length,g=0;gCKEDITOR.env.version)for(g=0;gCKEDITOR.env.version&&(this.type==CKEDITOR.NODE_ELEMENT||this.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)&&c(f);return f},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$, -a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var f=c.parentNode;f&&d.unshift(this.getIndex.call({$:c},a));c=f}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var p=c?a.nextSibling:a.previousSibling;return p&&p.nodeType==CKEDITOR.NODE_TEXT?b(p)?d(p, -c):p:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,f=-1,g;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(g||b(c))||(f++,g=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return f},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var f;if(!a){if(this.type== +a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var d=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var f=c.parentNode;f&&d.unshift(this.getIndex.call({$:c},a));c=f}return d},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){function d(a,c){var l=c?a.nextSibling:a.previousSibling;return l&&l.nodeType==CKEDITOR.NODE_TEXT?b(l)?d(l, +c):l:null}function b(a){return!a.nodeValue||a.nodeValue==CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE}var c=this.$,f=-1,h;if(!this.$.parentNode||a&&c.nodeType==CKEDITOR.NODE_TEXT&&b(c)&&!d(c)&&!d(c,!0))return-1;do a&&c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(h||b(c))||(f++,h=c.nodeType==CKEDITOR.NODE_TEXT);while(c=c.previousSibling);return f},getNextSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getFirst&&this.getFirst();var f;if(!a){if(this.type== CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getNext()}for(;!a&&(f=(f||this).getParent());){if(b&&!1===b(f,!0))return null;a=f.getNext()}return!a||b&&!1===b(a)?null:d&&d!=a.type?a.getNextSourceNode(!1,d,b):a},getPreviousSourceNode:function(a,d,b){if(b&&!b.call){var c=b;b=function(a){return!a.equals(c)}}a=!a&&this.getLast&&this.getLast();var f;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&!1===b(this,!0))return null;a=this.getPrevious()}for(;!a&&(f=(f||this).getParent());){if(b&&!1=== b(f,!0))return null;a=f.getPrevious()}return!a||b&&!1===b(a)?null:d&&a.type!=d?a.getPreviousSourceNode(!1,d,b):a},getPrevious:function(a){var d=this.$,b;do b=(d=d.previousSibling)&&10!=d.nodeType&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getNext:function(a){var d=this.$,b;do b=(d=d.nextSibling)&&new CKEDITOR.dom.node(d);while(b&&a&&!a(b));return b},getParent:function(a){var d=this.$.parentNode;return d&&(d.nodeType==CKEDITOR.NODE_ELEMENT||a&&d.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)? new CKEDITOR.dom.node(d):null},getParents:function(a){var d=this,b=[];do b[a?"push":"unshift"](d);while(d=d.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;if(a.contains&&a.contains(this))return a;var d=this.contains?this:this.getParent();do if(d.contains(a))return d;while(d=d.getParent());return null},getPosition:function(a){var d=this.$,b=a.$;if(d.compareDocumentPosition)return d.compareDocumentPosition(b);if(d==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type== CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(d.contains){if(d.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(d))return CKEDITOR.POSITION_IS_CONTAINED+CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in d)return 0>d.sourceIndex||0>b.sourceIndex?CKEDITOR.POSITION_DISCONNECTED:d.sourceIndex=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; +this.$.documentElement,c=0;b&&c=document.documentMode||!d||(a=d+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0]; return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),!0)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*]*?>)|^/i,'$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e('+ CKEDITOR.tools.fixDomain+")();\x3c/script\x3e"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");a||(a=this.$.createDocumentFragment(),CKEDITOR.tools.enableHtml5Elements(a,!0),this.setCustomData("html5ShivFrag",a));return a}});CKEDITOR.dom.nodeList=function(a){this.$=a}; CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){return 0>a||a>=this.$.length?null:(a=this.$[a])?new CKEDITOR.dom.node(a):null},toArray:function(){return CKEDITOR.tools.array.map(this.$,function(a){return new CKEDITOR.dom.node(a)})}};CKEDITOR.dom.element=function(a,d){"string"==typeof a&&(a=(d?d.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)}; CKEDITOR.dom.element.get=function(a){return(a="string"==typeof a?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,d){var b=new CKEDITOR.dom.element("div",d);b.setHtml(a);return b.getFirst().remove()}; -CKEDITOR.dom.element.setMarker=function(a,d,b,c){var f=d.getCustomData("list_marker_id")||d.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),g=d.getCustomData("list_marker_names")||d.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[f]=d;g[b]=1;return d.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var d in a)CKEDITOR.dom.element.clearMarkers(a,a[d],1)}; -CKEDITOR.dom.element.clearMarkers=function(a,d,b){var c=d.getCustomData("list_marker_names"),f=d.getCustomData("list_marker_id"),g;for(g in c)d.removeCustomData(g);d.removeCustomData("list_marker_names");b&&(d.removeCustomData("list_marker_id"),delete a[f])}; -(function(){function a(a,b){return-1<(" "+a+" ").replace(g," ").indexOf(" "+b+" ")}function d(a){var b=!0;a.$.id||(a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber(),b=!1);return function(){b||a.removeAttribute("id")}}function b(a,b){var c=CKEDITOR.tools.escapeCss(a.$.id);return"#"+c+" "+b.split(/,\s*/).join(", #"+c+" ")}function c(a){for(var b=0,c=0,e=k[a].length;cCKEDITOR.env.version?this.$.text+=a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();a&&a.is&&a.is("br")||(a=this.getDocument().createElement("br"),CKEDITOR.env.gecko&&a.setAttribute("type","_moz"),this.append(a))}},breakParent:function(a,b){var c=new CKEDITOR.dom.range(this.getDocument());c.setStartAfter(this);c.setEndAfter(a); var e=c.extractContents(!1,b||!1),d;c.insertNode(this.remove());if(CKEDITOR.env.ie&&!CKEDITOR.env.edge){for(c=new CKEDITOR.dom.element("div");d=e.getFirst();)d.$.style.backgroundColor&&(d.$.style.backgroundColor=d.$.style.backgroundColor),c.append(d);c.insertAfter(this);c.remove(!0)}else e.insertAfterNode(this)},contains:document.compareDocumentPosition?function(a){return!!(this.$.compareDocumentPosition(a.$)&16)}:function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$): @@ -114,184 +118,185 @@ a.getOuterHtml();if(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&this.is("a")){var c for(var a=this.getChildren(),b=0,c=a.count();bCKEDITOR.env.version?function(b){return"name"==b?!!this.$.name:a.call(this,b)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$;a=a.$;if(c!=a){var e;if(b)for(;e=c.lastChild;)a.insertBefore(c.removeChild(e),a.firstChild);else for(;e=c.firstChild;)a.appendChild(c.removeChild(e))}},mergeSiblings:function(){function a(b,c,e){if(c&&c.type==CKEDITOR.NODE_ELEMENT){for(var d= -[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=e?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var h=e?b.getLast():b.getFirst();d.length;)d.shift().move(b,!e);c.moveChildren(b,!e);c.remove();h&&h.type==CKEDITOR.NODE_ELEMENT&&h.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", +[];c.data("cke-bookmark")||c.isEmptyInlineRemoveable();)if(d.push(c),c=e?c.getNext():c.getPrevious(),!c||c.type!=CKEDITOR.NODE_ELEMENT)return;if(b.isIdentical(c)){for(var g=e?b.getLast():b.getFirst();d.length;)d.shift().move(b,!e);c.moveChildren(b,!e);c.remove();g&&g.type==CKEDITOR.NODE_ELEMENT&&g.mergeSiblings()}}}return function(b){if(!1===b||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a"))a(this,this.getNext(),!0),a(this,this.getPrevious())}}(),show:function(){this.setStyles({display:"", visibility:""})},setAttribute:function(){var a=function(a,b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(b,c){"class"==b?this.$.className=c:"style"==b?this.$.style.cssText=c:"tabindex"==b?this.$.tabIndex=c:"checked"==b?this.$.checked=c:"contenteditable"==b?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if("src"==b&&c.match(/^http:\/\//))try{a.apply(this, arguments)}catch(e){}else a.apply(this,arguments);return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){"class"==a?a="className":"tabindex"==a?a="tabIndex":"contenteditable"==a&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b= -0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", -"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,e=b.count();cf||0f?f:d);c&&(0>v||0v?v:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+ +0;bCKEDITOR.env.version?(a=Math.round(100*a),this.setStyle("filter",100<=a?"":"progid:DXImageTransform.Microsoft.Alpha(opacity\x3d"+a+")")):this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,e=b.count();cf||0f?f:d);c&&(0>t||0t?t:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+ "_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",!0);c&&this.removeAttribute("aria-disabled");break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",!0);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off"),this.removeClass(b+"_on"),this.removeClass(b+"_disabled"),c&&this.removeAttribute("aria-pressed"),c&&this.removeAttribute("aria-disabled")}}, -getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},copyAttributes:function(a,b){var c=this.$.attributes;b=b||{};for(var e=0;e=C.getChildCount()?(C=C.getChild(E-1),t=!0):C=C.getChild(E):z=t=!0;r.type==CKEDITOR.NODE_TEXT?n?I=!0:r.split(L):0da)for(;V;)V=g(V,J,!0);J=G}n||h()}} -function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(f){return c(f)||b(f)?!0:d(f)&&!a?a=!0:f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(g)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&k(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}} -function f(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&q(a)&&(b=a);return p(a)&&!(k(a)&&a.equals(b))})}}var g={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},k=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?: |\xa0)$/,p=CKEDITOR.dom.walker.editable(),q=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a= +(function(){function a(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset}function d(a,b,c,d,f){function h(a,b,c,e){var A=c?a.getPrevious():a.getNext();if(e&&k)return A;l||e?b.append(a.clone(!0,f),c):(a.remove(),u&&b.append(a,c));return A}function m(){var a,b,c,e=Math.min(S.length,n.length);for(a=0;a=B.getChildCount()?(B=B.getChild(C-1),q=!0):B=B.getChild(C):v=q=!0;p.type==CKEDITOR.NODE_TEXT?l?y=!0:p.split(H):0da)for(;L;)L=h(L,K,!0);K=A}l|| +g()}}function b(){var a=!1,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!0),d=CKEDITOR.dom.walker.bogus();return function(f){return c(f)||b(f)?!0:d(f)&&!a?a=!0:f.type==CKEDITOR.NODE_TEXT&&(f.hasAscendant("pre")||CKEDITOR.tools.trim(f.getText()).length)||f.type==CKEDITOR.NODE_ELEMENT&&!f.is(h)?!1:!0}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?!0:!a&&k(d)||d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}} +function f(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&u(a)&&(b=a);return l(a)&&!(k(a)&&a.equals(b))})}}var h={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},k=CKEDITOR.dom.walker.bogus(),g=/^[\t\r\n ]*(?: |\xa0)$/,l=CKEDITOR.dom.walker.editable(),u=CKEDITOR.dom.walker.ignored(!0);CKEDITOR.dom.range.prototype={clone:function(){var a= new CKEDITOR.dom.range(this.root);a._setStartContainer(this.startContainer);a.startOffset=this.startOffset;a._setEndContainer(this.endContainer);a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){a?(this._setEndContainer(this.startContainer),this.endOffset=this.startOffset):(this._setStartContainer(this.endContainer),this.startOffset=this.endOffset);this.collapsed=!0},cloneContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed|| -d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,f,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(d="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id", -d+(g?"C":"S")));g||(c=b.clone(),c.setHtml("\x26nbsp;"),a&&c.setAttribute("id",d+"E"),f=this.clone(),f.collapse(),f.insertNode(c));f=this.clone();f.collapse(!0);f.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(g?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:g}},createBookmark2:function(){function a(b){var e=b.container,d=b.offset,m;m=e;var f=d;m=m.type!=CKEDITOR.NODE_ELEMENT||0===f||f==m.getChildCount()? +d(this,2,b,!1,"undefined"==typeof a?!0:a);return b},deleteContents:function(a){this.collapsed||d(this,0,null,a)},extractContents:function(a,b){var c=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||d(this,1,c,a,"undefined"==typeof b?!0:b);return c},createBookmark:function(a){var b,c,d,f,h=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("\x26nbsp;");a&&(d="cke_bm_"+CKEDITOR.tools.getNextNumber(),b.setAttribute("id", +d+(h?"C":"S")));h||(c=b.clone(),c.setHtml("\x26nbsp;"),a&&c.setAttribute("id",d+"E"),f=this.clone(),f.collapse(),f.insertNode(c));f=this.clone();f.collapse(!0);f.insertNode(b);c?(this.setStartAfter(b),this.setEndBefore(c)):this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(h?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:h}},createBookmark2:function(){function a(b){var e=b.container,d=b.offset,m;m=e;var f=d;m=m.type!=CKEDITOR.NODE_ELEMENT||0===f||f==m.getChildCount()? 0:m.getChild(f-1).type==CKEDITOR.NODE_TEXT&&m.getChild(f).type==CKEDITOR.NODE_TEXT;m&&(e=e.getChild(d-1),d=e.getLength());if(e.type==CKEDITOR.NODE_ELEMENT&&0=a.offset&&(a.offset=d.getIndex(),a.container=d.getParent()))}}var c=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT,!0);return function(c){var d=this.collapsed,f={container:this.startContainer,offset:this.startOffset},m={container:this.endContainer,offset:this.endOffset};c&&(a(f), b(f,this.root),d||(a(m),b(m,this.root)));return{start:f.container.getAddress(c),end:d?null:m.container.getAddress(c),startOffset:f.offset,endOffset:m.offset,normalized:c,collapsed:d,is2:!0}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized);a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(!0)}else b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode, a=c?this.document.getById(a.endNode):a.endNode,this.setStartBefore(b),b.remove(),a?(this.setEndBefore(a),a.remove()):this.collapse(!0)},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT)if(f=a.getChildCount(),f>c)a=a.getChild(c);else if(1>f)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}if(b.type==CKEDITOR.NODE_ELEMENT)if(f=b.getChildCount(), f>d)b=b.getChild(d).getPreviousSourceNode(!0);else if(1>f)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a= this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&a.is("span")&&a.data("cke-bookmark")&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&b.is&&b.is("span")&&b.data("cke-bookmark")&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)}, -trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var g=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(g,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(f){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset; -b||f||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:var g=function(a,b){var c=new CKEDITOR.dom.range(h);c.setStart(a,b);c.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c), -e;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};e=c.next();){if(e.type!=CKEDITOR.NODE_TEXT)return!1;N=e!=a?e.getText():e.substring(b);if(d.test(N))return!1}return!0};if(this.collapsed)break;var m=this.getCommonAncestor(),h=this.root,k,q,n,r,C,L=!1,E,N;E=this.startContainer;var t=this.startOffset;E.type==CKEDITOR.NODE_TEXT?(t&&(E=!CKEDITOR.tools.trim(E.substring(0,t)).length&&E,L=!!E),E&&((r=E.getPrevious())||(n=E.getParent()))):(t&&(r=E.getChild(t-1)||E.getLast()), -r||(n=E));for(n=c(n);n||r;){if(n&&!r){!C&&n.equals(m)&&(C=!0);if(f?n.isBlockBoundary():!h.contains(n))break;L&&"inline"==n.getComputedStyle("display")||(L=!1,C?k=n:this.setStartBefore(n));r=n.getPrevious()}for(;r;)if(E=!1,r.type==CKEDITOR.NODE_COMMENT)r=r.getPrevious();else{if(r.type==CKEDITOR.NODE_TEXT)N=r.getText(),d.test(N)&&(r=null),E=/[\s\ufeff]$/.test(N);else if((r.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&r.is("br"))&&!r.data("cke-bookmark"))if(L&&CKEDITOR.dtd.$removeEmpty[r.getName()]){N= -r.getText();if(d.test(N))r=null;else for(var t=r.$.getElementsByTagName("*"),D=0,z;z=t[D++];)if(!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]){r=null;break}r&&(E=!!N.length)}else r=null;E&&(L?C?k=n:n&&this.setStartBefore(n):L=!0);if(r){E=r.getPrevious();if(!n&&!E){n=r;r=null;break}r=E}else n=null}n&&(n=c(n.getParent()))}E=this.endContainer;t=this.endOffset;n=r=null;C=L=!1;E.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(E.substring(t)).length?L=!0:(L=!E.getLength(),t==E.getLength()?(r=E.getNext())|| -(n=E.getParent()):g(E,t)&&(n=E.getParent())):(r=E.getChild(t))||(n=E);for(;n||r;){if(n&&!r){!C&&n.equals(m)&&(C=!0);if(f?n.isBlockBoundary():!h.contains(n))break;L&&"inline"==n.getComputedStyle("display")||(L=!1,C?q=n:n&&this.setEndAfter(n));r=n.getNext()}for(;r;){E=!1;if(r.type==CKEDITOR.NODE_TEXT)N=r.getText(),g(r,0)||(r=null),E=/^[\s\ufeff]/.test(N);else if(r.type==CKEDITOR.NODE_ELEMENT){if((0=m.getLength()?g.setStartAfter(m):(g.setStartBefore(m),c=0):g.setStartBefore(m));h&&h.type==CKEDITOR.NODE_TEXT&&(q?q>=h.getLength()?g.setEndAfter(h):(g.setEndAfter(h),n=0):g.setEndBefore(h));var g=new CKEDITOR.dom.walker(g),r=CKEDITOR.dom.walker.bookmark(),C=CKEDITOR.dom.walker.bogus();g.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var L;g.guard=function(b,c){if(f&&C(b)||r(b))return!0; -if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||c&&b.equals(L)||!1===d&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;c||b.type!=CKEDITOR.NODE_ELEMENT||(L=b);return!0};c&&(m=g[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(m,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);n&&(g.reset(),(g=g[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(g,b?CKEDITOR.POSITION_BEFORE_END: -CKEDITOR.POSITION_AFTER_END));return!(!c&&!n)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a, +trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength())d=c.getIndex()+1,c=c.getParent();else{var h=c.split(d),d=c.getIndex()+1,c=c.getParent();this.startContainer.equals(this.endContainer)?this.setEnd(h,this.endOffset-this.startOffset):c.equals(this.endContainer)&&(this.endOffset+=1)}else d=c.getIndex(),c=c.getParent();this.setStart(c,d);if(f){this.collapse(!0);return}}c=this.endContainer;d=this.endOffset; +b||f||!c||c.type!=CKEDITOR.NODE_TEXT||(d?(d>=c.getLength()||c.split(d),d=c.getIndex()+1):d=c.getIndex(),c=c.getParent(),this.setEnd(c,d))},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=new RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:var h=function(a,b){var c=new CKEDITOR.dom.range(g);c.setStart(a,b);c.setEndAt(g,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c), +e;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};e=c.next();){if(e.type!=CKEDITOR.NODE_TEXT)return!1;N=e!=a?e.getText():e.substring(b);if(d.test(N))return!1}return!0};if(this.collapsed)break;var m=this.getCommonAncestor(),g=this.root,k,u,l,p,B,H=!1,C,N;C=this.startContainer;var q=this.startOffset;C.type==CKEDITOR.NODE_TEXT?(q&&(C=!CKEDITOR.tools.trim(C.substring(0,q)).length&&C,H=!!C),C&&((p=C.getPrevious())||(l=C.getParent()))):(q&&(p=C.getChild(q-1)||C.getLast()), +p||(l=C));for(l=c(l);l||p;){if(l&&!p){!B&&l.equals(m)&&(B=!0);if(f?l.isBlockBoundary():!g.contains(l))break;H&&"inline"==l.getComputedStyle("display")||(H=!1,B?k=l:this.setStartBefore(l));p=l.getPrevious()}for(;p;)if(C=!1,p.type==CKEDITOR.NODE_COMMENT)p=p.getPrevious();else{if(p.type==CKEDITOR.NODE_TEXT)N=p.getText(),d.test(N)&&(p=null),C=/[\s\ufeff]$/.test(N);else if((p.$.offsetWidth>(CKEDITOR.env.webkit?1:0)||b&&p.is("br"))&&!p.data("cke-bookmark"))if(H&&CKEDITOR.dtd.$removeEmpty[p.getName()]){N= +p.getText();if(d.test(N))p=null;else for(var q=p.$.getElementsByTagName("*"),D=0,v;v=q[D++];)if(!CKEDITOR.dtd.$removeEmpty[v.nodeName.toLowerCase()]){p=null;break}p&&(C=!!N.length)}else p=null;C&&(H?B?k=l:l&&this.setStartBefore(l):H=!0);if(p){C=p.getPrevious();if(!l&&!C){l=p;p=null;break}p=C}else l=null}l&&(l=c(l.getParent()))}C=this.endContainer;q=this.endOffset;l=p=null;B=H=!1;C.type==CKEDITOR.NODE_TEXT?CKEDITOR.tools.trim(C.substring(q)).length?H=!0:(H=!C.getLength(),q==C.getLength()?(p=C.getNext())|| +(l=C.getParent()):h(C,q)&&(l=C.getParent())):(p=C.getChild(q))||(l=C);for(;l||p;){if(l&&!p){!B&&l.equals(m)&&(B=!0);if(f?l.isBlockBoundary():!g.contains(l))break;H&&"inline"==l.getComputedStyle("display")||(H=!1,B?u=l:l&&this.setEndAfter(l));p=l.getNext()}for(;p;){C=!1;if(p.type==CKEDITOR.NODE_TEXT)N=p.getText(),h(p,0)||(p=null),C=/^[\s\ufeff]/.test(N);else if(p.type==CKEDITOR.NODE_ELEMENT){if((0=m.getLength()?h.setStartAfter(m):(h.setStartBefore(m),c=0):h.setStartBefore(m));g&&g.type==CKEDITOR.NODE_TEXT&&(l?l>=g.getLength()?h.setEndAfter(g):(h.setEndAfter(g),u=0):h.setEndBefore(g));var h=new CKEDITOR.dom.walker(h),p=CKEDITOR.dom.walker.bookmark(),B=CKEDITOR.dom.walker.bogus();h.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var H;h.guard=function(b,c){if(f&&B(b)||p(b))return!0; +if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||c&&b.equals(H)||!1===d&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return!1;c||b.type!=CKEDITOR.NODE_ELEMENT||(H=b);return!0};c&&(m=h[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(m,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);u&&(h.reset(),(h=h[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(h,b?CKEDITOR.POSITION_BEFORE_END: +CKEDITOR.POSITION_AFTER_END));return!(!c&&!u)}},insertNode:function(a){this.optimizeBookmark();this.trim(!1,!0);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(!0)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a, 0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex(),b=b.getParent());this._setStartContainer(b);this.startOffset=c;this.endContainer||(this._setEndContainer(b),this.endOffset=c);a(this)},setEnd:function(b,c){b.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[b.getName()]&&(c=b.getIndex()+1,b=b.getParent());this._setEndContainer(b);this.endOffset=c;this.startContainer|| (this._setStartContainer(b),this.startOffset=c);a(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setStart(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setStart(b, b.getLength()):this.setStart(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(b)}a(this)},setEndAt:function(b,c){switch(c){case CKEDITOR.POSITION_AFTER_START:this.setEnd(b,0);break;case CKEDITOR.POSITION_BEFORE_END:b.type==CKEDITOR.NODE_TEXT?this.setEnd(b,b.getLength()):this.setEnd(b,b.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(b);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(b)}a(this)}, -fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var f=d.getBogus();f&&f.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),f=c.block,g=d.block,m=null;if(!c.blockLimit.equals(d.blockLimit))return null; -"br"!=a&&(f||(f=this.fixBlock(!0,a),g=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),g||(g=this.fixBlock(!1,a)));c=f&&this.checkStartOfBlock();d=g&&this.checkEndOfBlock();this.deleteContents();f&&f.equals(g)&&(d?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(g,CKEDITOR.POSITION_AFTER_END),g=null):c?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f=null):(g=this.splitElement(f, -b||!1),f.is("ul","ol")||f.appendBogus()));return{previousBlock:f,nextBlock:g,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:m}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(e){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()|| +fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);d.trim();this.insertNode(d);var f=d.getBogus();f&&f.remove();d.appendBogus();this.moveToBookmark(c);return d},splitBlock:function(a,b){var c=new CKEDITOR.dom.elementPath(this.startContainer,this.root),d=new CKEDITOR.dom.elementPath(this.endContainer,this.root),f=c.block,h=d.block,m=null;if(!c.blockLimit.equals(d.blockLimit))return null; +"br"!=a&&(f||(f=this.fixBlock(!0,a),h=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block),h||(h=this.fixBlock(!1,a)));c=f&&this.checkStartOfBlock();d=h&&this.checkEndOfBlock();this.deleteContents();f&&f.equals(h)&&(d?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(h,CKEDITOR.POSITION_AFTER_END),h=null):c?(m=new CKEDITOR.dom.elementPath(this.startContainer,this.root),this.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f=null):(h=this.splitElement(f, +b||!1),f.is("ul","ol")||f.appendBogus()));return{previousBlock:f,nextBlock:h,wasStartOfBlock:c,wasEndOfBlock:d,elementPath:m}},splitElement:function(a,b){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var c=this.extractContents(!1,b||!1),d=a.clone(!1,b||!1);c.appendTo(d);d.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return d},removeEmptyBlocksAtEnd:function(){function a(e){return function(a){return b(a)||c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable()|| e.is("table")&&a.is("caption")?!1:!0}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(!1);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),m=d.block||d.blockLimit,f;m&&!m.equals(d.root)&&!m.getFirst(a(m));)f=m.getParent(),this[b?"setEndAt":"setStartAt"](m,CKEDITOR.POSITION_AFTER_END),m.remove(1),m=f;this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer, -this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,f=this.clone();f.collapse(d);f[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);f=new CKEDITOR.dom.walker(f);f.evaluator=c(d);return f[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),h.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer, -this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),h.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END); +this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,f=this.clone();f.collapse(d);f[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);f=new CKEDITOR.dom.walker(f);f.evaluator=c(d);return f[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.ltrim(a.substring(0,c)),g.test(a)&&this.trim(0,1));this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer, +this.root);c=this.clone();c.collapse(!0);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=this.endContainer,c=this.endOffset;CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT&&(a=CKEDITOR.tools.rtrim(a.substring(c)),g.test(a)&&this.trim(1,0));this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(!1);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END); a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type== CKEDITOR.NODE_ELEMENT){if("false"==b.getAttribute("contentEditable")&&!b.data("cke-editable"))return 0;if(b.is("html")||"true"==b.getAttribute("contentEditable")&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(!1))return this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START), -!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&h.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); -else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var d=a,f=c,g=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(g=d[b?"getLast":"getFirst"](q));f||g||(g=d[b?"getPrevious":"getNext"](q));a=g}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,f,g,m=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,m[b?0:1])):c=this.clone();if(a&& -!a.is(CKEDITOR.dtd.$block))d=1;else if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(g=f.type==CKEDITOR.NODE_ELEMENT)&&f.is(CKEDITOR.dtd.$block)&&"false"==f.getAttribute("contenteditable")?(c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&g&&f.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(f,0),c.collapse()):c.moveToPosition(f,m[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)}, +!0;for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&this.checkEndOfBlock()&&g.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable())this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START),c=1;else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START); +else if("false"==a.getAttribute("contenteditable")&&a.is(CKEDITOR.dtd.$block))return this.setStartBefore(a),this.setEndAfter(a),!0;var d=a,f=c,h=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(!1)&&(h=d[b?"getLast":"getFirst"](u));f||h||(h=d[b?"getPrevious":"getNext"](u));a=h}return!!c},moveToClosestEditablePosition:function(a,b){var c,d=0,f,h,m=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];a?(c=new CKEDITOR.dom.range(this.root),c.moveToPosition(a,m[b?0:1])):c=this.clone();if(a&& +!a.is(CKEDITOR.dtd.$block))d=1;else if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]())d=1,(h=f.type==CKEDITOR.NODE_ELEMENT)&&f.is(CKEDITOR.dtd.$block)&&"false"==f.getAttribute("contenteditable")?(c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)):!CKEDITOR.env.needsBrFiller&&h&&f.is(CKEDITOR.dom.walker.validEmptyBlockContainers)?(c.setEnd(f,0),c.collapse()):c.moveToPosition(f,m[b?1:0]);d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)}, moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,!0)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(!1,!0),c=CKEDITOR.dom.walker.whitespaces(!0);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer; return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:f(),getPreviousEditableNode:f(1),_getTableElement:function(a){a=a||{td:1,th:1,tr:1,tbody:1,thead:1,tfoot:1,table:1};var b=this.startContainer,c=this.endContainer,d=b.getAscendant("table",!0),f=c.getAscendant("table",!0);return d&&!this.root.contains(d)? null:CKEDITOR.env.safari&&d&&c.equals(this.root)?b.getAscendant(a,!0):this.getEnclosedNode()?this.getEnclosedNode().getAscendant(a,!0):d&&f&&(d.equals(f)||d.contains(f)||f.contains(d))?b.getAscendant(a,!0):null},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e",this.document),b,c,d,f=this.clone();f.optimize();(d=f.startContainer.type==CKEDITOR.NODE_TEXT)?(c=f.startContainer.getText(),b=f.startContainer.split(f.startOffset),a.insertAfter(f.startContainer)): -f.insertNode(a);a.scrollIntoView();d&&(f.startContainer.setText(c),b.remove());a.remove()},getClientRects:function(){function a(b,c){var d=CKEDITOR.tools.array.map(b,function(a){return a}),e=new CKEDITOR.dom.range(c.root),f,g,n;c.startContainer instanceof CKEDITOR.dom.element&&(g=0===c.startOffset&&c.startContainer.hasAttribute("data-widget"));c.endContainer instanceof CKEDITOR.dom.element&&(n=(n=c.endOffset===(c.endContainer.getChildCount?c.endContainer.getChildCount():c.endContainer.length))&&c.endContainer.hasAttribute("data-widget")); -g&&e.setStart(c.startContainer.getParent(),c.startContainer.getIndex());n&&e.setEnd(c.endContainer.getParent(),c.endContainer.getIndex()+1);if(g||n)c=e;e=c.cloneContents();e=CKEDITOR.dom.document.prototype.find.call(e,"[data-cke-widget-id]").toArray();if(e=CKEDITOR.tools.array.map(e,function(a){var b=c.root.editor;a=a.getAttribute("data-cke-widget-id");return b.widgets.instances[a].element}))return e=CKEDITOR.tools.array.map(e,function(a){var b;b=a.getParent().hasClass("cke_widget_wrapper")?a.getParent(): -a;f=this.root.getDocument().$.createRange();f.setStart(b.getParent().$,b.getIndex());f.setEnd(b.getParent().$,b.getIndex()+1);b=f.getClientRects();b.widgetRect=a.getClientRect();return b},c),CKEDITOR.tools.array.forEach(e,function(a){function b(e){CKEDITOR.tools.array.forEach(d,function(b,f){var n=CKEDITOR.tools.objectCompare(a[e],b);n||(n=CKEDITOR.tools.objectCompare(a.widgetRect,b));n&&(Array.prototype.splice.call(d,f,a.length-e,a.widgetRect),c=!0)});c||(earguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,f,g){a:{null==g&&(g=d(f));for(var h;h=g.shift();)if(h.getDtd().p){g={element:h,remaining:g};break a}g=null}if(!g)return 0;if((h=CKEDITOR.filter.instances[g.element.data("cke-filter")])&&!h.check(c))return b(a, -c,f,g.remaining);c=new CKEDITOR.dom.range(g.element);c.selectNodeContents(g.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=h;a._.nestedEditable={element:g.element,container:f,remaining:g.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var f=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker.whitespaces(!0), -h=function(a){return g(a)&&k(a)},p={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,k,v,x,F;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable= -null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var u=this.range.clone();k=u.startPath();var m=u.endPath(),M=!u.collapsed&&c(u,k.block),w=!u.collapsed&&c(u,m.block,1);u.shrink(CKEDITOR.SHRINK_ELEMENT,!0);M&&u.setStartAt(k.block,CKEDITOR.POSITION_BEFORE_END);w&&u.setEndAt(m.block,CKEDITOR.POSITION_AFTER_START);k=u.endContainer.hasAscendant("pre",!0)||u.startContainer.hasAscendant("pre",!0);u.enlarge(this.forceBrBreak&&!k||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS); -u.collapsed||(k=new CKEDITOR.dom.walker(u.clone()),m=CKEDITOR.dom.walker.bookmark(!0,!0),k.evaluator=m,this._.nextNode=k.next(),k=new CKEDITOR.dom.walker(u.clone()),k.evaluator=m,k=k.previous(),this._.lastNode=k.getNextSourceNode(!0,null,u.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(m=this.range.clone(),m.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),m.checkEndOfBlock()&& -(m=new CKEDITOR.dom.elementPath(m.endContainer,m.root),this._.lastNode=(m.block||m.blockLimit).getNextSourceNode(!0))),this._.lastNode&&u.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=u.document.createText(""),this._.lastNode.insertAfter(k)),u=null);this._.started=1;k=u}m=this._.nextNode;u=this._.lastNode;for(this._.nextNode=null;m;){var M=0,w=m.hasAscendant("pre"),H=m.type!=CKEDITOR.NODE_ELEMENT,n=0;if(H)m.type==CKEDITOR.NODE_TEXT&&f.test(m.getText())&&(H=0);else{var r=m.getName(); -if(CKEDITOR.dtd.$block[r]&&"false"==m.getAttribute("contenteditable")){d=m;b(this,a,d);break}else if(m.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){if("br"==r)H=1;else if(!k&&!m.getChildCount()&&"hr"!=r){d=m;v=m.equals(u);break}k&&(k.setEndAt(m,CKEDITOR.POSITION_BEFORE_START),"br"!=r&&(this._.nextNode=m));M=1}else{if(m.getFirst()){k||(k=this.range.clone(),k.setStartAt(m,CKEDITOR.POSITION_BEFORE_START));m=m.getFirst();continue}H=1}}H&&!k&&(k=this.range.clone(),k.setStartAt(m,CKEDITOR.POSITION_BEFORE_START)); -v=(!M||H)&&m.equals(u);if(k&&!M)for(;!m.getNext(h)&&!v;){r=m.getParent();if(r.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){M=1;H=0;v||r.equals(u);k.setEndAt(r,CKEDITOR.POSITION_BEFORE_END);break}m=r;H=1;v=m.equals(u);n=1}H&&k.setEndAt(m,CKEDITOR.POSITION_AFTER_END);m=this._getNextSourceNode(m,n,u);if((v=!m)||M&&k)break}if(!d){if(!k)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(k.startContainer,k.root);m=d.blockLimit;M={div:1,th:1,td:1}; -d=d.block;!d&&m&&!this.enforceRealBlocks&&M[m.getName()]&&k.checkStartOfBlock()&&k.checkEndOfBlock()&&!m.equals(k.root)?d=m:!d||this.enforceRealBlocks&&d.is(p)?(d=this.range.document.createElement(a),k.extractContents().appendTo(d),d.trim(),k.insertNode(d),x=F=!0):"li"!=d.getName()?k.checkStartOfBlock()&&k.checkEndOfBlock()||(d=d.clone(!1),k.extractContents().appendTo(d),d.trim(),F=k.splitBlock(),x=!F.wasStartOfBlock,F=!F.wasEndOfBlock,k.insertNode(d)):v||(this._.nextNode=d.equals(u)?null:this._getNextSourceNode(k.getBoundaryNodes().endNode, -1,u))}x&&(x=d.getPrevious())&&x.type==CKEDITOR.NODE_ELEMENT&&("br"==x.getName()?x.remove():x.getLast()&&"br"==x.getLast().$.nodeName.toLowerCase()&&x.getLast().remove());F&&(x=d.getLast())&&x.type==CKEDITOR.NODE_ELEMENT&&"br"==x.getName()&&(!CKEDITOR.env.needsBrFiller||x.getPrevious(g)||x.getNext(g))&&x.remove();this._.nextNode||(this._.nextNode=v||d.equals(u)||!u?null:this._getNextSourceNode(d,1,u));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(f))}var f= -this.range.root;for(a=a.getNextSourceNode(b,null,d);!g(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +f.insertNode(a);a.scrollIntoView();d&&(f.startContainer.setText(c),b.remove());a.remove()},getClientRects:function(){function a(b,c){var d=CKEDITOR.tools.array.map(b,function(a){return a}),e=new CKEDITOR.dom.range(c.root),f,h,g;c.startContainer instanceof CKEDITOR.dom.element&&(h=0===c.startOffset&&c.startContainer.hasAttribute("data-widget"));c.endContainer instanceof CKEDITOR.dom.element&&(g=(g=c.endOffset===(c.endContainer.getChildCount?c.endContainer.getChildCount():c.endContainer.length))&&c.endContainer.hasAttribute("data-widget")); +h&&e.setStart(c.startContainer.getParent(),c.startContainer.getIndex());g&&e.setEnd(c.endContainer.getParent(),c.endContainer.getIndex()+1);if(h||g)c=e;e=c.cloneContents().find("[data-cke-widget-id]").toArray();if(e=CKEDITOR.tools.array.map(e,function(a){var b=c.root.editor;a=a.getAttribute("data-cke-widget-id");return b.widgets.instances[a].element}))return e=CKEDITOR.tools.array.map(e,function(a){var b;b=a.getParent().hasClass("cke_widget_wrapper")?a.getParent():a;f=this.root.getDocument().$.createRange(); +f.setStart(b.getParent().$,b.getIndex());f.setEnd(b.getParent().$,b.getIndex()+1);b=f.getClientRects();b.widgetRect=a.getClientRect();return b},c),CKEDITOR.tools.array.forEach(e,function(a){function b(e){CKEDITOR.tools.array.forEach(d,function(b,f){var h=CKEDITOR.tools.objectCompare(a[e],b);h||(h=CKEDITOR.tools.objectCompare(a.widgetRect,b));h&&(Array.prototype.splice.call(d,f,a.length-e,a.widgetRect),c=!0)});c||(earguments.length||(this.range=a,this.forceBrBreak=0,this.enlargeBr=1,this.enforceRealBlocks=0,this._||(this._={}))}function d(a){var b=[];a.forEach(function(a){if("true"==a.getAttribute("contenteditable"))return b.push(a),!1},CKEDITOR.NODE_ELEMENT,!0);return b}function b(a,c,f,h){a:{null==h&&(h=d(f));for(var g;g=h.shift();)if(g.getDtd().p){h={element:g,remaining:h};break a}h=null}if(!h)return 0;if((g=CKEDITOR.filter.instances[h.element.data("cke-filter")])&&!g.check(c))return b(a, +c,f,h.remaining);c=new CKEDITOR.dom.range(h.element);c.selectNodeContents(h.element);c=c.createIterator();c.enlargeBr=a.enlargeBr;c.enforceRealBlocks=a.enforceRealBlocks;c.activeFilter=c.filter=g;a._.nestedEditable={element:h.element,container:f,remaining:h.remaining,iterator:c};return 1}function c(a,b,c){if(!b)return!1;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,c?CKEDITOR.START:CKEDITOR.END)}var f=/^[\r\n\t ]+$/,h=CKEDITOR.dom.walker.bookmark(!1,!0),k=CKEDITOR.dom.walker.whitespaces(!0), +g=function(a){return h(a)&&k(a)},l={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var d,k,t,z,I;a=a||"p";if(this._.nestedEditable){if(d=this._.nestedEditable.iterator.getNextParagraph(a))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,d;this.activeFilter=this.filter;if(b(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining))return this.activeFilter=this._.nestedEditable.iterator.activeFilter,this._.nestedEditable.iterator.getNextParagraph(a);this._.nestedEditable= +null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var r=this.range.clone();k=r.startPath();var m=r.endPath(),M=!r.collapsed&&c(r,k.block),w=!r.collapsed&&c(r,m.block,1);r.shrink(CKEDITOR.SHRINK_ELEMENT,!0);M&&r.setStartAt(k.block,CKEDITOR.POSITION_BEFORE_END);w&&r.setEndAt(m.block,CKEDITOR.POSITION_AFTER_START);k=r.endContainer.hasAscendant("pre",!0)||r.startContainer.hasAscendant("pre",!0);r.enlarge(this.forceBrBreak&&!k||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS); +r.collapsed||(k=new CKEDITOR.dom.walker(r.clone()),m=CKEDITOR.dom.walker.bookmark(!0,!0),k.evaluator=m,this._.nextNode=k.next(),k=new CKEDITOR.dom.walker(r.clone()),k.evaluator=m,k=k.previous(),this._.lastNode=k.getNextSourceNode(!0,null,r.root),this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()&&(m=this.range.clone(),m.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END),m.checkEndOfBlock()&& +(m=new CKEDITOR.dom.elementPath(m.endContainer,m.root),this._.lastNode=(m.block||m.blockLimit).getNextSourceNode(!0))),this._.lastNode&&r.root.contains(this._.lastNode)||(this._.lastNode=this._.docEndMarker=r.document.createText(""),this._.lastNode.insertAfter(k)),r=null);this._.started=1;k=r}m=this._.nextNode;r=this._.lastNode;for(this._.nextNode=null;m;){var M=0,w=m.hasAscendant("pre"),J=m.type!=CKEDITOR.NODE_ELEMENT,F=0;if(J)m.type==CKEDITOR.NODE_TEXT&&f.test(m.getText())&&(J=0);else{var p=m.getName(); +if(CKEDITOR.dtd.$block[p]&&"false"==m.getAttribute("contenteditable")){d=m;b(this,a,d);break}else if(m.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){if("br"==p)J=1;else if(!k&&!m.getChildCount()&&"hr"!=p){d=m;t=m.equals(r);break}k&&(k.setEndAt(m,CKEDITOR.POSITION_BEFORE_START),"br"!=p&&(this._.nextNode=m));M=1}else{if(m.getFirst()){k||(k=this.range.clone(),k.setStartAt(m,CKEDITOR.POSITION_BEFORE_START));m=m.getFirst();continue}J=1}}J&&!k&&(k=this.range.clone(),k.setStartAt(m,CKEDITOR.POSITION_BEFORE_START)); +t=(!M||J)&&m.equals(r);if(k&&!M)for(;!m.getNext(g)&&!t;){p=m.getParent();if(p.isBlockBoundary(this.forceBrBreak&&!w&&{br:1})){M=1;J=0;t||p.equals(r);k.setEndAt(p,CKEDITOR.POSITION_BEFORE_END);break}m=p;J=1;t=m.equals(r);F=1}J&&k.setEndAt(m,CKEDITOR.POSITION_AFTER_END);m=this._getNextSourceNode(m,F,r);if((t=!m)||M&&k)break}if(!d){if(!k)return this._.docEndMarker&&this._.docEndMarker.remove(),this._.nextNode=null;d=new CKEDITOR.dom.elementPath(k.startContainer,k.root);m=d.blockLimit;M={div:1,th:1,td:1}; +d=d.block;!d&&m&&!this.enforceRealBlocks&&M[m.getName()]&&k.checkStartOfBlock()&&k.checkEndOfBlock()&&!m.equals(k.root)?d=m:!d||this.enforceRealBlocks&&d.is(l)?(d=this.range.document.createElement(a),k.extractContents().appendTo(d),d.trim(),k.insertNode(d),z=I=!0):"li"!=d.getName()?k.checkStartOfBlock()&&k.checkEndOfBlock()||(d=d.clone(!1),k.extractContents().appendTo(d),d.trim(),I=k.splitBlock(),z=!I.wasStartOfBlock,I=!I.wasEndOfBlock,k.insertNode(d)):t||(this._.nextNode=d.equals(r)?null:this._getNextSourceNode(k.getBoundaryNodes().endNode, +1,r))}z&&(z=d.getPrevious())&&z.type==CKEDITOR.NODE_ELEMENT&&("br"==z.getName()?z.remove():z.getLast()&&"br"==z.getLast().$.nodeName.toLowerCase()&&z.getLast().remove());I&&(z=d.getLast())&&z.type==CKEDITOR.NODE_ELEMENT&&"br"==z.getName()&&(!CKEDITOR.env.needsBrFiller||z.getPrevious(h)||z.getNext(h))&&z.remove();this._.nextNode||(this._.nextNode=t||d.equals(r)||!r?null:this._getNextSourceNode(d,1,r));return d},_getNextSourceNode:function(a,b,c){function d(a){return!(a.equals(c)||a.equals(f))}var f= +this.range.root;for(a=a.getNextSourceNode(b,null,d);!h(a);)a=a.getNextSourceNode(b,null,d);return a}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); CKEDITOR.command=function(a,d){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return!1;this.editorFocus&&a.focus();return!1===this.fire("exec")?!0:!1!==d.exec.call(this,a,b)};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return!0;if(this.context&&!b.isContextFor(this.context)||!this.checkAllowed(!0))return this.disable(),!0;this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&this.disable();return!1===this.fire("refresh", {editor:a,path:b})?!0:d.refresh&&!1!==d.refresh.apply(this,arguments)};var b;this.checkAllowed=function(c){return c||"boolean"!=typeof b?b=a.activeFilter.checkFeature(this):b};CKEDITOR.tools.extend(this,d,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!d.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(this.preserveState&&"undefined"!=typeof this.previousState?this.previousState:CKEDITOR.TRISTATE_OFF)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return!1;this.previousState=this.state;this.state=a;this.fire("state");return!0},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF? this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"\x3c!DOCTYPE html\x3e",bodyId:"",bodyClass:"",fullPage:!1,height:200,contentsCss:CKEDITOR.getUrl("contents.css"),extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; -(function(){function a(a,b,c,d,e){var f,n;a=[];for(f in b){n=b[f];n="boolean"==typeof n?{}:"function"==typeof n?{match:n}:D(n);"$"!=f.charAt(0)&&(n.elements=f);c&&(n.featureName=c.toLowerCase());var l=n;l.elements=k(l.elements,/\s+/)||null;l.propertiesOnly=l.propertiesOnly||!0===l.elements;var m=/\s*,\s*/,g=void 0;for(g in P){l[g]=k(l[g],m)||null;var r=l,t=O[g],z=k(l[O[g]],m),B=l[g],h=[],A=!0,C=void 0;z?A=!1:z={};for(C in B)"!"==C.charAt(0)&&(C=C.slice(1),h.push(C),z[C]=!0,A=!1);for(;C=h.pop();)B[C]= -B["!"+C],delete B["!"+C];r[t]=(A?!1:z)||null}l.match=l.match||null;d.push(n);a.push(n)}b=e.elements;e=e.generic;var I;c=0;for(d=a.length;c=--h&&(g&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),e(b))},v=function(b,c){a[b]=1;var f=d[b];delete d[b];for(var e=0;e=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?e.$.onreadystatechange=function(){if("loaded"==e.$.readyState||"complete"==e.$.readyState)e.$.onreadystatechange=null,v(b,!0)}:(e.$.onload=function(){setTimeout(function(){e.$.onload=null;e.$.onerror=null;v(b,!0)},0)},e.$.onerror=function(){e.$.onload=null;e.$.onerror=null;v(b,!1)}));e.appendTo(CKEDITOR.document.getHead())}}};g&&CKEDITOR.document.getDocumentElement().setStyle("cursor", -"wait");for(var F=0;F=--g&&(h&&CKEDITOR.document.getDocumentElement().removeStyle("cursor"),e(b))},t=function(b,c){a[b]=1;var f=d[b];delete d[b];for(var e=0;e=CKEDITOR.env.version||CKEDITOR.env.ie9Compat)?e.$.onreadystatechange=function(){if("loaded"==e.$.readyState||"complete"==e.$.readyState)e.$.onreadystatechange=null,t(b,!0)}:(e.$.onload=function(){setTimeout(function(){e.$.onload=null;e.$.onerror=null;t(b,!0)},0)},e.$.onerror=function(){e.$.onload=null;e.$.onerror=null;t(b,!1)}));e.appendTo(CKEDITOR.document.getHead())}}};h&&CKEDITOR.document.getDocumentElement().setStyle("cursor", +"wait");for(var I=0;I]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; -(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,f,g=0,k;c=this._.htmlPartsRegex.exec(b);){f=c.index;if(f>g)if(g=b.substring(g,f),k)k.push(g);else this.onText(g); -g=this._.htmlPartsRegex.lastIndex;if(f=c[1])if(f=f.toLowerCase(),k&&CKEDITOR.dtd.$cdata[f]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(f);continue}if(k)k.push(c[0]);else if(f=c[3]){if(f=f.toLowerCase(),!/="/.test(f)){var h={},p,q=c[4];c=!!c[5];if(q)for(;p=a.exec(q);){var e=p[1].toLowerCase();p=p[2]||p[3]||p[4]||"";h[e]=!p&&d[e]?e:CKEDITOR.tools.htmlDecodeAttr(p)}this.onTagOpen(f,h,c);!k&&CKEDITOR.dtd.$cdata[f]&&(k=[])}}else if(f=c[2])this.onComment(f)}if(b.length>g)this.onText(b.substring(g, +a)},getSelectedHtml:function(a){var b=this.editable(),c=this.getSelection(),c=c&&c.getRanges();if(!b||!c||0===c.length)return null;b=z(c,b);return a?b.getHtml():b},extractSelectedHtml:function(a,b){var c=this.editable(),d=this.getSelection().getRanges(),e=new CKEDITOR.dom.documentFragment,f;if(!c||0===d.length)return null;for(f=0;f]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,d={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,f,h=0,k;c=this._.htmlPartsRegex.exec(b);){f=c.index;if(f>h)if(h=b.substring(h,f),k)k.push(h);else this.onText(h); +h=this._.htmlPartsRegex.lastIndex;if(f=c[1])if(f=f.toLowerCase(),k&&CKEDITOR.dtd.$cdata[f]&&(this.onCDATA(k.join("")),k=null),!k){this.onTagClose(f);continue}if(k)k.push(c[0]);else if(f=c[3]){if(f=f.toLowerCase(),!/="/.test(f)){var g={},l,u=c[4];c=!!c[5];if(u)for(;l=a.exec(u);){var e=l[1].toLowerCase();l=l[2]||l[3]||l[4]||"";g[e]=!l&&d[e]?e:CKEDITOR.tools.htmlDecodeAttr(l)}this.onTagOpen(f,g,c);!k&&CKEDITOR.dtd.$cdata[f]&&(k=[])}}else if(f=c[2])this.onComment(f)}if(b.length>h)this.onText(b.substring(h, b.length))}}})(); CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("\x3c",a)},openTagClose:function(a,d){d?this._.output.push(" /\x3e"):this._.output.push("\x3e")},attribute:function(a,d){"string"==typeof d&&(d=CKEDITOR.tools.htmlEncodeAttr(d));this._.output.push(" ",a,'\x3d"',d,'"')},closeTag:function(a){this._.output.push("\x3c/",a,"\x3e")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("\x3c!--",a, "--\x3e")},write:function(a){this._.output.push(a)},reset:function(){this._.output=[];this._.indent=!1},getHtml:function(a){var d=this._.output.join("");a&&this.reset();return d}}});"use strict"; @@ -302,241 +307,238 @@ CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlPar (function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:!1}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,d){if(!(this.value=a.onText(d,this.value,this)))return this.remove(),!1},writeHtml:function(a,d){d&&this.filter(d);a.text(this.value)}})})();"use strict"; (function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:!0,hasInlineStarted:!1}}; (function(){function a(a){return a.attributes["data-cke-survive"]?!1:"a"==a.name&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var d=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),f={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml= -function(g,k,h){function p(a){var b;if(0k;k++)if(g=d[k]){g=g.exec(a,c,this);if(!1===g)return null;if(g&&g!=c)return this.onNode(a,g);if(c.parent&&!c.name)break}return c}, -onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,g){return(d=this.attributesRules[d])?d.exec(a,g,c,this):g}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a, -c,d){for(var g=[this.findIndex(c),0],k=0,h=a.length;k/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function y(a){return a.replace(l,function(a,b){return decodeURIComponent(b)})}function v(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, -function(a){return"\x3c!--"+H+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function x(a){return CKEDITOR.tools.array.reduce(a.split(""),function(a,b){var c=b.toLowerCase(),d=b.toUpperCase(),e=F(c);c!==d&&(e+="|"+F(d));return a+("("+e+")")},"")}function F(a){var b;b=a.charCodeAt(0);var c=b.toString(16);b={htmlCode:"\x26#"+b+";?",hex:"\x26#x0*"+c+";?",entity:{"\x3c":"\x26lt;","\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var d in b)b[d]&&(a+="|"+b[d]);return a}function u(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g, +c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,d){return this.textRules.exec(a,c,d)},onComment:function(a,c,d){return this.commentRules.exec(a,c,d)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var d=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],h,k=0;3>k;k++)if(h=d[k]){h=h.exec(a,c,this);if(!1===h)return null;if(h&&h!=c)return this.onNode(a,h);if(c.parent&&!c.name)break}return c}, +onNode:function(a,c){var d=c.type;return d==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):d==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):d==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,d,h){return(d=this.attributesRules[d])?d.exec(a,h,c,this):h}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,d){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:d})},addMany:function(a, +c,d){for(var h=[this.findIndex(c),0],k=0,g=a.length;k/g,"\x26gt;")+"\x3c/textarea\x3e");return"\x3ccke:encoded\x3e"+encodeURIComponent(a)+"\x3c/cke:encoded\x3e"})}function x(a){return a.replace(n,function(a,b){return decodeURIComponent(b)})}function t(a){return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, +function(a){return"\x3c!--"+J+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\x3e"})}function z(a){return CKEDITOR.tools.array.reduce(a.split(""),function(a,b){var c=b.toLowerCase(),d=b.toUpperCase(),e=I(c);c!==d&&(e+="|"+I(d));return a+("("+e+")")},"")}function I(a){var b;b=a.charCodeAt(0);var c=b.toString(16);b={htmlCode:"\x26#"+b+";?",hex:"\x26#x0*"+c+";?",entity:{"\x3c":"\x26lt;","\x3e":"\x26gt;",":":"\x26colon;"}[a]};for(var d in b)b[d]&&(a+="|"+b[d]);return a}function r(a){return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g, function(a,b){return decodeURIComponent(b)})}function m(a,b){var c=b._.dataStore;return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function M(a,b){var c=[],d=b.config.protectedSource,e=b._.dataStore||(b._.dataStore={id:1}),f=/<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g,d=[/|$)/gi,//gi,//gi].concat(d);a=a.replace(/\x3c!--[\s\S]*?--\x3e/g, -function(a){return"\x3c!--{cke_tempcomment}"+(c.push(a)-1)+"--\x3e"});for(var l=0;l]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g, -function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,e){return"\x3c"+c+d+"\x3e"+m(u(e),b)+"\x3c/"+c+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var c,f,l=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=f=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(L);c.addRules(E,{applyToAll:!0});c.addRules(a(b,"data"), -{applyToAll:!0});f.addRules(N);f.addRules(t,{applyToAll:!0});f.addRules(a(b,"html"),{applyToAll:!0});b.on("toHtml",function(a){a=a.data;var c=a.dataValue,f,c=c.replace(K,""),c=M(c,b),c=e(c,O),c=q(c),c=e(c,P),c=c.replace(B,"$1cke:$2"),c=c.replace(J,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),c=c.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");f=a.context||b.editable().getName();var l;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"== -f&&(f="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",l=1);f=b.document.createElement(f);f.setHtml("a"+c);c=f.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");l&&(c=c.replace(/^
|<\/pre>$/gi,""));c=c.replace(A,"$1$2");c=y(c);c=u(c);f=!1===a.fixForBody?!1:d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,f);f&&(l=c,!l.children.length&&CKEDITOR.dtd[l.name][f]&&(f=new CKEDITOR.htmlParser.element(f),l.add(f)));a.dataValue=c},null,null,
-5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(l.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=v(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^
/i, -""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(l.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,!1,!0)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=l.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=u(c);c=m(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype= -{toHtml:function(a,b,c,d){var e=this.editor,f,l,n,g;b&&"object"==typeof b?(f=b.context,c=b.fixForBody,d=b.dontFilter,l=b.filter,n=b.enterMode,g=b.protectedWhitespaces):f=b;f||null===f||(f=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d,filter:l||e.filter,enterMode:n||e.enterMode,protectedWhitespaces:g}).dataValue},toDataFormat:function(a,b){var c,d,e;b&&(c=b.context,d=b.filter,e=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire("toDataFormat", -{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var w=/(?: |\xa0)$/,H="{cke_protected}",n=CKEDITOR.dtd,r="caption colgroup col thead tfoot tbody".split(" "),C=CKEDITOR.tools.extend({},n.$blockLimit,n.$block),L={elements:{input:h,textarea:h}},E={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi, -"");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},N={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},t={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/, -""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var c=["name","href","src"],d,e=0;ed? +function(a){return"\x3c!--{cke_tempcomment}"+(c.push(a)-1)+"--\x3e"});for(var n=0;n]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g,function(a){return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g, +function(a,b){e[e.id]=decodeURIComponent(b);return"{cke_protected_"+e.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,e){return"\x3c"+c+d+"\x3e"+m(r(e),b)+"\x3c/"+c+"\x3e"})}CKEDITOR.htmlDataProcessor=function(b){var c,f,n=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=f=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(H);c.addRules(C,{applyToAll:!0});c.addRules(a(b,"data"), +{applyToAll:!0});f.addRules(N);f.addRules(q,{applyToAll:!0});f.addRules(a(b,"html"),{applyToAll:!0});b.on("toHtml",function(a){a=a.data;var c=a.dataValue,f,c=c.replace(P,""),c=M(c,b),c=e(c,S),c=u(c),c=e(c,Q),c=c.replace(G,"$1cke:$2"),c=c.replace(K,"\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"),c=c.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,"$1data-cke-"+CKEDITOR.rnd+"-$2");f=a.context||b.editable().getName();var n;CKEDITOR.env.ie&&9>CKEDITOR.env.version&&"pre"== +f&&(f="div",c="\x3cpre\x3e"+c+"\x3c/pre\x3e",n=1);f=b.document.createElement(f);f.setHtml("a"+c);c=f.getHtml().substr(1);c=c.replace(new RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");n&&(c=c.replace(/^
|<\/pre>$/gi,""));c=c.replace(E,"$1$2");c=x(c);c=r(c);f=!1===a.fixForBody?!1:d(a.enterMode,b.config.autoParagraph);c=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,f);f&&(n=c,!n.children.length&&CKEDITOR.dtd[n.name][f]&&(f=new CKEDITOR.htmlParser.element(f),n.add(f)));a.dataValue=c},null,null,
+5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,!0,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(n.dataFilter,!0)},null,null,10);b.on("toHtml",function(a){a=a.data;var b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(!0);a.dataValue=t(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^
/i, +""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,d(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(n.htmlFilter,!0)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,!1,!0)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=n.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(!0);c=r(c);c=m(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype= +{toHtml:function(a,b,c,d){var e=this.editor,f,n,q,v;b&&"object"==typeof b?(f=b.context,c=b.fixForBody,d=b.dontFilter,n=b.filter,q=b.enterMode,v=b.protectedWhitespaces):f=b;f||null===f||(f=e.editable().getName());return e.fire("toHtml",{dataValue:a,context:f,fixForBody:c,dontFilter:d,filter:n||e.filter,enterMode:q||e.enterMode,protectedWhitespaces:v}).dataValue},toDataFormat:function(a,b){var c,d,e;b&&(c=b.context,d=b.filter,e=b.enterMode);c||null===c||(c=this.editor.editable().getName());return this.editor.fire("toDataFormat", +{dataValue:a,filter:d||this.editor.filter,context:c,enterMode:e||this.editor.enterMode}).dataValue}};var w=/(?: |\xa0)$/,J="{cke_protected}",F=CKEDITOR.dtd,p="caption colgroup col thead tfoot tbody".split(" "),B=CKEDITOR.tools.extend({},F.$blockLimit,F.$block),H={elements:{input:g,textarea:g}},C={attributeNames:[[/^on/,"data-cke-pa-on"],[/^srcdoc/,"data-cke-pa-srcdoc"],[/^data-cke-expando$/,""]],elements:{iframe:function(a){if(a.attributes&&a.attributes.src){var b=a.attributes.src.toLowerCase().replace(/[^a-z]/gi, +"");if(0===b.indexOf("javascript")||0===b.indexOf("data"))a.attributes["data-cke-pa-src"]=a.attributes.src,delete a.attributes.src}}}},N={elements:{embed:function(a){var b=a.parent;if(b&&"object"==b.name){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},a:function(a){var b=a.attributes;if(!(a.children.length||b.name||b.id||a.attributes["data-cke-saved-name"]))return!1}}},q={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/, +""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return!1;for(var c=["name","href","src"],d,e=0;ed? 1:-1})},param:function(a){a.children=[];a.isEmpty=!0;return a},span:function(a){"Apple-style-span"==a.attributes["class"]&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));a.attributes.type||(a.attributes.type="text/css")},title:function(a){var b=a.children[0];!b&&k(a,b=new CKEDITOR.htmlParser.text); -b.value=a.attributes["data-cke-title"]||""},input:p,textarea:p},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(t.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var D=/<(a|area|img|input|source)\b([^>]*)>/gi,z=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,I=/^(href|src|name)$/i,P=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, -O=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,l=/([^<]*)<\/cke:encoded>/gi,K=new RegExp("("+x("\x3ccke:encoded\x3e")+"(.*?)"+x("\x3c/cke:encoded\x3e")+")|("+x("\x3c")+x("/")+"?"+x("cke:encoded\x3e")+")","gi"),B=/(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi,A=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,J=/]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; +b.value=a.attributes["data-cke-title"]||""},input:l,textarea:l},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||!1}}};CKEDITOR.env.ie&&(q.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})});var D=/<(a|area|img|input|source)\b([^>]*)>/gi,v=/([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,y=/^(href|src|name)$/i,Q=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, +S=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,n=/([^<]*)<\/cke:encoded>/gi,P=new RegExp("("+z("\x3ccke:encoded\x3e")+"(.*?)"+z("\x3c/cke:encoded\x3e")+")|("+z("\x3c")+z("/")+"?"+z("cke:encoded\x3e")+")","gi"),G=/(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi,E=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,K=/]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict"; CKEDITOR.htmlParser.element=function(a,d){this.name=a;this.attributes=d||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!!(CKEDITOR.dtd.$nonBodyContent[b]||CKEDITOR.dtd.$block[b]||CKEDITOR.dtd.$listItem[b]||CKEDITOR.dtd.$tableContent[b]||CKEDITOR.dtd.$nonEditable[b]||"br"==b);this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}}; CKEDITOR.htmlParser.cssStyle=function(a){var d={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,f){"font-family"==c&&(f=f.replace(/["']/g,""));d[c.toLowerCase()]=f});return{rules:d,populate:function(a){var c=this.toString();c&&(a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c)},toString:function(){var a=[],c; for(c in d)d[c]&&a.push(c,":",d[c],";");return a.join("")}}}; -(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&("string"==typeof a?b.name==a:b.name in a)}}var d=function(a,b){a=a[0];b=b[0];return ab?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,k,h;b=d.getFilterContext(b);if(!d.parent)a.onRoot(b, -d);for(;;){k=d.name;if(!(h=a.onElementName(b,k)))return this.remove(),!1;d.name=h;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==k)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}k=d.attributes;var p,q;for(p in k){for(h=k[p];;)if(q=a.onAttributeName(b,p))if(q!=p)delete k[p],p=q;else break;else{delete k[p];break}q&&(!1===(h=a.onAttribute(b,d,q,h))?delete k[q]:k[q]=h)}d.isEmpty|| -this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var g=this.name,k=[],h=this.attributes,p,q;a.openTag(g,h);for(p in h)k.push([p,h[p]]);a.sortAttributes&&k.sort(d);p=0;for(q=k.length;pb?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,k,g;b=d.getFilterContext(b);if(!d.parent)a.onRoot(b, +d);for(;;){k=d.name;if(!(g=a.onElementName(b,k)))return this.remove(),!1;d.name=g;if(!(d=a.onElement(b,d)))return this.remove(),!1;if(d!==this)return this.replaceWith(d),!1;if(d.name==k)break;if(d.type!=CKEDITOR.NODE_ELEMENT)return this.replaceWith(d),!1;if(!d.name)return this.replaceWithChildren(),!1}k=d.attributes;var l,u;for(l in k){for(g=k[l];;)if(u=a.onAttributeName(b,l))if(u!=l)delete k[l],l=u;else break;else{delete k[l];break}u&&(!1===(g=a.onAttribute(b,d,u,g))?delete k[u]:k[u]=g)}d.isEmpty|| +this.filterChildren(a,!1,b);return!0},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var h=this.name,k=[],g=this.attributes,l,u;a.openTag(h,g);for(l in g)k.push([l,g[l]]);a.sortAttributes&&k.sort(d);l=0;for(u=k.length;lCKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(),a();else this.once("focus", -function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};w.eol.detect(a,this);w.bogus.exclude(a);w.cell.shrink(a);a.fragment=a.range.cloneContents();w.tree.rebuild(a,this);w.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var c=H,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(),e;a.enlarge(CKEDITOR.ENLARGE_INLINE, -1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var f=this.editor.createRange();f.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=f.createBookmark();c.list.detectMerge(d,this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);d.tableContentsRanges?(c.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(c.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark);a.optimize(); -c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag("span"),f=0,t;if(d)for(;t=d.getItem(f++);)if(!y(t)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),v(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings(); -return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(F,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a, +b)},insertHtml:function(a,b,c){var d=this.editor;d.focus();d.fire("saveSnapshot");c||(c=d.getSelection().getRanges()[0]);m(this,b||"html",a,c);c.select();u(this);this.editor.fire("afterInsertHtml",{})},insertHtmlIntoRange:function(a,b,c){m(this,c||"html",a,b);this.editor.fire("afterInsertHtml",{intoRange:b})},insertElement:function(a,b){var d=this.editor;d.focus();d.fire("saveSnapshot");var e=d.activeEnterMode,d=d.getSelection(),f=a.getName(),f=CKEDITOR.dtd.$block[f];b||(b=d.getRanges()[0]);this.insertElementIntoRange(a, +b)&&(b.moveToPosition(a,CKEDITOR.POSITION_AFTER_END),f&&((f=a.getNext(function(a){return c(a)&&!I(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)?f.getDtd()["#"]?b.moveToElementEditStart(f):b.moveToElementEditEnd(a):f||e==CKEDITOR.ENTER_BR||(f=b.fixBlock(!0,e==CKEDITOR.ENTER_DIV?"div":"p"),b.moveToElementEditStart(f))));d.selectRanges([b]);u(this)},insertElementIntoSelection:function(a){this.insertElement(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode, +e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return!1;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&(b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})?M(b):b.startContainer.is(CKEDITOR.dtd.$list)&&w(b));var g,v;if(f)for(;(g=b.getCommonAncestor(0,1))&&(v=CKEDITOR.dtd[g.getName()])&&(!v||!v[e]);)if(g.getName()in CKEDITOR.dtd.span){var f=b.splitElement(g),h=b.createBookmark();l(g);l(f);b.moveToBookmark(h)}else b.checkStartOfBlock()&&b.checkEndOfBlock()?(b.setStartBefore(g), +b.collapse(!0),g.remove()):b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return!0},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.fixInitialSelection();"unloaded"==this.status&&(this.status="ready");this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable"); +this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},fixInitialSelection:function(){function a(){var b=c.getDocument().$,d=b.getSelection(),e;a:if(d.anchorNode&&d.anchorNode==c.$)e=!0;else{if(CKEDITOR.env.webkit&&(e=c.getDocument().getActive())&&e.equals(c)&&!d.anchorNode){e=!0;break a}e=void 0}e&&(e=new CKEDITOR.dom.range(c),e.moveToElementEditStart(c),b=b.createRange(),b.setStart(e.startContainer.$, +e.startOffset),b.collapse(!0),d.removeAllRanges(),d.addRange(b))}function b(){var a=c.getDocument().$,d=a.selection,e=c.getDocument().getActive();"None"==d.type&&e.equals(c)&&(d=new CKEDITOR.dom.range(c),a=a.body.createTextRange(),d.moveToElementEditStart(c),d=d.startContainer,d.type!=CKEDITOR.NODE_ELEMENT&&(d=d.getParent()),a.moveToElementText(d.$),a.collapse(!0),a.select())}var c=this;if(CKEDITOR.env.ie&&(9>CKEDITOR.env.version||CKEDITOR.env.quirks))this.hasFocus&&(this.focus(),b());else if(this.hasFocus)this.focus(), +a();else this.once("focus",function(){a()},null,null,-999)},getHtmlFromRange:function(a){if(a.collapsed)return new CKEDITOR.dom.documentFragment(a.document);a={doc:this.getDocument(),range:a.clone()};J.eol.detect(a,this);J.bogus.exclude(a);J.cell.shrink(a);a.fragment=a.range.cloneContents();J.tree.rebuild(a,this);J.eol.fix(a,this);return new CKEDITOR.dom.documentFragment(a.fragment.$)},extractHtmlFromRange:function(a,b){var c=F,d={range:a,doc:a.document},e=this.getHtmlFromRange(a);if(a.collapsed)return a.optimize(), +e;a.enlarge(CKEDITOR.ENLARGE_INLINE,1);c.table.detectPurge(d);d.bookmark=a.createBookmark();delete d.range;var f=this.editor.createRange();f.moveToPosition(d.bookmark.startNode,CKEDITOR.POSITION_BEFORE_START);d.targetBookmark=f.createBookmark();c.list.detectMerge(d,this);c.table.detectRanges(d,this);c.block.detectMerge(d,this);d.tableContentsRanges?(c.table.deleteRanges(d),a.moveToBookmark(d.bookmark),d.range=a):(a.moveToBookmark(d.bookmark),d.range=a,a.extractContents(c.detectExtractMerge(d)));a.moveToBookmark(d.targetBookmark); +a.optimize();c.fixUneditableRangePosition(a);c.list.merge(d,this);c.table.purge(d,this);c.block.merge(d,this);if(b){c=a.startPath();if(d=a.checkStartOfBlock()&&a.checkEndOfBlock()&&c.block&&!a.root.equals(c.block)){a:{var d=c.block.getElementsByTag("span"),f=0,g;if(d)for(;g=d.getItem(f++);)if(!t(g)){d=!0;break a}d=!1}d=!d}d&&(a.moveToPosition(c.block,CKEDITOR.POSITION_BEFORE_START),c.block.remove())}else c.autoParagraph(this.editor,a),z(a.startContainer)&&a.startContainer.appendBogus();a.startContainer.mergeSiblings(); +return e},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||!1!==a.config.ignoreEmptyParagraph&&(b=b.replace(r,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a, "beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&"Control"==b.type||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode,a.data.range)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?this.attachClass("cke_editable_inline"): a.elementMode!=CKEDITOR.ELEMENT_MODE_REPLACE&&a.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO||this.attachClass("cke_editable_themed");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=!1},null,null,-1);this.on("focus",function(){this.hasFocus=!0},null,null,-1);if(CKEDITOR.env.webkit)this.on("scroll",function(){a._.previousScrollTop=a.editable().$.scrollTop},null, null,-1);if(CKEDITOR.env.edge&&14CKEDITOR.env.version?m.$.styleSheet.cssText=k:m.setText(k)):(k=f.appendStyleText(k),k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement),h.setCustomData("stylesheet", -k),k.data("cke-temp",1))}h=f.getCustomData("stylesheet_ref")||0;f.setCustomData("stylesheet_ref",h+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var t={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;b=a.getSelection();if(0!==b.getRanges().length){if(c in -t){var f,k=b.getRanges()[0],l=k.startPath(),h,B,A,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(f=b.getSelectedElement())||(f=g(b))?(a.fire("saveSnapshot"),k.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START),f.remove(),k.select(),a.fire("saveSnapshot"),d=1):k.collapsed&&((h=l.block)&&(A=h[c?"getPrevious":"getNext"](e))&&A.type==CKEDITOR.NODE_ELEMENT&&A.is("table")&&k[c?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),k[c?"checkEndOfBlock":"checkStartOfBlock"]()&&h.remove(),k["moveToElementEdit"+ -(c?"End":"Start")](A),k.select(),a.fire("saveSnapshot"),d=1):l.blockLimit&&l.blockLimit.is("td")&&(B=l.blockLimit.getAscendant("table"))&&k.checkBoundaryOfElement(B,c?CKEDITOR.START:CKEDITOR.END)&&(A=B[c?"getPrevious":"getNext"](e))?(a.fire("saveSnapshot"),k["moveToElementEdit"+(c?"End":"Start")](A),k.checkStartOfBlock()&&k.checkEndOfBlock()?A.remove():k.select(),a.fire("saveSnapshot"),d=1):(B=l.contains(["td","th","caption"]))&&k.checkBoundaryOfElement(B,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}}); -a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in t&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown", -function(b){var c=b.data.getTarget();c.is("img","hr","input","textarea","select")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&!b.isReadOnly()&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getAscendant("table")&&!b.getOuterHtml().replace(F, -""))){var c=a.createRange();c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey();if(c in t&&(b=a.getSelection(),0!==b.getRanges().length)){var c= -8==c,d=b.getRanges()[0];b=d.startPath();if(d.collapsed)a:{var e=b.block;if(e&&d[c?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(e,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var f=d.startContainer.getChild(d.startOffset-(c?1:0));if(f&&f.type==CKEDITOR.NODE_ELEMENT&&f.is("hr")){a.fire("saveSnapshot");f.remove();b=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(e))b=void 0;else{a.fire("saveSnapshot");var l;(l=(c?d:e).getBogus())&&l.remove(); -l=a.getSelection();f=l.createBookmarks();(c?e:d).moveChildren(c?d:e,!1);b.lastElement.mergeSiblings();q(e,d,!c);l.selectBookmarks(f);b=!0}}else b=!1}else c=d,l=b.block,d=c.endPath().block,l&&d&&!l.equals(d)?(a.fire("saveSnapshot"),(e=l.getBogus())&&e.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(l,!1),b.lastElement.mergeSiblings(),q(l,d,!0)),c=a.getSelection().getRanges()[0],c.collapse(1),c.optimize(),""===c.startContainer.getHtml()&&c.startContainer.appendBogus(), +this.getDocument();a.window=this.getWindow();var f=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var g=a.config.contentsLangDirection;this.getDirection(1)!=g&&this.changeAttr("dir",g);var k=CKEDITOR.getCss();if(k){var g=f.getHead(),q=g.getCustomData("stylesheet");q?k!=q.getText()&&(CKEDITOR.env.ie&&9>CKEDITOR.env.version?q.$.styleSheet.cssText=k:q.setText(k)):(k=f.appendStyleText(k),k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement),g.setCustomData("stylesheet", +k),k.data("cke-temp",1))}g=f.getCustomData("stylesheet_ref")||0;f.setCustomData("stylesheet_ref",g+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){a=a.data;var b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&2!=a.$.button&&b.isReadOnly()&&a.preventDefault()});var D={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey(),d;b=a.getSelection();if(0!==b.getRanges().length){if(c in +D){var e,f=b.getRanges()[0],q=f.startPath(),g,k,l,c=8==c;CKEDITOR.env.ie&&11>CKEDITOR.env.version&&(e=b.getSelectedElement())||(e=h(b))?(a.fire("saveSnapshot"),f.moveToPosition(e,CKEDITOR.POSITION_BEFORE_START),e.remove(),f.select(),a.fire("saveSnapshot"),d=1):f.collapsed&&((g=q.block)&&(l=g[c?"getPrevious":"getNext"](x))&&l.type==CKEDITOR.NODE_ELEMENT&&l.is("table")&&f[c?"checkStartOfBlock":"checkEndOfBlock"]()?(a.fire("saveSnapshot"),f[c?"checkEndOfBlock":"checkStartOfBlock"]()&&g.remove(),f["moveToElementEdit"+ +(c?"End":"Start")](l),f.select(),a.fire("saveSnapshot"),d=1):q.blockLimit&&q.blockLimit.is("td")&&(k=q.blockLimit.getAscendant("table"))&&f.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(l=k[c?"getPrevious":"getNext"](x))?(a.fire("saveSnapshot"),f["moveToElementEdit"+(c?"End":"Start")](l),f.checkStartOfBlock()&&f.checkEndOfBlock()?l.remove():f.select(),a.fire("saveSnapshot"),d=1):(k=q.contains(["td","th","caption"]))&&f.checkBoundaryOfElement(k,c?CKEDITOR.START:CKEDITOR.END)&&(d=1))}return!d}}); +a.blockless&&CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller&&this.attachListener(this,"keyup",function(b){b.data.getKeystroke()in D&&!this.getFirst(c)&&(this.appendBogus(),b=a.createRange(),b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START),b.select())});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return!1;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie&&!CKEDITOR.env.edge||this.attachListener(this,"mousedown", +function(b){var c=b.data.getTarget();c.is("img","hr","input","textarea","select")&&!c.isReadOnly()&&(a.getSelection().selectElement(c),c.is("input","textarea","select")&&b.data.preventDefault())});CKEDITOR.env.edge&&this.attachListener(this,"mouseup",function(b){(b=b.data.getTarget())&&b.is("img")&&!b.isReadOnly()&&a.getSelection().selectElement(b)});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(2==b.data.$.button&&(b=b.data.getTarget(),!b.getAscendant("table")&&!b.getOuterHtml().replace(r, +""))){var c=a.createRange();c.moveToElementEditStart(b);c.select(!0)}});CKEDITOR.env.webkit&&(this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()}),this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()}));CKEDITOR.env.webkit&&this.attachListener(a,"key",function(b){if(a.readOnly)return!0;var c=b.data.domEvent.getKey();if(c in D&&(b=a.getSelection(),0!==b.getRanges().length)){var c= +8==c,d=b.getRanges()[0];b=d.startPath();if(d.collapsed)a:{var f=b.block;if(f&&d[c?"checkStartOfBlock":"checkEndOfBlock"]()&&d.moveToClosestEditablePosition(f,!c)&&d.collapsed){if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var n=d.startContainer.getChild(d.startOffset-(c?1:0));if(n&&n.type==CKEDITOR.NODE_ELEMENT&&n.is("hr")){a.fire("saveSnapshot");n.remove();b=!0;break a}}d=d.startPath().block;if(!d||d&&d.contains(f))b=void 0;else{a.fire("saveSnapshot");var q;(q=(c?d:f).getBogus())&&q.remove(); +q=a.getSelection();n=q.createBookmarks();(c?f:d).moveChildren(c?d:f,!1);b.lastElement.mergeSiblings();e(f,d,!c);q.selectBookmarks(n);b=!0}}else b=!1}else c=d,q=b.block,d=c.endPath().block,q&&d&&!q.equals(d)?(a.fire("saveSnapshot"),(f=q.getBogus())&&f.remove(),c.enlarge(CKEDITOR.ENLARGE_INLINE),c.deleteContents(),d.getParent()&&(d.moveChildren(q,!1),b.lastElement.mergeSiblings(),e(q,d,!0)),c=a.getSelection().getRanges()[0],c.collapse(1),c.optimize(),""===c.startContainer.getHtml()&&c.startContainer.appendBogus(), c.select(),b=!0):b=!1;if(!b)return;a.getSelection().scrollIntoView();a.fire("saveSnapshot");return!1}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");--c?a.setCustomData("stylesheet_ref",c):(a.removeCustomData("stylesheet_ref"), b.removeCustomData("stylesheet").remove())}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;arguments.length&&(b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null));return b};CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))&&("false"!=a.getAttribute("contentEditable")&& a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1"),a.setAttribute("contentEditable",!1))});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();d&&!d.isLocked&&(d=c.checkDirty(),c.fire("lockSnapshot"),a(b),c.fire("unlockSnapshot"),!d&&c.resetDirty())}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-multiline","true");a.changeAttr("aria-label", -c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d&&(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents"))){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"'+e+'" class\x3d"cke_voice_label"\x3e'+d+"\x3c/span\x3e");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");e=CKEDITOR.dom.walker.whitespaces(!0); -y=CKEDITOR.dom.walker.bookmark(!1,!0);v=CKEDITOR.dom.walker.empty();x=CKEDITOR.dom.walker.bogus();F=/(^|]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;u=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,g,t,k=[],z=d.range.startContainer;e=d.range.startPath();for(var z=D[z.getName()],h=0,I=c.getChildren(),m=I.count(),q=-1,p=-1,P=0,E=e.contains(D.$list);hCKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),t=!1;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();f||(f=d.clone(),f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),t=!0);f||(f=e);f.is("table")?(d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START), -d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",t)),f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",t)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,t?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();M=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)||a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&& -a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var c=b.startContainer,d=!1,e;e=b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),d=!0);e||(e=c);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((c=e.getBogus())&&c.remove(),b.moveToPosition(e,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END),b.select())}}();w={eol:{detect:function(a,b){var c=a.range, -d=c.clone(),e=c.clone(),f=new CKEDITOR.dom.elementPath(c.startContainer,b),t=new CKEDITOR.dom.elementPath(c.endContainer,b);d.collapse(1);e.collapse();f.block&&d.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(c.setStartAfter(f.block),a.prependEolBr=1);t.block&&e.checkBoundaryOfElement(t.block,CKEDITOR.START)&&(c.setEndBefore(t.block),a.appendEolBr=1)},fix:function(a,b){var c=b.getDocument(),d;a.appendEolBr&&(d=this.createEolBr(c),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(c), -1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode,b=b.endNode;!b||!x(b)||c&&c.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var c=a.range,d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(c.startContainer,b),c=new CKEDITOR.dom.elementPath(c.endContainer,b),t;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1, -table:1})){var g=e.contains("table").getParent();t=function(a){return!a.equals(g)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),c=c.contains(CKEDITOR.dtd.$list),!f.equals(c))){var z=e.contains(CKEDITOR.dtd.$list).getParent();t=function(a){return!a.equals(z)}}t||(t=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a,b,d,t)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);)e=c.clone(0,1),a.fragment.appendTo(e), -a.fragment=e,c=c.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,c=a.endContainer,d=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(c)&&b.is("tr")&&++d==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};H=function(){function a(b,c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?"insertBefore":"insertAfter"](d)}function b(c,d,e){a(d);a(e,1);for(var f;f=e.getNext();)f.insertAfter(d),d=f;v(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode); -d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),f=d.endPath(),g=e.contains(CKEDITOR.dtd.$list),k=f.contains(CKEDITOR.dtd.$list);a.mergeList=g&&k&&g.getParent().equals(k.getParent())&&!g.equals(k);a.mergeListItems=e.block&&f.block&&e.block.is(CKEDITOR.dtd.$listItem)&&f.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList||a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark= -d.createBookmark()},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var k=f.contains(CKEDITOR.dtd.$list),h=g.contains(CKEDITOR.dtd.$list);k.equals(h)||(h.moveChildren(k),h.remove())}a.mergeListItems&&(f=f.contains(CKEDITOR.dtd.$listItem),g=g.contains(CKEDITOR.dtd.$listItem),f.equals(g)||b(g,d,e));d.remove();e.remove()}}},block:{detectMerge:function(a, -b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);c.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c),f=f.block,g=g.block;f&&g&&!f.equals(g)&&b(g,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e= -[],f,g=new CKEDITOR.dom.walker(c),k=c.startPath().contains(d),h=c.endPath().contains(d),l={};g.guard=function(a,g){if(a.type==CKEDITOR.NODE_ELEMENT){var A="visited_"+(g?"out":"in");if(a.getCustomData(A))return;CKEDITOR.dom.element.setMarker(l,a,A,1)}if(g&&k&&a.equals(k))f=c.clone(),f.setEndAt(k,CKEDITOR.POSITION_BEFORE_END),e.push(f);else if(!g&&h&&a.equals(h))f=c.clone(),f.setStartAt(h,CKEDITOR.POSITION_AFTER_START),e.push(f);else{if(A=!g)A=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!k||b(a,k))&&(!h|| -b(a,h));if(!A&&(A=g))if(a.is(d))var A=k&&k.getAscendant("table",!0),I=h&&h.getAscendant("table",!0),m=a.getAscendant("table",!0),A=A&&A.contains(m)||I&&I.contains(m);else A=void 0;A&&(f=c.clone(),f.selectNodeContents(a),e.push(f))}};g.lastForward();CKEDITOR.dom.element.clearAllMarkers(l);return e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c);return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b= -a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e};c.checkForward();if(1]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi;m=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,q,g,h=[],k=d.range.startContainer;e=d.range.startPath();for(var k=v[k.getName()],D=0,y=c.getChildren(),l=y.count(),m=-1,u=-1,Q=0,C=e.contains(v.$list);DCKEDITOR.env.version&&d.getChildCount()&&d.getFirst().remove())}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=!1;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();f||(f=d.clone(),f.setEndAt(e, +CKEDITOR.POSITION_BEFORE_END),f=a(f).lastForward(),g=!0);f||(f=e);f.is("table")?(d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START),d.collapse(!0),f.remove()):(f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g)),f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g)),(e=f.getBogus())&&e.remove(),d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END))}}();w=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return!1;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$list)|| +a.is(CKEDITOR.dtd.$listItem)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$listItem)};return b}return function(b){var c=b.startContainer,d=!1,e;e=b.clone();e.setStart(c,0);e=a(e).lastBackward();e||(e=b.clone(),e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),e=a(e).lastForward(),d=!0);e||(e=c);e.is(CKEDITOR.dtd.$list)?(b.setStartAt(e,CKEDITOR.POSITION_BEFORE_START),b.collapse(!0),e.remove()):((c=e.getBogus())&&c.remove(),b.moveToPosition(e,d?CKEDITOR.POSITION_AFTER_START: +CKEDITOR.POSITION_BEFORE_END),b.select())}}();J={eol:{detect:function(a,b){var c=a.range,d=c.clone(),e=c.clone(),f=new CKEDITOR.dom.elementPath(c.startContainer,b),g=new CKEDITOR.dom.elementPath(c.endContainer,b);d.collapse(1);e.collapse();f.block&&d.checkBoundaryOfElement(f.block,CKEDITOR.END)&&(c.setStartAfter(f.block),a.prependEolBr=1);g.block&&e.checkBoundaryOfElement(g.block,CKEDITOR.START)&&(c.setEndBefore(g.block),a.appendEolBr=1)},fix:function(a,b){var c=b.getDocument(),d;a.appendEolBr&&(d= +this.createEolBr(c),a.fragment.append(d));!a.prependEolBr||d&&!d.getPrevious()||a.fragment.append(this.createEolBr(c),1)},createEolBr:function(a){return a.createElement("br",{attributes:{"data-cke-eol":1}})}},bogus:{exclude:function(a){var b=a.range.getBoundaryNodes(),c=b.startNode,b=b.endNode;!b||!I(b)||c&&c.equals(b)||a.range.setEndBefore(b)}},tree:{rebuild:function(a,b){var c=a.range,d=c.getCommonAncestor(),e=new CKEDITOR.dom.elementPath(d,b),f=new CKEDITOR.dom.elementPath(c.startContainer,b), +c=new CKEDITOR.dom.elementPath(c.endContainer,b),g;d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());if(e.blockLimit.is({tr:1,table:1})){var v=e.contains("table").getParent();g=function(a){return!a.equals(v)}}else if(e.block&&e.block.is(CKEDITOR.dtd.$listItem)&&(f=f.contains(CKEDITOR.dtd.$list),c=c.contains(CKEDITOR.dtd.$list),!f.equals(c))){var h=e.contains(CKEDITOR.dtd.$list).getParent();g=function(a){return!a.equals(h)}}g||(g=function(a){return!a.equals(e.block)&&!a.equals(e.blockLimit)});this.rebuildFragment(a, +b,d,g)},rebuildFragment:function(a,b,c,d){for(var e;c&&!c.equals(b)&&d(c);)e=c.clone(0,1),a.fragment.appendTo(e),a.fragment=e,c=c.getParent()}},cell:{shrink:function(a){a=a.range;var b=a.startContainer,c=a.endContainer,d=a.startOffset,e=a.endOffset;b.type==CKEDITOR.NODE_ELEMENT&&b.equals(c)&&b.is("tr")&&++d==e&&a.shrink(CKEDITOR.SHRINK_TEXT)}}};F=function(){function a(b,c){var d=b.getParent();if(d.is(CKEDITOR.dtd.$inline))b[c?"insertBefore":"insertAfter"](d)}function b(c,d,e){a(d);a(e,1);for(var f;f= +e.getNext();)f.insertAfter(d),d=f;z(c)&&c.remove()}function c(a,b){var d=new CKEDITOR.dom.range(a);d.setStartAfter(b.startNode);d.setEndBefore(b.endNode);return d}return{list:{detectMerge:function(a,b){var d=c(b,a.bookmark),e=d.startPath(),f=d.endPath(),g=e.contains(CKEDITOR.dtd.$list),h=f.contains(CKEDITOR.dtd.$list);a.mergeList=g&&h&&g.getParent().equals(h.getParent())&&!g.equals(h);a.mergeListItems=e.block&&f.block&&e.block.is(CKEDITOR.dtd.$listItem)&&f.block.is(CKEDITOR.dtd.$listItem);if(a.mergeList|| +a.mergeListItems)d=d.clone(),d.setStartBefore(a.bookmark.startNode),d.setEndAfter(a.bookmark.endNode),a.mergeListBookmark=d.createBookmark()},merge:function(a,c){if(a.mergeListBookmark){var d=a.mergeListBookmark.startNode,e=a.mergeListBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e,c);if(a.mergeList){var h=f.contains(CKEDITOR.dtd.$list),k=g.contains(CKEDITOR.dtd.$list);h.equals(k)||(k.moveChildren(h),k.remove())}a.mergeListItems&&(f=f.contains(CKEDITOR.dtd.$listItem), +g=g.contains(CKEDITOR.dtd.$listItem),f.equals(g)||b(g,d,e));d.remove();e.remove()}}},block:{detectMerge:function(a,b){if(!a.tableContentsRanges&&!a.mergeListBookmark){var c=new CKEDITOR.dom.range(b);c.setStartBefore(a.bookmark.startNode);c.setEndAfter(a.bookmark.endNode);a.mergeBlockBookmark=c.createBookmark()}},merge:function(a,c){if(a.mergeBlockBookmark&&!a.purgeTableBookmark){var d=a.mergeBlockBookmark.startNode,e=a.mergeBlockBookmark.endNode,f=new CKEDITOR.dom.elementPath(d,c),g=new CKEDITOR.dom.elementPath(e, +c),f=f.block,g=g.block;f&&g&&!f.equals(g)&&b(g,d,e);d.remove();e.remove()}}},table:function(){function a(c){var e=[],f,g=new CKEDITOR.dom.walker(c),h=c.startPath().contains(d),n=c.endPath().contains(d),k={};g.guard=function(a,g){if(a.type==CKEDITOR.NODE_ELEMENT){var l="visited_"+(g?"out":"in");if(a.getCustomData(l))return;CKEDITOR.dom.element.setMarker(k,a,l,1)}if(g&&h&&a.equals(h))f=c.clone(),f.setEndAt(h,CKEDITOR.POSITION_BEFORE_END),e.push(f);else if(!g&&n&&a.equals(n))f=c.clone(),f.setStartAt(n, +CKEDITOR.POSITION_AFTER_START),e.push(f);else{if(l=!g)l=a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&(!h||b(a,h))&&(!n||b(a,n));if(!l&&(l=g))if(a.is(d))var l=h&&h.getAscendant("table",!0),m=n&&n.getAscendant("table",!0),p=a.getAscendant("table",!0),l=l&&l.contains(p)||m&&m.contains(p);else l=void 0;l&&(f=c.clone(),f.selectNodeContents(a),e.push(f))}};g.lastForward();CKEDITOR.dom.element.clearAllMarkers(k);return e}function b(a,c){var d=CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED,e=a.getPosition(c); +return e===CKEDITOR.POSITION_IDENTICAL?!1:0===(e&d)}var d={td:1,th:1,caption:1};return{detectPurge:function(a){var b=a.range,c=b.clone();c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var c=new CKEDITOR.dom.walker(c),e=0;c.evaluator=function(a){a.type==CKEDITOR.NODE_ELEMENT&&a.is(d)&&++e};c.checkForward();if(1f&&e&&e.intersectsNode(c.$)){var l=[{node:d.anchorNode,offset:d.anchorOffset}, -{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==c.$&&d.anchorOffset>f&&(l[0].offset-=f);d.focusNode==c.$&&d.focusOffset>f&&(l[1].offset-=f)}}c.setText(v(c.getText(),1));l&&(c=a.getDocument().$,d=c.getSelection(),c=c.createRange(),c.setStart(l[0].node,l[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(l[1].node,l[1].offset))}}function v(a,b){return b?a.replace(H,function(a,b){return b?" ":""}):a.replace(w,"")}function x(a,b){var c=b&&CKEDITOR.tools.htmlEncode(b)||"\x26nbsp;", +return c+=d.join("\t")}function f(a){var b=this.root.editor,d=b.getSelection(1);this.reset();F=!0;d.root.once("selectionchange",function(a){a.cancel()},null,null,0);d.selectRanges([a[0]]);d=this._.cache;d.ranges=new CKEDITOR.dom.rangeList(a);d.type=CKEDITOR.SELECTION_TEXT;d.selectedElement=a[0]._getTableElement();d.selectedText=c(a);d.nativeSel=null;this.isFake=1;this.rev=M++;b._.fakeSelection=this;F=!1;this.root.fire("selectionchange")}function h(){var b=this._.fakeSelection,c;if(b){c=this.getSelection(1); +var e;if(!(e=!c)&&(e=!c.isHidden())){e=b;var f=c.getRanges(),g=e.getRanges(),h=f.length&&f[0]._getTableElement()&&f[0]._getTableElement().getAscendant("table",!0),n=g.length&&g[0]._getTableElement()&&g[0]._getTableElement().getAscendant("table",!0),k=1===f.length&&f[0]._getTableElement()&&f[0]._getTableElement().is("table"),l=1===g.length&&g[0]._getTableElement()&&g[0]._getTableElement().is("table");if(a(e.getSelectedElement()))e=!1;else{var E=1===f.length&&f[0].collapsed,g=d(f,!!CKEDITOR.env.webkit)&& +d(g);h=h&&n?h.equals(n)||n.contains(h):!1;h&&(E||g)?(k&&!l&&e.selectRanges(f),e=!0):e=!1}e=!e}e&&(b.reset(),b=0)}if(!b&&(b=c||this.getSelection(1),!b||b.getType()==CKEDITOR.SELECTION_NONE))return;this.fire("selectionCheck",b);c=this.elementPath();c.compare(this._.selectionPreviousPath)||(e=this._.selectionPreviousPath&&this._.selectionPreviousPath.blockLimit.equals(c.blockLimit),!CKEDITOR.env.webkit&&!CKEDITOR.env.gecko||e||(this._.previousActive=this.document.getActive()),this._.selectionPreviousPath= +c,this.fire("selectionChange",{selection:b,path:c}))}function k(){B=!0;p||(g.call(this),p=CKEDITOR.tools.setTimeout(g,200,this))}function g(){p=null;B&&(CKEDITOR.tools.setTimeout(h,0,this),B=!1)}function l(a){return H(a)||a.type==CKEDITOR.NODE_ELEMENT&&!a.is(CKEDITOR.dtd.$empty)?!0:!1}function u(a){function b(c,d){return c&&c.type!=CKEDITOR.NODE_TEXT?a.clone()["moveToElementEdit"+(d?"End":"Start")](c):!1}if(!(a.root instanceof CKEDITOR.editable))return!1;var c=a.startContainer,d=a.getPreviousNode(l, +null,c),e=a.getNextNode(l,null,c);return b(d)||b(e,1)||!(d||e||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?!0:!1}function e(a){x(a,!1);var b=a.getDocument().createText(w);a.setCustomData("cke-fillingChar",b);return b}function x(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(!1!==b){var d=a.getDocument().getSelection().getNative(),e=d&&"None"!=d.type&&d.getRangeAt(0),f=w.length;if(c.getLength()>f&&e&&e.intersectsNode(c.$)){var n=[{node:d.anchorNode,offset:d.anchorOffset}, +{node:d.focusNode,offset:d.focusOffset}];d.anchorNode==c.$&&d.anchorOffset>f&&(n[0].offset-=f);d.focusNode==c.$&&d.focusOffset>f&&(n[1].offset-=f)}}c.setText(t(c.getText(),1));n&&(c=a.getDocument().$,d=c.getSelection(),c=c.createRange(),c.setStart(n[0].node,n[0].offset),c.collapse(!0),d.removeAllRanges(),d.addRange(c),d.extend(n[1].node,n[1].offset))}}function t(a,b){return b?a.replace(J,function(a,b){return b?" ":""}):a.replace(w,"")}function z(a,b){var c=b&&CKEDITOR.tools.htmlEncode(b)||"\x26nbsp;", c=CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"'+(CKEDITOR.env.ie&&14>CKEDITOR.env.version?"display:none":"position:fixed;top:0;left:-1000px;width:0;height:0;overflow:hidden;")+'"\x3e'+c+"\x3c/div\x3e",a.document);a.fire("lockSnapshot");a.editable().append(c);var d=a.getSelection(1),e=a.createRange(),f=d.root.on("selectionchange",function(a){a.cancel()},null,null,0);e.setStartAt(c,CKEDITOR.POSITION_AFTER_START);e.setEndAt(c,CKEDITOR.POSITION_BEFORE_END); -d.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=c}function F(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];1==e.length&&f.collapsed&&(d=f[38>d?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function u(a){for(var b=0;b=d.getLength()?g.setStartAfter(d):g.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(l?g.setEndAfter(e): -g.setEndBefore(e));d=new CKEDITOR.dom.walker(g);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(g.endContainer)&CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+1,0,e));return!0}return!1};d.next()}}return a}var m="function"!=typeof window.getSelection,M=1,w=CKEDITOR.tools.repeat("​",7),H=new RegExp(w+"( )?","g"),n,r,C,L=CKEDITOR.dom.walker.invisible(1),E=function(){function a(b){return function(a){var c= +d.selectRanges([e]);f.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=c}function I(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];1==e.length&&f.collapsed&&(d=f[38>d?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&"false"==d.getAttribute("contenteditable")&&(a.getSelection().fake(d),c.data.preventDefault(),c.cancel())}}}function r(a){for(var b=0;b=d.getLength()?g.setStartAfter(d):g.setStartBefore(d));e&&e.type==CKEDITOR.NODE_TEXT&&(n?g.setEndAfter(e): +g.setEndBefore(e));d=new CKEDITOR.dom.walker(g);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);d.getPosition(g.endContainer)&CKEDITOR.POSITION_CONTAINS||(e.setStartAfter(d),e.collapsed||a.splice(b+1,0,e));return!0}return!1};d.next()}}return a}var m="function"!=typeof window.getSelection,M=1,w=CKEDITOR.tools.repeat("​",7),J=new RegExp(w+"( )?","g"),F,p,B,H=CKEDITOR.dom.walker.invisible(1),C=function(){function a(b){return function(a){var c= a.editor.createRange();c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return!1}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!c.readOnly)return(e=d.moveToClosestEditablePosition(b.selected,a))||(e=d.moveToClosestEditablePosition(b.selected,!a)),e&&c.getSelection().selectRanges([d]),c.fire("saveSnapshot"),b.selected.remove(),e||(d.moveToElementEditablePosition(c.editable()),c.getSelection().selectRanges([d])),c.fire("saveSnapshot"), -!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=c.getSelection();a&&a.removeAllRanges()}var c=a.editor;c.on("contentDom",function(){function a(){p=new CKEDITOR.dom.selection(c.getSelection());p.lock()}function b(){f.removeListener("mouseup",b);n.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,c=a.createRange();"None"!=a.type&&c.parentElement()&&c.parentElement().ownerDocument==e.$&&c.select()}function d(a){a= -a.getRanges()[0];return a?(a=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")},!0))&&"false"===a.getAttribute("contenteditable")?a:null:null}var e=c.document,f=CKEDITOR.document,h=c.editable(),t=e.getBody(),n=e.getDocumentElement(),D=h.isInline(),q,p;CKEDITOR.env.gecko&&h.attachListener(h,"focus",function(a){a.removeListener();0!==q&&(a=c.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==h.$&&(a=c.createRange(),a.moveToElementEditStart(h), -a.select())},null,null,-2);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(q&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){q=c._.previousActive&&c._.previousActive.equals(e.getActive());var a=null!=c._.previousScrollTop&&c._.previousScrollTop!=h.$.scrollTop;CKEDITOR.env.webkit&&q&&a&&(h.$.scrollTop=c._.previousScrollTop)}c.unlockSelection(q);q=0},null,null,-1);h.attachListener(h,"mousedown",function(){q=0});if(CKEDITOR.env.ie||D)m?h.attachListener(h,"beforedeactivate", -a,null,null,-1):h.attachListener(c,"selectionCheck",a,null,null,-1),h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusout":"blur",function(){c.lockSelection(p);q=1},null,null,-1),h.attachListener(h,"mousedown",function(){q=0});if(CKEDITOR.env.ie&&!D){var v;h.attachListener(h,"mousedown",function(a){2==a.data.$.button&&((a=c.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(v=c.window.getScrollPosition()))});h.attachListener(h,"mouseup",function(a){2==a.data.$.button&& -v&&(c.document.$.documentElement.scrollLeft=v.x,c.document.$.documentElement.scrollTop=v.y);v=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var r,x;n.on("mousedown",function(a){function b(a){a=a.data.$;if(r){var c=t.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(d){}r.setEndPoint(0>x.compareEndPoints("StartToStart",c)?"EndToEnd":"StartToStart",c);r.select()}}function c(){n.removeListener("mousemove",b);f.removeListener("mouseup",c);n.removeListener("mouseup", -c);r.select()}a=a.data;if(a.getTarget().is("html")&&a.$.yCKEDITOR.env.version)n.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",b),n.on("mouseup",b))})}}h.attachListener(h,"selectionchange",g,c);h.attachListener(h,"keyup",k,c);h.attachListener(h,"touchstart", -k,c);h.attachListener(h,"touchend",k,c);CKEDITOR.env.ie&&h.attachListener(h,"keydown",function(a){var b=this.getSelection(1),c=d(b);c&&!c.equals(h)&&(b.selectElement(c),a.data.preventDefault())},c);h.attachListener(h,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){c.forceNextSelectionCheck();c.selectionChange(1)});if(D&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var u;h.attachListener(h,"mousedown",function(){u=1});h.attachListener(e.getDocumentElement(),"mouseup",function(){u&& -k.call(c);u=0})}else h.attachListener(CKEDITOR.env.ie?h:e.getDocumentElement(),"mouseup",k,c);CKEDITOR.env.webkit&&h.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:h.hasFocus&&y(h)}},null,null,-1);h.attachListener(h,"keydown",F(c),null,null,-1)});c.on("setData",function(){c.unlockSelection();CKEDITOR.env.webkit&&b()});c.on("contentDomUnload",function(){c.unlockSelection()});if(CKEDITOR.env.ie9Compat)c.on("beforeDestroy", +!1}}var c=a(),d=a(1);return{37:c,38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(a){function b(){var a=c.getSelection();a&&a.removeAllRanges()}var c=a.editor;c.on("contentDom",function(){function a(){p=new CKEDITOR.dom.selection(c.getSelection());p.lock()}function b(){f.removeListener("mouseup",b);l.removeListener("mouseup",b);var a=CKEDITOR.document.$.selection,c=a.createRange();"None"!=a.type&&c.parentElement()&&c.parentElement().ownerDocument==e.$&&c.select()}function d(a){a= +a.getRanges()[0];return a?(a=a.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")},!0))&&"false"===a.getAttribute("contenteditable")?a:null:null}var e=c.document,f=CKEDITOR.document,g=c.editable(),q=e.getBody(),l=e.getDocumentElement(),A=g.isInline(),D,p;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();0!==D&&(a=c.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$&&(a=c.createRange(),a.moveToElementEditStart(g), +a.select())},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){if(D&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){D=c._.previousActive&&c._.previousActive.equals(e.getActive());var a=null!=c._.previousScrollTop&&c._.previousScrollTop!=g.$.scrollTop;CKEDITOR.env.webkit&&D&&a&&(g.$.scrollTop=c._.previousScrollTop)}c.unlockSelection(D);D=0},null,null,-1);g.attachListener(g,"mousedown",function(){D=0});if(CKEDITOR.env.ie||A)m?g.attachListener(g,"beforedeactivate", +a,null,null,-1):g.attachListener(c,"selectionCheck",a,null,null,-1),g.attachListener(g,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusout":"blur",function(){c.lockSelection(p);D=1},null,null,-1),g.attachListener(g,"mousedown",function(){D=0});if(CKEDITOR.env.ie&&!A){var u;g.attachListener(g,"mousedown",function(a){2==a.data.$.button&&((a=c.document.getSelection())&&a.getType()!=CKEDITOR.SELECTION_NONE||(u=c.window.getScrollPosition()))});g.attachListener(g,"mouseup",function(a){2==a.data.$.button&& +u&&(c.document.$.documentElement.scrollLeft=u.x,c.document.$.documentElement.scrollTop=u.y);u=null});if("BackCompat"!=e.$.compatMode){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat){var r,t;l.on("mousedown",function(a){function b(a){a=a.data.$;if(r){var c=q.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(d){}r.setEndPoint(0>t.compareEndPoints("StartToStart",c)?"EndToEnd":"StartToStart",c);r.select()}}function c(){l.removeListener("mousemove",b);f.removeListener("mouseup",c);l.removeListener("mouseup", +c);r.select()}a=a.data;if(a.getTarget().is("html")&&a.$.yCKEDITOR.env.version)l.on("mousedown",function(a){a.data.getTarget().is("html")&&(f.on("mouseup",b),l.on("mouseup",b))})}}g.attachListener(g,"selectionchange",h,c);g.attachListener(g,"keyup",k,c);g.attachListener(g,"touchstart", +k,c);g.attachListener(g,"touchend",k,c);CKEDITOR.env.ie&&g.attachListener(g,"keydown",function(a){var b=this.getSelection(1),c=d(b);c&&!c.equals(g)&&(b.selectElement(c),a.data.preventDefault())},c);g.attachListener(g,CKEDITOR.env.webkit||CKEDITOR.env.gecko?"focusin":"focus",function(){c.forceNextSelectionCheck();c.selectionChange(1)});if(A&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var z;g.attachListener(g,"mousedown",function(){z=1});g.attachListener(e.getDocumentElement(),"mouseup",function(){z&& +k.call(c);z=0})}else g.attachListener(CKEDITOR.env.ie?g:e.getDocumentElement(),"mouseup",k,c);CKEDITOR.env.webkit&&g.attachListener(e,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:g.hasFocus&&x(g)}},null,null,-1);g.attachListener(g,"keydown",I(c),null,null,-1)});c.on("setData",function(){c.unlockSelection();CKEDITOR.env.webkit&&b()});c.on("contentDomUnload",function(){c.unlockSelection()});if(CKEDITOR.env.ie9Compat)c.on("beforeDestroy", b,null,null,9);c.on("dataReady",function(){delete c._.fakeSelection;delete c._.hiddenSelectionContainer;c.selectionChange(1)});c.on("loadSnapshot",function(){var a=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT),b=c.editable().getLast(a);b&&b.hasAttribute("data-cke-hidden-sel")&&(b.remove(),CKEDITOR.env.gecko&&(a=c.editable().getFirst(a))&&a.is("br")&&a.getAttribute("_moz_editor_bogus_node")&&a.remove())},null,null,100);c.on("key",function(a){if("wysiwyg"==c.mode){var b=c.getSelection();if(b.isFake){var d= -E[a.data.keyCode];if(d)return d({editor:c,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),c=a.getCustomData("cke-fillingChar");c&&(c.getCustomData("ready")?(y(a),a.editor.fire("selectionCheck")):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){y(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=v(a.data))}, -b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=v(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?g:k).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE? +C[a.data.keyCode];if(d)return d({editor:c,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});if(CKEDITOR.env.webkit)CKEDITOR.on("instanceReady",function(a){var b=a.editor;b.on("selectionChange",function(){var a=b.editable(),c=a.getCustomData("cke-fillingChar");c&&(c.getCustomData("ready")?(x(a),a.editor.fire("selectionCheck")):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){x(b.editable())},null,null,-1);b.on("getSnapshot",function(a){a.data&&(a.data=t(a.data))}, +b,null,20);b.on("toDataFormat",function(a){a.data.dataValue=t(a.data.dataValue)},null,null,0)});CKEDITOR.editor.prototype.selectionChange=function(a){(a?h:k).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){return!this._.savedSelection&&!this._.fakeSelection||a?(a=this.editable())&&"wysiwyg"==this.mode?new CKEDITOR.dom.selection(a):null:this._.savedSelection||this._.fakeSelection};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);return a.getType()!=CKEDITOR.SELECTION_NONE? (!a.isLocked&&a.lock(),this._.savedSelection=a,!0):!1};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;return b?(b.unlock(a),delete this._.savedSelection,!0):!1};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection(): new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection){var b=a;a=a.root}var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:M++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b)return CKEDITOR.tools.extend(this._.cache,b._.cache), this.isFake=b.isFake,this.isLocked=b.isLocked,this;a=this.getNative();var d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||d.type!=CKEDITOR.NODE_ELEMENT&&d.type!=CKEDITOR.NODE_TEXT||!this.root.equals(d)&&!this.root.contains(d))this._.cache.type=CKEDITOR.SELECTION_NONE,this._.cache.startElement=null,this._.cache.selectedElement= -null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var N={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:v,_createFillingCharSequenceNode:e,FILLING_CHAR_SEQUENCE:w});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel= +null,this._.cache.selectedText="",this._.cache.ranges=new CKEDITOR.dom.rangeList;return this};var N={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.tools.extend(CKEDITOR.dom.selection,{_removeFillingCharSequenceString:t,_createFillingCharSequenceNode:e,FILLING_CHAR_SEQUENCE:w});CKEDITOR.dom.selection.prototype={getNative:function(){return void 0!==this._.cache.nativeSel?this._.cache.nativeSel:this._.cache.nativeSel= m?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:m?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;"Text"==d&&(b=CKEDITOR.SELECTION_TEXT);"Control"==d&&(b=CKEDITOR.SELECTION_ELEMENT);c.createRange().parentElement()&&(b=CKEDITOR.SELECTION_TEXT)}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE; else if(1==c.rangeCount){var c=c.getRangeAt(0),d=c.startContainer;d==c.endContainer&&1==d.nodeType&&1==c.endOffset-c.startOffset&&N[d.childNodes[c.startOffset].nodeName.toLowerCase()]&&(b=CKEDITOR.SELECTION_ELEMENT)}return a.type=b},getRanges:function(){var a=m?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,g,h=b.duplicate(),k=0, -m=e.length-1,n=-1,t,q;k<=m;)if(n=Math.floor((k+m)/2),f=e[n],h.moveToElementText(f),t=h.compareEndPoints("StartToStart",b),0t)k=n+1;else return{container:d,offset:a(f)};if(-1==n||n==e.length-1&&0>t){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h)return f=e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};for(d=e.length;0m)k=q+1;else return{container:d,offset:a(f)};if(-1==q||q==e.length-1&&0>m){h.moveToElementText(d);h.setEndPoint("StartToStart",b);h=h.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!h)return f=e[e.length-1],f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length};for(d=e.length;0]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g, -" ");g=g.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(f);f.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";f.copyAttributes(h.getFirst());f=h.getFirst().remove()}else f.setHtml(g);b=f}else g?b=v(c?[a.getHtml()]:e(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(I))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=y(k.getHtml(),/\n$/,"")+"\n\n"+y(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e": -c.setHtml(d),k.remove())}else c&&m(b)}function e(a){var b=[];y(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"\x3c/pre\x3e"+c+"\x3cpre\x3e"}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function y(a,b,c){var d="",e="";a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function v(a,b){var c; -1]*>)[ \t\r\n]*/gi,"$1");g=g.replace(/([ \t\n\r]+| )/g, +" ");g=g.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var h=a.getDocument().createElement("div");h.append(f);f.$.outerHTML="\x3cpre\x3e"+g+"\x3c/pre\x3e";f.copyAttributes(h.getFirst());f=h.getFirst().remove()}else f.setHtml(g);b=f}else g?b=t(c?[a.getHtml()]:e(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,k;(k=c.getPrevious(y))&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("pre")&&(d=x(k.getHtml(),/\n$/,"")+"\n\n"+x(c.getHtml(),/^\n/,""),CKEDITOR.env.ie?c.$.outerHTML="\x3cpre\x3e"+d+"\x3c/pre\x3e": +c.setHtml(d),k.remove())}else c&&m(b)}function e(a){var b=[];x(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"\x3c/pre\x3e"+c+"\x3cpre\x3e"}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function x(a,b,c){var d="",e="";a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function t(a,b){var c; +1=c?(g=f.createText(""),g.insertAfter(this)):(a=f.createText(""),a.insertAfter(g),a.remove()));return g},substring:function(a, +CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var d=this.$.parentNode,b=d.childNodes.length,c=this.getLength(),f=this.getDocument(),h=new CKEDITOR.dom.text(this.$.splitText(a),f);d.childNodes.length==b&&(a>=c?(h=f.createText(""),h.insertAfter(this)):(a=f.createText(""),a.insertAfter(h),a.remove()));return h},substring:function(a, d){return"number"!=typeof d?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,d)}}); -(function(){function a(a,c,d){var g=a.serializable,k=c[d?"endContainer":"startContainer"],h=d?"endOffset":"startOffset",p=g?c.document.getById(a.startNode):a.startNode;a=g?c.document.getById(a.endNode):a.endNode;k.equals(p.getPrevious())?(c.startOffset=c.startOffset-k.getLength()-a.getPrevious().getLength(),k=a.getNext()):k.equals(a.getPrevious())&&(c.startOffset-=k.getLength(),k=a.getNext());k.equals(p.getParent())&&c[h]++;k.equals(a.getParent())&&c[h]++;c[d?"endContainer":"startContainer"]=k;return c} -CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,d)};var d={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),d=[],g;return{getNextRange:function(k){g=void 0===g?0:g+1;var h=a[g];if(h&&1b?-1:1}),f=0,g;fb?-1:1}),f=0,g;fCKEDITOR.env.version? -a[h].$.styleSheet.cssText+=g:a[h].$.innerHTML+=g}}var g={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,f){var g;a&&(a=a.toLowerCase(),b&&(g=this.icons[a+"-rtl"]), -g||(g=this.icons[a]));a=c||g&&g.path||"";d=d||g&&g.offset;f=f||g&&g.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+d+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",g="";"function"==typeof c&&(d=c(this,"editor"),g= -c(this,"panel"));a=[[p,a]];f([b],d,a);f(h,g,a)}).call(this,a)}});var k="cke_ui_color",h=[],p=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){var d=c(a);h.push(d);b.on("destroy",function(){h=CKEDITOR.tools.array.filter(h,function(a){return d!==a})});(a=b.getUiColor())&&f([d],CKEDITOR.skin.chameleon(b,"panel"), -[[p,a]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); +a[h].$.styleSheet.cssText+=g:a[h].$.innerHTML+=g}}var h={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(d(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,b,c,d,f){var g;a&&(a=a.toLowerCase(),b&&(g=this.icons[a+"-rtl"]), +g||(g=this.icons[a]));a=c||g&&g.path||"";d=d||g&&g.offset;f=f||g&&g.bgsize||"16px";a&&(a=a.replace(/'/g,"\\'"));return a&&"background-image:url('"+CKEDITOR.getUrl(a)+"');background-position:0 "+d+"px;background-size:"+f+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){this.uiColor=a;var c=CKEDITOR.skin.chameleon,d="",h="";"function"==typeof c&&(d=c(this,"editor"),h= +c(this,"panel"));a=[[l,a]];f([b],d,a);f(g,h,a)}).call(this,a)}});var k="cke_ui_color",g=[],l=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor;a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){var d=c(a);g.push(d);b.on("destroy",function(){g=CKEDITOR.tools.array.filter(g,function(a){return d!==a})});(a=b.getUiColor())&&f([d],CKEDITOR.skin.chameleon(b,"panel"), +[[l,a]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})(); (function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=!1;else{var a=CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var d=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!(!d||d!=b)}catch(c){CKEDITOR.env.hc=!1}a.remove()}CKEDITOR.env.hc&&(CKEDITOR.env.cssClass+=" cke_hc");CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); -CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending)for(delete CKEDITOR._.pending,d=0;de;e++){var f=e,c;c=parseInt(a[e],16);c=("0"+(0>d?0|c*(1+d):0|c+(255-c)*d).toString(16)).slice(-2);a[f]=c}return"#"+a.join("")}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover,{id} a.cke_path_item:focus,{id} a.cke_path_item:active [background-color:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "),panel:new CKEDITOR.template(".cke_panel_grouptitle [background-color:{lightBackground};border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active [background-color:{menubuttonHover};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; return function(g,d){var a=b(g.uiColor,.4),a={id:"."+g.id,defaultBorder:b(a,-.2),toolbarElementsBorder:b(a,-.25),defaultBackground:a,lightBackground:b(a,.8),darkBackground:b(a,-.15),ckeButtonOn:b(a,.4),ckeResizer:b(a,-.4),ckeColorauto:b(a,.8),dialogBody:b(a,.7),dialogTab:b(a,.65),dialogTabSelected:"#FFF",dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-.6),menubuttonHover:b(a,.1),menubuttonIcon:b(a,.5),menubuttonIconHover:b(a,.3)};return f[d].output(a).replace(/\[/g,"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;db.length)){var c=l._.currentFocusIndex;l._.tabBarMode&&0>a&&(c=0);try{b[c].getInputElement().$.blur()}catch(d){}var e=c,g=1c?d+c:b.width>c?d-a.left:d-a.right+b.width):mc?d-c:b.width> k.markFirstDisplayed():k._.markFirstDisplayed()},0):k.markFirstDisplayed?k.markFirstDisplayed():k._.markFirstDisplayed());this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},reposition:function(){var a=this._.showBlockParams;this.visible&&this._.showBlockParams&&(this.hide(),this.showBlock.apply(this,a))},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused|| this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(), a.focus();delete this._.lastFocused;this._.showBlockParams=null;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!==a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,f,h,g){if(this._.activeChild!=a||a._.panel._.offsetParentId!=c.getId())this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,f,h,g),this.blur(), -(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100)},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in f){var c=f[b];a?c.destroy():c.element.hide()}a&&(f={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(e){function t(a,d,g,r,k){var p=new CKEDITOR.style(l["colorButton_"+d+"Style"]),m=CKEDITOR.tools.getNextId()+"_colorBox",q;k=k||{};e.ui.add(a,CKEDITOR.UI_PANELBUTTON,{label:g,title:g,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+r,allowedContent:p,requiredContent:p,contentTransformations:k.contentTransformations,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":h.panelTitle}},onBlock:function(a, -b){q=b;b.autoSize=!0;b.element.addClass("cke_colorblock");b.element.setHtml(y(a,d,m));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var c=b.keys,f="rtl"==e.lang.dir;c[f?37:39]="next";c[40]="next";c[9]="next";c[f?39:37]="prev";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]="click"},refresh:function(){e.activeFilter.check(p)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=e.getSelection(),b=a&&a.getStartElement(),c=e.elementPath(b); -if(c){b=c.block||c.blockLimit||e.document.getBody();do c=b&&b.getComputedStyle("back"==d?"background-color":"color")||"transparent";while("back"==d&&"transparent"==c&&b&&(b=b.getParent()));c&&"transparent"!=c||(c="#ffffff");!1!==l.colorButton_enableAutomatic&&this._.panel._.iframe.getFrameDocument().getById(m).setStyle("background-color",c);if(b=a&&a.getRanges()[0]){for(var a=new CKEDITOR.dom.walker(b),f=b.collapsed?b.startContainer:a.next(),b="";f;){f.type!==CKEDITOR.NODE_ELEMENT&&(f=f.getParent()); -f=u(f.getComputedStyle("back"==d?"background-color":"color"));b=b||f;if(b!==f){b="";break}f=a.next()}a=b;b=q._.getItems();for(f=0;fd.group?1:a.orderd.order?1:0})}var h='\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked} draggable\x3d"false"'; CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress\x3d"return false;"');CKEDITOR.env.gecko&&(h+=' onblur\x3d"this.style.cssText \x3d this.style.cssText;" ondragstart\x3d"return false;"');var h=h+(' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick\x3d"return false;" onmouseup':"onclick")+'\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e'),r=CKEDITOR.addTemplate("menuItem", @@ -1002,7 +1005,7 @@ decodeURIComponent(e[1]));a&&(k.body=decodeURIComponent(a[1]))}else a&&(e=a.matc (g.download=!0);var a={},h;for(h in m)(f=b.getAttribute(h))&&(a[m[h]]=f);if(h=b.data("cke-saved-name")||a.advName)a.advName=h;CKEDITOR.tools.isEmpty(a)||(g.advanced=a)}return g},getLinkAttributes:function(c,b){var a=c.config.emailProtection||"",d={};switch(b.type){case "url":var a=b.url&&void 0!==b.url.protocol?b.url.protocol:"http://",f=b.url&&CKEDITOR.tools.trim(b.url.url)||"";d["data-cke-saved-href"]=0===f.indexOf("/")?f:a+f;break;case "anchor":a=b.anchor&&b.anchor.id;d["data-cke-saved-href"]= "#"+(b.anchor&&b.anchor.name||a||"");break;case "email":var e=b.email,f=e.address;switch(a){case "":case "encode":var g=encodeURIComponent(e.subject||""),k=encodeURIComponent(e.body||""),e=[];g&&e.push("subject\x3d"+g);k&&e.push("body\x3d"+k);e=e.length?"?"+e.join("\x26"):"";"encode"==a?(a=["javascript:void(location.href\x3d'mailto:'+",q(f)],e&&a.push("+'",p(e),"'"),a.push(")")):a=["mailto:",f,e];break;default:a=f.split("@",2),e.name=a[0],e.domain=a[1],a=["javascript:",r(c,e)]}d["data-cke-saved-href"]= a.join("");break;case "tel":d["data-cke-saved-href"]="tel:"+b.tel}if(b.target)if("popup"==b.target.type){for(var a=["window.open(this.href, '",b.target.name||"","', '"],h="resizable status location toolbar menubar fullscreen scrollbars dependent".split(" "),f=h.length,g=function(a){b.target[a]&&h.push(a+"\x3d"+b.target[a])},e=0;e=g)for(b=this.getNextSourceNode(k,CKEDITOR.NODE_ELEMENT);b;){if(b.isVisible()&&0===b.getTabIndex()){d=b;break}b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(b=this.getDocument().getBody().getFirst();b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&b.equals(this)){if(c=!0,k){if(!(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(b)&& (f=1);if(b.isVisible()&&!(0>(a=b.getTabIndex()))){if(f&&a==g){d=b;break}a>g&&(!d||!e||a(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}be)&&(d=a,e=b)}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function f(c){return CKEDITOR.tools.extend(c||{},{contextSensitive:1,refresh:function(c,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var e=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab? -"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(c){if(c.styles){var a;if(c.styles.border)a=CKEDITOR.tools.style.parse.border(c.styles.border);else if(CKEDITOR.env.ie&&8===CKEDITOR.env.version){var b=c.styles;b["border-left"]&&b["border-left"]===b["border-right"]&&b["border-right"]===b["border-top"]&&b["border-top"]===b["border-bottom"]&& -(a=CKEDITOR.tools.style.parse.border(b["border-top"]))}a&&a.style&&"solid"===a.style&&a.width&&0!==parseFloat(a.width)&&(c.attributes.border=1);"collapse"==c.styles["border-collapse"]&&(c.attributes.cellspacing=0)}}}]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",f()));a.addCommand("tableDelete",f({exec:function(a){var d=a.elementPath().contains("table",1);if(d){var b=d.getParent(),e=a.editable();1!=b.getChildCount()||b.is("td","th")||b.equals(e)||(d=b);a=a.createRange(); -a.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:e.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:e.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:e.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&& -(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function q(d,f){function b(a){return f?f.contains(a)&&a.getAscendant("table",!0).equals(f):!0}function c(a){0(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}be)&&(d=a,e=b)}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function f(c){return CKEDITOR.tools.extend(c||{},{contextSensitive:1,refresh:function(c,b){this.setState(b.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var e=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height,border-collapse}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];td{border*,background-color,vertical-align,width,height}[colspan,rowspan];"+ +(a.plugins.dialogadvtab?"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"],["td: splitBorderShorthand"],[{element:"table",right:function(c){if(c.styles){var a;if(c.styles.border)a=CKEDITOR.tools.style.parse.border(c.styles.border);else if(CKEDITOR.env.ie&&8===CKEDITOR.env.version){var b=c.styles;b["border-left"]&&b["border-left"]===b["border-right"]&&b["border-right"]===b["border-top"]&& +b["border-top"]===b["border-bottom"]&&(a=CKEDITOR.tools.style.parse.border(b["border-top"]))}a&&a.style&&"solid"===a.style&&a.width&&0!==parseFloat(a.width)&&(c.attributes.border=1);"collapse"==c.styles["border-collapse"]&&(c.attributes.cellspacing=0)}}}]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",f()));a.addCommand("tableDelete",f({exec:function(a){var d=a.elementPath().contains("table",1);if(d){var b=d.getParent(),e=a.editable();1!=b.getChildCount()||b.is("td", +"th")||b.equals(e)||(d=b);a=a.createRange();a.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:e.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:e.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:e.deleteTable,command:"tableDelete",group:"table", +order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function q(d,f){function b(a){return f?f.contains(a)&&a.getAscendant("table",!0).equals(f):!0}function c(a){0v);x++){y[u+x]||(y[u+x]=[]);for(var C=0;C=w)break}}return y};(function(){function D(a){return CKEDITOR.plugins.widget&&CKEDITOR.plugins.widget.isDomWidget(a)}function z(a,b){var c=a.getAscendant("table"),d=b.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(c),g=r(a),h=r(b),k=[],f={},l,p;c.contains(d)&&(b=b.getAscendant({td:1,th:1}),h=r(b));g>h&&(c=g,g=h,h=c,c=a,a=b,b=c);for(c=0;cp&&(c=l,l=p,p=c);for(c=g;c<=h;c++)for(g=l;g<=p;g++)d=new CKEDITOR.dom.element(e[c][g]), -d.$&&!d.getCustomData("selected_cell")&&(k.push(d),CKEDITOR.dom.element.setMarker(f,d,"selected_cell",!0));CKEDITOR.dom.element.clearAllMarkers(f);return k}function I(a){if(a)return a=a.clone(),a.enlarge(CKEDITOR.ENLARGE_ELEMENT),(a=a.getEnclosedNode())&&a.is&&a.is(CKEDITOR.dtd.$tableContent)}function J(a){return(a=a.editable().findOne(".cke_table-faked-selection"))&&a.getAscendant("table")}function A(a,b){var c=a.editable().find(".cke_table-faked-selection"),d;a.fire("lockSnapshot");a.editable().removeClass("cke_table-faked-selection-editor"); -for(d=0;db.count()|| -(b=z(b.getItem(0),b.getItem(b.count()-1)),t(a,b))}function L(a,b,c){var d=v(a.getSelection(!0));b=b.is("table")?null:b;var e;(e=m.active&&!m.first)&&!(e=b)&&(e=a.getSelection().getRanges(),e=1CKEDITOR.env.version, -l=a.blockless||CKEDITOR.env.ie?"span":"div",p,x,n,m;g.getById("cke_table_copybin")||(p=g.createElement(l),x=g.createElement(l),x.setAttributes({id:"cke_table_copybin","data-cke-temp":"1"}),p.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"}),p.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-5000px"),p.setHtml(a.getSelectedHtml(!0)),a.fire("lockSnapshot"),x.append(p),a.editable().append(x),m=a.on("selectionChange",c,null,null,0),f&&(n=k.scrollTop),h.selectNodeContents(p), -h.select(),f&&(k.scrollTop=n),setTimeout(function(){x.remove();d.selectBookmarks(e);m.removeListener();a.fire("unlockSnapshot");b&&(a.extractSelectedHtml(),a.fire("saveSnapshot"))},100))}function E(a){var b=a.editor||a.sender.editor;b.getSelection().isInTable()&&O(b,"cut"===a.name)}function q(a){this._reset();a&&this.setSelectedCells(a)}function B(a,b,c){a.on("beforeCommandExec",function(d){-1!==CKEDITOR.tools.array.indexOf(b,d.data.name)&&(d.data.selectedCells=v(a.getSelection()))});a.on("afterCommandExec", -function(d){-1!==CKEDITOR.tools.array.indexOf(b,d.data.name)&&c(a,d.data)})}var m={active:!1},y,v,C,F,G;q.prototype={};q.prototype._reset=function(){this.cells={first:null,last:null,all:[]};this.rows={first:null,last:null}};q.prototype.setSelectedCells=function(a){this._reset();a=a.slice(0);this._arraySortByDOMOrder(a);this.cells.all=a;this.cells.first=a[0];this.cells.last=a[a.length-1];this.rows.first=a[0].getAscendant("tr");this.rows.last=this.cells.last.getAscendant("tr")};q.prototype.getTableMap= -function(){var a=C(this.cells.first),b;a:{b=this.cells.last;var c=b.getAscendant("table"),d=r(b),c=CKEDITOR.tools.buildTableMap(c),e;for(e=0;e=a)return;for(var d= -this.cells.first.$.cellIndex,e=this.cells.last.$.cellIndex,g=c?[]:this.cells.all,h,k=0;k=d&&a.$.cellIndex<=e}),g=b?h.concat(g):g.concat(h);this.setSelectedCells(g)};q.prototype.insertColumn=function(a){function b(a){a=r(a);return a>=e&&a<=g}if("undefined"===typeof a)a=1;else if(0>=a)return;for(var c=this.cells,d=c.all,e=r(c.first),g=r(c.last),c=0;cf)n[0].moveToElementEditablePosition(m?q:r,!m),h.selectRanges([n[0]]); -else if(13!==f||13===l||l===CKEDITOR.SHIFT+13){for(k=0;kCKEDITOR.env.version)};CKEDITOR.plugins.add("tableselection",{requires:"clipboard,tabletools",onLoad:function(){y=CKEDITOR.plugins.tabletools;v=y.getSelectedCells;C=y.getCellColIndex;F=y.insertRow;G=y.insertColumn;CKEDITOR.document.appendStyleSheet(this.path+ -"styles/tableselection.css")},init:function(a){CKEDITOR.plugins.tableselection.isSupportedEnvironment&&(a.addContentsCss&&a.addContentsCss(this.path+"styles/tableselection.css"),a.on("contentDom",function(){var b=a.editable(),c=b.isInline()?b:a.document,d={editor:a};b.attachListener(c,"mousedown",w,null,d);b.attachListener(c,"mousemove",w,null,d);b.attachListener(c,"mouseup",w,null,d);b.attachListener(b,"dragstart",N);b.attachListener(a,"selectionCheck",M);CKEDITOR.plugins.tableselection.keyboardIntegration(a); -CKEDITOR.plugins.clipboard&&!CKEDITOR.plugins.clipboard.isCustomCopyCutSupported&&(b.attachListener(b,"cut",E),b.attachListener(b,"copy",E))}),a.on("paste",H.onPaste,H),B(a,"rowInsertBefore rowInsertAfter columnInsertBefore columnInsertAfter cellInsertBefore cellInsertAfter".split(" "),function(a,c){t(a,c.selectedCells)}),B(a,["cellMerge","cellMergeRight","cellMergeDown"],function(a,c){t(a,[c.commandData.cell])}),B(a,["cellDelete"],function(a){A(a,!0)}))}})})();(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],n={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:"wysiwyg"==a.mode;d.onChange()}var d=a.undoManager=new e(a),l=d.editingHandler=new k(d),f=a.addCommand("undo",{exec:function(){d.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),h=a.addCommand("redo",{exec:function(){d.redo()&& +CKEDITOR.tools.buildTableMap=function(q,r,B,v,w){q=q.$.rows;B=B||0;v="number"===typeof v?v:q.length-1;w="number"===typeof w?w:-1;var u=-1,y=[];for(r=r||0;r<=v;r++){u++;!y[u]&&(y[u]=[]);for(var t=-1,z=B;z<=(-1===w?q[r].cells.length-1:w);z++){var p=q[r].cells[z];if(!p)break;for(t++;y[u][t];)t++;for(var A=isNaN(p.colSpan)?1:p.colSpan,p=isNaN(p.rowSpan)?1:p.rowSpan,x=0;xv);x++){y[u+x]||(y[u+x]=[]);for(var C=0;C=w)break}}return y};(function(){function D(a){return CKEDITOR.plugins.widget&&CKEDITOR.plugins.widget.isDomWidget(a)}function z(a,b){var c=a.getAscendant("table"),d=b.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(c),f=r(a),k=r(b),h=[],g={},m,l;c.contains(d)&&(b=b.getAscendant({td:1,th:1}),k=r(b));f>k&&(c=f,f=k,k=c,c=a,a=b,b=c);for(c=0;cl&&(c=m,m=l,l=c);for(c=f;c<=k;c++)for(f=m;f<=l;f++)d=new CKEDITOR.dom.element(e[c][f]), +d.$&&!d.getCustomData("selected_cell")&&(h.push(d),CKEDITOR.dom.element.setMarker(g,d,"selected_cell",!0));CKEDITOR.dom.element.clearAllMarkers(g);return h}function I(a){if(a)return a=a.clone(),a.enlarge(CKEDITOR.ENLARGE_ELEMENT),(a=a.getEnclosedNode())&&a.is&&a.is(CKEDITOR.dtd.$tableContent)}function J(a){return(a=a.editable().findOne(".cke_table-faked-selection"))&&a.getAscendant("table")}function A(a,b){var c=a.editable().find(".cke_table-faked-selection"),d=a.editable().findOne("[data-cke-table-faked-selection-table]"), +e;a.fire("lockSnapshot");a.editable().removeClass("cke_table-faked-selection-editor");for(e=0;eb.count()||(b=z(b.getItem(0),b.getItem(b.count()-1)),t(a,b))}function L(a,b,c){var d=v(a.getSelection(!0));b=b.is("table")?null:b;var e;(e=n.active&&!n.first)&&!(e=b)&&(e=a.getSelection().getRanges(),e=1CKEDITOR.env.version,m=a.blockless||CKEDITOR.env.ie?"span":"div",l,x,p,n;f.getById("cke_table_copybin")||(l=f.createElement(m),x=f.createElement(m), +x.setAttributes({id:"cke_table_copybin","data-cke-temp":"1"}),l.setStyles({position:"absolute",width:"1px",height:"1px",overflow:"hidden"}),l.setStyle("ltr"==a.config.contentsLangDirection?"left":"right","-5000px"),l.setHtml(a.getSelectedHtml(!0)),a.fire("lockSnapshot"),x.append(l),a.editable().append(x),n=a.on("selectionChange",c,null,null,0),g&&(p=h.scrollTop),k.selectNodeContents(l),k.select(),g&&(h.scrollTop=p),setTimeout(function(){x.remove();d.selectBookmarks(e);n.removeListener();a.fire("unlockSnapshot"); +b&&(a.extractSelectedHtml(),a.fire("saveSnapshot"))},100))}function E(a){var b=a.editor||a.sender.editor,c=b.getSelection();c.isInTable()&&(c.getRanges()[0]._getTableElement({table:1}).hasAttribute("data-cke-tableselection-ignored")||O(b,"cut"===a.name))}function q(a){this._reset();a&&this.setSelectedCells(a)}function B(a,b,c){a.on("beforeCommandExec",function(d){-1!==CKEDITOR.tools.array.indexOf(b,d.data.name)&&(d.data.selectedCells=v(a.getSelection()))});a.on("afterCommandExec",function(d){-1!== +CKEDITOR.tools.array.indexOf(b,d.data.name)&&c(a,d.data)})}var n={active:!1},y,v,C,F,G;q.prototype={};q.prototype._reset=function(){this.cells={first:null,last:null,all:[]};this.rows={first:null,last:null}};q.prototype.setSelectedCells=function(a){this._reset();a=a.slice(0);this._arraySortByDOMOrder(a);this.cells.all=a;this.cells.first=a[0];this.cells.last=a[a.length-1];this.rows.first=a[0].getAscendant("tr");this.rows.last=this.cells.last.getAscendant("tr")};q.prototype.getTableMap=function(){var a= +C(this.cells.first),b;a:{b=this.cells.last;var c=b.getAscendant("table"),d=r(b),c=CKEDITOR.tools.buildTableMap(c),e;for(e=0;e=a)return;for(var d=this.cells.first.$.cellIndex, +e=this.cells.last.$.cellIndex,f=c?[]:this.cells.all,k,h=0;h=d&&a.$.cellIndex<=e}),f=b?k.concat(f):f.concat(k);this.setSelectedCells(f)};q.prototype.insertColumn=function(a){function b(a){a=r(a);return a>=e&&a<=f}if("undefined"===typeof a)a=1;else if(0>=a)return;for(var c=this.cells,d=c.all,e=r(c.first),f=r(c.last),c=0;cg)p[0].moveToElementEditablePosition(n?q:r,!n),l.selectRanges([p[0]]);else if(13!==g||13===k||k===CKEDITOR.SHIFT+13){for(h=0;hCKEDITOR.env.version)},onLoad:function(){y=CKEDITOR.plugins.tabletools;v=y.getSelectedCells;C=y.getCellColIndex;F=y.insertRow;G=y.insertColumn;CKEDITOR.document.appendStyleSheet(this.path+"styles/tableselection.css")},init:function(a){this.isSupportedEnvironment()&&(a.addContentsCss&&a.addContentsCss(this.path+"styles/tableselection.css"),a.on("contentDom",function(){var b=a.editable(),c=b.isInline()?b:a.document,d={editor:a};b.attachListener(c,"mousedown",w,null,d);b.attachListener(c,"mousemove", +w,null,d);b.attachListener(c,"mouseup",w,null,d);b.attachListener(b,"dragstart",N);b.attachListener(a,"selectionCheck",M);CKEDITOR.plugins.tableselection.keyboardIntegration(a);CKEDITOR.plugins.clipboard&&!CKEDITOR.plugins.clipboard.isCustomCopyCutSupported&&(b.attachListener(b,"cut",E),b.attachListener(b,"copy",E))}),a.on("paste",H.onPaste,H),B(a,"rowInsertBefore rowInsertAfter columnInsertBefore columnInsertAfter cellInsertBefore cellInsertAfter".split(" "),function(a,c){t(a,c.selectedCells)}), +B(a,["cellMerge","cellMergeRight","cellMergeDown"],function(a,c){t(a,[c.commandData.cell])}),B(a,["cellDelete"],function(a){A(a,!0)}))}})})();(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],n={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:"wysiwyg"==a.mode;d.onChange()}var d=a.undoManager=new e(a),l=d.editingHandler=new k(d),f=a.addCommand("undo",{exec:function(){d.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),h=a.addCommand("redo",{exec:function(){d.redo()&& (a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[g[0],"undo"],[g[1],"redo"],[g[2],"redo"]]);d.onChange=function(){f.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);h.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){d.save(a.data&&a.data.contentOnly)});a.on("contentDom",l.attachListeners,l);a.on("instanceReady",function(){a.fire("saveSnapshot")}); a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&d.save(!0)});a.on("mode",c);a.on("readOnly",c);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){d.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){d.currentImage&&d.update()});a.on("lockSnapshot",function(a){a=a.data;d.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot", d.unlock,d)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),d=this.strokesRecorded[c]+1;b=b||d>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(d=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[c]= @@ -1277,7 +1282,7 @@ g.getNestedEditable(e.wrapper,d)?e=null:(c.data.preventDefault(),CKEDITOR.env.ie function R(a){a.editor.on("key",function(b){var c=a.focused,d=a.widgetHoldingFocusedEditable,e;c?e=c.fire("key",{keyCode:b.data.keyCode}):d&&(c=b.data.keyCode,b=d.focusedEditable,c==CKEDITOR.CTRL+65?(c=b.getBogus(),d=d.editor.createRange(),d.selectNodeContents(b),c&&d.setEndAt(c,CKEDITOR.POSITION_BEFORE_START),d.select(),e=!1):8==c||46==c?(e=d.editor.getSelection().getRanges(),d=e[0],e=!(1==e.length&&d.collapsed&&d.checkBoundaryOfElement(b,CKEDITOR[8==c?"START":"END"]))):e=void 0);return e},null, null,1)}function T(a){function b(b){a.focused&&E(a.focused,"cut"==b.name)}var c=a.editor;c.on("contentDom",function(){var a=c.editable();a.attachListener(a,"copy",b);a.attachListener(a,"cut",b)})}function P(a){var b=a.editor;b.on("selectionCheck",function(){a.fire("checkSelection")});a.on("checkSelection",a.checkSelection,a);b.on("selectionChange",function(c){var d=(c=g.getNestedEditable(b.editable(),c.data.selection.getStartElement()))&&a.getByElement(c),e=a.widgetHoldingFocusedEditable;e?e===d&& e.focusedEditable.equals(c)||(p(a,e,null),d&&c&&p(a,d,c)):d&&c&&p(a,d,c)});b.on("dataReady",function(){F(a).commit()});b.on("blur",function(){var b;(b=a.focused)&&w(a,b);(b=a.widgetHoldingFocusedEditable)&&p(a,b,null)})}function N(a){var b=a.editor,c={};b.on("toDataFormat",function(b){var e=CKEDITOR.tools.getNextNumber(),f=[];b.data.downcastingSessionId=e;c[e]=f;b.data.dataValue.forEach(function(b){var c=b.attributes,e;if("data-cke-widget-white-space"in c){e=y(b);var d=z(b);e.parent.attributes["data-cke-white-space-first"]&& -(e.value=e.value.replace(/^ /g," "));d.parent.attributes["data-cke-white-space-last"]&&(d.value=d.value.replace(/ $/g," "))}if("data-cke-widget-id"in c){if(c=a.instances[c["data-cke-widget-id"]])e=b.getFirst(g.isParserWidgetElement),f.push({wrapper:b,element:e,widget:c,editables:{}}),"1"!=e.attributes["data-cke-widget-keep-attr"]&&delete e.attributes["data-widget"]}else if("data-cke-widget-editable"in c)return f[f.length-1].editables[c["data-cke-widget-editable"]]=b,!1},CKEDITOR.NODE_ELEMENT, +(e.value=e.value.replace(/^ /g," "));d.parent.attributes["data-cke-white-space-last"]&&(d.value=d.value.replace(/ $/g," "))}if("data-cke-widget-id"in c){if(c=a.instances[c["data-cke-widget-id"]])e=b.getFirst(g.isParserWidgetElement),f.push({wrapper:b,element:e,widget:c,editables:{}}),"1"!=e.attributes["data-cke-widget-keep-attr"]&&delete e.attributes["data-widget"]}else if("data-cke-widget-editable"in c)return 0CKEDITOR.env.version)a.wrapper.on("dragstart",function(b){var d=b.data.getTarget();g.getNestedEditable(a,d)||a.inline&&g.isDomDragHandler(d)||b.data.preventDefault()});a.wrapper.removeClass("cke_widget_new");a.element.addClass("cke_widget_element");a.on("key",function(b){b=b.data.keyCode;if(13==b)a.edit();else{if(b==CKEDITOR.CTRL+67||b==CKEDITOR.CTRL+88){E(a,b==CKEDITOR.CTRL+88);return}if(b in L||CKEDITOR.CTRL&b||CKEDITOR.ALT& b)return}return!1},null,null,999);a.on("doubleclick",function(b){a.edit()&&b.cancel()});if(b.data)a.on("data",b.data);if(b.edit)a.on("edit",b.edit)}function ja(a){(a.wrapper=a.element.getParent()).setAttribute("data-cke-widget-id",a.id)}function u(a){a.element.data("cke-widget-data",encodeURIComponent(JSON.stringify(a.data)))}function ka(){function a(){}function b(a,b,c){return c&&this.checkElement(a)?(a=c.widgets.getByElement(a,!0))&&a.checkStyleActive(this):!1}function c(a){function b(a,c,d){for(var e= -a.length,f=0;f=c&&(c="0"+c);return String(c)}function n(c){var a=new Date,a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()];e+=1;return"image-"+CKEDITOR.tools.array.map(a,l).join("")+"-"+e+"."+c}var e=0;CKEDITOR.plugins.add("uploadimage",{requires:"uploadwidget",onLoad:function(){CKEDITOR.addCss(".cke_upload_uploading img{opacity: 0.3}")},init:function(c){if(CKEDITOR.plugins.clipboard.isFileApiSupported){var a=CKEDITOR.fileTools,e=a.getUploadUrl(c.config, -"image");e&&(a.addUploadWidget(c,"uploadimage",{supportedTypes:/image\/(jpeg|png|gif|bmp)/,uploadUrl:e,fileToElement:function(){var b=new CKEDITOR.dom.element("img");b.setAttribute("src","data:image/gif;base64,R0lGODlhDgAOAIAAAAAAAP///yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs\x3d");return b},parts:{img:"img"},onUploading:function(b){this.parts.img.setAttribute("src",b.data)},onUploaded:function(b){var a=this.parts.img.$;this.replaceWith('\x3cimg src\x3d"'+b.url+'" width\x3d"'+(b.responseData.width|| -a.naturalWidth)+'" height\x3d"'+(b.responseData.height||a.naturalHeight)+'"\x3e')}}),c.on("paste",function(b){if(b.data.dataValue.match(/=c&&(c="0"+c);return String(c)}function n(c){var a=new Date,a=[a.getFullYear(),a.getMonth()+1,a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds()];e+=1;return"image-"+CKEDITOR.tools.array.map(a,l).join("")+"-"+e+"."+c}var e=0;CKEDITOR.plugins.add("uploadimage",{requires:"uploadwidget",onLoad:function(){CKEDITOR.addCss(".cke_upload_uploading img{opacity: 0.3}")},isSupportedEnvironment:function(){return CKEDITOR.plugins.clipboard.isFileApiSupported},init:function(c){if(this.isSupportedEnvironment()){var a= +CKEDITOR.fileTools,e=a.getUploadUrl(c.config,"image");e&&(a.addUploadWidget(c,"uploadimage",{supportedTypes:/image\/(jpeg|png|gif|bmp)/,uploadUrl:e,fileToElement:function(){var b=new CKEDITOR.dom.element("img");b.setAttribute("src","data:image/gif;base64,R0lGODlhDgAOAIAAAAAAAP///yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs\x3d");return b},parts:{img:"img"},onUploading:function(b){this.parts.img.setAttribute("src",b.data)},onUploaded:function(b){var a=this.parts.img.$;this.replaceWith('\x3cimg src\x3d"'+ +b.url+'" width\x3d"'+(b.responseData.width||a.naturalWidth)+'" height\x3d"'+(b.responseData.height||a.naturalHeight)+'"\x3e')}}),c.on("paste",function(b){if(b.data.dataValue.match(/b.version||b.quirks))};"undefined"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar, -click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}});CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,bidi,blockquote,notification,button,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,copyformatting,div,resize,elementspath,enterkey,entities,popup,filetools,filebrowser,find,fakeobjects,flash,floatingspace,listblock,richcombo,font,forms,format,horizontalrule,htmlwriter,iframe,wysiwygarea,image,indent,indentblock,indentlist,smiley,justify,menubutton,language,link,list,liststyle,magicline,maximize,newpage,pagebreak,pastetext,pastefromword,preview,print,removeformat,save,selectall,showblocks,showborders,sourcearea,specialchar,scayt,stylescombo,tab,table,tabletools,tableselection,undo,lineutils,widgetselection,widget,notificationaggregator,uploadwidget,uploadimage,wsc';CKEDITOR.config.skin='moono-lisa';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,bgcolor,384,,textcolor,408,,templates-rtl,432,,templates,456,,copyformatting,480,,creatediv,504,,find-rtl,528,,find,552,,replace,576,,flash,600,,button,624,,checkbox,648,,form,672,,hiddenfield,696,,imagebutton,720,,radio,744,,select-rtl,768,,select,792,,textarea-rtl,816,,textarea,840,,textfield-rtl,864,,textfield,888,,horizontalrule,912,,iframe,936,,image,960,,indent-rtl,984,,indent,1008,,outdent-rtl,1032,,outdent,1056,,smiley,1080,,justifyblock,1104,,justifycenter,1128,,justifyleft,1152,,justifyright,1176,,language,1200,,anchor-rtl,1224,,anchor,1248,,link,1272,,unlink,1296,,bulletedlist-rtl,1320,,bulletedlist,1344,,numberedlist-rtl,1368,,numberedlist,1392,,maximize,1416,,newpage-rtl,1440,,newpage,1464,,pagebreak-rtl,1488,,pagebreak,1512,,pastetext-rtl,1536,,pastetext,1560,,pastefromword-rtl,1584,,pastefromword,1608,,preview-rtl,1632,,preview,1656,,print,1680,,removeformat,1704,,save,1728,,selectall,1752,,showblocks-rtl,1776,,showblocks,1800,,source-rtl,1824,,source,1848,,specialchar,1872,,scayt,1896,,table,1920,,redo-rtl,1944,,redo,1968,,undo-rtl,1992,,undo,2016,,spellchecker,2040,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,bgcolor,384,auto,textcolor,408,auto,templates-rtl,432,auto,templates,456,auto,copyformatting,480,auto,creatediv,504,auto,find-rtl,528,auto,find,552,auto,replace,576,auto,flash,600,auto,button,624,auto,checkbox,648,auto,form,672,auto,hiddenfield,696,auto,imagebutton,720,auto,radio,744,auto,select-rtl,768,auto,select,792,auto,textarea-rtl,816,auto,textarea,840,auto,textfield-rtl,864,auto,textfield,888,auto,horizontalrule,912,auto,iframe,936,auto,image,960,auto,indent-rtl,984,auto,indent,1008,auto,outdent-rtl,1032,auto,outdent,1056,auto,smiley,1080,auto,justifyblock,1104,auto,justifycenter,1128,auto,justifyleft,1152,auto,justifyright,1176,auto,language,1200,auto,anchor-rtl,1224,auto,anchor,1248,auto,link,1272,auto,unlink,1296,auto,bulletedlist-rtl,1320,auto,bulletedlist,1344,auto,numberedlist-rtl,1368,auto,numberedlist,1392,auto,maximize,1416,auto,newpage-rtl,1440,auto,newpage,1464,auto,pagebreak-rtl,1488,auto,pagebreak,1512,auto,pastetext-rtl,1536,auto,pastetext,1560,auto,pastefromword-rtl,1584,auto,pastefromword,1608,auto,preview-rtl,1632,auto,preview,1656,auto,print,1680,auto,removeformat,1704,auto,save,1728,auto,selectall,1752,auto,showblocks-rtl,1776,auto,showblocks,1800,auto,source-rtl,1824,auto,source,1848,auto,specialchar,1872,auto,scayt,1896,auto,table,1920,auto,redo-rtl,1944,auto,redo,1968,auto,undo-rtl,1992,auto,undo,2016,auto,spellchecker,2040,auto','icons.png');})();CKEDITOR.lang.languages={"af":1,"sq":1,"ar":1,"az":1,"eu":1,"bn":1,"bs":1,"bg":1,"ca":1,"zh-cn":1,"zh":1,"hr":1,"cs":1,"da":1,"nl":1,"en":1,"en-au":1,"en-ca":1,"en-gb":1,"eo":1,"et":1,"fo":1,"fi":1,"fr":1,"fr-ca":1,"gl":1,"ka":1,"de":1,"de-ch":1,"el":1,"gu":1,"he":1,"hi":1,"hu":1,"is":1,"id":1,"it":1,"ja":1,"km":1,"ko":1,"ku":1,"lv":1,"lt":1,"mk":1,"ms":1,"mn":1,"no":1,"nb":1,"oc":1,"fa":1,"pl":1,"pt-br":1,"pt":1,"ro":1,"ru":1,"sr":1,"sr-latn":1,"si":1,"sk":1,"sl":1,"es":1,"es-mx":1,"sv":1,"tt":1,"th":1,"tr":1,"ug":1,"uk":1,"vi":1,"cy":1};}()); \ No newline at end of file +click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}});CKEDITOR.plugins.add("sourcedialog",{requires:"dialog",init:function(a){a.addCommand("sourcedialog",new CKEDITOR.dialogCommand("sourcedialog"));CKEDITOR.dialog.add("sourcedialog",this.path+"dialogs/sourcedialog.js");a.ui.addButton&&a.ui.addButton("Sourcedialog",{label:a.lang.sourcedialog.toolbar,command:"sourcedialog",toolbar:"mode,10"})}});CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,bidi,blockquote,notification,button,toolbar,clipboard,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,copyformatting,div,resize,elementspath,enterkey,entities,popup,filetools,filebrowser,find,fakeobjects,flash,floatingspace,listblock,richcombo,font,forms,format,horizontalrule,htmlwriter,iframe,wysiwygarea,image,indent,indentblock,indentlist,smiley,justify,menubutton,language,link,list,liststyle,magicline,maximize,newpage,pagebreak,pastetext,pastefromword,preview,print,removeformat,save,selectall,showblocks,showborders,sourcearea,specialchar,scayt,stylescombo,tab,table,tabletools,tableselection,undo,lineutils,widgetselection,widget,notificationaggregator,uploadwidget,uploadimage,wsc,sourcedialog';CKEDITOR.config.skin='moono-lisa';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,bgcolor,384,,textcolor,408,,templates-rtl,432,,templates,456,,copyformatting,480,,creatediv,504,,find-rtl,528,,find,552,,replace,576,,flash,600,,button,624,,checkbox,648,,form,672,,hiddenfield,696,,imagebutton,720,,radio,744,,select-rtl,768,,select,792,,textarea-rtl,816,,textarea,840,,textfield-rtl,864,,textfield,888,,horizontalrule,912,,iframe,936,,image,960,,indent-rtl,984,,indent,1008,,outdent-rtl,1032,,outdent,1056,,smiley,1080,,justifyblock,1104,,justifycenter,1128,,justifyleft,1152,,justifyright,1176,,language,1200,,anchor-rtl,1224,,anchor,1248,,link,1272,,unlink,1296,,bulletedlist-rtl,1320,,bulletedlist,1344,,numberedlist-rtl,1368,,numberedlist,1392,,maximize,1416,,newpage-rtl,1440,,newpage,1464,,pagebreak-rtl,1488,,pagebreak,1512,,pastetext-rtl,1536,,pastetext,1560,,pastefromword-rtl,1584,,pastefromword,1608,,preview-rtl,1632,,preview,1656,,print,1680,,removeformat,1704,,save,1728,,selectall,1752,,showblocks-rtl,1776,,showblocks,1800,,source-rtl,1824,,source,1848,,specialchar,1872,,scayt,1896,,table,1920,,redo-rtl,1944,,redo,1968,,undo-rtl,1992,,undo,2016,,spellchecker,2040,,sourcedialog-rtl,2064,,sourcedialog,2088,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,bgcolor,384,auto,textcolor,408,auto,templates-rtl,432,auto,templates,456,auto,copyformatting,480,auto,creatediv,504,auto,find-rtl,528,auto,find,552,auto,replace,576,auto,flash,600,auto,button,624,auto,checkbox,648,auto,form,672,auto,hiddenfield,696,auto,imagebutton,720,auto,radio,744,auto,select-rtl,768,auto,select,792,auto,textarea-rtl,816,auto,textarea,840,auto,textfield-rtl,864,auto,textfield,888,auto,horizontalrule,912,auto,iframe,936,auto,image,960,auto,indent-rtl,984,auto,indent,1008,auto,outdent-rtl,1032,auto,outdent,1056,auto,smiley,1080,auto,justifyblock,1104,auto,justifycenter,1128,auto,justifyleft,1152,auto,justifyright,1176,auto,language,1200,auto,anchor-rtl,1224,auto,anchor,1248,auto,link,1272,auto,unlink,1296,auto,bulletedlist-rtl,1320,auto,bulletedlist,1344,auto,numberedlist-rtl,1368,auto,numberedlist,1392,auto,maximize,1416,auto,newpage-rtl,1440,auto,newpage,1464,auto,pagebreak-rtl,1488,auto,pagebreak,1512,auto,pastetext-rtl,1536,auto,pastetext,1560,auto,pastefromword-rtl,1584,auto,pastefromword,1608,auto,preview-rtl,1632,auto,preview,1656,auto,print,1680,auto,removeformat,1704,auto,save,1728,auto,selectall,1752,auto,showblocks-rtl,1776,auto,showblocks,1800,auto,source-rtl,1824,auto,source,1848,auto,specialchar,1872,auto,scayt,1896,auto,table,1920,auto,redo-rtl,1944,auto,redo,1968,auto,undo-rtl,1992,auto,undo,2016,auto,spellchecker,2040,auto,sourcedialog-rtl,2064,auto,sourcedialog,2088,auto','icons.png');})();CKEDITOR.lang.languages={"en":1,"fr":1,"es":1};}()); \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/composer.json b/htdocs/includes/ckeditor/ckeditor/composer.json deleted file mode 100644 index dc3a40d1733..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/composer.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "ckeditor/ckeditor", - "description": "JavaScript WYSIWYG web text editor.", - "type": "library", - "keywords": [ "ckeditor", "fckeditor", "editor", "wysiwyg", "html", "richtext", "text", "javascript" ], - "homepage": "http://ckeditor.com", - "license": [ "GPL-2.0+", "LGPL-2.1+", "MPL-1.1+" ], - "authors": [ - { - "name": "CKSource", - "homepage": "http://cksource.com" - } - ], - "support": { - "issues": "http://dev.ckeditor.com", - "forum": "http://ckeditor.com/forums", - "wiki": "http://docs.ckeditor.com", - "source": "http://github.com/ckeditor/ckeditor-dev" - } -} \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/config.js b/htdocs/includes/ckeditor/ckeditor/config.js index 617d891b9a8..fed42311a64 100644 --- a/htdocs/includes/ckeditor/ckeditor/config.js +++ b/htdocs/includes/ckeditor/ckeditor/config.js @@ -7,4 +7,4 @@ CKEDITOR.editorConfig = function( config ) { // Define changes to default configuration here. For example: // config.language = 'fr'; // config.uiColor = '#AADC6E'; -}; \ No newline at end of file +}; diff --git a/htdocs/includes/ckeditor/ckeditor/contents.css b/htdocs/includes/ckeditor/ckeditor/contents.css index 933afb9c6f3..7bd09d5552a 100644 --- a/htdocs/includes/ckeditor/ckeditor/contents.css +++ b/htdocs/includes/ckeditor/ckeditor/contents.css @@ -16,7 +16,7 @@ body /* Remove the background color to make it transparent. */ background-color: #fff; - margin: 5px; + margin: 20px; } .cke_editable diff --git a/htdocs/includes/ckeditor/ckeditor/lang/_translationstatus.txt b/htdocs/includes/ckeditor/ckeditor/lang/_translationstatus.txt deleted file mode 100644 index 233ed53b372..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/_translationstatus.txt +++ /dev/null @@ -1,63 +0,0 @@ -Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or http://ckeditor.com/license - -af.js Found: 62 Missing: 4 -ar.js Found: 51 Missing: 15 -bg.js Found: 58 Missing: 8 -bn.js Found: 40 Missing: 26 -bs.js Found: 29 Missing: 37 -ca.js Found: 61 Missing: 5 -cs.js Found: 66 Missing: 0 -cy.js Found: 66 Missing: 0 -da.js Found: 66 Missing: 0 -de.js Found: 66 Missing: 0 -el.js Found: 59 Missing: 7 -en-au.js Found: 38 Missing: 28 -en-ca.js Found: 37 Missing: 29 -en-gb.js Found: 61 Missing: 5 -eo.js Found: 66 Missing: 0 -es.js Found: 66 Missing: 0 -et.js Found: 66 Missing: 0 -eu.js Found: 48 Missing: 18 -fa.js Found: 66 Missing: 0 -fi.js Found: 66 Missing: 0 -fo.js Found: 66 Missing: 0 -fr-ca.js Found: 42 Missing: 24 -fr.js Found: 66 Missing: 0 -gl.js Found: 40 Missing: 26 -gu.js Found: 66 Missing: 0 -he.js Found: 66 Missing: 0 -hi.js Found: 43 Missing: 23 -hr.js Found: 66 Missing: 0 -hu.js Found: 63 Missing: 3 -is.js Found: 41 Missing: 25 -it.js Found: 66 Missing: 0 -ja.js Found: 62 Missing: 4 -ka.js Found: 62 Missing: 4 -km.js Found: 40 Missing: 26 -ko.js Found: 40 Missing: 26 -lt.js Found: 66 Missing: 0 -lv.js Found: 40 Missing: 26 -mk.js Found: 0 Missing: 66 -mn.js Found: 40 Missing: 26 -ms.js Found: 39 Missing: 27 -nb.js Found: 66 Missing: 0 -nl.js Found: 65 Missing: 1 -no.js Found: 66 Missing: 0 -pl.js Found: 66 Missing: 0 -pt-br.js Found: 66 Missing: 0 -pt.js Found: 52 Missing: 14 -ro.js Found: 61 Missing: 5 -ru.js Found: 66 Missing: 0 -sk.js Found: 49 Missing: 17 -sl.js Found: 48 Missing: 18 -sr-latn.js Found: 40 Missing: 26 -sr.js Found: 40 Missing: 26 -sv.js Found: 62 Missing: 4 -th.js Found: 40 Missing: 26 -tr.js Found: 66 Missing: 0 -ug.js Found: 66 Missing: 0 -uk.js Found: 66 Missing: 0 -vi.js Found: 66 Missing: 0 -zh-cn.js Found: 66 Missing: 0 -zh.js Found: 58 Missing: 8 diff --git a/htdocs/includes/ckeditor/ckeditor/lang/af.js b/htdocs/includes/ckeditor/ckeditor/lang/af.js deleted file mode 100644 index b0e353aa200..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/af.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['af']={"editor":"Woordverwerker","editorPanel":"Woordverwerkerpaneel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur aan die bediener","image":"Beeld","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teksarea","hiddenField":"Versteekteveld","button":"Knop","select":"Keuseveld","imageButton":"Beeldknop","notSet":"","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Skalierung","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n nommer nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is jy seker dat jy 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is jy seker dat jy hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Teiken","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Orienteerung","left":"Links","right":"Regs","center":"Middel","justify":"Eweredig","alignLeft":"Links oplyn","alignRight":"Regs oplyn","alignCenter":"Middel oplyn","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidLength":"Die waarde vir die veld \"%1\" moet 'n posetiewe nommer wees met of sonder die meeteenheid (%2).","invalidCssLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","invalidHtmlLength":"Die waarde vir die \"%1\" veld moet 'n posetiewe getal wees met of sonder 'n geldige HTML eenheid (px of %).","invalidInlineStyle":"Ongeldige CSS. Formaat is een of meer sleutel-wert paare, \"naam : wert\" met kommapunte gesky.","cssLengthTooltip":"Voeg 'n getal wert in pixel in, of 'n waarde met geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1, nie beskikbaar nie","keyboard":{"8":"Backspace","13":"Enter","16":"Skuif","17":"Ctrl","18":"Alt","32":"Spasie","35":"Einde","36":"Tuis","46":"Verwyder","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Bevel"},"keyboardShortcut":"Sleutel kombenasie","optionDefault":"Verstek"},"about":{"copy":"Kopiereg © $1. Alle regte voorbehou.","dlgTitle":"Meer oor CKEditor 4","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurgestreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"bidi":{"ltr":"Skryfrigting van links na regs","rtl":"Skryfrigting van regs na links"},"blockquote":{"toolbar":"Sitaatblok"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Dokument","clipboard":"Knipbord/Undo","editing":"Verander","forms":"Vorms","basicstyles":"Eenvoudige Styl","paragraph":"Paragraaf","links":"Skakels","insert":"Toevoeg","styles":"Style","colors":"Kleure","tools":"Gereedskap"},"toolbars":"Werkbalke"},"clipboard":{"copy":"Kopiëer","copyError":"U leser se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Uitsnei","cutError":"U leser se sekuriteitsinstelling belet die outomatiese uitsnei-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Byvoeg","pasteNotification":"Druk %1 om by te voeg. You leser ondersteun nie die toolbar knoppie of inoud kieslysie opsie nie. ","pasteArea":"Area byvoeg","pasteMsg":"Voeg jou inhoud in die gebied onder by en druk OK"},"colorbutton":{"auto":"Outomaties","bgColorTitle":"Agtergrondkleur","colors":{"000":"Swart","800000":"Meroen","8B4513":"Sjokoladebruin","2F4F4F":"Donkerleisteengrys","008080":"Blougroen","000080":"Vlootblou","4B0082":"Indigo","696969":"Donkergrys","B22222":"Rooibaksteen","A52A2A":"Bruin","DAA520":"Donkergeel","006400":"Donkergroen","40E0D0":"Turkoois","0000CD":"Middelblou","800080":"Pers","808080":"Grys","F00":"Rooi","FF8C00":"Donkeroranje","FFD700":"Goud","008000":"Groen","0FF":"Siaan","00F":"Blou","EE82EE":"Viooltjieblou","A9A9A9":"Donkergrys","FFA07A":"Ligsalm","FFA500":"Oranje","FFFF00":"Geel","00FF00":"Lemmetjie","AFEEEE":"Ligturkoois","ADD8E6":"Ligblou","DDA0DD":"Pruim","D3D3D3":"Liggrys","FFF0F5":"Linne","FAEBD7":"Ivoor","FFFFE0":"Liggeel","F0FFF0":"Heuningdou","F0FFFF":"Asuur","F0F8FF":"Ligte hemelsblou","E6E6FA":"Laventel","FFF":"Wit","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Meer Kleure...","panelTitle":"Kleure","textColorTitle":"Tekskleur"},"colordialog":{"clear":"Herstel","highlight":"Aktief","options":"Kleuropsies","selected":"Geselekteer","title":"Kies kleur"},"templates":{"button":"Sjablone","emptyListMsg":"(Geen sjablone gedefineer nie)","insertOption":"Vervang huidige inhoud","options":"Sjabloon opsies","selectPromptMsg":"Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):","title":"Inhoud Sjablone"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Aanbevole Titel","cssClassInputLabel":"CSS klasse","edit":"Wysig Div","inlineStyleInputLabel":"Inlyn Styl","langDirLTRLabel":"Links na regs (LTR)","langDirLabel":"Skryfrigting","langDirRTLLabel":"Regs na links (RTL)","languageCodeInputLabel":" Taalkode","remove":"Verwyder Div","styleSelectLabel":"Styl","title":"Skep Div houer","toolbar":"Skep Div houer"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Soek","findOptions":"Find Options","findWhat":"Soek na:","matchCase":"Hoof/kleinletter sensitief","matchCyclic":"Soek deurlopend","matchWord":"Hele woord moet voorkom","notFoundMsg":"Teks nie gevind nie.","replace":"Vervang","replaceAll":"Vervang alles","replaceSuccessMsg":"%1 voorkoms(te) vervang.","replaceWith":"Vervang met:","title":"Soek en vervang"},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"flash":{"access":"Skrip toegang","accessAlways":"Altyd","accessNever":"Nooit","accessSameDomain":"Selfde domeinnaam","alignAbsBottom":"Absoluut-onder","alignAbsMiddle":"Absoluut-middel","alignBaseline":"Basislyn","alignTextTop":"Teks bo","bgcolor":"Agtergrondkleur","chkFull":"Laat volledige skerm toe","chkLoop":"Herhaal","chkMenu":"Flash spyskaart aan","chkPlay":"Speel outomaties","flashvars":"Veranderlikes vir Flash","hSpace":"HSpasie","properties":"Flash eienskappe","propertiesTab":"Eienskappe","quality":"Kwaliteit","qualityAutoHigh":"Outomaties hoog","qualityAutoLow":"Outomaties laag","qualityBest":"Beste","qualityHigh":"Hoog","qualityLow":"Laag","qualityMedium":"Gemiddeld","scale":"Skaal","scaleAll":"Wys alles","scaleFit":"Presiese pas","scaleNoBorder":"Geen rand","title":"Flash eienskappe","vSpace":"VSpasie","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateSrc":"Voeg die URL in","validateVSpace":"VSpasie moet 'n heelgetal wees.","windowMode":"Venster modus","windowModeOpaque":"Ondeursigtig","windowModeTransparent":"Deursigtig","windowModeWindow":"Venster"},"font":{"fontSize":{"label":"Grootte","voiceLabel":"Fontgrootte","panelTitle":"Fontgrootte"},"label":"Font","panelTitle":"Fontnaam","voiceLabel":"Font"},"forms":{"button":{"title":"Knop eienskappe","text":"Teks (Waarde)","type":"Soort","typeBtn":"Knop","typeSbm":"Stuur","typeRst":"Maak leeg"},"checkboxAndRadio":{"checkboxTitle":"Merkhokkie eienskappe","radioTitle":"Radioknoppie eienskappe","value":"Waarde","selected":"Geselekteer","required":"Required"},"form":{"title":"Vorm eienskappe","menu":"Vorm eienskappe","action":"Aksie","method":"Metode","encoding":"Kodering"},"hidden":{"title":"Verborge veld eienskappe","name":"Naam","value":"Waarde"},"select":{"title":"Keuseveld eienskappe","selectInfo":"Info","opAvail":"Beskikbare opsies","value":"Waarde","size":"Grootte","lines":"Lyne","chkMulti":"Laat meer as een keuse toe","required":"Required","opText":"Teks","opValue":"Waarde","btnAdd":"Byvoeg","btnModify":"Wysig","btnUp":"Op","btnDown":"Af","btnSetValue":"Stel as geselekteerde waarde","btnDelete":"Verwyder"},"textarea":{"title":"Teks-area eienskappe","cols":"Kolomme","rows":"Rye"},"textfield":{"title":"Teksveld eienskappe","name":"Naam","value":"Waarde","charWidth":"Breedte (karakters)","maxChars":"Maksimum karakters","required":"Required","type":"Soort","typeText":"Teks","typePass":"Wagwoord","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"iframe":{"border":"Wys rand van raam","noUrl":"Gee die iframe URL","scrolling":"Skuifbalke aan","title":"IFrame Eienskappe","toolbar":"IFrame"},"image":{"alt":"Alternatiewe teks","border":"Rand","btnUpload":"Stuur na bediener","button2Img":"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?","hSpace":"HSpasie","img2Button":"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?","infoTab":"Afbeelding informasie","linkTab":"Skakel","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","resetSize":"Herstel grootte","title":"Afbeelding eienskappe","titleButton":"Afbeeldingsknop eienskappe","upload":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","vSpace":"VSpasie","validateBorder":"Rand moet 'n heelgetal wees.","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateVSpace":"VSpasie moet 'n heelgetal wees."},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"smiley":{"options":"Lagbekkie opsies","title":"Voeg lagbekkie by","toolbar":"Lagbekkie"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","download":"Force Download","displayText":"Display Text","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"","targetFrameName":"Naam van doelraam","targetPopup":"","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toPhone":"Phone","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"liststyle":{"bulletedTitle":"Eienskappe van ongenommerde lys","circle":"Sirkel","decimal":"Desimale syfers (1, 2, 3, ens.)","disc":"Skyf","lowerAlpha":"Kleinletters (a, b, c, d, e, ens.)","lowerRoman":"Romeinse kleinletters (i, ii, iii, iv, v, ens.)","none":"Geen","notset":"","numberedTitle":"Eienskappe van genommerde lys","square":"Vierkant","start":"Begin","type":"Tipe","upperAlpha":"Hoofletters (A, B, C, D, E, ens.)","upperRoman":"Romeinse hoofletters (I, II, III, IV, V, ens.)","validateStartNumber":"Beginnommer van lys moet 'n heelgetal wees."},"magicline":{"title":"Voeg paragraaf hier in"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"newpage":{"toolbar":"Nuwe bladsy"},"pagebreak":{"alt":"Bladsy-einde","toolbar":"Bladsy-einde invoeg"},"pastetext":{"button":"Voeg by as eenvoudige teks","pasteNotification":"Druk %1 om by te voeg. Jou leser ondersteun nie byvoeg deur die toolbar knoppie of die konteks kieslys nie","title":"Voeg by as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil byvoeg lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit bygevoeg word?","error":"Die bygevoegte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Uit Word byvoeg","toolbar":"Uit Word byvoeg"},"preview":{"preview":"Voorbeeld"},"print":{"toolbar":"Druk"},"removeformat":{"toolbar":"Verwyder opmaak"},"save":{"toolbar":"Bewaar"},"selectall":{"toolbar":"Selekteer alles"},"showblocks":{"toolbar":"Toon blokke"},"sourcearea":{"toolbar":"Bron"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"scayt":{"btn_about":"SCAYT info","btn_dictionaries":"Woordeboeke","btn_disable":"SCAYT af","btn_enable":"SCAYT aan","btn_langs":"Tale","btn_options":"Opsies","text_title":"Speltoets terwyl u tik"},"stylescombo":{"label":"Styl","panelTitle":"Vormaat style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"widget":{"move":"Klik en trek on te beweeg","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignoreer","btnIgnoreAll":"Ignoreer alles","btnReplace":"Vervang","btnReplaceAll":"vervang alles","btnUndo":"Ontdoen","changeTo":"Verander na","errorLoading":"Fout by inlaai van diens: %s.","ieSpellDownload":"Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?","manyChanges":"Klaar met speltoets: %1 woorde verander","noChanges":"Klaar met speltoets: Geen woorde verander nie","noMispell":"Klaar met speltoets: Geen foute nie","noSuggestions":"- Geen voorstel -","notAvailable":"Jammer, hierdie diens is nie nou beskikbaar nie.","notInDic":"Nie in woordeboek nie","oneChange":"Klaar met speltoets: Een woord verander","progress":"Spelling word getoets...","title":"Speltoetser","toolbar":"Speltoets"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/ar.js b/htdocs/includes/ckeditor/ckeditor/lang/ar.js deleted file mode 100644 index 71f5c1110f8..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/ar.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['ar']={"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","flash":"فلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل خفي","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"إسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوصف التفصيلى","cssClass":"فئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"موافق","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"تغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هدف الرابط","targetNew":"نافذة جديدة","targetTop":"النافذة الأعلى","targetSelf":"داخل النافذة","targetParent":"النافذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","left":"يسار","right":"يمين","center":"وسط","justify":"ضبط","alignLeft":"محاذاة إلى اليسار","alignRight":"محاذاة إلى اليمين","alignCenter":"Align Center","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","alignNone":"None","invalidValue":"قيمة غير مفبولة.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", مفصولة بفاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, غير متاح","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"حقوق النشر © $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا:"},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"bidi":{"ltr":"إتجاه النص من اليسار إلى اليمين","rtl":"إتجاه النص من اليمين إلى اليسار"},"blockquote":{"toolbar":"اقتباس"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحافظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"فقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع عمليات النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"منطقة اللصق","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"تلقائي","bgColorTitle":"لون الخلفية","colors":{"000":"أسود","800000":"كستنائي","8B4513":"بني فاتح","2F4F4F":"رمادي أردوازي غامق","008080":"أزرق مخضر","000080":"أزرق داكن","4B0082":"كحلي","696969":"رمادي داكن","B22222":"طوبي","A52A2A":"بني","DAA520":"ذهبي داكن","006400":"أخضر داكن","40E0D0":"فيروزي","0000CD":"أزرق متوسط","800080":"بنفسجي غامق","808080":"رمادي","F00":"أحمر","FF8C00":"برتقالي داكن","FFD700":"ذهبي","008000":"أخضر","0FF":"تركواز","00F":"أزرق","EE82EE":"بنفسجي","A9A9A9":"رمادي شاحب","FFA07A":"برتقالي وردي","FFA500":"برتقالي","FFFF00":"أصفر","00FF00":"ليموني","AFEEEE":"فيروزي شاحب","ADD8E6":"أزرق فاتح","DDA0DD":"بنفسجي فاتح","D3D3D3":"رمادي فاتح","FFF0F5":"وردي فاتح","FAEBD7":"أبيض عتيق","FFFFE0":"أصفر فاتح","F0FFF0":"أبيض مائل للأخضر","F0FFFF":"سماوي","F0F8FF":"لبني","E6E6FA":"أرجواني","FFF":"أبيض","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"ألوان إضافية...","panelTitle":"Colors","textColorTitle":"لون النص"},"colordialog":{"clear":"مسح","highlight":"تحديد","options":"اختيارات الألوان","selected":"اللون المختار","title":"اختر اللون"},"templates":{"button":"القوالب","emptyListMsg":"(لم يتم تعريف أي قالب)","insertOption":"استبدال المحتوى","options":"خصائص القوالب","selectPromptMsg":"اختر القالب الذي تود وضعه في المحرر","title":"قوالب المحتوى"},"contextmenu":{"options":"خصائص قائمة السياق"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"هوية","advisoryTitleInputLabel":"عنوان التقرير","cssClassInputLabel":"فئات التنسيق","edit":"تحرير Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"اليسار لليمين (LTR)","langDirLabel":"إتجاه النص","langDirRTLLabel":"اليمين لليسار (RTL)","languageCodeInputLabel":"رمز اللغة","remove":"إزالة Div","styleSelectLabel":"نمط","title":"إحداث Div Container","toolbar":"إحداث Div Container"},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"بحث","findOptions":"Find Options","findWhat":"البحث بـ:","matchCase":"مطابقة حالة الأحرف","matchCyclic":"مطابقة دورية","matchWord":"مطابقة بالكامل","notFoundMsg":"لم يتم العثور على النص المحدد.","replace":"إستبدال","replaceAll":"إستبدال الكل","replaceSuccessMsg":"تم استبدال 1% من الحالات ","replaceWith":"إستبدال بـ:","title":"بحث واستبدال"},"fakeobjects":{"anchor":"إرساء","flash":"رسم متحرك بالفلاش","hiddenfield":"إدراج حقل خفي","iframe":"iframe","unknown":"عنصر غير معروف"},"flash":{"access":"دخول النص البرمجي","accessAlways":"دائماً","accessNever":"مطلقاً","accessSameDomain":"نفس النطاق","alignAbsBottom":"أسفل النص","alignAbsMiddle":"وسط السطر","alignBaseline":"على السطر","alignTextTop":"أعلى النص","bgcolor":"لون الخلفية","chkFull":"ملء الشاشة","chkLoop":"تكرار","chkMenu":"تمكين قائمة فيلم الفلاش","chkPlay":"تشغيل تلقائي","flashvars":"متغيرات الفلاش","hSpace":"تباعد أفقي","properties":"خصائص الفلاش","propertiesTab":"الخصائص","quality":"جودة","qualityAutoHigh":"عالية تلقائياً","qualityAutoLow":"منخفضة تلقائياً","qualityBest":"أفضل","qualityHigh":"عالية","qualityLow":"منخفضة","qualityMedium":"متوسطة","scale":"الحجم","scaleAll":"إظهار الكل","scaleFit":"ضبط تام","scaleNoBorder":"بلا حدود","title":"خصائص فيلم الفلاش","vSpace":"تباعد عمودي","validateHSpace":"HSpace يجب أن يكون عدداً.","validateSrc":"فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط","validateVSpace":"VSpace يجب أن يكون عدداً.","windowMode":"وضع النافذة","windowModeOpaque":"غير شفاف","windowModeTransparent":"شفاف","windowModeWindow":"نافذة"},"font":{"fontSize":{"label":"حجم الخط","voiceLabel":"حجم الخط","panelTitle":"حجم الخط"},"label":"خط","panelTitle":"حجم الخط","voiceLabel":"حجم الخط"},"forms":{"button":{"title":"خصائص زر الضغط","text":"القيمة/التسمية","type":"نوع الزر","typeBtn":"زر","typeSbm":"إرسال","typeRst":"إعادة تعيين"},"checkboxAndRadio":{"checkboxTitle":"خصائص خانة الإختيار","radioTitle":"خصائص زر الخيار","value":"القيمة","selected":"محدد","required":"Required"},"form":{"title":"خصائص النموذج","menu":"خصائص النموذج","action":"اسم الملف","method":"الأسلوب","encoding":"تشفير"},"hidden":{"title":"خصائص الحقل المخفي","name":"الاسم","value":"القيمة"},"select":{"title":"خصائص اختيار الحقل","selectInfo":"اختار معلومات","opAvail":"الخيارات المتاحة","value":"القيمة","size":"الحجم","lines":"الأسطر","chkMulti":"السماح بتحديدات متعددة","required":"Required","opText":"النص","opValue":"القيمة","btnAdd":"إضافة","btnModify":"تعديل","btnUp":"أعلى","btnDown":"أسفل","btnSetValue":"إجعلها محددة","btnDelete":"إزالة"},"textarea":{"title":"خصائص مساحة النص","cols":"الأعمدة","rows":"الصفوف"},"textfield":{"title":"خصائص مربع النص","name":"الاسم","value":"القيمة","charWidth":"عرض السمات","maxChars":"اقصى عدد للسمات","required":"Required","type":"نوع المحتوى","typeText":"نص","typePass":"كلمة مرور","typeEmail":"بريد إلكتروني","typeSearch":"بحث","typeTel":"رقم الهاتف","typeUrl":"الرابط"}},"format":{"label":"تنسيق","panelTitle":"تنسيق الفقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان 2","tag_h3":"العنوان 3","tag_h4":"العنوان 4","tag_h5":"العنوان 5","tag_h6":"العنوان 6","tag_p":"عادي","tag_pre":"منسّق"},"horizontalrule":{"toolbar":"خط فاصل"},"iframe":{"border":"إظهار حدود الإطار","noUrl":"فضلا أكتب رابط الـ iframe","scrolling":"تفعيل أشرطة الإنتقال","title":"خصائص iframe","toolbar":"iframe"},"image":{"alt":"عنوان الصورة","border":"سمك الحدود","btnUpload":"أرسلها للخادم","button2Img":"هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟","hSpace":"تباعد أفقي","img2Button":"هل تريد تحويل الصورة المختارة إلى زر صورة؟","infoTab":"معلومات الصورة","linkTab":"الرابط","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","resetSize":"إستعادة الحجم الأصلي","title":"خصائص الصورة","titleButton":"خصائص زر الصورة","upload":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","vSpace":"تباعد عمودي","validateBorder":"الإطار يجب أن يكون عددا","validateHSpace":"HSpace يجب أن يكون عدداً.","validateVSpace":"VSpace يجب أن يكون عدداً."},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"smiley":{"options":"خصائص الإبتسامات","title":"إدراج ابتسامات","toolbar":"ابتسامات"},"language":{"button":"حدد اللغة","remove":"حذف اللغة"},"link":{"acccessKey":"مفاتيح الإختصار","advanced":"متقدم","advisoryContentType":"نوع التقرير","advisoryTitle":"عنوان التقرير","anchor":{"toolbar":"إشارة مرجعية","menu":"تحرير الإشارة المرجعية","title":"خصائص الإشارة المرجعية","name":"اسم الإشارة المرجعية","errorName":"الرجاء كتابة اسم الإشارة المرجعية","remove":"إزالة الإشارة المرجعية"},"anchorId":"حسب رقم العنصر","anchorName":"حسب إسم الإشارة المرجعية","charset":"ترميز المادة المطلوبة","cssClasses":"فئات التنسيق","download":"فرض التحميل","displayText":"نص العرض","emailAddress":"البريد الإلكتروني","emailBody":"محتوى الرسالة","emailSubject":"موضوع الرسالة","id":"هوية","info":"معلومات الرابط","langCode":"رمز اللغة","langDir":"إتجاه نص اللغة","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","menu":"تحرير الرابط","name":"إسم","noAnchors":"(لا توجد علامات مرجعية في هذا المستند)","noEmail":"الرجاء كتابة الريد الإلكتروني","noUrl":"الرجاء كتابة رابط الموقع","noTel":"Please type the phone number","other":"<أخرى>","phoneNumber":"Phone number","popupDependent":"تابع (Netscape)","popupFeatures":"خصائص النافذة المنبثقة","popupFullScreen":"ملئ الشاشة (IE)","popupLeft":"التمركز لليسار","popupLocationBar":"شريط العنوان","popupMenuBar":"القوائم الرئيسية","popupResizable":"قابلة التشكيل","popupScrollBars":"أشرطة التمرير","popupStatusBar":"شريط الحالة","popupToolbar":"شريط الأدوات","popupTop":"التمركز للأعلى","rel":"العلاقة","selectAnchor":"اختر علامة مرجعية","styles":"نمط","tabIndex":"الترتيب","target":"هدف الرابط","targetFrame":"<إطار>","targetFrameName":"اسم الإطار المستهدف","targetPopup":"<نافذة منبثقة>","targetPopupName":"اسم النافذة المنبثقة","title":"رابط","toAnchor":"مكان في هذا المستند","toEmail":"بريد إلكتروني","toUrl":"الرابط","toPhone":"Phone","toolbar":"رابط","type":"نوع الربط","unlink":"إزالة رابط","upload":"رفع"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"إدراج فقرة هنا"},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"newpage":{"toolbar":"صفحة جديدة"},"pagebreak":{"alt":"فاصل الصفحة","toolbar":"إدخال صفحة جديدة"},"pastetext":{"button":"لصق كنص بسيط","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"preview":{"preview":"معاينة الصفحة"},"print":{"toolbar":"طباعة"},"removeformat":{"toolbar":"إزالة التنسيقات"},"save":{"toolbar":"حفظ"},"selectall":{"toolbar":"تحديد الكل"},"showblocks":{"toolbar":"مخطط تفصيلي"},"sourcearea":{"toolbar":"المصدر"},"specialchar":{"options":"خيارات الأحرف الخاصة","title":"اختر حرف خاص","toolbar":"إدراج حرف خاص"},"scayt":{"btn_about":"عن SCAYT","btn_dictionaries":"قواميس","btn_disable":"تعطيل SCAYT","btn_enable":"تفعيل SCAYT","btn_langs":"لغات","btn_options":"خيارات","text_title":"تدقيق إملائي أثناء الكتابة"},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"table":{"border":"الحدود","caption":"الوصف","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذف خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسفل","splitHorizontal":"تقسيم الخلية أفقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصفوف","colSpan":"امتداد الأعمدة","wordWrap":"التفاف النص","hAlign":"محاذاة أفقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلفية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتفاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصفوف يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المسافة البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذف أعمدة"},"columns":"أعمدة","deleteTable":"حذف الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الصف الأول","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"undo":{"redo":"إعادة","undo":"تراجع"},"widget":{"move":"إضغط و إسحب للتحريك","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"تجاهل","btnIgnoreAll":"تجاهل الكل","btnReplace":"تغيير","btnReplaceAll":"تغيير الكل","btnUndo":"تراجع","changeTo":"التغيير إلى","errorLoading":"خطأ في تحميل تطبيق خدمة الاستضافة: %s.","ieSpellDownload":"المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟","manyChanges":"تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات","noChanges":"تم التدقيق الإملائي: لم يتم تغيير أي كلمة","noMispell":"تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية","noSuggestions":"- لا توجد إقتراحات -","notAvailable":"عفواً، ولكن هذه الخدمة غير متاحة الان","notInDic":"ليست في القاموس","oneChange":"تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط","progress":"جاري التدقيق الاملائى","title":"التدقيق الإملائي","toolbar":"تدقيق إملائي"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/az.js b/htdocs/includes/ckeditor/ckeditor/lang/az.js deleted file mode 100644 index 5917872ca57..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/az.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['az']={"editor":"Mətn Redaktoru","editorPanel":"Mətn Redaktorun Paneli","common":{"editorHelp":"Yardım üçün ALT 0 düymələrini basın","browseServer":"Fayların siyahı","url":"URL","protocol":"Protokol","upload":"Serverə yüklə","uploadSubmit":"Göndər","image":"Şəkil","flash":"Flash","form":"Forma","checkbox":"Çekboks","radio":"Radio düyməsi","textField":"Mətn xanası","textarea":"Mətn","hiddenField":"Gizli xana","button":"Düymə","select":"Opsiyaların seçilməsi","imageButton":"Şəkil tipli düymə","notSet":"","id":"Id","name":"Ad","langDir":"Yaziların istiqaməti","langDirLtr":"Soldan sağa (LTR)","langDirRtl":"Sağdan sola (RTL)","langCode":"Dilin kodu","longDescr":"URL-ın ətraflı izahı","cssClass":"CSS klassları","advisoryTitle":"Başlıq","cssStyle":"CSS","ok":"Tədbiq et","cancel":"İmtina et","close":"Bağla","preview":"Baxış","resize":"Eni dəyiş","generalTab":"Əsas","advancedTab":"Əlavə","validateNumberFailed":"Rəqəm deyil.","confirmNewPage":"Yadda saxlanılmamış dəyişikliklər itiriləcək. Davam etmək istədiyinizə əminsinizmi?","confirmCancel":"Dəyişikliklər edilib. Pəncərəni bağlamaq istəyirsizə əminsinizmi?","options":"Seçimlər","target":"Hədəf çərçivə","targetNew":"Yeni pəncərə (_blank)","targetTop":"Əsas pəncərə (_top)","targetSelf":"Carı pəncərə (_self)","targetParent":"Ana pəncərə (_parent)","langDirLTR":"Soldan sağa (LTR)","langDirRTL":"Sağdan sola (RTL)","styles":"Üslub","cssClasses":"Üslub klası","width":"En","height":"Uzunluq","align":"Yerləşmə","left":"Sol","right":"Sağ","center":"Mərkəz","justify":"Eninə görə","alignLeft":"Soldan düzləndir","alignRight":"Sağdan düzləndir","alignCenter":"Align Center","alignTop":"Yuxarı","alignMiddle":"Orta","alignBottom":"Aşağı","alignNone":"Yoxdur","invalidValue":"Yanlışdır.","invalidHeight":"Hündürlük rəqəm olmalıdır.","invalidWidth":"En rəqəm olmalıdır.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır, CSS-də olan ölçü vahidlərin (px, %, in, cm, mm, em, ex, pt, or pc) istifadısinə icazə verilir.","invalidHtmlLength":"\"%1\" xanasında göstərilən məzmun tam və müsbət olmalıdır HTML-də olan ölçü vahidlərin (px və ya %) istifadısinə icazə verilir.","invalidInlineStyle":"Teq içində olan üslub \"ad : məzmun\" şəklidə, nöqtə-verqül işarəsi ilə bitməlidir","cssLengthTooltip":"Piksel sayı və ya digər CSS ölçü vahidləri (px, %, in, cm, mm, em, ex, pt, or pc) daxil edin.","unavailable":"%1, mövcud deyil","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Boşluq","35":"Son","36":"Evə","46":"Sil","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Əmr"},"keyboardShortcut":"Qısayol düymələri","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Bütün hüquqlar qorunur.","dlgTitle":"CKEditor haqqında","moreInfo":"Lisenziya informasiyası üçün zəhmət olmasa saytımızı ziyarət edin:"},"basicstyles":{"bold":"Qalın","italic":"Kursiv","strike":"Üstüxətli","subscript":"Aşağı indeks","superscript":"Yuxarı indeks","underline":"Altdan xətt"},"bidi":{"ltr":"Mətnin istiqaməti - soldan sağa","rtl":"Mətnin istiqaməti - sağdan sola"},"blockquote":{"toolbar":"Sitat bloku"},"notification":{"closed":"Xəbərdarlıq pəncərəsi bağlanıb"},"toolbar":{"toolbarCollapse":"Paneli gizlət","toolbarExpand":"Paneli göstər","toolbarGroups":{"document":"Mətn","clipboard":"Mübadilə buferi/İmtina et","editing":"Redaktə edilməsi","forms":"Formalar","basicstyles":"Əsas üslublar","paragraph":"Abzas","links":"Link","insert":"Əlavə et","styles":"Üslublar","colors":"Rənqlər","tools":"Alətləri"},"toolbars":"Redaktorun panelləri"},"clipboard":{"copy":"Köçür","copyError":"Avtomatik köçürülməsi mümkün deyil. Ctrl+C basın.","cut":"Kəs","cutError":"Avtomatik kəsmə mümkün deyil. Ctrl+X basın.","paste":"Əlavə et","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Avtomatik","bgColorTitle":"Doldurma rəngi","colors":{"000":"Qara","800000":"Şabalıdı","8B4513":"Açıq şabalı","2F4F4F":"Açıq boz","008080":"Firuzəyi göy","000080":"Tünd göy","4B0082":"İndigo","696969":"Tünd boz","B22222":"Kərpiç","A52A2A":"Şabalıdı","DAA520":"Qızıl ağcaqayın","006400":"Tünd yaşıl","40E0D0":"Firuzəyi","0000CD":"Göy","800080":"Bənövşəyi","808080":"Boz","F00":"Qırmızı","FF8C00":"Tünd narıncı","FFD700":"Qızılı","008000":"Yaşıl","0FF":"Mavi","00F":"Göy","EE82EE":"Açıq bənövşəyi","A9A9A9":"Asfalt rəngi","FFA07A":"Qızılbalıq","FFA500":"Narıncı","FFFF00":"Sarı","00FF00":"Laym","AFEEEE":"Acıq firuzəyi","ADD8E6":"Acıq göy","DDA0DD":"Gavalı","D3D3D3":"Acıq boz","FFF0F5":"Yasəmən","FAEBD7":"Kağız","FFFFE0":"Acıq sarı","F0FFF0":"Yemişi","F0FFFF":"Gömgöy","F0F8FF":"Solğun göy","E6E6FA":"Lavanda","FFF":"Ağ","1ABC9C":"Güclü mavi","2ECC71":"Zümrüd","3498DB":"Parlaq göy","9B59B6":"Ametist","4E5F70":"Bozlu göy","F1C40F":"Sapsarı","16A085":"Tünd mavi","27AE60":"Tünd zümrüd","2980B9":"Güclü göy","8E44AD":"Tünd bənövşəyi","2C3E50":"Rəngsiz göy","F39C12":"Narıncı","E67E22":"Yerkökülü","E74C3C":"Solğun qırmızı","ECF0F1":"Parlaq gümüşü","95A5A6":"Acıq bozlu mavi","DDD":"Acıq boz","D35400":"Balqabaqlı","C0392B":"Güclü qırmızı","BDC3C7":"Gümüşü","7F8C8D":"Bozlu mavi","999":"Tünd boz"},"more":"Digər rənglər...","panelTitle":"Rənglər","textColorTitle":"Mətnin rəngi"},"colordialog":{"clear":"Təmizlə","highlight":"Ayırmaq","options":"Rəng seçimləri","selected":"Seçilmiş rəng","title":"Rəngi seç"},"templates":{"button":"Şablon","emptyListMsg":"(Heç bir şablon təyin edilməyib)","insertOption":"Həqiqi içindəkiləri əvəz et","options":"Şablonun seçimləri","selectPromptMsg":"Redaktor ilə açmaq üçün şablonu seçin","title":"İçindəkinin şablonu"},"contextmenu":{"options":"Əlavə əməliyyatlar"},"copyformatting":{"label":"Formatı köçür","notification":{"copied":"Format köçürülüb","applied":"Format tədbiq edilib","canceled":"Format imtina edilib","failed":"Format etmək mümkün deyil. Siz üslubları köçürmədən onları tədbiq edə bilməzsiniz."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Məsləhətli başlıq","cssClassInputLabel":"Üslub klassları","edit":"DİV eıementini redaktə et","inlineStyleInputLabel":"Sözlərin üslubları","langDirLTRLabel":"Soldan sağa (LTR)","langDirLabel":"Yaziların istiqaməti","langDirRTLLabel":"Sağdan sola (RTL)","languageCodeInputLabel":"Dilin kodu","remove":"DİV elementini sil","styleSelectLabel":"Üslub","title":"DİV ilə əhatələməni yarat","toolbar":"DİV ilə əhatələməni yarat"},"elementspath":{"eleLabel":"Elementin izləri","eleTitle":"%1 element"},"filetools":{"loadError":"Faylını oxumaq mümkün deyil","networkError":"Xəta baş verdi.","httpError404":"Serverə göndərilməsinin zamanı xəta baş verdi (404 - fayl tapılmayıb)","httpError403":"Serverə göndərilməsinin zamanı xəta baş verdi (403 - gadağandır)","httpError":"Serverə göndərilməsinin zamanı xəta baş verdi (xətanın ststusu: %1)","noUrlError":"Yükləmə linki təyin edilməyib","responseError":"Serverin cavabı yanlışdır"},"find":{"find":"Tap","findOptions":"Axtarışın seçimləri","findWhat":"Nəyi axtarmaq","matchCase":"Reqistr nəzərə alınmaqla","matchCyclic":"Dövrəvi axtar","matchWord":"Tam sözünə uyğun","notFoundMsg":"Daxil etdiyiniz sorğu ilə heç bir nəticə tapılmayıb","replace":"Əvəz et","replaceAll":"Hamısını əvəz et","replaceSuccessMsg":"%1 daxiletmə(lər) əvəz edilib","replaceWith":"Əvəz etdirici mətn:","title":"Tap və əvəz et"},"fakeobjects":{"anchor":"Lövbər","flash":"Flash animasiya","hiddenfield":"Gizli xana","iframe":"IFrame","unknown":"Tanımamış obyekt"},"flash":{"access":"Skript tərəfindən müraciətlərin icazəsi","accessAlways":"Həmişə","accessNever":"Heç vaxt","accessSameDomain":"Eyni domen adından","alignAbsBottom":"Aşağıda","alignAbsMiddle":"Ortada","alignBaseline":"Əsas xətt","alignTextTop":"Mətnin yuxarıda","bgcolor":"Doldurma rəngi","chkFull":"Tam pəncərəyə aça bilər","chkLoop":"Dövrələmə","chkMenu":"Flash menyunu göstər","chkPlay":"Birbaşa oynat","flashvars":"Flash üçün dəyişənlər","hSpace":"Üfüqi boşluq","properties":"Flash xüsusiyyətləri","propertiesTab":"Xüsusiyyətlər","quality":"Keyfiyyət","qualityAutoHigh":"Avtomatik yüksək","qualityAutoLow":"Avtomatik aşağı","qualityBest":"Mükəmməl","qualityHigh":"Yüksək","qualityLow":"Aşağı","qualityMedium":"Orta","scale":"Dəyişkən","scaleAll":"Hamısını göstər","scaleFit":"Həqiqi ölçülər","scaleNoBorder":"Sərhədsiz","title":"Flash xüsusiyyətləri","vSpace":"Şaquli boşluq","validateHSpace":"Üfüqi boşluq rəqəm olmalıdır.","validateSrc":"Link boş ola bilməz","validateVSpace":"Şaquli boşluq rəqəm olmalıdır.","windowMode":"Pəncərənin rejimi","windowModeOpaque":"Görünən","windowModeTransparent":"Şəffaf","windowModeWindow":"Pəncərə"},"font":{"fontSize":{"label":"Şrift ölçüsü","voiceLabel":"Şrift ölçüsü","panelTitle":"Şrift ölçüsü"},"label":"Şrift","panelTitle":"Şrift","voiceLabel":"Şrift"},"forms":{"button":{"title":"Düymənin xüsusiyyətləri","text":"Mətn (kəmiyyət)","type":"Növ","typeBtn":"Düymə","typeSbm":"Təsdiq et","typeRst":"Dəyişiklikləri imtina et"},"checkboxAndRadio":{"checkboxTitle":"Qutucuqun xüsusiyyətləri","radioTitle":"Radio düyməsinin xüsusiyyətləri","value":"Kəmiyyət","selected":"Seçilmiş","required":"Tələb olunur"},"form":{"title":"Formanın xüsusiyyətləri","menu":"Formanın xüsusiyyətləri","action":"Emal edən ünvan","method":"Göndərilmə üsulu","encoding":"Kodlaşdırma"},"hidden":{"title":"Gizli xanasının xüsusiyyətləri","name":"Ad","value":"Kəmiyyət"},"select":{"title":"SELECT elementinin xüsusiyyətləri","selectInfo":"SELECT elementinin haqqında məlumat","opAvail":"Mövcud olan seçimləri","value":"Kəmiyyət","size":"Ölçülər","lines":"xəttlər","chkMulti":"Çox kəmiyyətli xana","required":"Tələb olunur","opText":"Mətn","opValue":"Kəmiyyət","btnAdd":"Əıavə et","btnModify":"Redaktə et","btnUp":"Yuxarı","btnDown":"Aşağı","btnSetValue":"Susmaya görə kəmiyyəti kimi seç","btnDelete":"Sil"},"textarea":{"title":"Mətn xanasının xüsusiyyətləri","cols":"Sütunlar","rows":"Sətirlər"},"textfield":{"title":"Mətn xanasının xüsusiyyətləri","name":"Ad","value":"Kəmiyyət","charWidth":"İşarənin eni","maxChars":"İşarələrin hüdudu","required":"Tələb olunur","type":"Növ","typeText":"Mətn","typePass":"Şifrə","typeEmail":"E-poçt","typeSearch":"Axtarış","typeTel":"Telefon nömrəsi","typeUrl":"Link"}},"format":{"label":"Format","panelTitle":"Abzasın formatı","tag_address":"Ünvan","tag_div":"Normal (DIV)","tag_h1":"Başlıq 1","tag_h2":"Başlıq 2","tag_h3":"Başlıq 3","tag_h4":"Başlıq 4","tag_h5":"Başlıq 5","tag_h6":"Başlıq 6","tag_p":"Normal","tag_pre":"Formatı saxla"},"horizontalrule":{"toolbar":"Sərhəd xətti yarat"},"iframe":{"border":"Çərçivə sərhədlərini göstər","noUrl":"Çərçivənin ünvanı daxil edin","scrolling":"Şürüşdürmələri əlavə et","title":"İFRAME elementinin alətləri","toolbar":"İFRAME"},"image":{"alt":"Alternativ mətn","border":"Sərhəd","btnUpload":"Serverə yüklə","button2Img":"Şəkil tipli düyməni şəklə çevirmək istədiyinizə əminsinizmi?","hSpace":"Üfüqi boşluq","img2Button":"Şəkli şəkil tipli düyməyə çevirmək istədiyinizə əminsinizmi?","infoTab":"Şəkil haqqında məlumat","linkTab":"Link","lockRatio":"Ölçülərin uyğunluğu saxla","menu":"Şəklin seçimləri","resetSize":"Ölçüləri qaytar","title":"Şəklin seçimləri","titleButton":"Şəkil tipli düyməsinin seçimləri","upload":"Serverə yüklə","urlMissing":"Şəklin ünvanı yanlışdır.","vSpace":"Şaquli boşluq","validateBorder":"Sərhədin eni rəqəm olmalıdır.","validateHSpace":"Üfüqi boşluq rəqəm olmalıdır.","validateVSpace":"Şaquli boşluq rəqəm olmalıdır."},"indent":{"indent":"Sol boşluqu artır","outdent":"Sol boşluqu azalt"},"smiley":{"options":"Smayli-nin seçimləri","title":"Smayli-ni daxil et","toolbar":"Smayli"},"language":{"button":"Dilini təyin et","remove":"Dilini sil"},"link":{"acccessKey":"Qısayol düyməsi","advanced":"Geniş seçimləri","advisoryContentType":"Məsləhətli məzmunun növü","advisoryTitle":"Məsləhətli başlıq","anchor":{"toolbar":"Xeş","menu":"Xeşi redaktə et","title":"Xeşin seçimləri","name":"Xeşin adı","errorName":"Xeşin adı yanlışdır","remove":"Xeşin adı sil"},"anchorId":"ID görə","anchorName":"Xeşin adına görə","charset":"Hədəfin kodlaşdırması","cssClasses":"Üslub klası","download":"Məcburi yükləmə","displayText":"Göstərilən mətn","emailAddress":"E-poçt ünvanı","emailBody":"Mesajın məzmunu","emailSubject":"Mesajın başlığı","id":"ID","info":"Linkin xüsusiyyətləri","langCode":"Dilin kodu","langDir":"Yaziların istiqaməti","langDirLTR":"Soldan sağa (LTR)","langDirRTL":"Sağdan sola (RTL)","menu":"Linki redaktə et","name":"Ad","noAnchors":"(heç bir xeş tapılmayıb)","noEmail":"E-poçt ünvanı daxil edin","noUrl":"Linkin URL-ı daxil edin","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Asılı (Netscape)","popupFeatures":"Pəncərənin xüsusiyyətləri","popupFullScreen":"Tam ekran rejimi (IE)","popupLeft":"Solda","popupLocationBar":"Ünvan paneli","popupMenuBar":"Menyu paneli","popupResizable":"Olçülər dəyişilir","popupScrollBars":"Sürüşdürmələr göstər","popupStatusBar":"Bildirişlərin paneli","popupToolbar":"Alətlərin paneli","popupTop":"Yuxarıda","rel":"Münasibət","selectAnchor":"Xeşi seçin","styles":"Üslub","tabIndex":"Tabın nömrəsi","target":"Hədəf çərçivə","targetFrame":"","targetFrameName":"Freymin adı","targetPopup":"","targetPopupName":"Pəncərənin adı","title":"Link","toAnchor":"Xeş","toEmail":"E-poçt","toUrl":"URL","toPhone":"Phone","toolbar":"Link","type":"Linkin növü","unlink":"Linki sil","upload":"Serverə yüklə"},"list":{"bulletedlist":"Markerlənmiş siyahını başlat/sil","numberedlist":"Nömrələnmiş siyahını başlat/sil"},"liststyle":{"bulletedTitle":"Markerlənmiş siyahının xüsusiyyətləri","circle":"Dəirəcik","decimal":"Rəqəm (1, 2, 3 və s.)","disc":"Disk","lowerAlpha":"Kiçik hərflər (a, b, c, d, e və s.)","lowerRoman":"Rum rəqəmləri (i, ii, iii, iv, v və s.)","none":"Yoxdur","notset":"","numberedTitle":"Nömrəli siyahının xüsusiyyətləri","square":"Dördbucaq","start":"Başlanğıc","type":"Növ","upperAlpha":"Böyük hərflər (a, b, c, d, e və s.)","upperRoman":"Böyük Rum rəqəmləri (I, II, III, IV, V və s.)","validateStartNumber":"Siyahının başlanğıc nömrəsi tam və müsbət rəqəm olmalıdır."},"magicline":{"title":"Abzası burada əlavə et"},"maximize":{"maximize":"Aşkarla","minimize":"Gizlət"},"newpage":{"toolbar":"Yeni səhifə"},"pagebreak":{"alt":"Vərəq ayırıcı nişanı","toolbar":"Vərəqin çapı üçün ayırıcı nişanı qoy"},"pastetext":{"button":"Yalnız mətni saxla","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"Əlavə edilən mətn Word-dan köçürülənə oxşayır. Təmizləmək istəyirsinizmi?","error":"Daxili səhvə görə əlavə edilən məlumatların təmizlənməsi mümkün deyil","title":"Word-dan əlavəetmə","toolbar":"Word-dan əlavəetmə"},"preview":{"preview":"Öncədən baxılması"},"print":{"toolbar":"Çap et"},"removeformat":{"toolbar":"Formatı sil"},"save":{"toolbar":"Yadda saxla"},"selectall":{"toolbar":"Hamısını seç"},"showblocks":{"toolbar":"Blokları göstər"},"sourcearea":{"toolbar":"HTML mənbəyini göstər"},"specialchar":{"options":"Xüsusi simvolların seçimləri","title":"Xüsusi simvolu seç","toolbar":"Xüsusi simvolu daxil et"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Üslub","panelTitle":"Format üslubları","panelTitle1":"Blokların üslubları","panelTitle2":"Sözlərin üslubları","panelTitle3":"Obyektlərin üslubları"},"table":{"border":"Sərhədlərin eni","caption":"Cədvəlin başlığı","cell":{"menu":"Xana","insertBefore":"Burdan əvvələ xanası çək","insertAfter":"Burdan sonra xanası çək","deleteCell":"Xanaları sil","merge":"Xanaları birləşdir","mergeRight":"Sağdan birləşdir","mergeDown":"Soldan birləşdir","splitHorizontal":"Üfüqi böl","splitVertical":"Şaquli böl","title":"Xanaların seçimləri","cellType":"Xana növü","rowSpan":"Sətirləri birləşdir","colSpan":"Sütunları birləşdir","wordWrap":"Sətirlərin sınması","hAlign":"Üfüqi düzləndirmə","vAlign":"Şaquli düzləndirmə","alignBaseline":"Mətn xətti","bgColor":"Doldurma rəngi","borderColor":"Sərhədin rəngi","data":"Məlumatlar","header":"Başlıq","yes":"Bəli","no":"Xeyr","invalidWidth":"Xanasın eni rəqəm olmalıdır.","invalidHeight":"Xanasın hündürlüyü rəqəm olmalıdır.","invalidRowSpan":"Birləşdirdiyiniz sütun xanaların sayı tam və müsbət rəqəm olmalıdır.","invalidColSpan":"Birləşdirdiyiniz sətir xanaların sayı tam və müsbət rəqəm olmalıdır.","chooseColor":"Seç"},"cellPad":"Xanalardakı kənar boşluqlar","cellSpace":"Xanalararası interval","column":{"menu":"Sütun","insertBefore":"Sola sütun əlavə et","insertAfter":"Sağa sütun əlavə et","deleteColumn":"Sütunları sil"},"columns":"Sütunlar","deleteTable":"Cədvəli sil","headers":"Başlıqlar","headersBoth":"Hər ikisi","headersColumn":"Birinci sütun","headersNone":"yox","headersRow":"Birinci sətir","invalidBorder":"Sərhədlərin eni müsbət rəqəm olmalıdır.","invalidCellPadding":"Xanalardakı kənar boşluqlar müsbət rəqəm olmalıdır.","invalidCellSpacing":"Xanalararası interval müsbət rəqəm olmalıdır.","invalidCols":"Sütunlarin sayı tam və müsbət olmalıdır.","invalidHeight":"Cədvəlin hündürlüyü rəqəm olmalıdır.","invalidRows":"Sətirlətin sayı tam və müsbət olmalıdır.","invalidWidth":"Cədvəlin eni rəqəm olmalıdır.","menu":"Cədvəl alətləri","row":{"menu":"Sətir","insertBefore":"Yuxarıya sətir əlavə et","insertAfter":"Aşağıya sətir əlavə et","deleteRow":"Sətirləri sil"},"rows":"Sətirlər","summary":"Xülasə","title":"Cədvəl alətləri","toolbar":"Cədvəl","widthPc":"faiz","widthPx":"piksel","widthUnit":"en vahidi"},"undo":{"redo":"Təkrar et","undo":"İmtina et"},"widget":{"move":"Tıklayın və aparın","label":"%1 vidjet"},"uploadwidget":{"abort":"Serverə yükləmə istifadəçi tərəfindən dayandırılıb","doneOne":"Fayl müvəffəqiyyətlə yüklənib","doneMany":"%1 fayllar müvəffəqiyyətlə yüklənib","uploadOne":"Faylın yüklənməsi ({percentage}%)","uploadMany":"Faylların yüklənməsi, {max}-dan {current} hazır ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/bg.js b/htdocs/includes/ckeditor/ckeditor/lang/bg.js deleted file mode 100644 index f5e535afe7d..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/bg.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['bg']={"editor":"Редактор за форматиран текст","editorPanel":"Панел на текстовия редактор","common":{"editorHelp":"натиснете ALT+0 за помощ","browseServer":"Избор от сървъра","url":"URL адрес","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Изображение","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за изображение","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"От ляво надясно (LTR)","langDirRtl":"От дясно наляво (RTL)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Най-горният прозорец (_top)","targetSelf":"Текущият прозорец (_self)","targetParent":"Горният прозорец (_parent)","langDirLTR":"От ляво надясно (LTR)","langDirRTL":"От дясно наляво (RTL)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","left":"Ляво","right":"Дясно","center":"Център","justify":"Двустранно","alignLeft":"Подравни ляво","alignRight":"Подравни дясно","alignCenter":"Подравни център","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","alignNone":"Без подравняване","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина трябва да е число.","invalidLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна мерна единица (%2).","invalidCssLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна CSS мерна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да е положително число с или без валидна HTML мерна единица (px или %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1, недостъпно","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Клавишна комбинация","optionDefault":"По подразбиране"},"about":{"copy":"Авторско право © $1. Всички права запазени.","dlgTitle":"Относно CKEditor 4","moreInfo":"За лицензионна информация моля посетете сайта ни:"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Долен индекс","superscript":"Горен индекс","underline":"Подчертан"},"bidi":{"ltr":"Посока на текста от ляво надясно","rtl":"Посока на текста от дясно наляво"},"blockquote":{"toolbar":"Блок за цитат"},"notification":{"closed":"Известието е затворено."},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Клипборд/Отмяна","editing":"Редакция","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни действията по копиране. За целта използвайте клавиатурата (Ctrl+C).","cut":"Отрежи","cutError":"Настройките за сигурност на вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. За целта използвайте клавиатурата (Ctrl+X).","paste":"Вмъкни","pasteNotification":"Натиснете %1 за да вмъкнете. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или от контекстното меню.","pasteArea":"Зона за поставяне","pasteMsg":"Поставете съдържанието в зоната отдолу и натиснете OK."},"colorbutton":{"auto":"Автоматично","bgColorTitle":"Фонов цвят","colors":{"000":"Черно","800000":"Кестеняво","8B4513":"Светлокафяво","2F4F4F":"Тъмно плочесто сиво","008080":"Сиво птиче","000080":"Морско синьо","4B0082":"Индиго","696969":"Тъмно сиво","B22222":"Огнено червено","A52A2A":"Кафяво","DAA520":"Златисто","006400":"Тъмно зелено","40E0D0":"Тюркуазено","0000CD":"Средно синьо","800080":"Пурпурно","808080":"Сиво","F00":"Червено","FF8C00":"Тъмно оранжево","FFD700":"Златно","008000":"Зелено","0FF":"Светло синьо","00F":"Синьо","EE82EE":"Виолетово","A9A9A9":"Бледо сиво","FFA07A":"Светло розово-оранжево","FFA500":"Оранжево","FFFF00":"Жълто","00FF00":"Варосано","AFEEEE":"Тюркоазено остро","ADD8E6":"Светло синьо","DDA0DD":"Сливово","D3D3D3":"Светло сиво","FFF0F5":"Лавандула изчервено","FAEBD7":"Антично бяло","FFFFE0":"Светло жълто","F0FFF0":"Медена роса","F0FFFF":"Лазурно","F0F8FF":"Алиса синьо","E6E6FA":"Лавандула","FFF":"Бяло","1ABC9C":"Силно синьо-зелено","2ECC71":"Изомрудено","3498DB":"Ярко синьо","9B59B6":"Аметист","4E5F70":"Сивкаво синьо","F1C40F":"Блестящо жълто","16A085":"Тъмно синьо-зелено","27AE60":"Тъмно изомрудено","2980B9":"Силно синьо","8E44AD":"Тъмно виолетово","2C3E50":"Ненаситено синьо","F39C12":"Оранжево","E67E22":"Морков","E74C3C":"Бледо червено","ECF0F1":"Ярко сребърно","95A5A6":"Светло сивкаво синьо-зелено","DDD":"Светло сиво","D35400":"Тиквено","C0392B":"Силно червено","BDC3C7":"Сребърно","7F8C8D":"Сивкаво синьо-зелено","999":"Тъмно сиво"},"more":"Още цветове","panelTitle":"Цветове","textColorTitle":"Цвят на текста"},"colordialog":{"clear":"Изчистване","highlight":"Осветяване","options":"Цветови опции","selected":"Изберете цвят","title":"Избор на цвят"},"templates":{"button":"Шаблони","emptyListMsg":"(Няма дефинирани шаблони)","insertOption":"Замяна на актуалното съдържание","options":"Опции за шаблона","selectPromptMsg":"Моля изберете шаблон за отваряне в редактора","title":"Шаблони"},"contextmenu":{"options":"Опции на контекстното меню"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Заглавие","cssClassInputLabel":"Класове за CSS","edit":"Промяна на Div","inlineStyleInputLabel":"В редица","langDirLTRLabel":"От ляво надясно (LTR)","langDirLabel":"Посока на езика","langDirRTLLabel":"От дясно наляво (RTL)","languageCodeInputLabel":" Код на езика","remove":"Премахване на Div","styleSelectLabel":"Стил","title":"Създаване на Div контейнер","toolbar":"Създаване на Div контейнер"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"filetools":{"loadError":"Възникна грешка при четене на файла.","networkError":"Възникна мрежова грешка при качването на файла.","httpError404":"Възникна HTTP грешка при качване на файла (404: Файлът не е намерен).","httpError403":"Възникна HTTP грешка при качване на файла (403: Забранено).","httpError":"Възникна HTTP грешка при качване на файла (статус на грешката: %1).","noUrlError":"URL адресът за качване не е дефиниран.","responseError":"Неправилен отговор на сървъра."},"find":{"find":"Търсене","findOptions":"Настройки за търсене","findWhat":"Търси за:","matchCase":"Съвпадение на големи/малки букви","matchCyclic":"Циклично търсене","matchWord":"Търсене по цели думи","notFoundMsg":"Указаният текст не е намерен.","replace":"Замяна","replaceAll":"Замени всички","replaceSuccessMsg":"%1 съвпадения заменени.","replaceWith":"Замяна с:","title":"Търсене и замяна"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"flash":{"access":"Достъп до скрипт","accessAlways":"Винаги","accessNever":"Никога","accessSameDomain":"Същият домейн","alignAbsBottom":"Най-долу","alignAbsMiddle":"Точно по средата","alignBaseline":"Базова линия","alignTextTop":"Върху текста","bgcolor":"Цвят на фона","chkFull":"Позволи на цял екран","chkLoop":"Циклично","chkMenu":"Разрешено Flash меню","chkPlay":"Авто. пускане","flashvars":"Променливи за Флаш","hSpace":"X отстъп","properties":"Настройки за флаш","propertiesTab":"Настройки","quality":"Качество","qualityAutoHigh":"Авто високо","qualityAutoLow":"Авто ниско","qualityBest":"Отлично","qualityHigh":"Високо","qualityLow":"Ниско","qualityMedium":"Средно","scale":"Мащаб","scaleAll":"Показва всичко","scaleFit":"Според мястото","scaleNoBorder":"Без рамка","title":"Настройки за флаш","vSpace":"Y отстъп","validateHSpace":"X отстъп трябва да е число.","validateSrc":"URL адресът не трябва да е празен.","validateVSpace":"Y отстъп трябва да е число.","windowMode":"Режим на прозореца","windowModeOpaque":"Плътно","windowModeTransparent":"Прозрачно","windowModeWindow":"Прозорец"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер на шрифт","panelTitle":"Размер на шрифт"},"label":"Шрифт","panelTitle":"Име на шрифт","voiceLabel":"Шрифт"},"forms":{"button":{"title":"Настройки на бутон","text":"Текст (стойност)","type":"Тип","typeBtn":"Бутон","typeSbm":"Добави","typeRst":"Нулиране"},"checkboxAndRadio":{"checkboxTitle":"Настройки на чекбокс","radioTitle":"Настройки на радиобутон","value":"Стойност","selected":"Избрано","required":"Задължително"},"form":{"title":"Настройки на форма","menu":"Настройки на форма","action":"Действие","method":"Метод","encoding":"Кодиране"},"hidden":{"title":"Настройки на скрито поле","name":"Име","value":"Стойност"},"select":{"title":"Настройки на поле за избор","selectInfo":"Селект инфо","opAvail":"Налични опции","value":"Стойност","size":"Размер","lines":"линии","chkMulti":"Разрешаване на няколко избора","required":"Задължително","opText":"Текст","opValue":"Стойност","btnAdd":"Добави","btnModify":"Промени","btnUp":"Нагоре","btnDown":"Надолу","btnSetValue":"Задай като избрана стойност","btnDelete":"Изтриване"},"textarea":{"title":"Настройки на текстова зона","cols":"Колони","rows":"Редове"},"textfield":{"title":"Настройки на текстово поле","name":"Име","value":"Стойност","charWidth":"Ширина на знаците","maxChars":"Макс. знаци","required":"Задължително","type":"Тип","typeText":"Текст","typePass":"Парола","typeEmail":"Имейл","typeSearch":"Търсене","typeTel":"Телефонен номер","typeUrl":"Уеб адрес"}},"format":{"label":"Формат","panelTitle":"Формат на параграф","tag_address":"Адрес","tag_div":"Нормален (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"iframe":{"border":"Показва рамка на карето","noUrl":"Моля въведете URL за iFrame","scrolling":"Активира прелистване","title":"IFrame настройки","toolbar":"IFrame"},"image":{"alt":"Алтернативен текст","border":"Рамка","btnUpload":"Изпрати на сървъра","button2Img":"Искате ли да превърнете избрания бутон за изображение в просто изображение?","hSpace":"Хоризонтален отстъп","img2Button":"Искате ли да превърнете избраното изображение в бутон за изображение?","infoTab":"Изображение","linkTab":"Връзка","lockRatio":"Заключване на съотношението","menu":"Настройки на изображение","resetSize":"Нулиране на размер","title":"Настройки на изображение","titleButton":"Настройки на бутон за изображение","upload":"Качване","urlMissing":"URL адресът на изображението липсва.","vSpace":"Вертикален отстъп","validateBorder":"Рамката трябва да е цяло число.","validateHSpace":"Хоризонтален отстъп трябва да е цяло число.","validateVSpace":"Вертикален отстъп трябва да е цяло число."},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"smiley":{"options":"Опции за усмивка","title":"Вмъкване на усмивка","toolbar":"Усмивка"},"language":{"button":"Задай език","remove":"Премахни език"},"link":{"acccessKey":"Клавиш за достъп","advanced":"Разширено","advisoryContentType":"Тип на съдържанието","advisoryTitle":"Заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Езиков код на свързания ресурс","cssClasses":"CSS класове","download":"Укажи изтегляне","displayText":"Текст за показване","emailAddress":"Имейл aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"Id","info":"Връзка","langCode":"Езиков код","langDir":"Посока на езика","langDirLTR":"От ляво надясно (LTR)","langDirRTL":"От дясно наляво (RTL)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете имейл адрес","noUrl":"Моля въведете URL адрес","noTel":"Please type the phone number","other":"<друго>","phoneNumber":"Phone number","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Ленти за прелистване","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Свързаност (rel атрибут)","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"","targetFrameName":"Име на целевия прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"Имейл","toUrl":"Уеб адрес","toPhone":"Phone","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"list":{"bulletedlist":"Вмъкване/премахване на точков списък","numberedlist":"Вмъкване/премахване на номериран списък"},"liststyle":{"bulletedTitle":"Свойства на точков списък","circle":"Кръг","decimal":"Числа (1, 2, 3 и т.н.)","disc":"Диск","lowerAlpha":"Малки букви (а, б, в, г, д и т.н.)","lowerRoman":"Малки римски числа (i, ii, iii, iv, v и т.н.)","none":"Няма","notset":"<не е указано>","numberedTitle":"Numbered List Properties","square":"Квадрат","start":"Старт","type":"Тип","upperAlpha":"Големи букви (А, Б, В, Г, Д и т.н.)","upperRoman":"Големи римски числа (I, II, III, IV, V и т.н.)","validateStartNumber":"Началният номер на списъка трябва да е цяло число."},"magicline":{"title":"Вмъкнете параграф тук"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"newpage":{"toolbar":"Нова страница"},"pagebreak":{"alt":"Разделяне на страници","toolbar":"Вмъкване на нова страница при печат"},"pastetext":{"button":"Вмъкни като чист текст","pasteNotification":"Натиснете %1 за да поставите. Вашият браузър не поддържа поставяне с бутон от лентата с инструменти или контекстното меню.","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"Текстът, който искате да поставите, изглежда е копиран от Word. Искате ли да се почисти преди поставянето?","error":"Вмъкваните данни не могат да бъдат почистени поради вътрешна грешка","title":"Вмъкни от Word","toolbar":"Вмъкни от Word"},"preview":{"preview":"Преглед"},"print":{"toolbar":"Печат"},"removeformat":{"toolbar":"Премахване на форматирането"},"save":{"toolbar":"Запис"},"selectall":{"toolbar":"Избери всичко"},"showblocks":{"toolbar":"Показва блокове"},"sourcearea":{"toolbar":"Код"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Речници","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови стилове","panelTitle2":"Поредови стилове","panelTitle3":"Обектни стилове"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане надясно","mergeDown":"Сливане надолу","splitHorizontal":"Разделяне клетката хоризонтално","splitVertical":"Разделяне клетката вертикално","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Редове обединени","colSpan":"Колони обединени","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Заглавие","yes":"Да","no":"Не","invalidWidth":"Ширината на клетката трябва да е число.","invalidHeight":"Височината на клетката трябва да е число.","invalidRowSpan":"Редове обединени трябва да е цяло число.","invalidColSpan":"Колони обединени трябва да е цяло число.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разстояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Заглавия","headersBoth":"И двете","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката трябва да е число.","invalidCellPadding":"Отстоянието на клетките трябва да е положително число.","invalidCellSpacing":"Интервалът в клетките трябва да е положително число.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Височината на таблицата трябва да е число.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Ширината на таблицата трябва да е число.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"undo":{"redo":"Пренаправи","undo":"Отмени"},"widget":{"move":"Кликни и влачи, за да преместиш","label":"%1 приставка"},"uploadwidget":{"abort":"Качването е прекратено от потребителя.","doneOne":"Файлът е качен успешно.","doneMany":"Успешно са качени %1 файла.","uploadOne":"Качване на файл ({percentage}%)...","uploadMany":"Качване на файлове, {current} от {max} качени ({percentage}%)..."},"wsc":{"btnIgnore":"Игнорирай","btnIgnoreAll":"Игнорирай всичко","btnReplace":"Препокриване","btnReplaceAll":"Препокрий всичко","btnUndo":"Възтанови","changeTo":"Промени на","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- Няма препоръчани -","notAvailable":"Съжаляваме, но услугата не е достъпна за момента","notInDic":"Не е в речника","oneChange":"Spell check complete: One word changed","progress":"Проверява се правописа...","title":"Проверка на правопис","toolbar":"Проверка на правопис"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/bn.js b/htdocs/includes/ckeditor/ckeditor/lang/bn.js deleted file mode 100644 index 92b075b419e..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/bn.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['bn']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","flash":"ফ্লাশ লেবেল যুক্ত কর","form":"ফর্ম","checkbox":"চেক বাক্স","radio":"রেডিও বাটন","textField":"টেক্সট ফীল্ড","textarea":"টেক্সট এরিয়া","hiddenField":"গুপ্ত ফীল্ড","button":"বাটন","select":"বাছাই ফীল্ড","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL এর লম্বা বর্ণনা","cssClass":"স্টাইল-শীট ক্লাস","advisoryTitle":"পরামর্শ শীর্ষক","cssStyle":"স্টাইল","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"প্রিভিউ","resize":"Resize","generalTab":"General","advancedTab":"এডভান্সড","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"টার্গেট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"স্টাইল","cssClasses":"স্টাইল-শীট ক্লাস","width":"প্রস্থ","height":"দৈর্ঘ্য","align":"এলাইন","left":"বামে","right":"ডানে","center":"মাঝখানে","justify":"ব্লক জাস্টিফাই","alignLeft":"বা দিকে ঘেঁষা","alignRight":"ডান দিকে ঘেঁষা","alignCenter":"Align Center","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"বোল্ড","italic":"বাঁকা","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের নিরাপত্তা সেটিংসমূহ এডিটরকে স্বয়ংক্রিয়ভাবে কপি করার প্রক্রিয়া চালনা করার অনুমতি দেয় না। অনুগ্রহপূর্বক এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"স্বয়ংক্রিয়ভাবে","bgColorTitle":"পৃষ্ঠতলের রং","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"আরও রং...","panelTitle":"Colors","textColorTitle":"টেক্স্ট রং"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"টেমপ্লেট","emptyListMsg":"(কোন টেমপ্লেট ডিফাইন করা নেই)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন
(আসল কনটেন্ট হারিয়ে যাবে):","title":"কনটেন্ট টেমপ্লেট"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"খুজিঁ","findOptions":"Find Options","findWhat":"যা খুঁজতে হবে:","matchCase":"কেস মিলাও","matchCyclic":"Match cyclic","matchWord":"পুরা শব্দ মেলাও","notFoundMsg":"আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি","replace":"রিপ্লেস","replaceAll":"সব বদলে দাও","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"যার সাথে বদলাতে হবে:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs নীচে","alignAbsMiddle":"Abs উপর","alignBaseline":"মূল রেখা","alignTextTop":"টেক্সট উপর","bgcolor":"পৃষ্ঠতলের রং","chkFull":"Allow Fullscreen","chkLoop":"লূপ","chkMenu":"ফ্ল্যাশ মেনু এনাবল কর","chkPlay":"অটো প্লে","flashvars":"Variables for Flash","hSpace":"হরাইজন্টাল স্পেস","properties":"ফ্লাশ প্রোপার্টি","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"স্কেল","scaleAll":"সব দেখাও","scaleFit":"নিখুঁত ফিট","scaleNoBorder":"কোনো বর্ডার নেই","title":"ফ্ল্যাশ প্রোপার্টি","vSpace":"ভার্টিকেল স্পেস","validateHSpace":"HSpace must be a number.","validateSrc":"অনুগ্রহ করে URL লিংক টাইপ করুন","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"সাইজ","voiceLabel":"Font Size","panelTitle":"সাইজ"},"label":"ফন্ট","panelTitle":"ফন্ট","voiceLabel":"ফন্ট"},"forms":{"button":{"title":"বাটন সম্বন্ধীয়","text":"টেক্সট (ভ্যালু)","type":"প্রকার","typeBtn":"বাটন","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"চেক বক্স প্রোপার্টি","radioTitle":"রেডিও বাটন সম্বন্ধীয়","value":"ভ্যালু","selected":"সিলেক্টেড","required":"Required"},"form":{"title":"ফর্ম প্রোপার্টি","menu":"ফর্ম প্রোপার্টি","action":"একশ্যন","method":"পদ্ধতি","encoding":"Encoding"},"hidden":{"title":"গুপ্ত ফীল্ড প্রোপার্টি","name":"নাম","value":"ভ্যালু"},"select":{"title":"বাছাই ফীল্ড প্রোপার্টি","selectInfo":"তথ্য","opAvail":"অন্যান্য বিকল্প","value":"ভ্যালু","size":"সাইজ","lines":"লাইন সমূহ","chkMulti":"একাধিক সিলেকশন এলাউ কর","required":"Required","opText":"টেক্সট","opValue":"ভ্যালু","btnAdd":"যুক্ত","btnModify":"বদলে দাও","btnUp":"উপর","btnDown":"নীচে","btnSetValue":"বাছাই করা ভ্যালু হিসেবে সেট কর","btnDelete":"ডিলীট"},"textarea":{"title":"টেক্সট এরিয়া প্রোপার্টি","cols":"কলাম","rows":"রো"},"textfield":{"title":"টেক্সট ফীল্ড প্রোপার্টি","name":"নাম","value":"ভ্যালু","charWidth":"ক্যারেক্টার প্রশস্ততা","maxChars":"সর্বাধিক ক্যারেক্টার","required":"Required","type":"টাইপ","typeText":"টেক্সট","typePass":"পাসওয়ার্ড","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ধরন-প্রকৃতি","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"horizontalrule":{"toolbar":"অনুভূমিক লাইন যোগ করি"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"বিকল্প টেক্সট","border":"বর্ডার","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"হরাইজন্টাল স্পেস","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ছবির তথ্য","linkTab":"লিংক","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","title":"ছবির প্রোপার্টি","titleButton":"ছবির বাটন সম্বন্ধীয়","upload":"আপলোড","urlMissing":"Image source URL is missing.","vSpace":"ভার্টিকেল স্পেস","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"ইনডেন্ট বাড়াই","outdent":"ইনডেন্ট কমাও"},"smiley":{"options":"Smiley Options","title":"স্মাইলী যুক্ত কর","toolbar":"স্মাইলী"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"প্রবেশ কী","advanced":"এডভান্সড","advisoryContentType":"পরামর্শ কন্টেন্টের প্রকার","advisoryTitle":"পরামর্শ শীর্ষক","anchor":{"toolbar":"নোঙ্গর","menu":"নোঙর প্রোপার্টি","title":"নোঙর প্রোপার্টি","name":"নোঙরের নাম","errorName":"নোঙরের নাম টাইপ করুন","remove":"Remove Anchor"},"anchorId":"নোঙরের আইডি দিয়ে","anchorName":"নোঙরের নাম দিয়ে","charset":"লিংক রিসোর্স ক্যারেক্টর সেট","cssClasses":"স্টাইল-শীট ক্লাস","download":"Force Download","displayText":"Display Text","emailAddress":"ইমেইল ঠিকানা","emailBody":"মেসেজের দেহ","emailSubject":"মেসেজের বিষয়","id":"আইডি","info":"লিংক তথ্য","langCode":"ভাষা লেখার দিক","langDir":"ভাষা লেখার দিক","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","menu":"লিংক সম্পাদন","name":"নাম","noAnchors":"(No anchors available in the document)","noEmail":"অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন","noUrl":"অনুগ্রহ করে URL লিংক টাইপ করুন","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"ডিপেন্ডেন্ট (Netscape)","popupFeatures":"পপআপ উইন্ডো ফীচার সমূহ","popupFullScreen":"পূর্ণ পর্দা জুড়ে (IE)","popupLeft":"বামের পজিশন","popupLocationBar":"লোকেশন বার","popupMenuBar":"মেন্যু বার","popupResizable":"Resizable","popupScrollBars":"স্ক্রল বার","popupStatusBar":"স্ট্যাটাস বার","popupToolbar":"টুল বার","popupTop":"ডানের পজিশন","rel":"Relationship","selectAnchor":"নোঙর বাছাই","styles":"স্টাইল","tabIndex":"ট্যাব ইন্ডেক্স","target":"টার্গেট","targetFrame":"<ফ্রেম>","targetFrameName":"টার্গেট ফ্রেমের নাম","targetPopup":"<পপআপ উইন্ডো>","targetPopupName":"পপআপ উইন্ডোর নাম","title":"লিংক","toAnchor":"এই পেজে নোঙর কর","toEmail":"ইমেইল","toUrl":"URL","toPhone":"Phone","toolbar":"লিংক যুক্ত কর","type":"লিংক প্রকার","unlink":"লিংক সরাও","upload":"আপলোড"},"list":{"bulletedlist":"বুলেটেড তালিকা প্রবেশ/অপসারন করি","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"নতুন পৃষ্ঠা"},"pagebreak":{"alt":"Page Break","toolbar":"পেজ ব্রেক"},"pastetext":{"button":"সাধারণ টেক্সট হিসেবে পেইস্ট করি","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"সাদা টেক্সট হিসেবে পেস্ট কর"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেস্ট (শব্দ)","toolbar":"পেস্ট (শব্দ)"},"preview":{"preview":"প্রাকদর্শন"},"print":{"toolbar":"প্রিন্ট করি"},"removeformat":{"toolbar":"ধরন-প্রকৃতি অপসারণ করি"},"save":{"toolbar":"সংরক্ষন করি"},"selectall":{"toolbar":"সব সিলেক্ট করি"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"উৎস"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"ধরন","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"বর্ডারের সাইজ","caption":"শীর্ষক","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মুছে দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"পৃষ্ঠতলের রং","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল প্যাডিং","cellSpace":"সেল স্পেস","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মুছে দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল প্রোপার্টি","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মুছে দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল প্রোপার্টি","toolbar":"টেবিলের লেবেল যুক্ত কর","widthPc":"শতকরা","widthPx":"পিক্সেল","widthUnit":"width unit"},"undo":{"redo":"পুনরায় করি","undo":"আনডু"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"ইগনোর কর","btnIgnoreAll":"সব ইগনোর কর","btnReplace":"বদলে দাও","btnReplaceAll":"সব বদলে দাও","btnUndo":"আন্ডু","changeTo":"এতে বদলাও","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?","manyChanges":"বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে","noChanges":"বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি","noMispell":"বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি","noSuggestions":"- কোন সাজেশন নেই -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"শব্দকোষে নেই","oneChange":"বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে","progress":"বানান পরীক্ষা চলছে...","title":"Spell Checker","toolbar":"বানান চেক"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/bs.js b/htdocs/includes/ckeditor/ckeditor/lang/bs.js deleted file mode 100644 index d19e214a1c3..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/bs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['bs']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","left":"Lijevo","right":"Desno","center":"Centar","justify":"Puno poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatska","bgColorTitle":"Boja pozadine","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Više boja...","panelTitle":"Colors","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory title","cssClassInputLabel":"Klase CSS stilova","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"S lijeva na desno (LTR)","langDirLabel":"Smjer pisanja","langDirRTLLabel":"S desna na lijevo (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Stil","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Naði","findOptions":"Find Options","findWhat":"Naði šta:","matchCase":"Uporeðuj velika/mala slova","matchCyclic":"Match cyclic","matchWord":"Uporeðuj samo cijelu rijeè","notFoundMsg":"Traženi tekst nije pronaðen.","replace":"Zamjeni","replaceAll":"Zamjeni sve","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Zamjeni sa:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs dole","alignAbsMiddle":"Abs sredina","alignBaseline":"Bazno","alignTextTop":"Vrh teksta","bgcolor":"Boja pozadine","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"Molimo ukucajte URL link","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Velièina","voiceLabel":"Font Size","panelTitle":"Velièina"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Tekst na slici","border":"Okvir","btnUpload":"Šalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","resetSize":"Resetuj dimenzije","title":"Svojstva slike","titleButton":"Image Button Properties","upload":"Šalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"smiley":{"options":"Smiley Options","title":"Ubaci smješka","toolbar":"Smješko"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Pristupna tipka","advanced":"Naprednije","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Klase CSS stilova","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Adresa","emailBody":"Poruka","emailSubject":"Subjekt poruke","id":"Id","info":"Link info","langCode":"Smjer pisanja","langDir":"Smjer pisanja","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Izmjeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra na stranici)","noEmail":"Molimo ukucajte e-mail adresu","noUrl":"Molimo ukucajte URL link","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Ovisno (Netscape)","popupFeatures":"Moguænosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Resizable","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka sa alatima","popupTop":"Gornja pozicija","rel":"Relationship","selectAnchor":"Izaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Prozor","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Ubaci/Izmjeni link","type":"Tip linka","unlink":"Izbriši link","upload":"Šalji"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Novi dokument"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Zalijepi kao obièan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Zalijepi kao obièan tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"preview":{"preview":"Prikaži"},"print":{"toolbar":"Štampaj"},"removeformat":{"toolbar":"Poništi format"},"save":{"toolbar":"Snimi"},"selectall":{"toolbar":"Selektuj sve"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"HTML kôd"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"undo":{"redo":"Ponovi","undo":"Vrati"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/ca.js b/htdocs/includes/ckeditor/ckeditor/lang/ca.js deleted file mode 100644 index 770d284e00b..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['ca']={"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","left":"Ajusta a l'esquerra","right":"Ajusta a la dreta","center":"Centre","justify":"Justificat","alignLeft":"Alinea a l'esquerra","alignRight":"Alinea a la dreta","alignCenter":"Align Center","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"Cap","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1, no disponible","keyboard":{"8":"Retrocés","13":"Intro","16":"Majúscules","17":"Ctrl","18":"Alt","32":"Space","35":"Fi","36":"Inici","46":"Eliminar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor 4","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"bidi":{"ltr":"Direcció del text d'esquerra a dreta","rtl":"Direcció del text de dreta a esquerra"},"blockquote":{"toolbar":"Bloc de cita"},"notification":{"closed":"Notificació tancada."},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Àrea d'enganxat","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automàtic","bgColorTitle":"Color de Fons","colors":{"000":"Negre","800000":"Grana","8B4513":"Marró sella","2F4F4F":"Gris pissarra fosca","008080":"Blau xarxet","000080":"Blau marí","4B0082":"Indi","696969":"Gris Fosc","B22222":"Foc Maó","A52A2A":"Marró","DAA520":"Solidago","006400":"Verd Fosc","40E0D0":"Turquesa","0000CD":"Blau 1/2","800080":"Lila","808080":"Gris","F00":"Vermell","FF8C00":"Taronja Fosc","FFD700":"Or","008000":"Verd","0FF":"Cian","00F":"Blau","EE82EE":"Violat","A9A9A9":"Gris clar","FFA07A":"Salmó clar","FFA500":"Taronja","FFFF00":"Groc","00FF00":"Verd Llima","AFEEEE":"Turquesa Pàl·lid","ADD8E6":"Blau Clar","DDA0DD":"Pruna","D3D3D3":"Gris Clar","FFF0F5":"Lavanda rosat","FAEBD7":"Blanc Antic","FFFFE0":"Groc Clar","F0FFF0":"Verd Pàl·lid","F0FFFF":"Atzur","F0F8FF":"Cian pàlid","E6E6FA":"Lavanda","FFF":"Blanc","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Més Colors...","panelTitle":"Colors","textColorTitle":"Color del Text"},"colordialog":{"clear":"Neteja","highlight":"Destacat","options":"Opcions del color","selected":"Color Seleccionat","title":"Seleccioni el color"},"templates":{"button":"Plantilles","emptyListMsg":"(No hi ha plantilles definides)","insertOption":"Reemplaça el contingut actual","options":"Opcions de plantilla","selectPromptMsg":"Seleccioneu una plantilla per usar a l'editor
(per defecte s'elimina el contingut actual):","title":"Plantilles de contingut"},"contextmenu":{"options":"Opcions del menú contextual"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Títol de guia","cssClassInputLabel":"Classes de la fulla d'estils","edit":"Edita la Capa","inlineStyleInputLabel":"Estil en línia","langDirLTRLabel":"D'esquerra a dreta (LTR)","langDirLabel":"Direcció de l'idioma","langDirRTLLabel":"De dreta a esquerra (RTL)","languageCodeInputLabel":" Codi d'idioma","remove":"Elimina la Capa","styleSelectLabel":"Estil","title":"Crea una Capa Contenidora","toolbar":"Crea una Capa Contenidora"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"filetools":{"loadError":"S'ha produït un error durant la lectura del fitxer.","networkError":"S'ha produït un error de xarxa durant la càrrega del fitxer.","httpError404":"S'ha produït un error HTTP durant la càrrega del fitxer (404: Fitxer no trobat).","httpError403":"S'ha produït un error HTTP durant la càrrega del fitxer (403: Permís denegat).","httpError":"S'ha produït un error HTTP durant la càrrega del fitxer (estat d'error: %1).","noUrlError":"La URL de càrrega no està definida.","responseError":"Resposta incorrecte del servidor"},"find":{"find":"Cerca","findOptions":"Opcions de Cerca","findWhat":"Cerca el:","matchCase":"Distingeix majúscules/minúscules","matchCyclic":"Coincidència cíclica","matchWord":"Només paraules completes","notFoundMsg":"El text especificat no s'ha trobat.","replace":"Reemplaça","replaceAll":"Reemplaça-ho tot","replaceSuccessMsg":"%1 ocurrència/es reemplaçada/es.","replaceWith":"Reemplaça amb:","title":"Cerca i reemplaça"},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"flash":{"access":"Accés a scripts","accessAlways":"Sempre","accessNever":"Mai","accessSameDomain":"El mateix domini","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Superior","bgcolor":"Color de Fons","chkFull":"Permetre la pantalla completa","chkLoop":"Bucle","chkMenu":"Habilita menú Flash","chkPlay":"Reprodució automàtica","flashvars":"Variables de Flash","hSpace":"Espaiat horitzontal","properties":"Propietats del Flash","propertiesTab":"Propietats","quality":"Qualitat","qualityAutoHigh":"Alta automàtica","qualityAutoLow":"Baixa automàtica","qualityBest":"La millor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Mitjana","scale":"Escala","scaleAll":"Mostra-ho tot","scaleFit":"Mida exacta","scaleNoBorder":"Sense vores","title":"Propietats del Flash","vSpace":"Espaiat vertical","validateHSpace":"L'espaiat horitzontal ha de ser un número.","validateSrc":"La URL no pot estar buida.","validateVSpace":"L'espaiat vertical ha de ser un número.","windowMode":"Mode de la finestra","windowModeOpaque":"Opaca","windowModeTransparent":"Transparent","windowModeWindow":"Finestra"},"font":{"fontSize":{"label":"Mida","voiceLabel":"Mida de la lletra","panelTitle":"Mida de la lletra"},"label":"Tipus de lletra","panelTitle":"Tipus de lletra","voiceLabel":"Tipus de lletra"},"forms":{"button":{"title":"Propietats del botó","text":"Text (Valor)","type":"Tipus","typeBtn":"Botó","typeSbm":"Transmet formulari","typeRst":"Reinicia formulari"},"checkboxAndRadio":{"checkboxTitle":"Propietats de la casella de verificació","radioTitle":"Propietats del botó d'opció","value":"Valor","selected":"Seleccionat","required":"Necessari"},"form":{"title":"Propietats del formulari","menu":"Propietats del formulari","action":"Acció","method":"Mètode","encoding":"Codificació"},"hidden":{"title":"Propietats del camp ocult","name":"Nom","value":"Valor"},"select":{"title":"Propietats del camp de selecció","selectInfo":"Info","opAvail":"Opcions disponibles","value":"Valor","size":"Mida","lines":"Línies","chkMulti":"Permet múltiples seleccions","required":"Necessari","opText":"Text","opValue":"Valor","btnAdd":"Afegeix","btnModify":"Modifica","btnUp":"Amunt","btnDown":"Avall","btnSetValue":"Selecciona per defecte","btnDelete":"Elimina"},"textarea":{"title":"Propietats de l'àrea de text","cols":"Columnes","rows":"Files"},"textfield":{"title":"Propietats del camp de text","name":"Nom","value":"Valor","charWidth":"Amplada","maxChars":"Nombre màxim de caràcters","required":"Necessari","type":"Tipus","typeText":"Text","typePass":"Contrasenya","typeEmail":"Correu electrònic","typeSearch":"Cercar","typeTel":"Número de telèfon","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"iframe":{"border":"Mostra la vora del marc","noUrl":"Si us plau, introdueixi la URL de l'iframe","scrolling":"Activa les barres de desplaçament","title":"Propietats de l'IFrame","toolbar":"IFrame"},"image":{"alt":"Text alternatiu","border":"Vora","btnUpload":"Envia-la al servidor","button2Img":"Voleu transformar el botó d'imatge seleccionat en una simple imatge?","hSpace":"Espaiat horit.","img2Button":"Voleu transformar la imatge seleccionada en un botó d'imatge?","infoTab":"Informació de la imatge","linkTab":"Enllaç","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","resetSize":"Restaura la mida","title":"Propietats de la imatge","titleButton":"Propietats del botó d'imatge","upload":"Puja","urlMissing":"Falta la URL de la imatge.","vSpace":"Espaiat vert.","validateBorder":"La vora ha de ser un nombre enter.","validateHSpace":"HSpace ha de ser un nombre enter.","validateVSpace":"VSpace ha de ser un nombre enter."},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"smiley":{"options":"Opcions d'emoticones","title":"Insereix una icona","toolbar":"Icona"},"language":{"button":"Definir l'idioma","remove":"Eliminar idioma"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","download":"Force Download","displayText":"Text a mostrar","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"","targetFrameName":"Nom del marc de destí","targetPopup":"","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toPhone":"Phone","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insereix el paràgraf aquí"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"newpage":{"toolbar":"Nova pàgina"},"pagebreak":{"alt":"Salt de pàgina","toolbar":"Insereix salt de pàgina"},"pastetext":{"button":"Enganxa com a text no formatat","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Enganxa com a text no formatat"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"preview":{"preview":"Visualització prèvia"},"print":{"toolbar":"Imprimeix"},"removeformat":{"toolbar":"Elimina Format"},"save":{"toolbar":"Desa"},"selectall":{"toolbar":"Selecciona-ho tot"},"showblocks":{"toolbar":"Mostra els blocs"},"sourcearea":{"toolbar":"Codi font"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"scayt":{"btn_about":"Quant a l'SCAYT","btn_dictionaries":"Diccionaris","btn_disable":"Deshabilita SCAYT","btn_enable":"Habilitat l'SCAYT","btn_langs":"Idiomes","btn_options":"Opcions","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"undo":{"redo":"Refés","undo":"Desfés"},"widget":{"move":"Clicar i arrossegar per moure","label":"%1 widget"},"uploadwidget":{"abort":"Pujada cancel·lada per l'usuari.","doneOne":"Fitxer pujat correctament.","doneMany":"%1 fitxers pujats correctament.","uploadOne":"Pujant fitxer ({percentage}%)...","uploadMany":"Pujant fitxers, {current} de {max} finalitzats ({percentage}%)..."},"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora-les totes","btnReplace":"Canvia","btnReplaceAll":"Canvia-les totes","btnUndo":"Desfés","changeTo":"Reemplaça amb","errorLoading":"Error carregant el servidor: %s.","ieSpellDownload":"Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?","manyChanges":"Verificació ortogràfica: s'han canviat %1 paraules","noChanges":"Verificació ortogràfica: no s'ha canviat cap paraula","noMispell":"Verificació ortogràfica acabada: no hi ha cap paraula mal escrita","noSuggestions":"Cap suggeriment","notAvailable":"El servei no es troba disponible ara.","notInDic":"No és al diccionari","oneChange":"Verificació ortogràfica: s'ha canviat una paraula","progress":"Verificació ortogràfica en curs...","title":"Comprova l'ortografia","toolbar":"Revisa l'ortografia"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/cs.js b/htdocs/includes/ckeditor/ckeditor/lang/cs.js deleted file mode 100644 index 3dc1575b910..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/cs.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['cs']={"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","left":"Vlevo","right":"Vpravo","center":"Na střed","justify":"Zarovnat do bloku","alignLeft":"Zarovnat vlevo","alignRight":"Zarovnat vpravo","alignCenter":"Zarovnat na střed","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry (%2).","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1, nedostupné","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Mezerník","35":"Konec","36":"Domů","46":"Smazat","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Klávesová zkratka","optionDefault":"Výchozí"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor 4","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"bidi":{"ltr":"Směr textu zleva doprava","rtl":"Směr textu zprava doleva"},"blockquote":{"toolbar":"Citace"},"notification":{"closed":"Oznámení zavřeno."},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteNotification":"Stiskněte %1 pro vložení. Váš prohlížeč nepodporuje vkládání pomocí tlačítka na panelu nástrojů nebo volby kontextového menu.","pasteArea":"Oblast vkládání","pasteMsg":"Vložte svůj obsah do oblasti níže a stiskněte OK."},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Barva pozadí","colors":{"000":"Černá","800000":"Kaštanová","8B4513":"Sedlová hněď","2F4F4F":"Tmavě bledě šedá","008080":"Čírka","000080":"Námořnická modř","4B0082":"Inkoustová","696969":"Tmavě šedá","B22222":"Pálená cihla","A52A2A":"Hnědá","DAA520":"Zlatý prut","006400":"Tmavě zelená","40E0D0":"Tyrkisová","0000CD":"Středně modrá","800080":"Purpurová","808080":"Šedá","F00":"Červená","FF8C00":"Tmavě oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azurová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"Kalně šedá","FFA07A":"Světle lososová","FFA500":"Oranžová","FFFF00":"Žlutá","00FF00":"Limetková","AFEEEE":"Bledě tyrkisová","ADD8E6":"Světle modrá","DDA0DD":"Švestková","D3D3D3":"Světle šedá","FFF0F5":"Levandulově ruměnná","FAEBD7":"Antická bílá","FFFFE0":"Světle žlutá","F0FFF0":"Medová rosa","F0FFFF":"Azurová","F0F8FF":"Alenčina modrá","E6E6FA":"Levandulová","FFF":"Bílá","1ABC9C":"Silná azurová","2ECC71":"Emeraldová","3498DB":"Jasně modrá","9B59B6":"Ametystová","4E5F70":"Šedomodrá","F1C40F":"Sytá žlutá","16A085":"Tmavě azurová","27AE60":"Tmavě emeraldová","2980B9":"Silná modrá","8E44AD":"Tmavě fialová","2C3E50":"Odsycená modrá","F39C12":"Oranžová","E67E22":"Mrkvová","E74C3C":"Bledě červená","ECF0F1":"Světle stříbrná","95A5A6":"Světlě šedoazurová","DDD":"Světle šedá","D35400":"Dýňová","C0392B":"Silná červená","BDC3C7":"Stříbrná","7F8C8D":"Šedoazurová","999":"Tmavošedá"},"more":"Více barev...","panelTitle":"Barvy","textColorTitle":"Barva textu"},"colordialog":{"clear":"Vyčistit","highlight":"Zvýraznit","options":"Nastavení barvy","selected":"Vybráno","title":"Výběr barvy"},"templates":{"button":"Šablony","emptyListMsg":"(Není definována žádná šablona)","insertOption":"Nahradit aktuální obsah","options":"Nastavení šablon","selectPromptMsg":"Prosím zvolte šablonu pro otevření v editoru
(aktuální obsah editoru bude ztracen):","title":"Šablony obsahu"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Nápovědní titulek","cssClassInputLabel":"Třídy stylů","edit":"Změnit Div","inlineStyleInputLabel":"Vnitřní styly","langDirLTRLabel":"Zleva doprava (LTR)","langDirLabel":"Směr jazyka","langDirRTLLabel":"Zprava doleva (RTL)","languageCodeInputLabel":" Kód jazyka","remove":"Odstranit Div","styleSelectLabel":"Styly","title":"Vytvořit Div kontejner","toolbar":"Vytvořit Div kontejner"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"filetools":{"loadError":"Při čtení souboru došlo k chybě.","networkError":"Při nahrávání souboru došlo k chybě v síti.","httpError404":"Při nahrávání souboru došlo k chybě HTTP (404: Soubor nenalezen).","httpError403":"Při nahrávání souboru došlo k chybě HTTP (403: Zakázáno).","httpError":"Při nahrávání souboru došlo k chybě HTTP (chybový stav: %1).","noUrlError":"URL pro nahrání není zadána.","responseError":"Nesprávná odpověď serveru."},"find":{"find":"Hledat","findOptions":"Možnosti hledání","findWhat":"Co hledat:","matchCase":"Rozlišovat velikost písma","matchCyclic":"Procházet opakovaně","matchWord":"Pouze celá slova","notFoundMsg":"Hledaný text nebyl nalezen.","replace":"Nahradit","replaceAll":"Nahradit vše","replaceSuccessMsg":"%1 nahrazení.","replaceWith":"Čím nahradit:","title":"Najít a nahradit"},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"flash":{"access":"Přístup ke skriptu","accessAlways":"Vždy","accessNever":"Nikdy","accessSameDomain":"Ve stejné doméně","alignAbsBottom":"Zcela dolů","alignAbsMiddle":"Doprostřed","alignBaseline":"Na účaří","alignTextTop":"Na horní okraj textu","bgcolor":"Barva pozadí","chkFull":"Povolit celoobrazovkový režim","chkLoop":"Opakování","chkMenu":"Nabídka Flash","chkPlay":"Automatické spuštění","flashvars":"Proměnné pro Flash","hSpace":"Horizontální mezera","properties":"Vlastnosti Flashe","propertiesTab":"Vlastnosti","quality":"Kvalita","qualityAutoHigh":"Vysoká - auto","qualityAutoLow":"Nízká - auto","qualityBest":"Nejlepší","qualityHigh":"Vysoká","qualityLow":"Nejnižší","qualityMedium":"Střední","scale":"Zobrazit","scaleAll":"Zobrazit vše","scaleFit":"Přizpůsobit","scaleNoBorder":"Bez okraje","title":"Vlastnosti Flashe","vSpace":"Vertikální mezera","validateHSpace":"Zadaná horizontální mezera musí být číslo.","validateSrc":"Zadejte prosím URL odkazu","validateVSpace":"Zadaná vertikální mezera musí být číslo.","windowMode":"Režim okna","windowModeOpaque":"Neprůhledné","windowModeTransparent":"Průhledné","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost písma","panelTitle":"Velikost"},"label":"Písmo","panelTitle":"Písmo","voiceLabel":"Písmo"},"forms":{"button":{"title":"Vlastnosti tlačítka","text":"Popisek","type":"Typ","typeBtn":"Tlačítko","typeSbm":"Odeslat","typeRst":"Obnovit"},"checkboxAndRadio":{"checkboxTitle":"Vlastnosti zaškrtávacího políčka","radioTitle":"Vlastnosti přepínače","value":"Hodnota","selected":"Zaškrtnuto","required":"Vyžadováno"},"form":{"title":"Vlastnosti formuláře","menu":"Vlastnosti formuláře","action":"Akce","method":"Metoda","encoding":"Kódování"},"hidden":{"title":"Vlastnosti skrytého pole","name":"Název","value":"Hodnota"},"select":{"title":"Vlastnosti seznamu","selectInfo":"Info","opAvail":"Dostupná nastavení","value":"Hodnota","size":"Velikost","lines":"Řádků","chkMulti":"Povolit mnohonásobné výběry","required":"Vyžadováno","opText":"Text","opValue":"Hodnota","btnAdd":"Přidat","btnModify":"Změnit","btnUp":"Nahoru","btnDown":"Dolů","btnSetValue":"Nastavit jako vybranou hodnotu","btnDelete":"Smazat"},"textarea":{"title":"Vlastnosti textové oblasti","cols":"Sloupců","rows":"Řádků"},"textfield":{"title":"Vlastnosti textového pole","name":"Název","value":"Hodnota","charWidth":"Šířka ve znacích","maxChars":"Maximální počet znaků","required":"Vyžadováno","type":"Typ","typeText":"Text","typePass":"Heslo","typeEmail":"Email","typeSearch":"Hledat","typeTel":"Telefonní číslo","typeUrl":"URL"}},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"iframe":{"border":"Zobrazit okraj","noUrl":"Zadejte prosím URL obsahu pro IFrame","scrolling":"Zapnout posuvníky","title":"Vlastnosti IFrame","toolbar":"IFrame"},"image":{"alt":"Alternativní text","border":"Okraje","btnUpload":"Odeslat na server","button2Img":"Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?","hSpace":"Horizontální mezera","img2Button":"Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?","infoTab":"Informace o obrázku","linkTab":"Odkaz","lockRatio":"Zámek","menu":"Vlastnosti obrázku","resetSize":"Původní velikost","title":"Vlastnosti obrázku","titleButton":"Vlastností obrázkového tlačítka","upload":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","vSpace":"Vertikální mezera","validateBorder":"Okraj musí být nastaven v celých číslech.","validateHSpace":"Horizontální mezera musí být nastavena v celých číslech.","validateVSpace":"Vertikální mezera musí být nastavena v celých číslech."},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"smiley":{"options":"Nastavení smajlíků","title":"Vkládání smajlíků","toolbar":"Smajlíci"},"language":{"button":"Nastavit jazyk","remove":"Odstranit jazyk"},"link":{"acccessKey":"Přístupový klíč","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"Přiřazená znaková sada","cssClasses":"Třída stylu","download":"Vynutit stažení","displayText":"Zobrazit text","emailAddress":"E-mailová adresa","emailBody":"Tělo zprávy","emailSubject":"Předmět zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"Směr jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"Změnit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","noTel":"Vyplňte prosím telefonní číslo","other":"","phoneNumber":"Telefonní číslo","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístění","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující měnit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"Pořadí prvku","target":"Cíl","targetFrame":"","targetFrameName":"Název cílového rámu","targetPopup":"","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toPhone":"Telefon","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"liststyle":{"bulletedTitle":"Vlastnosti odrážek","circle":"Kroužky","decimal":"Arabská čísla (1, 2, 3, atd.)","disc":"Kolečka","lowerAlpha":"Malá latinka (a, b, c, d, e, atd.)","lowerRoman":"Malé římské (i, ii, iii, iv, v, atd.)","none":"Nic","notset":"","numberedTitle":"Vlastnosti číslování","square":"Čtverce","start":"Počátek","type":"Typ","upperAlpha":"Velká latinka (A, B, C, D, E, atd.)","upperRoman":"Velké římské (I, II, III, IV, V, atd.)","validateStartNumber":"Číslování musí začínat celým číslem."},"magicline":{"title":"zde vložit odstavec"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"newpage":{"toolbar":"Nová stránka"},"pagebreak":{"alt":"Konec stránky","toolbar":"Vložit konec stránky"},"pastetext":{"button":"Vložit jako čistý text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Vložit jako čistý text"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"preview":{"preview":"Náhled"},"print":{"toolbar":"Tisk"},"removeformat":{"toolbar":"Odstranit formátování"},"save":{"toolbar":"Uložit"},"selectall":{"toolbar":"Vybrat vše"},"showblocks":{"toolbar":"Ukázat bloky"},"sourcearea":{"toolbar":"Zdroj"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"scayt":{"btn_about":"O aplikaci SCAYT","btn_dictionaries":"Slovníky","btn_disable":"Vypnout SCAYT","btn_enable":"Zapnout SCAYT","btn_langs":"Jazyky","btn_options":"Nastavení","text_title":"Kontrola pravopisu během psaní (SCAYT)"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"undo":{"redo":"Znovu","undo":"Zpět"},"widget":{"move":"Klepněte a táhněte pro přesunutí","label":"Ovládací prvek %1"},"uploadwidget":{"abort":"Nahrávání zrušeno uživatelem.","doneOne":"Soubor úspěšně nahrán.","doneMany":"Úspěšně nahráno %1 souborů.","uploadOne":"Nahrávání souboru ({percentage}%)...","uploadMany":"Nahrávání souborů, {current} z {max} hotovo ({percentage}%)..."},"wsc":{"btnIgnore":"Přeskočit","btnIgnoreAll":"Přeskakovat vše","btnReplace":"Zaměnit","btnReplaceAll":"Zaměňovat vše","btnUndo":"Zpět","changeTo":"Změnit na","errorLoading":"Chyba nahrávání služby aplikace z: %s.","ieSpellDownload":"Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?","manyChanges":"Kontrola pravopisu dokončena: %1 slov změněno","noChanges":"Kontrola pravopisu dokončena: Beze změn","noMispell":"Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny","noSuggestions":"- žádné návrhy -","notAvailable":"Omlouváme se, ale služba nyní není dostupná.","notInDic":"Není ve slovníku","oneChange":"Kontrola pravopisu dokončena: Jedno slovo změněno","progress":"Probíhá kontrola pravopisu...","title":"Kontrola pravopisu","toolbar":"Zkontrolovat pravopis"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/cy.js b/htdocs/includes/ckeditor/ckeditor/lang/cy.js deleted file mode 100644 index 4f43e0871d6..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/cy.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['cy']={"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","left":"Chwith","right":"Dde","center":"Canol","justify":"Unioni","alignLeft":"Alinio i'r Chwith","alignRight":"Alinio i'r Dde","alignCenter":"Align Center","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1, ddim ar gael","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Hawlfraint © $1. Cedwir pob hawl.","dlgTitle":"About CKEditor 4","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"bidi":{"ltr":"Cyfeiriad testun o'r chwith i'r dde","rtl":"Cyfeiriad testun o'r dde i'r chwith"},"blockquote":{"toolbar":"Dyfyniad bloc"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Ardal Gludo","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Awtomatig","bgColorTitle":"Lliw Cefndir","colors":{"000":"Du","800000":"Marwn","8B4513":"Brown Cyfrwy","2F4F4F":"Llechen Tywyll","008080":"Corhwyad","000080":"Nefi","4B0082":"Indigo","696969":"Llwyd Tywyll","B22222":"Bric Tân","A52A2A":"Brown","DAA520":"Rhoden Aur","006400":"Gwyrdd Tywyll","40E0D0":"Gwyrddlas","0000CD":"Glas Canolig","800080":"Porffor","808080":"Llwyd","F00":"Coch","FF8C00":"Oren Tywyll","FFD700":"Aur","008000":"Gwyrdd","0FF":"Cyan","00F":"Glas","EE82EE":"Fioled","A9A9A9":"Llwyd Pwl","FFA07A":"Samwn Golau","FFA500":"Oren","FFFF00":"Melyn","00FF00":"Leim","AFEEEE":"Gwyrddlas Golau","ADD8E6":"Glas Golau","DDA0DD":"Eirinen","D3D3D3":"Llwyd Golau","FFF0F5":"Gwrid Lafant","FAEBD7":"Gwyn Hynafol","FFFFE0":"Melyn Golau","F0FFF0":"Melwn Gwyrdd Golau","F0FFFF":"Aswr","F0F8FF":"Glas Alys","E6E6FA":"Lafant","FFF":"Gwyn","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Mwy o Liwiau...","panelTitle":"Lliwiau","textColorTitle":"Lliw Testun"},"colordialog":{"clear":"Clirio","highlight":"Uwcholeuo","options":"Opsiynau Lliw","selected":"Lliw a Ddewiswyd","title":"Dewis lliw"},"templates":{"button":"Templedi","emptyListMsg":"(Dim templedi wedi'u diffinio)","insertOption":"Amnewid y cynnwys go iawn","options":"Opsiynau Templedi","selectPromptMsg":"Dewiswch dempled i'w agor yn y golygydd","title":"Templedi Cynnwys"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Teitl Cynghorol","cssClassInputLabel":"Dosbarthiadau Ffeil Arddull","edit":"Golygu Div","inlineStyleInputLabel":"Arddull Mewn Llinell","langDirLTRLabel":"Chwith i'r Dde (LTR)","langDirLabel":"Cyfeiriad yr Iaith","langDirRTLLabel":"Dde i'r Chwith (RTL)","languageCodeInputLabel":" Cod Iaith","remove":"Tynnu Div","styleSelectLabel":"Arddull","title":"Creu Cynhwysydd Div","toolbar":"Creu Cynhwysydd Div"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Chwilio","findOptions":"Opsiynau Chwilio","findWhat":"Chwilio'r term:","matchCase":"Cydweddu'r cas","matchCyclic":"Cydweddu'n gylchol","matchWord":"Cydweddu gair cyfan","notFoundMsg":"Nid oedd y testun wedi'i ddarganfod.","replace":"Amnewid Un","replaceAll":"Amnewid Pob","replaceSuccessMsg":"Amnewidiwyd %1 achlysur.","replaceWith":"Amnewid gyda:","title":"Chwilio ac Amnewid"},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"flash":{"access":"Mynediad Sgript","accessAlways":"Pob amser","accessNever":"Byth","accessSameDomain":"R'un parth","alignAbsBottom":"Gwaelod Abs","alignAbsMiddle":"Canol Abs","alignBaseline":"Baslinell","alignTextTop":"Testun Top","bgcolor":"Lliw cefndir","chkFull":"Caniatàu Sgrin Llawn","chkLoop":"Lwpio","chkMenu":"Galluogi Dewislen Flash","chkPlay":"AwtoChwarae","flashvars":"Newidynnau ar gyfer Flash","hSpace":"BwlchLl","properties":"Priodweddau Flash","propertiesTab":"Priodweddau","quality":"Ansawdd","qualityAutoHigh":"Uchel Awto","qualityAutoLow":"Isel Awto","qualityBest":"Gorau","qualityHigh":"Uchel","qualityLow":"Isel","qualityMedium":"Canolig","scale":"Graddfa","scaleAll":"Dangos pob","scaleFit":"Ffit Union","scaleNoBorder":"Dim Ymyl","title":"Priodweddau Flash","vSpace":"BwlchF","validateHSpace":"Rhaid i'r BwlchLl fod yn rhif.","validateSrc":"Ni all yr URL fod yn wag.","validateVSpace":"Rhaid i'r BwlchF fod yn rhif.","windowMode":"Modd ffenestr","windowModeOpaque":"Afloyw","windowModeTransparent":"Tryloyw","windowModeWindow":"Ffenestr"},"font":{"fontSize":{"label":"Maint","voiceLabel":"Maint y Ffont","panelTitle":"Maint y Ffont"},"label":"Ffont","panelTitle":"Enw'r Ffont","voiceLabel":"Ffont"},"forms":{"button":{"title":"Priodweddau Botymau","text":"Testun (Gwerth)","type":"Math","typeBtn":"Botwm","typeSbm":"Anfon","typeRst":"Ailosod"},"checkboxAndRadio":{"checkboxTitle":"Priodweddau Blwch Ticio","radioTitle":"Priodweddau Botwm Radio","value":"Gwerth","selected":"Dewiswyd","required":"Required"},"form":{"title":"Priodweddau Ffurflen","menu":"Priodweddau Ffurflen","action":"Gweithred","method":"Dull","encoding":"Amgodio"},"hidden":{"title":"Priodweddau Maes Cudd","name":"Enw","value":"Gwerth"},"select":{"title":"Priodweddau Maes Dewis","selectInfo":"Gwyb Dewis","opAvail":"Opsiynau ar Gael","value":"Gwerth","size":"Maint","lines":"llinellau","chkMulti":"Caniatàu aml-ddewisiadau","required":"Required","opText":"Testun","opValue":"Gwerth","btnAdd":"Ychwanegu","btnModify":"Newid","btnUp":"Lan","btnDown":"Lawr","btnSetValue":"Gosod fel gwerth a ddewiswyd","btnDelete":"Dileu"},"textarea":{"title":"Priodweddau Ardal Testun","cols":"Colofnau","rows":"Rhesi"},"textfield":{"title":"Priodweddau Maes Testun","name":"Enw","value":"Gwerth","charWidth":"Lled Nod","maxChars":"Uchafswm y Nodau","required":"Required","type":"Math","typeText":"Testun","typePass":"Cyfrinair","typeEmail":"Ebost","typeSearch":"Chwilio","typeTel":"Rhif Ffôn","typeUrl":"URL"}},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"iframe":{"border":"Dangos ymyl y ffrâm","noUrl":"Rhowch URL yr iframe","scrolling":"Galluogi bariau sgrolio","title":"Priodweddau IFrame","toolbar":"IFrame"},"image":{"alt":"Testun Amgen","border":"Ymyl","btnUpload":"Anfon i'r Gweinydd","button2Img":"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?","hSpace":"BwlchLl","img2Button":"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?","infoTab":"Gwyb Delwedd","linkTab":"Dolen","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","resetSize":"Ailosod Maint","title":"Priodweddau Delwedd","titleButton":"Priodweddau Botwm Delwedd","upload":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","vSpace":"BwlchF","validateBorder":"Rhaid i'r ymyl fod yn gyfanrif.","validateHSpace":"Rhaid i'r HSpace fod yn gyfanrif.","validateVSpace":"Rhaid i'r VSpace fod yn gyfanrif."},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"smiley":{"options":"Opsiynau Gwenogluniau","title":"Mewnosod Gwenoglun","toolbar":"Gwenoglun"},"language":{"button":"Gosod iaith","remove":"Tynnu iaith"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygu'r Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set Nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","download":"Force Download","displayText":"Display Text","emailAddress":"Cyfeiriad E-Bost","emailBody":"Corff y Neges","emailSubject":"Testun y Neges","id":"Id","info":"Gwyb y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toPhone":"Phone","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"liststyle":{"bulletedTitle":"Priodweddau Rhestr Fwled","circle":"Cylch","decimal":"Degol (1, 2, 3, ayyb.)","disc":"Disg","lowerAlpha":"Alffa Is (a, b, c, d, e, ayyb.)","lowerRoman":"Rhufeinig Is (i, ii, iii, iv, v, ayyb.)","none":"Dim","notset":"","numberedTitle":"Priodweddau Rhestr Rifol","square":"Sgwâr","start":"Dechrau","type":"Math","upperAlpha":"Alffa Uwch (A, B, C, D, E, ayyb.)","upperRoman":"Rhufeinig Uwch (I, II, III, IV, V, ayyb.)","validateStartNumber":"Rhaid bod y rhif cychwynnol yn gyfanrif."},"magicline":{"title":"Mewnosod paragraff yma"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"newpage":{"toolbar":"Tudalen Newydd"},"pagebreak":{"alt":"Toriad Tudalen","toolbar":"Mewnosod Toriad Tudalen i Argraffu"},"pastetext":{"button":"Gludo fel testun plaen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Gludo fel Testun Plaen"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"preview":{"preview":"Rhagolwg"},"print":{"toolbar":"Argraffu"},"removeformat":{"toolbar":"Tynnu Fformat"},"save":{"toolbar":"Cadw"},"selectall":{"toolbar":"Dewis Popeth"},"showblocks":{"toolbar":"Dangos Blociau"},"sourcearea":{"toolbar":"HTML"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"scayt":{"btn_about":"Ynghylch SCAYT","btn_dictionaries":"Geiriaduron","btn_disable":"Analluogi SCAYT","btn_enable":"Galluogi SCAYT","btn_langs":"Ieithoedd","btn_options":"Opsiynau","text_title":"Gwirio'r Sillafu Wrth Deipio"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"widget":{"move":"Clcio a llusgo i symud","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Anwybyddu Un","btnIgnoreAll":"Anwybyddu Pob","btnReplace":"Amnewid Un","btnReplaceAll":"Amnewid Pob","btnUndo":"Dadwneud","changeTo":"Newid i","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?","manyChanges":"Gwirio sillafu wedi gorffen: Newidiwyd %1 gair","noChanges":"Gwirio sillafu wedi gorffen: Dim newidiadau","noMispell":"Gwirio sillafu wedi gorffen: Dim camsillaf.","noSuggestions":"- Dim awgrymiadau -","notAvailable":"Nid yw'r gwasanaeth hwn ar gael yn bresennol.","notInDic":"Nid i'w gael yn y geiriadur","oneChange":"Gwirio sillafu wedi gorffen: Newidiwyd 1 gair","progress":"Gwirio sillafu yn ar y gweill...","title":"Gwirio Sillafu","toolbar":"Gwirio Sillafu"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/da.js b/htdocs/includes/ckeditor/ckeditor/lang/da.js deleted file mode 100644 index 940b16110f0..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/da.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['da']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","left":"Venstre","right":"Højre","center":"Center","justify":"Lige margener","alignLeft":"Venstrestillet","alignRight":"Højrestillet","alignCenter":"Centreret","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"Ingen","invalidValue":"Ugyldig værdi.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidLength":"Værdien angivet for feltet \"%1\" skal være et positivt heltal med eller uden en gyldig måleenhed (%2).","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1, ikke tilgængelig","keyboard":{"8":"Backspace","13":"Retur","16":"Shift","17":"Ctrl","18":"Alt","32":"Mellemrum","35":"End","36":"Home","46":"Slet","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Kommando"},"keyboardShortcut":"Tastatur genvej","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor 4","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"bidi":{"ltr":"Tekstretning fra venstre til højre","rtl":"Tekstretning fra højre til venstre"},"blockquote":{"toolbar":"Blokcitat"},"notification":{"closed":"Notefikation lukket."},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.

Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.

Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteNotification":"Tryk %1 for at sætte ind. Din browser understøtter ikke indsættelse med værktøjslinje knappen eller kontekst menuen.","pasteArea":"Indsættelses område","pasteMsg":"Indsæt dit indhold i området nedenfor og tryk OK."},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Baggrundsfarve","colors":{"000":"Sort","800000":"Mørkerød","8B4513":"Mørk orange","2F4F4F":"Dark Slate Grå","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Mørkegrå","B22222":"Scarlet / Rød","A52A2A":"Brun","DAA520":"Guld","006400":"Mørkegrøn","40E0D0":"Tyrkis","0000CD":"Mellemblå","800080":"Lilla","808080":"Grå","F00":"Rød","FF8C00":"Mørk orange","FFD700":"Guld","008000":"Grøn","0FF":"Cyan","00F":"Blå","EE82EE":"Violet","A9A9A9":"Matgrå","FFA07A":"Laksefarve","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Mat tyrkis","ADD8E6":"Lyseblå","DDA0DD":"Plum","D3D3D3":"Lysegrå","FFF0F5":"Lavender Blush","FAEBD7":"Antikhvid","FFFFE0":"Lysegul","F0FFF0":"Gul / Beige","F0FFFF":"Himmeblå","F0F8FF":"Alice blue","E6E6FA":"Lavendel","FFF":"Hvid","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Flere farver...","panelTitle":"Farver","textColorTitle":"Tekstfarve"},"colordialog":{"clear":"Nulstil","highlight":"Markér","options":"Farvemuligheder","selected":"Valgt farve","title":"Vælg farve"},"templates":{"button":"Skabeloner","emptyListMsg":"(Der er ikke defineret nogen skabelon)","insertOption":"Erstat det faktiske indhold","options":"Skabelon muligheder","selectPromptMsg":"Vælg den skabelon, som skal åbnes i editoren (nuværende indhold vil blive overskrevet):","title":"Indholdsskabeloner"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Vejledende titel","cssClassInputLabel":"Typografiark","edit":"Rediger Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Venstre til højre (LTR)","langDirLabel":"Sprogretning","langDirRTLLabel":"Højre til venstre (RTL)","languageCodeInputLabel":" Sprogkode","remove":"Slet Div","styleSelectLabel":"Style","title":"Opret Div Container","toolbar":"Opret Div Container"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"filetools":{"loadError":"Der skete en fejl ved indlæsningen af filen.","networkError":"Der skete en netværks fejl under uploadingen.","httpError404":"Der skete en HTTP fejl under uploadingen (404: File not found).","httpError403":"Der skete en HTTP fejl under uploadingen (403: Forbidden).","httpError":"Der skete en HTTP fejl under uploadingen (error status: %1).","noUrlError":"Upload URL er ikke defineret.","responseError":"Ikke korrekt server svar."},"find":{"find":"Søg","findOptions":"Find muligheder","findWhat":"Søg efter:","matchCase":"Forskel på store og små bogstaver","matchCyclic":"Match cyklisk","matchWord":"Kun hele ord","notFoundMsg":"Søgeteksten blev ikke fundet","replace":"Erstat","replaceAll":"Erstat alle","replaceSuccessMsg":"%1 forekomst(er) erstattet.","replaceWith":"Erstat med:","title":"Søg og erstat"},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"flash":{"access":"Scriptadgang","accessAlways":"Altid","accessNever":"Aldrig","accessSameDomain":"Samme domæne","alignAbsBottom":"Absolut nederst","alignAbsMiddle":"Absolut centreret","alignBaseline":"Grundlinje","alignTextTop":"Toppen af teksten","bgcolor":"Baggrundsfarve","chkFull":"Tillad fuldskærm","chkLoop":"Gentagelse","chkMenu":"Vis Flash-menu","chkPlay":"Automatisk afspilning","flashvars":"Variabler for Flash","hSpace":"Vandret margen","properties":"Egenskaber for Flash","propertiesTab":"Egenskaber","quality":"Kvalitet","qualityAutoHigh":"Auto høj","qualityAutoLow":"Auto lav","qualityBest":"Bedste","qualityHigh":"Høj","qualityLow":"Lav","qualityMedium":"Medium","scale":"Skalér","scaleAll":"Vis alt","scaleFit":"Tilpas størrelse","scaleNoBorder":"Ingen ramme","title":"Egenskaber for Flash","vSpace":"Lodret margen","validateHSpace":"Vandret margen skal være et tal.","validateSrc":"Indtast hyperlink URL!","validateVSpace":"Lodret margen skal være et tal.","windowMode":"Vinduestilstand","windowModeOpaque":"Gennemsigtig (opaque)","windowModeTransparent":"Transparent","windowModeWindow":"Vindue"},"font":{"fontSize":{"label":"Skriftstørrelse","voiceLabel":"Skriftstørrelse","panelTitle":"Skriftstørrelse"},"label":"Skrifttype","panelTitle":"Skrifttype","voiceLabel":"Skrifttype"},"forms":{"button":{"title":"Egenskaber for knap","text":"Tekst","type":"Type","typeBtn":"Knap","typeSbm":"Send","typeRst":"Nulstil"},"checkboxAndRadio":{"checkboxTitle":"Egenskaber for afkrydsningsfelt","radioTitle":"Egenskaber for alternativknap","value":"Værdi","selected":"Valgt","required":"Påkrævet"},"form":{"title":"Egenskaber for formular","menu":"Egenskaber for formular","action":"Handling","method":"Metode","encoding":"Kodning (encoding)"},"hidden":{"title":"Egenskaber for skjult felt","name":"Navn","value":"Værdi"},"select":{"title":"Egenskaber for liste","selectInfo":"Generelt","opAvail":"Valgmuligheder","value":"Værdi","size":"Størrelse","lines":"Linjer","chkMulti":"Tillad flere valg","required":"Påkrævet","opText":"Tekst","opValue":"Værdi","btnAdd":"Tilføj","btnModify":"Redigér","btnUp":"Op","btnDown":"Ned","btnSetValue":"Sæt som valgt","btnDelete":"Slet"},"textarea":{"title":"Egenskaber for tekstboks","cols":"Kolonner","rows":"Rækker"},"textfield":{"title":"Egenskaber for tekstfelt","name":"Navn","value":"Værdi","charWidth":"Bredde (tegn)","maxChars":"Max. antal tegn","required":"Påkrævet","type":"Type","typeText":"Tekst","typePass":"Adgangskode","typeEmail":"E-mail","typeSearch":"Søg","typeTel":"Telefon nummer","typeUrl":"URL"}},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"iframe":{"border":"Vis kant på rammen","noUrl":"Venligst indsæt URL på iframen","scrolling":"Aktiver scrollbars","title":"Iframe egenskaber","toolbar":"Iframe"},"image":{"alt":"Alternativ tekst","border":"Ramme","btnUpload":"Upload fil til serveren","button2Img":"Vil du lave billedknappen om til et almindeligt billede?","hSpace":"Vandret margen","img2Button":"Vil du lave billedet om til en billedknap?","infoTab":"Generelt","linkTab":"Hyperlink","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","resetSize":"Nulstil størrelse","title":"Egenskaber for billede","titleButton":"Egenskaber for billedknap","upload":"Upload","urlMissing":"Kilde på billed-URL mangler","vSpace":"Lodret margen","validateBorder":"Kant skal være et helt nummer.","validateHSpace":"HSpace skal være et helt nummer.","validateVSpace":"VSpace skal være et helt nummer."},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"smiley":{"options":"Smileymuligheder","title":"Vælg smiley","toolbar":"Smiley"},"language":{"button":"Vælg sprog","remove":"Fjern sprog"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","download":"Tving Download","displayText":"Vis tekst","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"","targetFrameName":"Destinationsvinduets navn","targetPopup":"","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"liststyle":{"bulletedTitle":"Værdier for cirkelpunktopstilling","circle":"Cirkel","decimal":"Decimal (1, 2, 3, osv.)","disc":"Værdier for diskpunktopstilling","lowerAlpha":"Små alfabet (a, b, c, d, e, etc.)","lowerRoman":"Små romerske (i, ii, iii, iv, v, etc.)","none":"Ingen","notset":"","numberedTitle":"Egenskaber for nummereret liste","square":"Firkant","start":"Start","type":"Type","upperAlpha":"Store alfabet (A, B, C, D, E, etc.)","upperRoman":"Store romerske (I, II, III, IV, V, etc.)","validateStartNumber":"Den nummererede liste skal starte med et rundt nummer"},"magicline":{"title":"Indsæt afsnit"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"newpage":{"toolbar":"Ny side"},"pagebreak":{"alt":"Sideskift","toolbar":"Indsæt sideskift"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"preview":{"preview":"Vis eksempel"},"print":{"toolbar":"Udskriv"},"removeformat":{"toolbar":"Fjern formatering"},"save":{"toolbar":"Gem"},"selectall":{"toolbar":"Vælg alt"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøger","btn_disable":"Deaktivér SCAYT","btn_enable":"Aktivér SCAYT","btn_langs":"Sprog","btn_options":"Indstillinger","text_title":"Stavekontrol mens du skriver"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"widget":{"move":"Klik og træk for at flytte","label":"%1 widget"},"uploadwidget":{"abort":"Upload er afbrudt af brugen.","doneOne":"Filen er uploadet.","doneMany":"Du har uploadet %1 filer.","uploadOne":"Uploader fil ({percentage}%)...","uploadMany":"Uploader filer, {current} af {max} er uploadet ({percentage}%)..."},"wsc":{"btnIgnore":"Ignorér","btnIgnoreAll":"Ignorér alle","btnReplace":"Erstat","btnReplaceAll":"Erstat alle","btnUndo":"Tilbage","changeTo":"Forslag","errorLoading":"Fejl ved indlæsning af host: %s.","ieSpellDownload":"Stavekontrol ikke installeret. Vil du installere den nu?","manyChanges":"Stavekontrol færdig: %1 ord ændret","noChanges":"Stavekontrol færdig: Ingen ord ændret","noMispell":"Stavekontrol færdig: Ingen fejl fundet","noSuggestions":"(ingen forslag)","notAvailable":"Stavekontrol er desværre ikke tilgængelig.","notInDic":"Ikke i ordbogen","oneChange":"Stavekontrol færdig: Et ord ændret","progress":"Stavekontrollen arbejder...","title":"Stavekontrol","toolbar":"Stavekontrol"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/de-ch.js b/htdocs/includes/ckeditor/ckeditor/lang/de-ch.js deleted file mode 100644 index 37966960ea0..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/de-ch.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['de-ch']={"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schliessen","preview":"Vorschau","resize":"Grösse ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schliessen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Align Center","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1, nicht verfügbar","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Space","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"bidi":{"ltr":"Leserichtung von Links nach Rechts","rtl":"Leserichtung von Rechts nach Links"},"blockquote":{"toolbar":"Zitatblock"},"notification":{"closed":"Benachrichtigung geschlossen."},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Einfügebereich","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Hintergrundfarbe","colors":{"000":"Schwarz","800000":"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Marineblau","4B0082":"Indigo","696969":"Dunkelgrau","B22222":"Ziegelrot","A52A2A":"Braun","DAA520":"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Mittelblau","800080":"Lila","808080":"Grau","F00":"Rot","FF8C00":"Dunkelorange","FFD700":"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau","EE82EE":"Violett","A9A9A9":"Dunkelgrau","FFA07A":"Helles Lachsrosa","FFA500":"Orange","FFFF00":"Gelb","00FF00":"Lime","AFEEEE":"Blasstürkis","ADD8E6":"Hellblau","DDA0DD":"Pflaumenblau","D3D3D3":"Hellgrau","FFF0F5":"Lavendel","FAEBD7":"Antik Weiss","FFFFE0":"Hellgelb","F0FFF0":"Honigtau","F0FFFF":"Azurblau","F0F8FF":"Alice Blau","E6E6FA":"Lavendel","FFF":"Weiss","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Weitere Farben...","panelTitle":"Farben","textColorTitle":"Textfarbe"},"colordialog":{"clear":"Entfernen","highlight":"Hervorheben","options":"Farboptionen","selected":"Ausgewählte Farbe","title":"Farbe auswählen"},"templates":{"button":"Vorlagen","emptyListMsg":"(Keine Vorlagen definiert)","insertOption":"Aktuelle Inhalte ersetzen","options":"Vorlagenoptionen","selectPromptMsg":"Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen","title":"Inhaltsvorlagen"},"contextmenu":{"options":"Kontextmenüoptionen"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Kennung","advisoryTitleInputLabel":"Tooltip","cssClassInputLabel":"Formatvorlagenklasse","edit":"Div bearbeiten","inlineStyleInputLabel":"Inline Stil","langDirLTRLabel":"Links nach Rechs (LTR)","langDirLabel":"Sprachrichtung","langDirRTLLabel":"Rechs nach Links (RTL)","languageCodeInputLabel":"Sprachcode","remove":"Div entfernen","styleSelectLabel":"Stil","title":"Div Container erzeugen","toolbar":"Div Container erzeugen"},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"filetools":{"loadError":"Während dem Lesen der Datei ist ein Fehler aufgetreten.","networkError":"Während dem Hochladen der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während dem Hochladen der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"find":{"find":"Suchen","findOptions":"Suchoptionen","findWhat":"Suche nach:","matchCase":"Gross-/Kleinschreibung beachten","matchCyclic":"Zyklische Suche","matchWord":"Nur ganze Worte suchen","notFoundMsg":"Der angegebene Text wurde nicht gefunden.","replace":"Ersetzen","replaceAll":"Alle ersetzen","replaceSuccessMsg":"%1 Vorkommen ersetzt.","replaceWith":"Ersetze mit:","title":"Suchen und Ersetzen"},"fakeobjects":{"anchor":"Anker","flash":"Flash-Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"flash":{"access":"Skriptzugriff","accessAlways":"Immer","accessNever":"Nie","accessSameDomain":"Gleiche Domain","alignAbsBottom":"Abs Unten","alignAbsMiddle":"Abs Mitte","alignBaseline":"Basislinie","alignTextTop":"Text oben","bgcolor":"Hintergrundfarbe","chkFull":"Vollbildmodus erlauben","chkLoop":"Endlosschleife","chkMenu":"Flash-Menü aktivieren","chkPlay":"Automatisch Abspielen","flashvars":"Variablen für Flash","hSpace":"Horizontal-Abstand","properties":"Flash-Eigenschaften","propertiesTab":"Eigenschaften","quality":"Qualität","qualityAutoHigh":"Auto Hoch","qualityAutoLow":"Auto Niedrig","qualityBest":"Beste","qualityHigh":"Hoch","qualityLow":"Niedrig","qualityMedium":"Mittel","scale":"Skalierung","scaleAll":"Alles anzeigen","scaleFit":"Passgenau","scaleNoBorder":"Ohne Rand","title":"Flash-Eigenschaften","vSpace":"Vertikal-Abstand","validateHSpace":"HSpace muss eine Zahl sein.","validateSrc":"URL darf nicht leer sein.","validateVSpace":"VSpace muss eine Zahl sein.","windowMode":"Fenstermodus","windowModeOpaque":"Deckend","windowModeTransparent":"Transparent","windowModeWindow":"Fenster"},"font":{"fontSize":{"label":"Grösse","voiceLabel":"Schrifgrösse","panelTitle":"Schriftgrösse"},"label":"Schriftart","panelTitle":"Schriftartname","voiceLabel":"Schriftart"},"forms":{"button":{"title":"Schaltflächeneigenschaften","text":"Text (Wert)","type":"Typ","typeBtn":"Button","typeSbm":"Absenden","typeRst":"Zurücksetzen"},"checkboxAndRadio":{"checkboxTitle":"Kontrollboxeigenschaften","radioTitle":"Optionsfeldeigenschaften","value":"Wert","selected":"Ausgewählt","required":"Erforderlich"},"form":{"title":"Formulareigenschaften","menu":"Formulareigenschaften","action":"Aktion","method":"Methode","encoding":"Kodierung"},"hidden":{"title":"Versteckte Feldeigenschaften","name":"Name","value":"Wert"},"select":{"title":"Auswahlfeldeigenschaften","selectInfo":"Info auswählen","opAvail":"Verfügbare Optionen","value":"Wert","size":"Grösse","lines":"Linien","chkMulti":"Mehrfachauswahl erlauben","required":"Erforderlich","opText":"Text","opValue":"Wert","btnAdd":"Hinzufügen","btnModify":"Ändern","btnUp":"Hoch","btnDown":"Runter","btnSetValue":"Als ausgewählten Wert festlegen","btnDelete":"Entfernen"},"textarea":{"title":"Textfeldeigenschaften","cols":"Spalten","rows":"Reihen"},"textfield":{"title":"Textfeldeigenschaften","name":"Name","value":"Wert","charWidth":"Zeichenbreite","maxChars":"Max. Zeichen","required":"Erforderlich","type":"Typ","typeText":"Text","typePass":"Passwort","typeEmail":"E-mail","typeSearch":"Suche","typeTel":"Telefonnummer","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"iframe":{"border":"Rahmen anzeigen","noUrl":"Bitte geben Sie die IFrame-URL an","scrolling":"Rollbalken anzeigen","title":"IFrame-Eigenschaften","toolbar":"IFrame"},"image":{"alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?","infoTab":"Bildinfo","linkTab":"Link","lockRatio":"Grössenverhältnis beibehalten","menu":"Bildeigenschaften","resetSize":"Grösse zurücksetzen","title":"Bildeigenschaften","titleButton":"Bildschaltflächeneigenschaften","upload":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muss eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muss eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muss eine ganze Zahl sein."},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"smiley":{"options":"Smiley-Optionen","title":"Smiley auswählen","toolbar":"Smiley"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker","menu":"Anker bearbeiten","title":"Ankereigenschaften","name":"Ankername","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"Nach Elementkennung","anchorName":"Nach Ankername","charset":"Verknüpfter Ressourcenzeichensatz","cssClasses":"Formatvorlagenklasse","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail-Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Kennung","info":"Linkinfo","langCode":"Sprachcode","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link bearbeiten","name":"Name","noAnchors":"(Keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie E-Mail-Adresse an","noUrl":"Bitte geben Sie die Link-URL an","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenstereigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adressleiste","popupMenuBar":"Menüleiste","popupResizable":"Grösse änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Werkzeugleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"","targetFrameName":"Ziel-Fenster-Name","targetPopup":"","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"liststyle":{"bulletedTitle":"Aufzählungslisteneigenschaften","circle":"Ring","decimal":"Dezimal (1, 2, 3, etc.)","disc":"Kreis","lowerAlpha":"Klein Alpha (a, b, c, d, e, usw.)","lowerRoman":"Klein römisch (i, ii, iii, iv, v, usw.)","none":"Keine","notset":"","numberedTitle":"Nummerierte Listeneigenschaften","square":"Quadrat","start":"Start","type":"Typ","upperAlpha":"Gross alpha (A, B, C, D, E, etc.)","upperRoman":"Gross römisch (I, II, III, IV, V, usw.)","validateStartNumber":"Listenstartnummer muss eine ganze Zahl sein."},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"newpage":{"toolbar":"Neue Seite"},"pagebreak":{"alt":"Seitenumbruch","toolbar":"Seitenumbruch zum Drucken einfügen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Als Klartext einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus Word einfügen","toolbar":"Aus Word einfügen"},"preview":{"preview":"Vorschau"},"print":{"toolbar":"Drucken"},"removeformat":{"toolbar":"Formatierung entfernen"},"save":{"toolbar":"Speichern"},"selectall":{"toolbar":"Alles auswählen"},"showblocks":{"toolbar":"Blöcke anzeigen"},"sourcearea":{"toolbar":"Quellcode"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"table":{"border":"Rahmengrösse","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zelleneigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand aussen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muss eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muss eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand aussen muss eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß grösser als 0 sein..","invalidHeight":"Die Tabellenbreite muss eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß grösser als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 widget"},"uploadwidget":{"abort":"Hochladen durch den Benutzer abgebrochen.","doneOne":"Datei erfolgreich hochgeladen.","doneMany":"%1 Dateien erfolgreich hochgeladen.","uploadOne":"Datei wird hochgeladen ({percentage}%)...","uploadMany":"Dateien werden hochgeladen, {current} von {max} fertig ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/de.js b/htdocs/includes/ckeditor/ckeditor/lang/de.js deleted file mode 100644 index ecd4fe47784..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/de.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['de']={"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Kontrollbox","radio":"Optionsfeld","textField":"Textfeld","textarea":"Textfeld","hiddenField":"Verstecktes Feld","button":"Schaltfläche","select":"Auswahlfeld","imageButton":"Bildschaltfläche","notSet":"","id":"Kennung","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachcode","longDescr":"Langbeschreibungs-URL","cssClass":"Formatvorlagenklassen","advisoryTitle":"Titel Beschreibung","cssStyle":"Stil","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Größe ändern","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verloren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","left":"Links","right":"Rechts","center":"Zentriert","justify":"Blocksatz","alignLeft":"Linksbündig","alignRight":"Rechtsbündig","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1, nicht verfügbar","keyboard":{"8":"Rücktaste","13":"Eingabe","16":"Umschalt","17":"Strg","18":"Alt","32":"Leer","35":"Ende","36":"Pos1","46":"Entfernen","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Befehl"},"keyboardShortcut":"Tastaturkürzel","optionDefault":"Standard"},"about":{"copy":"Copyright © $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor 4","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"bidi":{"ltr":"Leserichtung von Links nach Rechts","rtl":"Leserichtung von Rechts nach Links"},"blockquote":{"toolbar":"Zitatblock"},"notification":{"closed":"Benachrichtigung geschlossen."},"toolbar":{"toolbarCollapse":"Werkzeugleiste einklappen","toolbarExpand":"Werkzeugleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formulare","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Werkzeugleisten"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Toolbar oder dem Kontextmenü.","pasteArea":"Einfügebereich","pasteMsg":"Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK."},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Hintergrundfarbe","colors":{"000":"Schwarz","800000":"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Marineblau","4B0082":"Indigo","696969":"Dunkelgrau","B22222":"Ziegelrot","A52A2A":"Braun","DAA520":"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Mittelblau","800080":"Lila","808080":"Grau","F00":"Rot","FF8C00":"Dunkelorange","FFD700":"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau","EE82EE":"Violett","A9A9A9":"Dunkelgrau","FFA07A":"Helles Lachsrosa","FFA500":"Orange","FFFF00":"Gelb","00FF00":"Lime","AFEEEE":"Blasstürkis","ADD8E6":"Hellblau","DDA0DD":"Pflaumenblau","D3D3D3":"Hellgrau","FFF0F5":"Lavendel","FAEBD7":"Antik Weiß","FFFFE0":"Hellgelb","F0FFF0":"Honigtau","F0FFFF":"Azurblau","F0F8FF":"Alice Blau","E6E6FA":"Lavendel","FFF":"Weiß","1ABC9C":"Strong Cyan","2ECC71":"Smaragdgrün","3498DB":"Bright Blue","9B59B6":"Amethystblau","4E5F70":"Graublau","F1C40F":"Vivid Yellow","16A085":"Dunkelcyan","27AE60":"Dunkelsmaragdgrün","2980B9":"Strong Blue","8E44AD":"Dunkelviolett","2C3E50":"Entsättigtes blau","F39C12":"Orange","E67E22":"Möhrenfarben","E74C3C":"Blassrot","ECF0F1":"Glänzendes Silber","95A5A6":"Helles Graublau","DDD":"Hellgrau","D35400":"Kürbisfarben","C0392B":"Strong Red","BDC3C7":"Silber","7F8C8D":"Graucyan","999":"Dunkelgrau"},"more":"Weitere Farben...","panelTitle":"Farben","textColorTitle":"Textfarbe"},"colordialog":{"clear":"Entfernen","highlight":"Hervorheben","options":"Farboptionen","selected":"Ausgewählte Farbe","title":"Farbe auswählen"},"templates":{"button":"Vorlagen","emptyListMsg":"(Keine Vorlagen definiert)","insertOption":"Aktuelle Inhalte ersetzen","options":"Vorlagenoptionen","selectPromptMsg":"Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen","title":"Inhaltsvorlagen"},"contextmenu":{"options":"Kontextmenüoptionen"},"copyformatting":{"label":"Formatierung kopieren","notification":{"copied":"Formatierung kopiert","applied":"Formatierung angewendet","canceled":"Formatierung abgebrochen","failed":"Formatierung fehlgeschlagen. Sie können Stile nicht anwenden, ohne sie zuerst zu kopieren."}},"div":{"IdInputLabel":"Kennung","advisoryTitleInputLabel":"Tooltip","cssClassInputLabel":"Formatvorlagenklasse","edit":"Div bearbeiten","inlineStyleInputLabel":"Inline Stil","langDirLTRLabel":"Links nach Rechs (LTR)","langDirLabel":"Sprachrichtung","langDirRTLLabel":"Rechs nach Links (RTL)","languageCodeInputLabel":"Sprachcode","remove":"Div entfernen","styleSelectLabel":"Stil","title":"Div Container erzeugen","toolbar":"Div Container erzeugen"},"elementspath":{"eleLabel":"Elementepfad","eleTitle":"%1 Element"},"filetools":{"loadError":"Während des Lesens der Datei ist ein Fehler aufgetreten.","networkError":"Während des Hochladens der Datei ist ein Netzwerkfehler aufgetreten.","httpError404":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).","httpError403":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).","httpError":"Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).","noUrlError":"Hochlade-URL ist nicht definiert.","responseError":"Falsche Antwort des Servers."},"find":{"find":"Suchen","findOptions":"Suchoptionen","findWhat":"Suchen nach:","matchCase":"Groß-/Kleinschreibung beachten","matchCyclic":"Zyklische Suche","matchWord":"Nur ganzes Wort suchen","notFoundMsg":"Der angegebene Text wurde nicht gefunden.","replace":"Ersetzen","replaceAll":"Alle ersetzen","replaceSuccessMsg":"%1 Vorkommen ersetzt.","replaceWith":"Ersetzen mit:","title":"Suchen und Ersetzen"},"fakeobjects":{"anchor":"Anker","flash":"Flash-Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"flash":{"access":"Skriptzugriff","accessAlways":"Immer","accessNever":"Nie","accessSameDomain":"Gleiche Domain","alignAbsBottom":"Abs Unten","alignAbsMiddle":"Abs Mitte","alignBaseline":"Basislinie","alignTextTop":"Text oben","bgcolor":"Hintergrundfarbe","chkFull":"Vollbildmodus erlauben","chkLoop":"Endlosschleife","chkMenu":"Flash-Menü aktivieren","chkPlay":"Automatisch Abspielen","flashvars":"Variablen für Flash","hSpace":"Horizontal-Abstand","properties":"Flash-Eigenschaften","propertiesTab":"Eigenschaften","quality":"Qualität","qualityAutoHigh":"Auto Hoch","qualityAutoLow":"Auto Niedrig","qualityBest":"Beste","qualityHigh":"Hoch","qualityLow":"Niedrig","qualityMedium":"Mittel","scale":"Skalierung","scaleAll":"Alles anzeigen","scaleFit":"Passgenau","scaleNoBorder":"Ohne Rand","title":"Flash-Eigenschaften","vSpace":"Vertikal-Abstand","validateHSpace":"HSpace muss eine Zahl sein.","validateSrc":"URL darf nicht leer sein.","validateVSpace":"VSpace muss eine Zahl sein.","windowMode":"Fenstermodus","windowModeOpaque":"Deckend","windowModeTransparent":"Transparent","windowModeWindow":"Fenster"},"font":{"fontSize":{"label":"Größe","voiceLabel":"Schrifgröße","panelTitle":"Schriftgröße"},"label":"Schriftart","panelTitle":"Schriftartname","voiceLabel":"Schriftart"},"forms":{"button":{"title":"Schaltflächeneigenschaften","text":"Text (Wert)","type":"Typ","typeBtn":"Button","typeSbm":"Absenden","typeRst":"Zurücksetzen"},"checkboxAndRadio":{"checkboxTitle":"Kontrollboxeigenschaften","radioTitle":"Optionsfeldeigenschaften","value":"Wert","selected":"Ausgewählt","required":"Erforderlich"},"form":{"title":"Formulareigenschaften","menu":"Formulareigenschaften","action":"Aktion","method":"Methode","encoding":"Kodierung"},"hidden":{"title":"Versteckte Feldeigenschaften","name":"Name","value":"Wert"},"select":{"title":"Auswahlfeldeigenschaften","selectInfo":"Info auswählen","opAvail":"Verfügbare Optionen","value":"Wert","size":"Größe","lines":"Linien","chkMulti":"Mehrfachauswahl erlauben","required":"Erforderlich","opText":"Text","opValue":"Wert","btnAdd":"Hinzufügen","btnModify":"Ändern","btnUp":"Hoch","btnDown":"Runter","btnSetValue":"Als ausgewählten Wert festlegen","btnDelete":"Entfernen"},"textarea":{"title":"Textfeldeigenschaften","cols":"Spalten","rows":"Reihen"},"textfield":{"title":"Textfeldeigenschaften","name":"Name","value":"Wert","charWidth":"Zeichenbreite","maxChars":"Max. Zeichen","required":"Erforderlich","type":"Typ","typeText":"Text","typePass":"Passwort","typeEmail":"E-mail","typeSearch":"Suche","typeTel":"Telefonnummer","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Absatzformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"iframe":{"border":"Rahmen anzeigen","noUrl":"Bitte geben Sie die IFrame-URL an","scrolling":"Rollbalken anzeigen","title":"IFrame-Eigenschaften","toolbar":"IFrame"},"image":{"alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?","infoTab":"Bildinfo","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bildeigenschaften","resetSize":"Größe zurücksetzen","title":"Bildeigenschaften","titleButton":"Bildschaltflächeneigenschaften","upload":"Hochladen","urlMissing":"Bildquellen-URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muss eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muss eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muss eine ganze Zahl sein."},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"smiley":{"options":"Smiley-Optionen","title":"Smiley auswählen","toolbar":"Smiley"},"language":{"button":"Sprache festlegen","remove":"Sprache entfernen"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker","menu":"Anker bearbeiten","title":"Ankereigenschaften","name":"Ankername","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"Nach Elementkennung","anchorName":"Nach Ankername","charset":"Verknüpfter Ressourcenzeichensatz","cssClasses":"Formatvorlagenklasse","download":"Herunterladen erzwingen","displayText":"Anzeigetext","emailAddress":"E-Mail-Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Kennung","info":"Linkinfo","langCode":"Sprachcode","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link bearbeiten","name":"Name","noAnchors":"(Keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie E-Mail-Adresse an","noUrl":"Bitte geben Sie die Link-URL an","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenstereigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adressleiste","popupMenuBar":"Menüleiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Werkzeugleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"","targetFrameName":"Ziel-Fenster-Name","targetPopup":"","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste einfügen/entfernen"},"liststyle":{"bulletedTitle":"Aufzählungslisteneigenschaften","circle":"Ring","decimal":"Dezimal (1, 2, 3, etc.)","disc":"Kreis","lowerAlpha":"Klein Alpha (a, b, c, d, e, usw.)","lowerRoman":"Klein römisch (i, ii, iii, iv, v, usw.)","none":"Keine","notset":"","numberedTitle":"Nummerierte Listeneigenschaften","square":"Quadrat","start":"Start","type":"Typ","upperAlpha":"Groß alpha (A, B, C, D, E, etc.)","upperRoman":"Groß römisch (I, II, III, IV, V, usw.)","validateStartNumber":"Listenstartnummer muss eine ganze Zahl sein."},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"newpage":{"toolbar":"Neue Seite"},"pagebreak":{"alt":"Seitenumbruch","toolbar":"Seitenumbruch zum Drucken einfügen"},"pastetext":{"button":"Als Klartext einfügen","pasteNotification":"Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Toolbar oder dem Kontextmenü.","title":"Als Klartext einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus Word einfügen","toolbar":"Aus Word einfügen"},"preview":{"preview":"Vorschau"},"print":{"toolbar":"Drucken"},"removeformat":{"toolbar":"Formatierung entfernen"},"save":{"toolbar":"Speichern"},"selectall":{"toolbar":"Alles auswählen"},"showblocks":{"toolbar":"Blöcke anzeigen"},"sourcearea":{"toolbar":"Quellcode"},"specialchar":{"options":"Sonderzeichenoptionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen"},"scayt":{"btn_about":"Über SCAYT","btn_dictionaries":"Wörterbücher","btn_disable":"SCAYT ausschalten","btn_enable":"SCAYT einschalten","btn_langs":"Sprachen","btn_options":"Optionen","text_title":"Rechtschreibprüfung während der Texteingabe (SCAYT)"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Blockstile","panelTitle2":"Inline Stilart","panelTitle3":"Objektstile"},"table":{"border":"Rahmengröße","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zelleneigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muss eine Zahl sein.","invalidHeight":"Zellenhöhe muss eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"widget":{"move":"Zum Verschieben anwählen und ziehen","label":"%1 Steuerelement"},"uploadwidget":{"abort":"Hochladen durch den Benutzer abgebrochen.","doneOne":"Datei erfolgreich hochgeladen.","doneMany":"%1 Dateien erfolgreich hochgeladen.","uploadOne":"Datei wird hochgeladen ({percentage}%)...","uploadMany":"Dateien werden hochgeladen, {current} von {max} fertig ({percentage}%)..."},"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/el.js b/htdocs/includes/ckeditor/ckeditor/lang/el.js deleted file mode 100644 index 7f0d3fa88ef..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/el.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['el']={"editor":"Επεξεργαστής Πλούσιου Κειμένου","editorPanel":"Πίνακας Επεξεργαστή Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση Διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Flash","form":"Φόρμα","checkbox":"Κουτί Επιλογής","radio":"Κουμπί Επιλογής","textField":"Πεδίο Κειμένου","textarea":"Περιοχή Κειμένου","hiddenField":"Κρυφό Πεδίο","button":"Κουμπί","select":"Πεδίο Επιλογής","imageButton":"Κουμπί Εικόνας","notSet":"<δεν έχει ρυθμιστεί>","id":"Id","name":"Όνομα","langDir":"Κατεύθυνση Κειμένου","langDirLtr":"Αριστερά προς Δεξιά (LTR)","langDirRtl":"Δεξιά προς Αριστερά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική Περιγραφή URL","cssClass":"Κλάσεις Φύλλων Στυλ","advisoryTitle":"Ενδεικτικός Τίτλος","cssStyle":"Μορφή Κειμένου","ok":"OK","cancel":"Ακύρωση","close":"Κλείσιμο","preview":"Προεπισκόπηση","resize":"Αλλαγή Μεγέθους","generalTab":"Γενικά","advancedTab":"Για Προχωρημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αριθμός.","confirmNewPage":"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;","confirmCancel":"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;","options":"Επιλογές","target":"Προορισμός","targetNew":"Νέο Παράθυρο (_blank)","targetTop":"Αρχική Περιοχή (_top)","targetSelf":"Ίδιο Παράθυρο (_self)","targetParent":"Γονεϊκό Παράθυρο (_parent)","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","styles":"Μορφή","cssClasses":"Κλάσεις Φύλλων Στυλ","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","left":"Αριστερά","right":"Δεξιά","center":"Κέντρο","justify":"Πλήρης Στοίχιση","alignLeft":"Στοίχιση Αριστερά","alignRight":"Στοίχιση Δεξιά","alignCenter":"Align Center","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"Χωρίς","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1, δεν είναι διαθέσιμο","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Κενό","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Εντολή"},"keyboardShortcut":"Συντόμευση πληκτρολογίου","optionDefault":"Default"},"about":{"copy":"Πνευματικά δικαιώματα © $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor 4","moreInfo":"Για πληροφορίες σχετικές με την άδεια χρήσης, παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"Διακριτή Διαγραφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"bidi":{"ltr":"Διεύθυνση κειμένου από αριστερά στα δεξιά","rtl":"Διεύθυνση κειμένου από δεξιά στα αριστερά"},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Σύμπτυξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Πρόχειρο/Αναίρεση","editing":"Επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά Στυλ","paragraph":"Παράγραφος","links":"Σύνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες επεξεργαστή"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του περιηγητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Παρακαλώ χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Αυτόματα","bgColorTitle":"Χρώμα Φόντου","colors":{"000":"Μαύρο","800000":"Καστανέρυθρο","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Βαθυκύανο","000080":"Μπλε μαρέν","4B0082":"Ινδικό","696969":"Σκούρο Γκρι","B22222":"Ανοικτό Κόκκινο","A52A2A":"Καφέ","DAA520":"Golden Rod","006400":"Σκούρο Πράσινο","40E0D0":"Τυρκουάζ","0000CD":"Medium Blue","800080":"Μοβ","808080":"Γκρι","F00":"Κόκκινο","FF8C00":"Σκούρο Πορτοκαλί","FFD700":"Χρυσαφί","008000":"Πράσινο","0FF":"Κυανό","00F":"Μπλε","EE82EE":"Μενεξεδί","A9A9A9":"Ποντικί","FFA07A":"Ανοικτό Σομόν","FFA500":"Πορτοκαλί","FFFF00":"Κίτρινο","00FF00":"Μοσχολέμονο","AFEEEE":"Pale Turquoise","ADD8E6":"Γαλάζιο","DDA0DD":"Δαμασκηνί","D3D3D3":"Ανοικτό Γκρι","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Ανοικτό Κίτρινο","F0FFF0":"Honeydew","F0FFFF":"Γαλανό","F0F8FF":"Alice Blue","E6E6FA":"Ελαφρός Ιώδες","FFF":"Λευκό","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Πορτοκαλί","E67E22":"Καροτί","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Αργυρό","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Περισσότερα Χρώματα…","panelTitle":"Χρώματα","textColorTitle":"Χρώμα Κειμένου"},"colordialog":{"clear":"Εκκαθάριση","highlight":"Σήμανση","options":"Επιλογές Χρωμάτων","selected":"Επιλεγμένο Χρώμα","title":"Επιλογή χρώματος"},"templates":{"button":"Πρότυπα","emptyListMsg":"(Δεν έχουν καθοριστεί πρότυπα)","insertOption":"Αντικατάσταση υπάρχοντων περιεχομένων","options":"Επιλογές Προτύπου","selectPromptMsg":"Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα","title":"Πρότυπα Περιεχομένου"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Ενδεικτικός Τίτλος","cssClassInputLabel":"Κλάσεις Φύλλων Στυλ","edit":"Επεξεργασία Div","inlineStyleInputLabel":"Στυλ Εν Σειρά","langDirLTRLabel":"Αριστερά προς Δεξιά (LTR)","langDirLabel":"Κατεύθυνση Κειμένου","langDirRTLLabel":"Δεξιά προς Αριστερά (RTL)","languageCodeInputLabel":"Κωδικός Γλώσσας","remove":"Διαγραφή Div","styleSelectLabel":"Μορφή","title":"Δημιουργία Div","toolbar":"Δημιουργία Div"},"elementspath":{"eleLabel":"Διαδρομή Στοιχείων","eleTitle":"Στοιχείο %1"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Εύρεση","findOptions":"Επιλογές Εύρεσης","findWhat":"Εύρεση για:","matchCase":"Ταίριασμα πεζών/κεφαλαίων","matchCyclic":"Αναδρομική εύρεση","matchWord":"Εύρεση μόνο πλήρων λέξεων","notFoundMsg":"Το κείμενο δεν βρέθηκε.","replace":"Αντικατάσταση","replaceAll":"Αντικατάσταση Όλων","replaceSuccessMsg":"Ο(ι) όρος(-οι) αντικαταστήθηκε(-αν) %1 φορές.","replaceWith":"Αντικατάσταση με:","title":"Εύρεση και Αντικατάσταση"},"fakeobjects":{"anchor":"Άγκυρα","flash":"Ταινία Flash","hiddenfield":"Κρυφό Πεδίο","iframe":"IFrame","unknown":"Άγνωστο Αντικείμενο"},"flash":{"access":"Πρόσβαση Script","accessAlways":"Πάντα","accessNever":"Ποτέ","accessSameDomain":"Ίδιο όνομα τομέα","alignAbsBottom":"Απόλυτα Κάτω","alignAbsMiddle":"Απόλυτα στη Μέση","alignBaseline":"Γραμμή Βάσης","alignTextTop":"Κορυφή Κειμένου","bgcolor":"Χρώμα Υποβάθρου","chkFull":"Να Επιτρέπεται η Προβολή σε Πλήρη Οθόνη","chkLoop":"Επανάληψη","chkMenu":"Ενεργοποίηση Flash Menu","chkPlay":"Αυτόματη Εκτέλεση","flashvars":"Μεταβλητές για Flash","hSpace":"Οριζόντιο Διάστημα","properties":"Ιδιότητες Flash","propertiesTab":"Ιδιότητες","quality":"Ποιότητα","qualityAutoHigh":"Αυτόματη Υψηλή","qualityAutoLow":"Αυτόματη Χαμηλή","qualityBest":"Καλύτερη","qualityHigh":"Υψηλή","qualityLow":"Χαμηλή","qualityMedium":"Μεσαία","scale":"Μεγέθυνση","scaleAll":"Εμφάνιση όλων","scaleFit":"Ακριβές Μέγεθος","scaleNoBorder":"Χωρίς Περίγραμμα","title":"Ιδιότητες Flash","vSpace":"Κάθετο Διάστημα","validateHSpace":"Το HSpace πρέπει να είναι αριθμός.","validateSrc":"Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)","validateVSpace":"Το VSpace πρέπει να είναι αριθμός.","windowMode":"Τρόπος λειτουργίας παραθύρου","windowModeOpaque":"Συμπαγές","windowModeTransparent":"Διάφανο","windowModeWindow":"Παράθυρο"},"font":{"fontSize":{"label":"Μέγεθος","voiceLabel":"Μέγεθος Γραμματοσειράς","panelTitle":"Μέγεθος Γραμματοσειράς"},"label":"Γραμματοσειρά","panelTitle":"Όνομα Γραμματοσειράς","voiceLabel":"Γραμματοσειρά"},"forms":{"button":{"title":"Ιδιότητες Κουμπιού","text":"Κείμενο (Τιμή)","type":"Τύπος","typeBtn":"Κουμπί","typeSbm":"Υποβολή","typeRst":"Επαναφορά"},"checkboxAndRadio":{"checkboxTitle":"Ιδιότητες Κουτιού Επιλογής","radioTitle":"Ιδιότητες Κουμπιού Επιλογής","value":"Τιμή","selected":"Επιλεγμένο","required":"Απαιτείται"},"form":{"title":"Ιδιότητες Φόρμας","menu":"Ιδιότητες Φόρμας","action":"Ενέργεια","method":"Μέθοδος","encoding":"Κωδικοποίηση"},"hidden":{"title":"Ιδιότητες Κρυφού Πεδίου","name":"Όνομα","value":"Τιμή"},"select":{"title":"Ιδιότητες Πεδίου Επιλογής","selectInfo":"Πληροφορίες Πεδίου Επιλογής","opAvail":"Διαθέσιμες Επιλογές","value":"Τιμή","size":"Μέγεθος","lines":"γραμμές","chkMulti":"Να επιτρέπονται οι πολλαπλές επιλογές","required":"Required","opText":"Κείμενο","opValue":"Τιμή","btnAdd":"Προσθήκη","btnModify":"Τροποποίηση","btnUp":"Πάνω","btnDown":"Κάτω","btnSetValue":"Θέση ως προεπιλογή","btnDelete":"Διαγραφή"},"textarea":{"title":"Ιδιότητες Περιοχής Κειμένου","cols":"Στήλες","rows":"Σειρές"},"textfield":{"title":"Ιδιότητες Πεδίου Κειμένου","name":"Όνομα","value":"Τιμή","charWidth":"Πλάτος Χαρακτήρων","maxChars":"Μέγιστοι χαρακτήρες","required":"Required","type":"Τύπος","typeText":"Κείμενο","typePass":"Κωδικός","typeEmail":"Email","typeSearch":"Αναζήτηση","typeTel":"Αριθμός Τηλεφώνου","typeUrl":"URL"}},"format":{"label":"Μορφοποίηση","panelTitle":"Μορφοποίηση Παραγράφου","tag_address":"Διεύθυνση","tag_div":"Κανονική (DIV)","tag_h1":"Κεφαλίδα 1","tag_h2":"Κεφαλίδα 2","tag_h3":"Κεφαλίδα 3","tag_h4":"Κεφαλίδα 4","tag_h5":"Κεφαλίδα 5","tag_h6":"Κεφαλίδα 6","tag_p":"Κανονική","tag_pre":"Προ-μορφοποιημένη"},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"iframe":{"border":"Προβολή περιγράμματος πλαισίου","noUrl":"Παρακαλούμε εισάγεται το URL του iframe","scrolling":"Ενεργοποίηση μπαρών κύλισης","title":"Ιδιότητες IFrame","toolbar":"IFrame"},"image":{"alt":"Εναλλακτικό Κείμενο","border":"Περίγραμμα","btnUpload":"Αποστολή στον Διακομιστή","button2Img":"Θέλετε να μετατρέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;","hSpace":"HSpace","img2Button":"Θέλετε να μεταμορφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;","infoTab":"Πληροφορίες Εικόνας","linkTab":"Σύνδεσμος","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","resetSize":"Επαναφορά Αρχικού Μεγέθους","title":"Ιδιότητες Εικόνας","titleButton":"Ιδιότητες Κουμπιού Εικόνας","upload":"Αποστολή","urlMissing":"Το URL πηγής για την εικόνα λείπει.","vSpace":"VSpace","validateBorder":"Το περίγραμμα πρέπει να είναι ένας ακέραιος αριθμός.","validateHSpace":"Το HSpace πρέπει να είναι ένας ακέραιος αριθμός.","validateVSpace":"Το VSpace πρέπει να είναι ένας ακέραιος αριθμός."},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"smiley":{"options":"Επιλογές Φατσούλων","title":"Εισάγετε μια Φατσούλα","toolbar":"Φατσούλα"},"language":{"button":"Θέση γλώσσας","remove":"Αφαίρεση γλώσσας"},"link":{"acccessKey":"Συντόμευση","advanced":"Για Προχωρημένους","advisoryContentType":"Ενδεικτικός Τύπος Περιεχομένου","advisoryTitle":"Ενδεικτικός Τίτλος","anchor":{"toolbar":"Εισαγωγή/επεξεργασία Άγκυρας","menu":"Ιδιότητες άγκυρας","title":"Ιδιότητες άγκυρας","name":"Όνομα άγκυρας","errorName":"Παρακαλούμε εισάγετε όνομα άγκυρας","remove":"Αφαίρεση Άγκυρας"},"anchorId":"Βάσει του Element Id","anchorName":"Βάσει του Ονόματος Άγκυρας","charset":"Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής","cssClasses":"Κλάσεις Φύλλων Στυλ","download":"Force Download","displayText":"Display Text","emailAddress":"Διεύθυνση E-mail","emailBody":"Κείμενο Μηνύματος","emailSubject":"Θέμα Μηνύματος","id":"Id","info":"Πληροφορίες Συνδέσμου","langCode":"Κατεύθυνση Κειμένου","langDir":"Κατεύθυνση Κειμένου","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","menu":"Επεξεργασία Συνδέσμου","name":"Όνομα","noAnchors":"(Δεν υπάρχουν άγκυρες στο κείμενο)","noEmail":"Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου","noUrl":"Εισάγετε την τοποθεσία (URL) του συνδέσμου","noTel":"Please type the phone number","other":"<άλλο>","phoneNumber":"Phone number","popupDependent":"Εξαρτημένο (Netscape)","popupFeatures":"Επιλογές Αναδυόμενου Παραθύρου","popupFullScreen":"Πλήρης Οθόνη (IE)","popupLeft":"Θέση Αριστερά","popupLocationBar":"Γραμμή Τοποθεσίας","popupMenuBar":"Γραμμή Επιλογών","popupResizable":"Προσαρμοζόμενο Μέγεθος","popupScrollBars":"Μπάρες Κύλισης","popupStatusBar":"Γραμμή Κατάστασης","popupToolbar":"Εργαλειοθήκη","popupTop":"Θέση Πάνω","rel":"Σχέση","selectAnchor":"Επιλέξτε μια Άγκυρα","styles":"Μορφή","tabIndex":"Σειρά Μεταπήδησης","target":"Παράθυρο Προορισμού","targetFrame":"<πλαίσιο>","targetFrameName":"Όνομα Πλαισίου Προορισμού","targetPopup":"<αναδυόμενο παράθυρο>","targetPopupName":"Όνομα Αναδυόμενου Παραθύρου","title":"Σύνδεσμος","toAnchor":"Άγκυρα σε αυτήν τη σελίδα","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Σύνδεσμος","type":"Τύπος Συνδέσμου","unlink":"Αφαίρεση Συνδέσμου","upload":"Αποστολή"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"liststyle":{"bulletedTitle":"Ιδιότητες Λίστας Σημείων","circle":"Κύκλος","decimal":"Δεκαδική (1, 2, 3, κτλ)","disc":"Δίσκος","lowerAlpha":"Μικρά Λατινικά (a, b, c, d, e, κτλ.)","lowerRoman":"Μικρά Ρωμαϊκά (i, ii, iii, iv, v, κτλ)","none":"Καμία","notset":"<δεν έχει οριστεί>","numberedTitle":"Ιδιότητες Αριθμημένης Λίστας ","square":"Τετράγωνο","start":"Εκκίνηση","type":"Τύπος","upperAlpha":"Κεφαλαία Λατινικά (A, B, C, D, E, κτλ)","upperRoman":"Κεφαλαία Ρωμαϊκά (I, II, III, IV, V, κτλ)","validateStartNumber":"Ο αριθμός εκκίνησης της αρίθμησης πρέπει να είναι ακέραιος αριθμός."},"magicline":{"title":"Εισάγετε παράγραφο εδώ"},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"newpage":{"toolbar":"Νέα Σελίδα"},"pagebreak":{"alt":"Αλλαγή Σελίδας","toolbar":"Εισαγωγή Τέλους Σελίδας για Εκτύπωση"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"preview":{"preview":"Προεπισκόπιση"},"print":{"toolbar":"Εκτύπωση"},"removeformat":{"toolbar":"Εκκαθάριση Μορφοποίησης"},"save":{"toolbar":"Αποθήκευση"},"selectall":{"toolbar":"Επιλογή όλων"},"showblocks":{"toolbar":"Προβολή Τμημάτων"},"sourcearea":{"toolbar":"Κώδικας"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε Έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Λεξικά","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Γλώσσες","btn_options":"Επιλογές","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"table":{"border":"Πάχος Περιγράμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή Κελιού Πριν","insertAfter":"Εισαγωγή Κελιού Μετά","deleteCell":"Διαγραφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"Οριζόντια Διαίρεση Κελιού","splitVertical":"Κατακόρυφη Διαίρεση Κελιού","title":"Ιδιότητες Κελιού","cellType":"Τύπος Κελιού","rowSpan":"Εύρος Γραμμών","colSpan":"Εύρος Στηλών","wordWrap":"Αναδίπλωση Λέξεων","hAlign":"Οριζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Γραμμή Βάσης","bgColor":"Χρώμα Φόντου","borderColor":"Χρώμα Περιγράμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Ναι","no":"Όχι","invalidWidth":"Το πλάτος του κελιού πρέπει να είναι αριθμός.","invalidHeight":"Το ύψος του κελιού πρέπει να είναι αριθμός.","invalidRowSpan":"Το εύρος των γραμμών πρέπει να είναι ακέραιος αριθμός.","invalidColSpan":"Το εύρος των στηλών πρέπει να είναι ακέραιος αριθμός.","chooseColor":"Επιλέξτε"},"cellPad":"Αναπλήρωση κελιών","cellSpace":"Απόσταση κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης Πριν","insertAfter":"Εισαγωγή Στήλης Μετά","deleteColumn":"Διαγραφή Στηλών"},"columns":"Στήλες","deleteTable":"Διαγραφή Πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δύο","headersColumn":"Πρώτη στήλη","headersNone":"Κανένα","headersRow":"Πρώτη Γραμμή","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Η αναπλήρωση των κελιών πρέπει να είναι θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Γραμμή","insertBefore":"Εισαγωγή Γραμμής Πριν","insertAfter":"Εισαγωγή Γραμμής Μετά","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"undo":{"redo":"Επανάληψη","undo":"Αναίρεση"},"widget":{"move":"Κάνετε κλικ και σύρετε το ποντίκι για να μετακινήστε","label":"%1 widget"},"uploadwidget":{"abort":"Αποστολή ακυρώθηκε απο χρήστη.","doneOne":"Αρχείο εστάλη επιτυχώς.","doneMany":"Επιτυχής αποστολή %1 αρχείων.","uploadOne":"Αποστολή αρχείου ({percentage}%)…","uploadMany":"Αποστολή αρχείων, {current} από {max} ολοκληρωμένα ({percentage}%)…"},"wsc":{"btnIgnore":"Αγνόηση","btnIgnoreAll":"Αγνόηση όλων","btnReplace":"Αντικατάσταση","btnReplaceAll":"Αντικατάσταση όλων","btnUndo":"Αναίρεση","changeTo":"Αλλαγή σε","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;","manyChanges":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξαν %1 λέξεις","noChanges":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις","noMispell":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη","noSuggestions":"- Δεν υπάρχουν προτάσεις -","notAvailable":"Η υπηρεσία δεν είναι διαθέσιμη αυτήν την στιγμή.","notInDic":"Δεν υπάρχει στο λεξικό","oneChange":"Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Άλλαξε μια λέξη","progress":"Γίνεται ορθογραφικός έλεγχος...","title":"Ορθογραφικός Έλεγχος","toolbar":"Ορθογραφικός Έλεγχος"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/en-au.js b/htdocs/includes/ckeditor/ckeditor/lang/en-au.js deleted file mode 100644 index bdfb21605b5..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/en-au.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['en-au']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Greyish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Greyish Cyan","DDD":"Light Grey","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Greyish Cyan","999":"Dark Grey"},"more":"More Colours...","panelTitle":"Colors","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Colour Options","selected":"Selected Colour","title":"Select colour"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background colour","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/en-ca.js b/htdocs/includes/ckeditor/ckeditor/lang/en-ca.js deleted file mode 100644 index 5b35f3c16a2..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/en-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['en-ca']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","left":"Left","right":"Right","center":"Centre","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colours...","panelTitle":"Colors","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background colour","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/en-gb.js b/htdocs/includes/ckeditor/ckeditor/lang/en-gb.js deleted file mode 100644 index 95ee45078d3..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/en-gb.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['en-gb']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialogue window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Grey","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Grey","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Grey","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Grey","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colours...","panelTitle":"Colours","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Colour Options","selected":"Selected Colour","title":"Select colour"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background colour","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"E-mail","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/en.js b/htdocs/includes/ckeditor/ckeditor/lang/en.js index 8e4fdb9d017..95912c68221 100644 --- a/htdocs/includes/ckeditor/ckeditor/lang/en.js +++ b/htdocs/includes/ckeditor/ckeditor/lang/en.js @@ -2,4 +2,4 @@ Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/license */ -CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file +CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","left":"Left","right":"Right","center":"Center","justify":"Justify","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected","required":"Required"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","required":"Required","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Required","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","heightUnit":"height unit","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"},"sourcedialog":{"toolbar":"Source","title":"Source"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/eo.js b/htdocs/includes/ckeditor/ckeditor/lang/eo.js deleted file mode 100644 index 2c7bbc5ef68..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/eo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['eo']={"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"Alŝuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"Flaŝo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"Kaŝita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ŝanĝi la grandon","generalTab":"Ĝenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?","confirmCancel":"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"Larĝo","height":"Alto","align":"Ĝisrandigo","left":"Maldekstre","right":"Dekstre","center":"Centre","justify":"Ĝisrandigi Ambaŭflanke","alignLeft":"Ĝisrandigi maldekstren","alignRight":"Ĝisrandigi dekstren","alignCenter":"Align Center","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"Neniu","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, nehavebla","keyboard":{"8":"Retropaŝo","13":"Enigi","16":"Registrumo","17":"Stirklavo","18":"Alt-klavo","32":"Spaco","35":"Fino","36":"Hejmo","46":"Forigi","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komando"},"keyboardShortcut":"Fulmoklavo","optionDefault":"Defaŭlta"},"about":{"copy":"Copyright © $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor 4","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"bidi":{"ltr":"Tekstdirekto de maldekstre dekstren","rtl":"Tekstdirekto de dekstre maldekstren"},"blockquote":{"toolbar":"Citaĵo"},"notification":{"closed":"Sciigo fermita"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"Poŝo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Intergluoareo","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Aŭtomata","bgColorTitle":"Fona Koloro","colors":{"000":"Nigra","800000":"Kaŝtankolora","8B4513":"Mezbruna","2F4F4F":"Ardezgriza","008080":"Marĉanaskolora","000080":"Maristblua","4B0082":"Indigokolora","696969":"Malhelgriza","B22222":"Brikruĝa","A52A2A":"Bruna","DAA520":"Senbrilorkolora","006400":"Malhelverda","40E0D0":"Turkisblua","0000CD":"Reĝblua","800080":"Purpura","808080":"Griza","F00":"Ruĝa","FF8C00":"Malheloranĝkolora","FFD700":"Orkolora","008000":"Verda","0FF":"Verdblua","00F":"Blua","EE82EE":"Viola","A9A9A9":"Mezgriza","FFA07A":"Salmokolora","FFA500":"Oranĝkolora","FFFF00":"Flava","00FF00":"Limetkolora","AFEEEE":"Helturkiskolora","ADD8E6":"Helblua","DDA0DD":"Prunkolora","D3D3D3":"Helgriza","FFF0F5":"Lavendkolora vangoŝminko","FAEBD7":"Antikvablanka","FFFFE0":"Helflava","F0FFF0":"Vintromelonkolora","F0FFFF":"Lazura","F0F8FF":"Aliceblua","E6E6FA":"Lavendkolora","FFF":"Blanka","1ABC9C":"Fortverdblua","2ECC71":"Smeraldkolora","3498DB":"Brilblua","9B59B6":"Ametistkolora","4E5F70":"Grizblua","F1C40F":"Brilflava","16A085":"Malhelverdblua","27AE60":"Malhelsmeraldkolora","2980B9":"Fortblua","8E44AD":"Malhelviola","2C3E50":"Malsaturita Bluo","F39C12":"Oranĝkolora","E67E22":"Karotkolora","E74C3C":"Pale Ruĝa","ECF0F1":"Brile Arĝenta","95A5A6":"Helgrizverdblua","DDD":"Helgriza","D35400":"Kukurbokolora","C0392B":"Forte ruĝa","BDC3C7":"Arĝenta","7F8C8D":"Grizverdblua","999":"Malhelgriza"},"more":"Pli da Koloroj...","panelTitle":"Koloroj","textColorTitle":"Teksta Koloro"},"colordialog":{"clear":"Forigi","highlight":"Detaloj","options":"Opcioj pri koloroj","selected":"Selektita koloro","title":"Selekti koloron"},"templates":{"button":"Ŝablonoj","emptyListMsg":"(Neniu ŝablono difinita)","insertOption":"Anstataŭigi la nunan enhavon","options":"Opcioj pri ŝablonoj","selectPromptMsg":"Bonvolu selekti la ŝablonon por malfermi ĝin en la redaktilo","title":"Enhavo de ŝablonoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Priskriba Titolo","cssClassInputLabel":"Stilfolioklasoj","edit":"Redakti Div","inlineStyleInputLabel":"Enlinia stilo","langDirLTRLabel":"Maldekstre dekstren (angle LTR)","langDirLabel":"Skribdirekto","langDirRTLLabel":"Dekstre maldekstren (angle RTL)","languageCodeInputLabel":" Lingvokodo","remove":"Forigi Div","styleSelectLabel":"Stilo","title":"Krei DIV ujon","toolbar":"Krei DIV ujon"},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"filetools":{"loadError":"Eraro okazis dum la dosiera legado.","networkError":"Reta eraro okazis dum la dosiera alŝuto.","httpError404":"HTTP eraro okazis dum la dosiera alŝuto (404: dosiero ne trovita).","httpError403":"HTTP eraro okazis dum la dosiera alŝuto (403: malpermesita).","httpError":"HTTP eraro okazis dum la dosiera alŝuto (erara stato: %1).","noUrlError":"Alŝuta URL ne estas difinita.","responseError":"Malĝusta respondo de la servilo."},"find":{"find":"Serĉi","findOptions":"Opcioj pri Serĉado","findWhat":"Serĉi:","matchCase":"Kongruigi Usklecon","matchCyclic":"Cikla Serĉado","matchWord":"Tuta Vorto","notFoundMsg":"La celteksto ne estas trovita.","replace":"Anstataŭigi","replaceAll":"Anstataŭigi Ĉion","replaceSuccessMsg":"%1 anstataŭigita(j) apero(j).","replaceWith":"Anstataŭigi per:","title":"Serĉi kaj Anstataŭigi"},"fakeobjects":{"anchor":"Ankro","flash":"FlaŝAnimacio","hiddenfield":"Kaŝita kampo","iframe":"Enlinia Kadro (IFrame)","unknown":"Nekonata objekto"},"flash":{"access":"Atingi skriptojn","accessAlways":"Ĉiam","accessNever":"Neniam","accessSameDomain":"Sama domajno","alignAbsBottom":"Absoluta Malsupro","alignAbsMiddle":"Absoluta Centro","alignBaseline":"TekstoMalsupro","alignTextTop":"TekstoSupro","bgcolor":"Fona Koloro","chkFull":"Permesi tutekranon","chkLoop":"Iteracio","chkMenu":"Ebligi flaŝmenuon","chkPlay":"Aŭtomata legado","flashvars":"Variabloj por Flaŝo","hSpace":"Horizontala Spaco","properties":"Flaŝatributoj","propertiesTab":"Atributoj","quality":"Kvalito","qualityAutoHigh":"Aŭtomate alta","qualityAutoLow":"Aŭtomate malalta","qualityBest":"Plej bona","qualityHigh":"Alta","qualityLow":"Malalta","qualityMedium":"Meza","scale":"Skalo","scaleAll":"Montri ĉion","scaleFit":"Origina grando","scaleNoBorder":"Neniu bordero","title":"Flaŝatributoj","vSpace":"Vertikala Spaco","validateHSpace":"Horizontala Spaco devas esti nombro.","validateSrc":"Bonvolu entajpi la retadreson (URL)","validateVSpace":"Vertikala Spaco devas esti nombro.","windowMode":"Fenestra reĝimo","windowModeOpaque":"Opaka","windowModeTransparent":"Travidebla","windowModeWindow":"Fenestro"},"font":{"fontSize":{"label":"Grado","voiceLabel":"Tipara grado","panelTitle":"Tipara grado"},"label":"Tiparo","panelTitle":"Tipara nomo","voiceLabel":"Tiparo"},"forms":{"button":{"title":"Butonaj atributoj","text":"Teksto (Valoro)","type":"Tipo","typeBtn":"Butono","typeSbm":"Validigi (submit)","typeRst":"Remeti en la originstaton (Reset)"},"checkboxAndRadio":{"checkboxTitle":"Markobutonaj Atributoj","radioTitle":"Radiobutonaj Atributoj","value":"Valoro","selected":"Selektita","required":"Postulata"},"form":{"title":"Formularaj Atributoj","menu":"Formularaj Atributoj","action":"Ago","method":"Metodo","encoding":"Kodoprezento"},"hidden":{"title":"Atributoj de Kaŝita Kampo","name":"Nomo","value":"Valoro"},"select":{"title":"Atributoj de Elekta Kampo","selectInfo":"Informoj pri la rulummenuo","opAvail":"Elektoj Disponeblaj","value":"Valoro","size":"Grando","lines":"Linioj","chkMulti":"Permesi Plurajn Elektojn","required":"Postulata","opText":"Teksto","opValue":"Valoro","btnAdd":"Aldoni","btnModify":"Modifi","btnUp":"Supren","btnDown":"Malsupren","btnSetValue":"Agordi kiel Elektitan Valoron","btnDelete":"Forigi"},"textarea":{"title":"Atributoj de Teksta Areo","cols":"Kolumnoj","rows":"Linioj"},"textfield":{"title":"Atributoj de Teksta Kampo","name":"Nomo","value":"Valoro","charWidth":"Signolarĝo","maxChars":"Maksimuma Nombro da Signoj","required":"Postulata","type":"Tipo","typeText":"Teksto","typePass":"Pasvorto","typeEmail":"retpoŝtadreso","typeSearch":"Serĉi","typeTel":"Telefonnumero","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"iframe":{"border":"Montri borderon de kadro (frame)","noUrl":"Bonvolu entajpi la retadreson de la ligilo al la enlinia kadro (IFrame)","scrolling":"Ebligi rulumskalon","title":"Atributoj de la enlinia kadro (IFrame)","toolbar":"Enlinia kadro (IFrame)"},"image":{"alt":"Anstataŭiga Teksto","border":"Bordero","btnUpload":"Sendu al Servilo","button2Img":"Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?","hSpace":"Horizontala Spaco","img2Button":"Ĉu vi volas transformi la selektitan bildon en bildbutonon?","infoTab":"Informoj pri Bildo","linkTab":"Ligilo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","resetSize":"Origina Grando","title":"Atributoj de Bildo","titleButton":"Bildbutonaj Atributoj","upload":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","vSpace":"Vertikala Spaco","validateBorder":"La bordero devas esti entjera nombro.","validateHSpace":"La horizontala spaco devas esti entjera nombro.","validateVSpace":"La vertikala spaco devas esti entjera nombro."},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"smiley":{"options":"Opcioj pri mienvinjetoj","title":"Enmeti Mienvinjeton","toolbar":"Mienvinjeto"},"language":{"button":"Instali lingvon","remove":"Forigi lingvon"},"link":{"acccessKey":"Fulmoklavo","advanced":"Speciala","advisoryContentType":"Enhavotipo","advisoryTitle":"Priskriba Titolo","anchor":{"toolbar":"Ankro","menu":"Enmeti/Ŝanĝi Ankron","title":"Ankraj Atributoj","name":"Ankra Nomo","errorName":"Bv entajpi la ankran nomon","remove":"Forigi Ankron"},"anchorId":"Per Elementidentigilo","anchorName":"Per Ankronomo","charset":"Signaro de la Ligita Rimedo","cssClasses":"Klasoj de Stilfolioj","download":"Altrudi Elŝuton","displayText":"Vidigi Tekston","emailAddress":"Retpoŝto","emailBody":"Mesaĝa korpo","emailSubject":"Mesaĝa Temo","id":"Id","info":"Informoj pri la Ligilo","langCode":"Lingva Kodo","langDir":"Skribdirekto","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","menu":"Ŝanĝi Ligilon","name":"Nomo","noAnchors":"","noEmail":"Bonvolu entajpi la retpoŝtadreson","noUrl":"Bonvolu entajpi la URL-on","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependa (Netscape)","popupFeatures":"Atributoj de la Ŝprucfenestro","popupFullScreen":"Tutekrane (IE)","popupLeft":"Maldekstra Pozicio","popupLocationBar":"Adresobreto","popupMenuBar":"Menubreto","popupResizable":"Dimensiŝanĝebla","popupScrollBars":"Rulumskaloj","popupStatusBar":"Statobreto","popupToolbar":"Ilobreto","popupTop":"Supra Pozicio","rel":"Rilato","selectAnchor":"Elekti Ankron","styles":"Stilo","tabIndex":"Taba Indekso","target":"Celo","targetFrame":"","targetFrameName":"Nomo de CelKadro","targetPopup":"<ŝprucfenestro>","targetPopupName":"Nomo de Ŝprucfenestro","title":"Ligilo","toAnchor":"Ankri en tiu ĉi paĝo","toEmail":"Retpoŝto","toUrl":"URL","toPhone":"Phone","toolbar":"Enmeti/Ŝanĝi Ligilon","type":"Tipo de Ligilo","unlink":"Forigi Ligilon","upload":"Alŝuti"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"liststyle":{"bulletedTitle":"Atributoj de Bula Listo","circle":"Cirklo","decimal":"Dekumaj Nombroj (1, 2, 3, ktp.)","disc":"Disko","lowerAlpha":"Minusklaj Literoj (a, b, c, d, e, ktp.)","lowerRoman":"Minusklaj Romanaj Nombroj (i, ii, iii, iv, v, ktp.)","none":"Neniu","notset":"","numberedTitle":"Atributoj de Numera Listo","square":"kvadrato","start":"Komenco","type":"Tipo","upperAlpha":"Majusklaj Literoj (A, B, C, D, E, ktp.)","upperRoman":"Majusklaj Romanaj Nombroj (I, II, III, IV, V, ktp.)","validateStartNumber":"La unua listero devas esti entjera nombro."},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"newpage":{"toolbar":"Nova Paĝo"},"pagebreak":{"alt":"Paĝavanco","toolbar":"Enmeti Paĝavancon por Presado"},"pastetext":{"button":"Interglui kiel platan tekston","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Interglui kiel platan tekston"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"preview":{"preview":"Vidigi Aspekton"},"print":{"toolbar":"Presi"},"removeformat":{"toolbar":"Forigi Formaton"},"save":{"toolbar":"Konservi"},"selectall":{"toolbar":"Elekti ĉion"},"showblocks":{"toolbar":"Montri la blokojn"},"sourcearea":{"toolbar":"Fonto"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"scayt":{"btn_about":"Pri OKDVT","btn_dictionaries":"Vortaroj","btn_disable":"Malebligi OKDVT","btn_enable":"Ebligi OKDVT","btn_langs":"Lingvoj","btn_options":"Opcioj","text_title":"OrtografiKontrolado Dum Vi Tajpas (OKDVT)"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon Antaŭ","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala ĝisrandigo","vAlign":"Vertikala ĝisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paĝotitolo","yes":"Jes","no":"No","invalidWidth":"Ĉellarĝo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna Marĝeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaŭ","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj Paĝotitoloj","headersBoth":"Ambaŭ","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarĝo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaŭ","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larĝo"},"undo":{"redo":"Refari","undo":"Malfari"},"widget":{"move":"klaki kaj treni por movi","label":"%1 fenestraĵo"},"uploadwidget":{"abort":"Alŝuto ĉesigita de la uzanto","doneOne":"Dosiero sukcese alŝutita.","doneMany":"Sukcese alŝutitaj %1 dosieroj.","uploadOne":"alŝutata dosiero ({percentage}%)...","uploadMany":"Alŝutataj dosieroj, {current} el {max} faritaj ({percentage}%)..."},"wsc":{"btnIgnore":"Ignori","btnIgnoreAll":"Ignori Ĉion","btnReplace":"Anstataŭigi","btnReplaceAll":"Anstataŭigi Ĉion","btnUndo":"Malfari","changeTo":"Ŝanĝi al","errorLoading":"Eraro en la servoelŝuto el la gastiga komputiko: %s.","ieSpellDownload":"Ortografikontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?","manyChanges":"Ortografikontrolado finita: %1 vortoj korektitaj","noChanges":"Ortografikontrolado finita: neniu vorto korektita","noMispell":"Ortografikontrolado finita: neniu eraro trovita","noSuggestions":"- Neniu propono -","notAvailable":"Bedaŭrinde la servo ne funkcias nuntempe.","notInDic":"Ne trovita en la vortaro","oneChange":"Ortografikontrolado finita: unu vorto korektita","progress":"La ortografio estas kontrolata...","title":"Kontroli la ortografion","toolbar":"Kontroli la ortografion"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/es-mx.js b/htdocs/includes/ckeditor/ckeditor/lang/es-mx.js deleted file mode 100644 index 6d980a08f71..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/es-mx.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['es-mx']={"editor":"Editor de texto enriquecido","editorPanel":"Panel del editor de texto","common":{"editorHelp":"Presiona ALT + 0 para ayuda","browseServer":"Examinar servidor","url":"URL","protocol":"Protocolo","upload":"Subir","uploadSubmit":"Enviar al servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de verificación","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botón","select":"Campo de selección","imageButton":"Botón de imagen","notSet":"","id":"Id","name":"Nombre","langDir":"Dirección de idiomas","langDirLtr":"Izquierda a derecha (LTR)","langDirRtl":"Derecha a izquierda (RTL)","langCode":"Código de lenguaje","longDescr":"URL descripción larga","cssClass":"Clases de hoja de estilo","advisoryTitle":"Título del anuncio","cssStyle":"Estilo","ok":"OK","cancel":"Cancelar","close":"Cerrar","preview":"Vista previa","resize":"Redimensionar","generalTab":"General","advancedTab":"Avanzada","validateNumberFailed":"Este valor no es un número.","confirmNewPage":"Se perderán todos los cambios no guardados en este contenido. ¿Seguro que quieres cargar nueva página?","confirmCancel":"Ha cambiado algunas opciones. ¿Está seguro de que desea cerrar la ventana de diálogo?","options":"Opciones","target":"Objetivo","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana superior (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana principal (_parent)","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","styles":"Estilo","cssClasses":"Clases de hojas de estilo","width":"Ancho","height":"Alto","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a la izquierda","alignRight":"Alinear a la derecha","alignCenter":"Align Center","alignTop":"Arriba","alignMiddle":"En medio","alignBottom":"Abajo","alignNone":"Ninguno","invalidValue":"Valor inválido","invalidHeight":"La altura debe ser un número.","invalidWidth":"La anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"El valor especificado para el campo \"% 1\" debe ser un número positivo con o sin una unidad de medición HTML válida (px or %).","invalidInlineStyle":"El valor especificado para el estilo en línea debe constar de una o más tuplas con el formato de \"nombre: valor\", separados por punto y coma","cssLengthTooltip":"Introduzca un número para un valor en píxeles o un número con una unidad CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, no disponible","keyboard":{"8":"Retroceso","13":"Intro","16":"Shift","17":"Ctrl","18":"Alt","32":"Espacio","35":"Fin","36":"Inicio","46":"Borrar","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Atajo de teclado","optionDefault":"Default"},"about":{"copy":"Derechos reservados © $1. Todos los derechos reservados","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información sobre la licencia por favor visita nuestro sitio web:"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"subíndice","superscript":"Sobrescrito","underline":"Subrayada"},"bidi":{"ltr":"Dirección del texto de izquierda a derecha","rtl":"Dirección del texto de derecha a izquierda"},"blockquote":{"toolbar":"Entrecomillado"},"notification":{"closed":"Notificación cerrada."},"toolbar":{"toolbarCollapse":"Colapsar barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/deshacer","editing":"Editando","forms":"Formularios","basicstyles":"Estilo básico","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Editor de barra de herramientas"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de copiado. Por favor, utilice el teclado para (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de corte. Por favor, utilice el teclado para (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automático","bgColorTitle":"Color de fondo","colors":{"000":"Negro","800000":"Marrón","8B4513":"Café sucio","2F4F4F":"Gris pizarra oscuro","008080":"Teal","000080":"Armada","4B0082":"Indigo","696969":"Gris oscuro","B22222":"Ladrillo de fuego","A52A2A":"Café","DAA520":"Barra de oro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio","800080":"Morado","808080":"Gris","F00":"Rojo","FF8C00":"Naranja oscuro","FFD700":"Oro","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris oscuro","FFA07A":"Salmón claro","FFA500":"Naranja","FFFF00":"Amarillo","00FF00":"Lima","AFEEEE":"Turquesa pálido","ADD8E6":"Azul claro","DDA0DD":"Ciruela","D3D3D3":"Gris claro","FFF0F5":"Rubor de lavanda","FAEBD7":"Blanco antiguo","FFFFE0":"Amarillo claro","F0FFF0":"Gotas de miel","F0FFFF":"Azul celeste","F0F8FF":"Azul Alicia","E6E6FA":"Lavanda","FFF":"Blanco","1ABC9C":"Cian fuerte","2ECC71":"Esmeralda","3498DB":"Azul brillante","9B59B6":"Amatista","4E5F70":"Azul grisáceo","F1C40F":"Amarillo vívido","16A085":"Cian oscuro","27AE60":"Esmeralda oscuro","2980B9":"Azul fuerte","8E44AD":"Violeta oscuro","2C3E50":"Azul Desaturado","F39C12":"Naranja","E67E22":"Zanahoria","E74C3C":"Rojo pálido","ECF0F1":"Plata brillante","95A5A6":"Cian grisáceo claro","DDD":"Gris claro","D35400":"Calabaza","C0392B":"Rojo fuerte","BDC3C7":"Plata","7F8C8D":"Cian grisáceo","999":"Gris oscuro"},"more":"Más colores...","panelTitle":"Colores","textColorTitle":"Color de texto"},"colordialog":{"clear":"Borrar","highlight":"Realce","options":"Opciones de color","selected":"Color seleccionado","title":"Selecciona un color"},"templates":{"button":"Plantillas","emptyListMsg":"(Sin plantilla definida)","insertOption":"Reemplazar contenido actual","options":"Opciones de la plantilla","selectPromptMsg":"Por favor selecciona una plantilla para abrir en el editor","title":"Contenido de las plantillas"},"contextmenu":{"options":"Opciones del menú contextual"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Título del anuncio","cssClassInputLabel":"Clases de la hoja de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo de línea","langDirLTRLabel":"Izquierda a Derecha (LTR)","langDirLabel":"Dirección de idiomas","langDirRTLLabel":"Derecha a Izquierda (RTL)","languageCodeInputLabel":"Código del idioma","remove":"Remover Div","styleSelectLabel":"Estilo","title":"Crear contenedor Div","toolbar":"Crear contenedor Div"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"filetools":{"loadError":"Ha ocurrido un error al leer el archivo","networkError":"Ha ocurrido un error de red durante la carga del archivo.","httpError404":"Se ha producido un error HTTP durante la subida de archivos (404: archivo no encontrado).","httpError403":"Se ha producido un error HTTP durante la subida de archivos (403: Prohibido).","httpError":"Se ha producido un error HTTP durante la subida de archivos (error: %1).","noUrlError":"La URL de subida no está definida.","responseError":"Respuesta incorrecta del servidor."},"find":{"find":"Buscar","findOptions":"Opciones de busqueda","findWhat":"Buscar que:","matchCase":"Comparar mayúsculas","matchCyclic":"Comparación cíclica","matchWord":"Compare la palabra completa","notFoundMsg":"El texto especificado no fue encontrado.","replace":"Remplazar","replaceAll":"Remplazar todo","replaceSuccessMsg":"%1 ","replaceWith":"Reemplazar con:","title":"Busca y reemplaza"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"flash":{"access":"Acceso a secuencias de comandos","accessAlways":"Siempre","accessNever":"Nunca","accessSameDomain":"Mismo dominio","alignAbsBottom":"Abs Abajo","alignAbsMiddle":"Abs Medio","alignBaseline":"Base","alignTextTop":"Texto Arriba","bgcolor":"Color de fondo","chkFull":"Permitir pantalla completa","chkLoop":"Ciclíco","chkMenu":"Habilitar menú de flash","chkPlay":"Auto reproducción","flashvars":"Variables para flash","hSpace":"Espacio horizontal","properties":"Propiedades del flash","propertiesTab":"Propiedades","quality":"Calidad","qualityAutoHigh":"Alta automática","qualityAutoLow":"Baja automática","qualityBest":"La mejor","qualityHigh":"Alta","qualityLow":"Baja","qualityMedium":"Mediana","scale":"Escala","scaleAll":"Mostrar todo","scaleFit":"Ajuste exacto","scaleNoBorder":"Sin bordes","title":"Propiedades del flash","vSpace":"Espacio vertical","validateHSpace":"El espacio horizontal debe ser un número entero.","validateSrc":"La URL no puede estar vacia.","validateVSpace":"El espacio vertical debe ser un número entero.","windowMode":"Modo de la ventana","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Ventana"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño de letra","panelTitle":"Tamaño de letra"},"label":"Letra","panelTitle":"Nombre de letra","voiceLabel":"Letra"},"forms":{"button":{"title":"Propiedades del botón","text":"Texto (valor)","type":"Tipo","typeBtn":"Botón","typeSbm":"Enviar","typeRst":"Reiniciar"},"checkboxAndRadio":{"checkboxTitle":"Propiedades de la casilla de verificación","radioTitle":"Propiedades de botón de opciones","value":"Valor","selected":"Seleccionado","required":"Requerido"},"form":{"title":"Propiedades del formulario","menu":"Propiedades del formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades del campo oculto","name":"Nombre","value":"Valor"},"select":{"title":"Propiedades del campo de selección","selectInfo":"Seleccionar información","opAvail":"Opciones disponobles","value":"Valor","size":"Tamaño","lines":"líneas","chkMulti":"Permitir múltiple selección","required":"Requerido","opText":"Texto","opValue":"Valor","btnAdd":"Agregar","btnModify":"Modificar","btnUp":"Subir","btnDown":"Bajar","btnSetValue":"Establecer como valor seleccionado","btnDelete":"Borrar"},"textarea":{"title":"Propiedades del área de texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades del campo texto","name":"Nombre","value":"Valor","charWidth":"Ancho de caracteres","maxChars":"Máximo de caracteres","required":"Requerido","type":"Tipo","typeText":"Texto","typePass":"Contraseña","typeEmail":"Correo electrónico","typeSearch":"Busqueda","typeTel":"Número telefónico","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato de párrafo","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formateado"},"horizontalrule":{"toolbar":"Insertar una línea horizontal"},"iframe":{"border":"Mostrar el borde del marco","noUrl":"Ingresa la URL del iframe","scrolling":"Habilitar la barra de desplazamiento","title":"Propiedades del IFrame","toolbar":"Iframe"},"image":{"alt":"Texto alternativo","border":"Borde","btnUpload":"Enviar al servidor","button2Img":"¿Desea transformar el botón de imagen seleccionado en una imagen simple?","hSpace":"Espacio horizontal","img2Button":"¿Desea transformar la imagen seleccionada en un botón de imagen?","infoTab":"Información de imagen","linkTab":"Enlace","lockRatio":"Bloquear aspecto","menu":"Propiedades de la imagen","resetSize":"Reiniciar tamaño","title":"Propiedades de la imagen","titleButton":"Propiedades del botón de imagen","upload":"Cargar","urlMissing":"Falta la URL de origen de la imagen.","vSpace":"Espacio vertical","validateBorder":"El borde debe ser un número entero.","validateHSpace":"El espacio horizontal debe ser un número entero.","validateVSpace":"El espacio vertical debe ser un número entero."},"indent":{"indent":"Incrementar sangría","outdent":"Decrementar sangría"},"smiley":{"options":"Opciones de smiley","title":"Insertar un smiley","toolbar":"Smiley"},"language":{"button":"Establecer idioma","remove":"Remover idioma"},"link":{"acccessKey":"Llave de acceso","advanced":"Avanzada","advisoryContentType":"Tipo de contenido consultivo","advisoryTitle":"Título asesor","anchor":{"toolbar":"Ancla","menu":"Editar ancla","title":"Propiedades del ancla","name":"Nombre del ancla","errorName":"Escriba el nombre del ancla","remove":"Remover ancla"},"anchorId":"Por Id del elemento","anchorName":"Por nombre del ancla","charset":"Recurso relacionado Charset","cssClasses":"Clases de estilo de hoja","download":"Forzar la descarga","displayText":"Mostrar texto","emailAddress":"Dirección de correo electrónico","emailBody":"Cuerpo del mensaje","emailSubject":"Asunto del mensaje","id":"Id","info":"Información del enlace","langCode":"Código del idioma","langDir":"Dirección del idioma","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar enlace","name":"Nombre","noAnchors":"(No hay anclas disponibles en el documento)","noEmail":"Escriba la dirección de correo electrónico","noUrl":"Escriba la URL del enlace","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependiente (Netscape)","popupFeatures":"Ventana emergente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Ubicación de la barra","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de herramienta","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Selecciona un ancla","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Objetivo","targetFrame":"","targetFrameName":"Nombre del marco de destino","targetPopup":"","targetPopupName":"Nombre de ventana emergente","title":"Enlace","toAnchor":"Enlace al ancla en el texto","toEmail":"Correo electrónico","toUrl":"URL","toPhone":"Phone","toolbar":"Enlace","type":"Tipo de enlace","unlink":"Desconectar","upload":"Subir"},"list":{"bulletedlist":"Insertar/Remover Lista con viñetas","numberedlist":"Insertar/Remover Lista numerada"},"liststyle":{"bulletedTitle":"Propiedades de la lista con viñetas","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","disc":"Desc","lowerAlpha":"Alfabeto minúscula (a, b, c, d, e, etc.)","lowerRoman":"Romano minúscula (i, ii, iii, iv, v, etc.)","none":"Ninguno","notset":"","numberedTitle":"Propiedades de la lista numerada","square":"Cuadrado","start":"Inicio","type":"Tipo","upperAlpha":"Abecedario mayúscula (A, B, C, D, E, etc.)","upperRoman":"Romanos mayúscula (I, II, III, IV, V, etc.)","validateStartNumber":"El número de inicio de la lista debe ser un número entero."},"magicline":{"title":"Insertar un párrafo aquí"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Página nueva"},"pagebreak":{"alt":"Salto de página","toolbar":"Insertar un salto de página para imprimir"},"pastetext":{"button":"Pegar como texto plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"El texto que desea pegar parece estar copiado de Word. ¿Quieres limpiarlo antes de pegarlo?","error":"No fue posible limpiar los datos pegados debido a un error interno","title":"Pegar desde word","toolbar":"Pegar desde word"},"preview":{"preview":"Vista previa"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Remover formato"},"save":{"toolbar":"Guardar"},"selectall":{"toolbar":"Seleccionar todo"},"showblocks":{"toolbar":"Mostrar bloques"},"sourcearea":{"toolbar":"Fuente"},"specialchar":{"options":"Opciones de carácteres especiales","title":"Seleccione un carácter especial","toolbar":"Inserta un carácter especial"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatos","panelTitle1":"Estilos de bloques","panelTitle2":"Estilos de líneas","panelTitle3":"Estilo de objetos"},"table":{"border":"Tamaño del borde","caption":"Subtítulo","cell":{"menu":"Celda","insertBefore":"Insertar una celda antes","insertAfter":"Insertar una celda despues","deleteCell":"Borrar celdas","merge":"Unir celdas","mergeRight":"Unir a la derecha","mergeDown":"Unir abajo","splitHorizontal":"Dividir celda horizontalmente","splitVertical":"Dividir celda verticalmente","title":"Propiedades de la celda","cellType":"Tipo de celda","rowSpan":"Extensión de las filas","colSpan":"Extensión de las columnas","wordWrap":"Ajuste de línea","hAlign":"Alineación horizontal","vAlign":"Alineación vertical","alignBaseline":"Base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Si","no":"No","invalidWidth":"El ancho de la celda debe ser un número entero.","invalidHeight":"El alto de la celda debe ser un número entero.","invalidRowSpan":"El intervalo de filas debe ser un número entero.","invalidColSpan":"El intervalo de columnas debe ser un número entero.","chooseColor":"Escoger"},"cellPad":"relleno de celda","cellSpace":"Espacio de celda","column":{"menu":"Columna","insertBefore":"Insertar columna antes","insertAfter":"Insertar columna después","deleteColumn":"Borrar columnas"},"columns":"Columnas","deleteTable":"Borrar tabla","headers":"Encabezados","headersBoth":"Ambos","headersColumn":"Primera columna","headersNone":"Ninguna","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número entero.","invalidCellPadding":"El relleno de la celda debe ser un número positivo.","invalidCellSpacing":"El espacio de la celda debe ser un número positivo.","invalidCols":"El número de columnas debe ser un número mayo que 0.","invalidHeight":"La altura de la tabla debe ser un número.","invalidRows":"El número de filas debe ser mayor a 0.","invalidWidth":"El ancho de la tabla debe ser un número.","menu":"Propiedades de la tabla","row":{"menu":"Fila","insertBefore":"Inserta una fila antes","insertAfter":"Inserta una fila después","deleteRow":"Borrar filas"},"rows":"Filas","summary":"Resumen","title":"Propiedades de la tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"Unidad de ancho"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"widget":{"move":"Presiona y arrastra para mover","label":"%1 widget"},"uploadwidget":{"abort":"La carga ha sido abortada por el usuario.","doneOne":"El archivo ha sido cargado completamente.","doneMany":"%1 archivos cargados completamente.","uploadOne":"Cargando archivo ({percentage}%)...","uploadMany":"Cargando archivos, {current} de {max} listo ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/es.js b/htdocs/includes/ckeditor/ckeditor/lang/es.js index efad8d26958..8e666c73e4a 100644 --- a/htdocs/includes/ckeditor/ckeditor/lang/es.js +++ b/htdocs/includes/ckeditor/ckeditor/lang/es.js @@ -2,4 +2,4 @@ Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/license */ -CKEDITOR.lang['es']={"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a Izquierda","alignRight":"Alinear a Derecha","alignCenter":"Align Center","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1, no disponible","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Space","35":"Fin","36":"Inicio","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"bidi":{"ltr":"Dirección del texto de izquierda a derecha","rtl":"Dirección del texto de derecha a izquierda"},"blockquote":{"toolbar":"Cita"},"notification":{"closed":"Notificación cerrada."},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Zona de pegado","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automático","bgColorTitle":"Color de Fondo","colors":{"000":"Negro","800000":"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil","696969":"Gris oscuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro","800080":"Púrpura","808080":"Gris","F00":"Rojo","FF8C00":"Naranja oscuro","FFD700":"Oro","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Naranja","FFFF00":"Amarillo","00FF00":"Lima","AFEEEE":"Turquesa claro","ADD8E6":"Azul claro","DDA0DD":"Violeta claro","D3D3D3":"Gris claro","FFF0F5":"Lavanda rojizo","FAEBD7":"Blanco antiguo","FFFFE0":"Amarillo claro","F0FFF0":"Miel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Blanco","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Más Colores...","panelTitle":"Colores","textColorTitle":"Color de Texto"},"colordialog":{"clear":"Borrar","highlight":"Muestra","options":"Opciones de colores","selected":"Elegido","title":"Elegir color"},"templates":{"button":"Plantillas","emptyListMsg":"(No hay plantillas definidas)","insertOption":"Reemplazar el contenido actual","options":"Opciones de plantillas","selectPromptMsg":"Por favor selecciona la plantilla a abrir en el editor
(el contenido actual se perderá):","title":"Contenido de Plantillas"},"contextmenu":{"options":"Opciones del menú contextual"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Clase de hoja de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo","langDirLTRLabel":"Izquierda a Derecha (LTR)","langDirLabel":"Orientación","langDirRTLLabel":"Derecha a Izquierda (RTL)","languageCodeInputLabel":" Codigo de idioma","remove":"Quitar Div","styleSelectLabel":"Estilo","title":"Crear contenedor DIV","toolbar":"Crear contenedor DIV"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"filetools":{"loadError":"Ha ocurrido un error durante la lectura del archivo.","networkError":"Error de red ocurrido durante carga de archivo.","httpError404":"Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).","httpError403":"Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).","httpError":"Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).","noUrlError":"URL cargada no está definida.","responseError":"Respueta del servidor incorrecta."},"find":{"find":"Buscar","findOptions":"Opciones de búsqueda","findWhat":"Texto a buscar:","matchCase":"Coincidir may/min","matchCyclic":"Buscar en todo el contenido","matchWord":"Coincidir toda la palabra","notFoundMsg":"El texto especificado no ha sido encontrado.","replace":"Reemplazar","replaceAll":"Reemplazar Todo","replaceSuccessMsg":"La expresión buscada ha sido reemplazada %1 veces.","replaceWith":"Reemplazar con:","title":"Buscar y Reemplazar"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"flash":{"access":"Acceso de scripts","accessAlways":"Siempre","accessNever":"Nunca","accessSameDomain":"Mismo dominio","alignAbsBottom":"Abs inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Línea de base","alignTextTop":"Tope del texto","bgcolor":"Color de Fondo","chkFull":"Permitir pantalla completa","chkLoop":"Repetir","chkMenu":"Activar Menú Flash","chkPlay":"Autoejecución","flashvars":"Opciones","hSpace":"Esp.Horiz","properties":"Propiedades de Flash","propertiesTab":"Propiedades","quality":"Calidad","qualityAutoHigh":"Auto Alta","qualityAutoLow":"Auto Baja","qualityBest":"La mejor","qualityHigh":"Alta","qualityLow":"Baja","qualityMedium":"Media","scale":"Escala","scaleAll":"Mostrar todo","scaleFit":"Ajustado","scaleNoBorder":"Sin Borde","title":"Propiedades de Flash","vSpace":"Esp.Vert","validateHSpace":"Esp.Horiz debe ser un número.","validateSrc":"Por favor escriba el vínculo URL","validateVSpace":"Esp.Vert debe ser un número.","windowMode":"WindowMode","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Ventana"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño de fuente","panelTitle":"Tamaño"},"label":"Fuente","panelTitle":"Fuente","voiceLabel":"Fuente"},"forms":{"button":{"title":"Propiedades de Botón","text":"Texto (Valor)","type":"Tipo","typeBtn":"Boton","typeSbm":"Enviar","typeRst":"Reestablecer"},"checkboxAndRadio":{"checkboxTitle":"Propiedades de Casilla","radioTitle":"Propiedades de Botón de Radio","value":"Valor","selected":"Seleccionado","required":"Requerido"},"form":{"title":"Propiedades de Formulario","menu":"Propiedades de Formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades de Campo Oculto","name":"Nombre","value":"Valor"},"select":{"title":"Propiedades de Campo de Selección","selectInfo":"Información","opAvail":"Opciones disponibles","value":"Valor","size":"Tamaño","lines":"Lineas","chkMulti":"Permitir múltiple selección","required":"Requerido","opText":"Texto","opValue":"Valor","btnAdd":"Agregar","btnModify":"Modificar","btnUp":"Subir","btnDown":"Bajar","btnSetValue":"Establecer como predeterminado","btnDelete":"Eliminar"},"textarea":{"title":"Propiedades de Area de Texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades de Campo de Texto","name":"Nombre","value":"Valor","charWidth":"Caracteres de ancho","maxChars":"Máximo caracteres","required":"Requerido","type":"Tipo","typeText":"Texto","typePass":"Contraseña","typeEmail":"Correo electrónico","typeSearch":"Buscar","typeTel":"Número de teléfono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"iframe":{"border":"Mostrar borde del marco","noUrl":"Por favor, escriba la dirección del iframe","scrolling":"Activar barras de desplazamiento","title":"Propiedades de iframe","toolbar":"IFrame"},"image":{"alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"smiley":{"options":"Opciones de emoticonos","title":"Insertar un Emoticon","toolbar":"Emoticonos"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","download":"Force Download","displayText":"Display Text","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"","targetFrameName":"Nombre del Marco Destino","targetPopup":"","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"liststyle":{"bulletedTitle":"Propiedades de viñetas","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disco","lowerAlpha":"Alfabeto en minúsculas (a, b, c, d, e, etc.)","lowerRoman":"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)","none":"Ninguno","notset":"","numberedTitle":"Propiedades de lista numerada","square":"Cuadrado","start":"Inicio","type":"Tipo","upperAlpha":"Alfabeto en mayúsculas (A, B, C, D, E, etc.)","upperRoman":"Números romanos en mayúsculas (I, II, III, IV, V, etc.)","validateStartNumber":"El Inicio debe ser un número entero."},"magicline":{"title":"Insertar párrafo aquí"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Nueva Página"},"pagebreak":{"alt":"Salto de página","toolbar":"Insertar Salto de Página"},"pastetext":{"button":"Pegar como Texto Plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"preview":{"preview":"Vista Previa"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Eliminar Formato"},"save":{"toolbar":"Guardar"},"selectall":{"toolbar":"Seleccionar Todo"},"showblocks":{"toolbar":"Mostrar bloques"},"sourcearea":{"toolbar":"Fuente HTML"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"scayt":{"btn_about":"Acerca de Corrector","btn_dictionaries":"Diccionarios","btn_disable":"Desactivar Corrector","btn_enable":"Activar Corrector","btn_langs":"Idiomas","btn_options":"Opciones","text_title":"Comprobar Ortografía Mientras Escribe"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"uploadwidget":{"abort":"Carga abortada por el usuario.","doneOne":"Archivo cargado exitósamente.","doneMany":"%1 archivos exitósamente cargados.","uploadOne":"Cargando archivo ({percentage}%)...","uploadMany":"Cargando archivos, {current} de {max} hecho ({percentage}%)..."},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todo","btnReplace":"Reemplazar","btnReplaceAll":"Reemplazar Todo","btnUndo":"Deshacer","changeTo":"Cambiar a","errorLoading":"Error cargando la aplicación del servidor: %s.","ieSpellDownload":"Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?","manyChanges":"Control finalizado: se ha cambiado %1 palabras","noChanges":"Control finalizado: no se ha cambiado ninguna palabra","noMispell":"Control finalizado: no se encontraron errores","noSuggestions":"- No hay sugerencias -","notAvailable":"Lo sentimos pero el servicio no está disponible.","notInDic":"No se encuentra en el Diccionario","oneChange":"Control finalizado: se ha cambiado una palabra","progress":"Control de Ortografía en progreso...","title":"Comprobar ortografía","toolbar":"Ortografía"}}; \ No newline at end of file +CKEDITOR.lang['es']={"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","left":"Izquierda","right":"Derecha","center":"Centrado","justify":"Justificado","alignLeft":"Alinear a Izquierda","alignRight":"Alinear a Derecha","alignCenter":"Align Center","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"Ninguno","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1, no disponible","keyboard":{"8":"Retroceso","13":"Ingresar","16":"Mayús.","17":"Ctrl","18":"Alt","32":"Space","35":"Fin","36":"Inicio","46":"Suprimir","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor 4","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"bidi":{"ltr":"Dirección del texto de izquierda a derecha","rtl":"Dirección del texto de derecha a izquierda"},"blockquote":{"toolbar":"Cita"},"notification":{"closed":"Notificación cerrada."},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Zona de pegado","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automático","bgColorTitle":"Color de Fondo","colors":{"000":"Negro","800000":"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil","696969":"Gris oscuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro","800080":"Púrpura","808080":"Gris","F00":"Rojo","FF8C00":"Naranja oscuro","FFD700":"Oro","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Naranja","FFFF00":"Amarillo","00FF00":"Lima","AFEEEE":"Turquesa claro","ADD8E6":"Azul claro","DDA0DD":"Violeta claro","D3D3D3":"Gris claro","FFF0F5":"Lavanda rojizo","FAEBD7":"Blanco antiguo","FFFFE0":"Amarillo claro","F0FFF0":"Miel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Blanco","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Más Colores...","panelTitle":"Colores","textColorTitle":"Color de Texto"},"colordialog":{"clear":"Borrar","highlight":"Muestra","options":"Opciones de colores","selected":"Elegido","title":"Elegir color"},"templates":{"button":"Plantillas","emptyListMsg":"(No hay plantillas definidas)","insertOption":"Reemplazar el contenido actual","options":"Opciones de plantillas","selectPromptMsg":"Por favor selecciona la plantilla a abrir en el editor
(el contenido actual se perderá):","title":"Contenido de Plantillas"},"contextmenu":{"options":"Opciones del menú contextual"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Clase de hoja de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo","langDirLTRLabel":"Izquierda a Derecha (LTR)","langDirLabel":"Orientación","langDirRTLLabel":"Derecha a Izquierda (RTL)","languageCodeInputLabel":" Codigo de idioma","remove":"Quitar Div","styleSelectLabel":"Estilo","title":"Crear contenedor DIV","toolbar":"Crear contenedor DIV"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"filetools":{"loadError":"Ha ocurrido un error durante la lectura del archivo.","networkError":"Error de red ocurrido durante carga de archivo.","httpError404":"Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).","httpError403":"Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).","httpError":"Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).","noUrlError":"URL cargada no está definida.","responseError":"Respueta del servidor incorrecta."},"find":{"find":"Buscar","findOptions":"Opciones de búsqueda","findWhat":"Texto a buscar:","matchCase":"Coincidir may/min","matchCyclic":"Buscar en todo el contenido","matchWord":"Coincidir toda la palabra","notFoundMsg":"El texto especificado no ha sido encontrado.","replace":"Reemplazar","replaceAll":"Reemplazar Todo","replaceSuccessMsg":"La expresión buscada ha sido reemplazada %1 veces.","replaceWith":"Reemplazar con:","title":"Buscar y Reemplazar"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"flash":{"access":"Acceso de scripts","accessAlways":"Siempre","accessNever":"Nunca","accessSameDomain":"Mismo dominio","alignAbsBottom":"Abs inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Línea de base","alignTextTop":"Tope del texto","bgcolor":"Color de Fondo","chkFull":"Permitir pantalla completa","chkLoop":"Repetir","chkMenu":"Activar Menú Flash","chkPlay":"Autoejecución","flashvars":"Opciones","hSpace":"Esp.Horiz","properties":"Propiedades de Flash","propertiesTab":"Propiedades","quality":"Calidad","qualityAutoHigh":"Auto Alta","qualityAutoLow":"Auto Baja","qualityBest":"La mejor","qualityHigh":"Alta","qualityLow":"Baja","qualityMedium":"Media","scale":"Escala","scaleAll":"Mostrar todo","scaleFit":"Ajustado","scaleNoBorder":"Sin Borde","title":"Propiedades de Flash","vSpace":"Esp.Vert","validateHSpace":"Esp.Horiz debe ser un número.","validateSrc":"Por favor escriba el vínculo URL","validateVSpace":"Esp.Vert debe ser un número.","windowMode":"WindowMode","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Ventana"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño de fuente","panelTitle":"Tamaño"},"label":"Fuente","panelTitle":"Fuente","voiceLabel":"Fuente"},"forms":{"button":{"title":"Propiedades de Botón","text":"Texto (Valor)","type":"Tipo","typeBtn":"Boton","typeSbm":"Enviar","typeRst":"Reestablecer"},"checkboxAndRadio":{"checkboxTitle":"Propiedades de Casilla","radioTitle":"Propiedades de Botón de Radio","value":"Valor","selected":"Seleccionado","required":"Requerido"},"form":{"title":"Propiedades de Formulario","menu":"Propiedades de Formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades de Campo Oculto","name":"Nombre","value":"Valor"},"select":{"title":"Propiedades de Campo de Selección","selectInfo":"Información","opAvail":"Opciones disponibles","value":"Valor","size":"Tamaño","lines":"Lineas","chkMulti":"Permitir múltiple selección","required":"Requerido","opText":"Texto","opValue":"Valor","btnAdd":"Agregar","btnModify":"Modificar","btnUp":"Subir","btnDown":"Bajar","btnSetValue":"Establecer como predeterminado","btnDelete":"Eliminar"},"textarea":{"title":"Propiedades de Area de Texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades de Campo de Texto","name":"Nombre","value":"Valor","charWidth":"Caracteres de ancho","maxChars":"Máximo caracteres","required":"Requerido","type":"Tipo","typeText":"Texto","typePass":"Contraseña","typeEmail":"Correo electrónico","typeSearch":"Buscar","typeTel":"Número de teléfono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"iframe":{"border":"Mostrar borde del marco","noUrl":"Por favor, escriba la dirección del iframe","scrolling":"Activar barras de desplazamiento","title":"Propiedades de iframe","toolbar":"IFrame"},"image":{"alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"smiley":{"options":"Opciones de emoticonos","title":"Insertar un Emoticon","toolbar":"Emoticonos"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","download":"Force Download","displayText":"Display Text","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"","targetFrameName":"Nombre del Marco Destino","targetPopup":"","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"liststyle":{"bulletedTitle":"Propiedades de viñetas","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disco","lowerAlpha":"Alfabeto en minúsculas (a, b, c, d, e, etc.)","lowerRoman":"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)","none":"Ninguno","notset":"","numberedTitle":"Propiedades de lista numerada","square":"Cuadrado","start":"Inicio","type":"Tipo","upperAlpha":"Alfabeto en mayúsculas (A, B, C, D, E, etc.)","upperRoman":"Números romanos en mayúsculas (I, II, III, IV, V, etc.)","validateStartNumber":"El Inicio debe ser un número entero."},"magicline":{"title":"Insertar párrafo aquí"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Nueva Página"},"pagebreak":{"alt":"Salto de página","toolbar":"Insertar Salto de Página"},"pastetext":{"button":"Pegar como Texto Plano","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"preview":{"preview":"Vista Previa"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Eliminar Formato"},"save":{"toolbar":"Guardar"},"selectall":{"toolbar":"Seleccionar Todo"},"showblocks":{"toolbar":"Mostrar bloques"},"sourcearea":{"toolbar":"Fuente HTML"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"scayt":{"btn_about":"Acerca de Corrector","btn_dictionaries":"Diccionarios","btn_disable":"Desactivar Corrector","btn_enable":"Activar Corrector","btn_langs":"Idiomas","btn_options":"Opciones","text_title":"Comprobar Ortografía Mientras Escribe"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","heightUnit":"height unit","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"widget":{"move":"Dar clic y arrastrar para mover","label":"reproductor %1"},"uploadwidget":{"abort":"Carga abortada por el usuario.","doneOne":"Archivo cargado exitósamente.","doneMany":"%1 archivos exitósamente cargados.","uploadOne":"Cargando archivo ({percentage}%)...","uploadMany":"Cargando archivos, {current} de {max} hecho ({percentage}%)..."},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todo","btnReplace":"Reemplazar","btnReplaceAll":"Reemplazar Todo","btnUndo":"Deshacer","changeTo":"Cambiar a","errorLoading":"Error cargando la aplicación del servidor: %s.","ieSpellDownload":"Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?","manyChanges":"Control finalizado: se ha cambiado %1 palabras","noChanges":"Control finalizado: no se ha cambiado ninguna palabra","noMispell":"Control finalizado: no se encontraron errores","noSuggestions":"- No hay sugerencias -","notAvailable":"Lo sentimos pero el servicio no está disponible.","notInDic":"No se encuentra en el Diccionario","oneChange":"Control finalizado: se ha cambiado una palabra","progress":"Control de Ortografía en progreso...","title":"Comprobar ortografía","toolbar":"Ortografía"},"sourcedialog":{"toolbar":"Fuente HTML","title":"Fuente HTML"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/et.js b/htdocs/includes/ckeditor/ckeditor/lang/et.js deleted file mode 100644 index 6b1e793653f..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/et.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['et']={"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","left":"Vasak","right":"Paremale","center":"Kesk","justify":"Rööpjoondus","alignLeft":"Vasakjoondus","alignRight":"Paremjoondus","alignCenter":"Align Center","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"Pole","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1, pole saadaval","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Tühik","35":"End","36":"Home","46":"Kustuta","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Vaikeväärtus"},"about":{"copy":"Copyright © $1. Kõik õigused kaitstud.","dlgTitle":"About CKEditor 4","moreInfo":"Litsentsi andmed leiab meie veebilehelt:"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"bidi":{"ltr":"Teksti suund vasakult paremale","rtl":"Teksti suund paremalt vasakule"},"blockquote":{"toolbar":"Blokktsitaat"},"notification":{"closed":"Teavitused on suletud."},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Asetamise ala","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automaatne","bgColorTitle":"Tausta värv","colors":{"000":"Must","800000":"Kastanpruun","8B4513":"Sadulapruun","2F4F4F":"Tume paehall","008080":"Sinakasroheline","000080":"Meresinine","4B0082":"Indigosinine","696969":"Tumehall","B22222":"Šamottkivi","A52A2A":"Pruun","DAA520":"Kuldkollane","006400":"Tumeroheline","40E0D0":"Türkiissinine","0000CD":"Keskmine sinine","800080":"Lilla","808080":"Hall","F00":"Punanae","FF8C00":"Tumeoranž","FFD700":"Kuldne","008000":"Roheline","0FF":"Tsüaniidsinine","00F":"Sinine","EE82EE":"Violetne","A9A9A9":"Tuhm hall","FFA07A":"Hele lõhe","FFA500":"Oranž","FFFF00":"Kollane","00FF00":"Lubja hall","AFEEEE":"Kahvatu türkiis","ADD8E6":"Helesinine","DDA0DD":"Ploomililla","D3D3D3":"Helehall","FFF0F5":"Lavendlipunane","FAEBD7":"Antiikvalge","FFFFE0":"Helekollane","F0FFF0":"Meloniroheline","F0FFFF":"Taevasinine","F0F8FF":"Beebisinine","E6E6FA":"Lavendel","FFF":"Valge","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Oraanž","E67E22":"Porgand","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Tume hall"},"more":"Rohkem värve...","panelTitle":"Värvid","textColorTitle":"Teksti värv"},"colordialog":{"clear":"Eemalda","highlight":"Näidis","options":"Värvi valikud","selected":"Valitud värv","title":"Värvi valimine"},"templates":{"button":"Mall","emptyListMsg":"(Ühtegi malli ei ole defineeritud)","insertOption":"Praegune sisu asendatakse","options":"Malli valikud","selectPromptMsg":"Palun vali mall, mis avada redaktoris
(praegune sisu läheb kaotsi):","title":"Sisumallid"},"contextmenu":{"options":"Kontekstimenüü valikud"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Soovitatav pealkiri","cssClassInputLabel":"Stiililehe klassid","edit":"Muuda Div","inlineStyleInputLabel":"Reasisene stiil","langDirLTRLabel":"Vasakult paremale (LTR)","langDirLabel":"Keele suund","langDirRTLLabel":"Paremalt vasakule (RTL)","languageCodeInputLabel":" Keelekood","remove":"Eemalda Div","styleSelectLabel":"Stiil","title":"Div-konteineri loomine","toolbar":"Div-konteineri loomine"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Vigane serveri vastus."},"find":{"find":"Otsi","findOptions":"Otsingu valikud","findWhat":"Otsitav:","matchCase":"Suur- ja väiketähtede eristamine","matchCyclic":"Jätkatakse algusest","matchWord":"Ainult terved sõnad","notFoundMsg":"Otsitud teksti ei leitud.","replace":"Asenda","replaceAll":"Asenda kõik","replaceSuccessMsg":"%1 vastet asendati.","replaceWith":"Asendus:","title":"Otsimine ja asendamine"},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"flash":{"access":"Skriptide ligipääs","accessAlways":"Kõigile","accessNever":"Mitte ühelegi","accessSameDomain":"Samalt domeenilt","alignAbsBottom":"Abs alla","alignAbsMiddle":"Abs keskele","alignBaseline":"Baasjoonele","alignTextTop":"Tekstist üles","bgcolor":"Tausta värv","chkFull":"Täisekraan lubatud","chkLoop":"Korduv","chkMenu":"Flashi menüü lubatud","chkPlay":"Automaatne start ","flashvars":"Flashi muutujad","hSpace":"H. vaheruum","properties":"Flashi omadused","propertiesTab":"Omadused","quality":"Kvaliteet","qualityAutoHigh":"Automaatne kõrge","qualityAutoLow":"Automaatne madal","qualityBest":"Parim","qualityHigh":"Kõrge","qualityLow":"Madal","qualityMedium":"Keskmine","scale":"Mastaap","scaleAll":"Näidatakse kõike","scaleFit":"Täpne sobivus","scaleNoBorder":"Äärist ei ole","title":"Flashi omadused","vSpace":"V. vaheruum","validateHSpace":"H. vaheruum peab olema number.","validateSrc":"Palun kirjuta lingi URL","validateVSpace":"V. vaheruum peab olema number.","windowMode":"Akna režiim","windowModeOpaque":"Läbipaistmatu","windowModeTransparent":"Läbipaistev","windowModeWindow":"Aken"},"font":{"fontSize":{"label":"Suurus","voiceLabel":"Kirja suurus","panelTitle":"Suurus"},"label":"Kiri","panelTitle":"Kiri","voiceLabel":"Kiri"},"forms":{"button":{"title":"Nupu omadused","text":"Tekst (väärtus)","type":"Liik","typeBtn":"Nupp","typeSbm":"Saada","typeRst":"Lähtesta"},"checkboxAndRadio":{"checkboxTitle":"Märkeruudu omadused","radioTitle":"Raadionupu omadused","value":"Väärtus","selected":"Märgitud","required":"Nõutud"},"form":{"title":"Vormi omadused","menu":"Vormi omadused","action":"Toiming","method":"Meetod","encoding":"Kodeering"},"hidden":{"title":"Varjatud lahtri omadused","name":"Nimi","value":"Väärtus"},"select":{"title":"Valiklahtri omadused","selectInfo":"Info","opAvail":"Võimalikud valikud:","value":"Väärtus","size":"Suurus","lines":"ridu","chkMulti":"Võimalik mitu valikut","required":"Nõutud","opText":"Tekst","opValue":"Väärtus","btnAdd":"Lisa","btnModify":"Muuda","btnUp":"Üles","btnDown":"Alla","btnSetValue":"Määra vaikimisi","btnDelete":"Kustuta"},"textarea":{"title":"Tekstiala omadused","cols":"Veerge","rows":"Ridu"},"textfield":{"title":"Tekstilahtri omadused","name":"Nimi","value":"Väärtus","charWidth":"Laius (tähemärkides)","maxChars":"Maksimaalselt tähemärke","required":"õutud","type":"Liik","typeText":"Tekst","typePass":"Parool","typeEmail":"E-mail","typeSearch":"Otsi","typeTel":"Telefon","typeUrl":"URL"}},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"iframe":{"border":"Raami äärise näitamine","noUrl":"Vali iframe URLi liik","scrolling":"Kerimisribade lubamine","title":"IFrame omadused","toolbar":"IFrame"},"image":{"alt":"Alternatiivne tekst","border":"Joon","btnUpload":"Saada serverisse","button2Img":"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?","hSpace":"H. vaheruum","img2Button":"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?","infoTab":"Pildi info","linkTab":"Link","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","resetSize":"Lähtesta suurus","title":"Pildi omadused","titleButton":"Piltnupu omadused","upload":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","vSpace":"V. vaheruum","validateBorder":"Äärise laius peab olema täisarv.","validateHSpace":"Horisontaalne vaheruum peab olema täisarv.","validateVSpace":"Vertikaalne vaheruum peab olema täisarv."},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"smiley":{"options":"Emotikonide valikud","title":"Sisesta emotikon","toolbar":"Emotikon"},"language":{"button":"Määra keel","remove":"Eemalda keel"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","download":"Sunni allalaadimine","displayText":"Näidatav tekst","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"","targetFrameName":"Sihtmärk raami nimi","targetPopup":"","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toPhone":"Phone","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"liststyle":{"bulletedTitle":"Punktloendi omadused","circle":"Ring","decimal":"Numbrid (1, 2, 3, jne)","disc":"Täpp","lowerAlpha":"Väiketähed (a, b, c, d, e, jne)","lowerRoman":"Väiksed rooma numbrid (i, ii, iii, iv, v, jne)","none":"Puudub","notset":"","numberedTitle":"Numberloendi omadused","square":"Ruut","start":"Algus","type":"Liik","upperAlpha":"Suurtähed (A, B, C, D, E, jne)","upperRoman":"Suured rooma numbrid (I, II, III, IV, V, jne)","validateStartNumber":"Loendi algusnumber peab olema täisarv."},"magicline":{"title":"Sisesta siia lõigu tekst"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"newpage":{"toolbar":"Uus leht"},"pagebreak":{"alt":"Lehevahetuskoht","toolbar":"Lehevahetuskoha sisestamine"},"pastetext":{"button":"Asetamine tavalise tekstina","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Asetamine tavalise tekstina"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"preview":{"preview":"Eelvaade"},"print":{"toolbar":"Printimine"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"save":{"toolbar":"Salvestamine"},"selectall":{"toolbar":"Kõige valimine"},"showblocks":{"toolbar":"Blokkide näitamine"},"sourcearea":{"toolbar":"Lähtekood"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"scayt":{"btn_about":"SCAYT-ist lähemalt","btn_dictionaries":"Sõnaraamatud","btn_disable":"SCAYT keelatud","btn_enable":"SCAYT lubatud","btn_langs":"Keeled","btn_options":"Valikud","text_title":"Õigekirjakontroll kirjutamise ajal"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"widget":{"move":"Click and drag to move","label":"%1 vidin"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"Fail on üles laaditud.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignoreeri","btnIgnoreAll":"Ignoreeri kõiki","btnReplace":"Asenda","btnReplaceAll":"Asenda kõik","btnUndo":"Võta tagasi","changeTo":"Muuda","errorLoading":"Viga rakenduse teenushosti laadimisel: %s.","ieSpellDownload":"Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?","manyChanges":"Õigekirja kontroll sooritatud: %1 sõna muudetud","noChanges":"Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud","noMispell":"Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud","noSuggestions":"- Soovitused puuduvad -","notAvailable":"Kahjuks ei ole teenus praegu saadaval.","notInDic":"Puudub sõnastikust","oneChange":"Õigekirja kontroll sooritatud: üks sõna muudeti","progress":"Toimub õigekirja kontroll...","title":"Õigekirjakontroll","toolbar":"Õigekirjakontroll"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/eu.js b/htdocs/includes/ckeditor/ckeditor/lang/eu.js deleted file mode 100644 index 7d083c4e7e1..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/eu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['eu']={"editor":"Testu aberastuaren editorea","editorPanel":"Testu aberastuaren editorearen panela","common":{"editorHelp":"Sakatu ALT 0 laguntza jasotzeko","browseServer":"Arakatu zerbitzaria","url":"URLa","protocol":"Protokoloa","upload":"Kargatu","uploadSubmit":"Bidali zerbitzarira","image":"Irudia","flash":"Flash","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu-eremua","textarea":"Testu-area","hiddenField":"Ezkutuko eremua","button":"Botoia","select":"Hautespen-eremua","imageButton":"Irudi-botoia","notSet":"","id":"Id","name":"Izena","langDir":"Hizkuntzaren norabidea","langDirLtr":"Ezkerretik eskuinera (LTR)","langDirRtl":"Eskuinetik ezkerrera (RTL)","langCode":"Hizkuntzaren kodea","longDescr":"URLaren deskribapen luzea","cssClass":"Estilo-orriko klaseak","advisoryTitle":"Aholkatutako izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Aldatu tamainaz","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu dituzu. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Helburua","targetNew":"Leiho berria (_blank)","targetTop":"Goieneko leihoan (_top)","targetSelf":"Leiho berean (_self)","targetParent":"Leiho gurasoan (_parent)","langDirLTR":"Ezkerretik eskuinera (LTR)","langDirRTL":"Eskuinetik ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatzea","left":"Ezkerrean","right":"Eskuinean","center":"Erdian","justify":"Justifikatu","alignLeft":"Lerrokatu ezkerrean","alignRight":"Lerrokatu eskuinean","alignCenter":"Align Center","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"Bat ere ez","invalidValue":"Balio desegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, CSS neurri unitate batekin edo gabe (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioak zenbaki positibo bat izan behar du, HTML neurri unitate batekin edo gabe (px edo %).","invalidInlineStyle":"Lineako estiloan zehaztutako balioak \"izen : balio\" formatuko tupla bat edo gehiago izan behar dira, komaz bereiztuak.","cssLengthTooltip":"Sartu zenbaki bat edo zenbaki bat baliozko CSS unitate batekin (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1, erabilezina","keyboard":{"8":"Atzera tekla","13":"Sartu","16":"Maius","17":"Ktrl","18":"Alt","32":"Zuriunea","35":"Buka","36":"Etxea","46":"Ezabatu","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Komandoa"},"keyboardShortcut":"Laster-tekla","optionDefault":"Lehenetsia"},"about":{"copy":"Copyright © $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor 4ri buruz","moreInfo":"Lizentziari buruzko informazioa gure webgunean:"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indizea","superscript":"Goi-indizea","underline":"Azpimarratu"},"bidi":{"ltr":"Testuaren norantza ezkerretik eskuinera","rtl":"Testuaren norantza eskuinetik ezkerrera"},"blockquote":{"toolbar":"Aipamen blokea"},"notification":{"closed":"Jakinarazpena itxita."},"toolbar":{"toolbarCollapse":"Tolestu tresna-barra","toolbarExpand":"Zabaldu tresna-barra","toolbarGroups":{"document":"Dokumentua","clipboard":"Arbela/Desegin","editing":"Editatu","forms":"Formularioak","basicstyles":"Oinarrizko estiloak","paragraph":"Paragrafoa","links":"Estekak","insert":"Txertatu","styles":"Estiloak","colors":"Koloreak","tools":"Tresnak"},"toolbars":"Editorearen tresna-barrak"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki kopiatzea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki moztea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Itsasteko area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatikoa","bgColorTitle":"Atzeko planoko kolorea","colors":{"000":"Beltza","800000":"Granatea","8B4513":"Zela marroia","2F4F4F":"Arbel gris iluna","008080":"Urdin berdexka","000080":"Urdin iluna","4B0082":"Indigoa","696969":"Gris iluna","B22222":"Adreilu erregogorra","A52A2A":"Marroia","DAA520":"Urrezko makila","006400":"Berde iluna","40E0D0":"Turkesa","0000CD":"Urdin ertaina","800080":"Morea","808080":"Grisa","F00":"Gorria","FF8C00":"Laranja iluna","FFD700":"Urrea","008000":"Berdea","0FF":"Ziana","00F":"Urdina","EE82EE":"Bioleta","A9A9A9":"Gris ahula","FFA07A":"Izokin-kolore argia","FFA500":"Laranja","FFFF00":"Horia","00FF00":"Lima","AFEEEE":"Turkesa argia","ADD8E6":"Urdin argia","DDA0DD":"Aran-kolorea","D3D3D3":"Gris argia","FFF0F5":"Izpiliku-gorrixka","FAEBD7":"Zuri zaharra","FFFFE0":"Hori argia","F0FFF0":"Ezti-ihintza","F0FFFF":"Zeru-urdina","F0F8FF":"Alizia urdina","E6E6FA":"Izpilikua","FFF":"Zuria","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Gris iluna"},"more":"Kolore gehiago...","panelTitle":"Koloreak","textColorTitle":"Testu-kolorea"},"colordialog":{"clear":"Garbitu","highlight":"Nabarmendu","options":"Kolore aukerak","selected":"Hautatutako kolorea","title":"Hautatu kolorea"},"templates":{"button":"Txantiloiak","emptyListMsg":"(Ez dago txantiloirik definituta)","insertOption":"Ordeztu uneko edukiak","options":"Txantiloi aukerak","selectPromptMsg":"Mesedez hautatu txantiloia editorean irekitzeko","title":"Eduki txantiloiak"},"contextmenu":{"options":"Testuinguru-menuaren aukerak"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Aholkatutako izenburua","cssClassInputLabel":"Estilo-orriko klaseak","edit":"Editatu Div-a","inlineStyleInputLabel":"Lineako estiloa","langDirLTRLabel":"Ezkerretik eskuinera (LTR)","langDirLabel":"Hizkuntzaren norabidea","langDirRTLLabel":"Eskuinetik ezkerrera (RTL)","languageCodeInputLabel":"Hizkuntzaren kodea","remove":"Kendu Div-a","styleSelectLabel":"Estiloa","title":"Sortu Div edukiontzia","toolbar":"Sortu Div edukiontzia"},"elementspath":{"eleLabel":"Elementuen bidea","eleTitle":"%1 elementua"},"filetools":{"loadError":"Errorea gertatu da fitxategia irakurtzean.","networkError":"Sareko errorea gertatu da fitxategia kargatzean.","httpError404":"HTTP errorea gertatu da fitxategia kargatzean (404: Fitxategia ez da aurkitu).","httpError403":"HTTP errorea gertatu da fitxategia kargatzean (403: Debekatuta).","httpError":"HTTP errorea gertatu da fitxategia kargatzean (errore-egoera: %1).","noUrlError":"Kargatzeko URLa definitu gabe.","responseError":"Zerbitzariaren erantzun okerra."},"find":{"find":"Bilatu","findOptions":"Bilaketaren aukerak","findWhat":"Bilatu hau:","matchCase":"Maiuskula/minuskula","matchCyclic":"Bilaketa ziklikoa","matchWord":"Bilatu hitz osoa","notFoundMsg":"Ez da aurkitu zehazturiko testua.","replace":"Ordezkatu","replaceAll":"Ordezkatu guztiak","replaceSuccessMsg":"%1 aldiz ordezkatua.","replaceWith":"Ordezkatu honekin:","title":"Bilatu eta ordezkatu"},"fakeobjects":{"anchor":"Aingura","flash":"Flash animazioa","hiddenfield":"Ezkutuko eremua","iframe":"IFrame-a","unknown":"Objektu ezezaguna"},"flash":{"access":"Script atzipena","accessAlways":"Beti","accessNever":"Inoiz ere ez","accessSameDomain":"Domeinu berekoak","alignAbsBottom":"Abs behean","alignAbsMiddle":"Abs erdian","alignBaseline":"Oinean","alignTextTop":"Testua goian","bgcolor":"Atzeko planoko kolorea","chkFull":"Onartu pantaila osoa","chkLoop":"Begizta","chkMenu":"Gaitu Flash-en menua","chkPlay":"Erreproduzitu automatikoki","flashvars":"Flash-en aldagaiak","hSpace":"HSpace","properties":"Flash-en propietateak","propertiesTab":"Propietateak","quality":"Kalitatea","qualityAutoHigh":"Auto altua","qualityAutoLow":"Auto baxua","qualityBest":"Hoberena","qualityHigh":"Altua","qualityLow":"Baxua","qualityMedium":"Ertaina","scale":"Eskalatu","scaleAll":"Erakutsi dena","scaleFit":"Doitu","scaleNoBorder":"Ertzik gabe","title":"Flash-en propietateak","vSpace":"VSpace","validateHSpace":"HSpace zenbaki bat izan behar da.","validateSrc":"URLak ezin du hutsik egon.","validateVSpace":"VSpace zenbaki bat izan behar da.","windowMode":"Leiho-modua","windowModeOpaque":"Opakoa","windowModeTransparent":"Gardena","windowModeWindow":"Leihoa"},"font":{"fontSize":{"label":"Tamaina","voiceLabel":"Letra-tamaina","panelTitle":"Letra-tamaina"},"label":"Letra-tipoa","panelTitle":"Letra-tipoaren izena","voiceLabel":"Letra-tipoa"},"forms":{"button":{"title":"Botoiaren ezaugarriak","text":"Testua (balioa)","type":"Mota","typeBtn":"Botoia","typeSbm":"Bidali","typeRst":"Berrezarri"},"checkboxAndRadio":{"checkboxTitle":"Kontrol-laukiaren propietateak","radioTitle":"Aukera-botoiaren propietateak","value":"Balioa","selected":"Hautatuta","required":"Beharrezkoa"},"form":{"title":"Formularioaren propietateak","menu":"Formularioaren propietateak","action":"Ekintza","method":"Metodoa","encoding":"Kodeketa"},"hidden":{"title":"Ezkutuko eremuaren propietateak","name":"Izena","value":"Balioa"},"select":{"title":"Hautespen eremuaren propietateak","selectInfo":"Hautatu informazioa","opAvail":"Erabilgarri dauden aukerak","value":"Balioa","size":"Tamaina","lines":"lerro kopurua","chkMulti":"baimendu hautapen anitzak","required":"Beharrezkoa","opText":"Testua","opValue":"Balioa","btnAdd":"Gehitu","btnModify":"Aldatu","btnUp":"Gora","btnDown":"Behera","btnSetValue":"Ezarri hautatutako balio bezala","btnDelete":"Ezabatu"},"textarea":{"title":"Testu-arearen propietateak","cols":"Zutabeak","rows":"Errenkadak"},"textfield":{"title":"Testu-eremuaren propietateak","name":"Izena","value":"Balioa","charWidth":"Karaktere-zabalera","maxChars":"Gehienezko karaktereak","required":"Beharrezkoa","type":"Mota","typeText":"Testua","typePass":"Pasahitza","typeEmail":"E-posta","typeSearch":"Bilatu","typeTel":"Telefono zenbakia","typeUrl":"URLa"}},"format":{"label":"Formatua","panelTitle":"Paragrafoaren formatua","tag_address":"Helbidea","tag_div":"Normala (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Normala","tag_pre":"Formatuduna"},"horizontalrule":{"toolbar":"Txertatu marra horizontala"},"iframe":{"border":"Erakutsi markoaren ertza","noUrl":"Idatzi iframe-aren URLa, mesedez.","scrolling":"Gaitu korritze-barrak","title":"IFrame-aren propietateak","toolbar":"IFrame-a"},"image":{"alt":"Ordezko testua","border":"Ertza","btnUpload":"Bidali zerbitzarira","button2Img":"Hautatutako irudi-botoia irudi arrunt bihurtu nahi duzu?","hSpace":"HSpace","img2Button":"Hautatutako irudia irudi-botoi bihurtu nahi duzu?","infoTab":"Irudiaren informazioa","linkTab":"Esteka","lockRatio":"Blokeatu erlazioa","menu":"Irudiaren propietateak","resetSize":"Berrezarri tamaina","title":"Irudiaren propietateak","titleButton":"Irudi-botoiaren propietateak","upload":"Kargatu","urlMissing":"Irudiaren iturburuaren URLa falta da.","vSpace":"VSpace","validateBorder":"Ertza zenbaki oso bat izan behar da.","validateHSpace":"HSpace zenbaki oso bat izan behar da.","validateVSpace":"VSpace zenbaki oso bat izan behar da."},"indent":{"indent":"Handitu koska","outdent":"Txikitu koska"},"smiley":{"options":"Aurpegieren aukerak","title":"Txertatu aurpegiera","toolbar":"Aurpegierak"},"language":{"button":"Ezarri hizkuntza","remove":"Kendu hizkuntza"},"link":{"acccessKey":"Sarbide-tekla","advanced":"Aurreratua","advisoryContentType":"Aholkatutako eduki-mota","advisoryTitle":"Aholkatutako izenburua","anchor":{"toolbar":"Aingura","menu":"Editatu aingura","title":"Ainguraren propietateak","name":"Ainguraren izena","errorName":"Idatzi ainguraren izena","remove":"Kendu aingura"},"anchorId":"Elementuaren Id-aren arabera","anchorName":"Aingura-izenaren arabera","charset":"Estekatutako baliabide karaktere-jokoa","cssClasses":"Estilo-orriko klaseak","download":"Behartu deskarga","displayText":"Bistaratu testua","emailAddress":"E-posta helbidea","emailBody":"Mezuaren gorputza","emailSubject":"Mezuaren gaia","id":"Id","info":"Estekaren informazioa","langCode":"Hizkuntzaren kodea","langDir":"Hizkuntzaren norabidea","langDirLTR":"Ezkerretik eskuinera (LTR)","langDirRTL":"Eskuinetik ezkerrera (RTL)","menu":"Editatu esteka","name":"Izena","noAnchors":"(Ez dago aingurarik erabilgarri dokumentuan)","noEmail":"Mesedez idatzi e-posta helbidea","noUrl":"Mesedez idatzi estekaren URLa","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Menpekoa (Netscape)","popupFeatures":"Laster-leihoaren ezaugarriak","popupFullScreen":"Pantaila osoa (IE)","popupLeft":"Ezkerreko posizioa","popupLocationBar":"Kokaleku-barra","popupMenuBar":"Menu-barra","popupResizable":"Tamaina aldakorra","popupScrollBars":"Korritze-barrak","popupStatusBar":"Egoera-barra","popupToolbar":"Tresna-barra","popupTop":"Goiko posizioa","rel":"Erlazioa","selectAnchor":"Hautatu aingura","styles":"Estiloa","tabIndex":"Tabulazio indizea","target":"Helburua","targetFrame":"","targetFrameName":"Helburuko markoaren izena","targetPopup":"","targetPopupName":"Laster-leihoaren izena","title":"Esteka","toAnchor":"Estekatu testuko aingurara","toEmail":"E-posta","toUrl":"URLa","toPhone":"Phone","toolbar":"Esteka","type":"Esteka-mota","unlink":"Kendu esteka","upload":"Kargatu"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"liststyle":{"bulletedTitle":"Buletadun zerrendaren propietateak","circle":"Zirkulua","decimal":"Hamartarra (1, 2, 3...)","disc":"Diskoa","lowerAlpha":"Alfabetoa minuskulaz (a, b, c, d, e...)","lowerRoman":"Erromatarra minuskulaz (i, ii, iii, iv, v...)","none":"Bat ere ez","notset":"","numberedTitle":"Zenbakidun zerrendaren propietateak","square":"Karratua","start":"Hasi","type":"Mota","upperAlpha":"Alfabetoa maiuskulaz (A, B, C, D, E...)","upperRoman":"Erromatarra maiuskulaz (I, II, III, IV, V, etc.)","validateStartNumber":"Zerrendaren hasierako zenbakiak zenbaki osoa izan behar du."},"magicline":{"title":"Txertatu paragrafoa hemen"},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"newpage":{"toolbar":"Orrialde berria"},"pagebreak":{"alt":"Orrialde-jauzia","toolbar":"Txertatu orrialde-jauzia inprimatzean"},"pastetext":{"button":"Itsatsi testu arrunta bezala","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Itsatsi testu arrunta bezala"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Word-etik kopiatua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barne-errore bat dela eta ezin izan da itsatsitako testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"preview":{"preview":"Aurrebista"},"print":{"toolbar":"Inprimatu"},"removeformat":{"toolbar":"Kendu formatua"},"save":{"toolbar":"Gorde"},"selectall":{"toolbar":"Hautatu dena"},"showblocks":{"toolbar":"Erakutsi blokeak"},"sourcearea":{"toolbar":"Iturburua"},"specialchar":{"options":"Karaktere berezien aukerak","title":"Hautatu karaktere berezia","toolbar":"Txertatu karaktere berezia"},"scayt":{"btn_about":"SCAYTi buruz","btn_dictionaries":"Hiztegiak","btn_disable":"Desgaitu SCAYT","btn_enable":"Gaitu SCAYT","btn_langs":"Hizkuntzak","btn_options":"Aukerak","text_title":"Ortografia Zuzenketa Idatzi Ahala (SCAYT)"},"stylescombo":{"label":"Estiloak","panelTitle":"Formatu estiloak","panelTitle1":"Bloke estiloak","panelTitle2":"Lineako estiloak","panelTitle3":"Objektu estiloak"},"table":{"border":"Ertzaren zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu gelaxka aurretik","insertAfter":"Txertatu gelaxka ondoren","deleteCell":"Ezabatu gelaxkak","merge":"Batu gelaxkak","mergeRight":"Batu eskuinetara","mergeDown":"Batu behera","splitHorizontal":"Banatu gelaxka horizontalki","splitVertical":"Banatu gelaxka bertikalki","title":"Gelaxkaren propietateak","cellType":"Gelaxka-mota","rowSpan":"Errenkaden hedadura","colSpan":"Zutabeen hedadura","wordWrap":"Itzulbira","hAlign":"Lerrokatze horizontala","vAlign":"Lerrokatze bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Atzeko planoaren kolorea","borderColor":"Ertzaren kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Errenkaden hedadura zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedadura zenbaki osoa izan behar da.","chooseColor":"Aukeratu"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu zutabea aurretik","insertAfter":"Txertatu zutabea ondoren","deleteColumn":"Ezabatu zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen errenkada","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Errenkada kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen propietateak","row":{"menu":"Errenkada","insertBefore":"Txertatu errenkada aurretik","insertAfter":"Txertatu errenkada ondoren","deleteRow":"Ezabatu errenkadak"},"rows":"Errenkadak","summary":"Laburpena","title":"Taularen propietateak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"undo":{"redo":"Berregin","undo":"Desegin"},"widget":{"move":"Klikatu eta arrastatu lekuz aldatzeko","label":"%1 widget"},"uploadwidget":{"abort":"Karga erabiltzaileak bertan behera utzita.","doneOne":"Fitxategia behar bezala kargatu da.","doneMany":"Behar bezala kargatu dira %1 fitxategi.","uploadOne":"Fitxategia kargatzen ({percentage}%)...","uploadMany":"Fitxategiak kargatzen, {current} / {max} eginda ({percentage}%)..."},"wsc":{"btnIgnore":"Ezikusi","btnIgnoreAll":"Denak Ezikusi","btnReplace":"Ordezkatu","btnReplaceAll":"Denak Ordezkatu","btnUndo":"Desegin","changeTo":"Honekin ordezkatu","errorLoading":"Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.","ieSpellDownload":"Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?","manyChanges":"Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira","noChanges":"Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu","noMispell":"Zuzenketa ortografikoa bukatuta: Akatsik ez","noSuggestions":"- Iradokizunik ez -","notAvailable":"Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.","notInDic":"Ez dago hiztegian","oneChange":"Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da","progress":"Zuzenketa ortografikoa martxan...","title":"Ortografia zuzenketa","toolbar":"Ortografia"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/fa.js b/htdocs/includes/ckeditor/ckeditor/lang/fa.js deleted file mode 100644 index 269796fb972..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/fa.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['fa']={"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرست​نمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"چک‌باکس","radio":"دکمه‌ی رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد انتخاب چند گزینه​ای","imageButton":"دکمه‌ی تصویری","notSet":"<تعیین‌نشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"چپ به راست","langDirRtl":"راست به چپ","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"چپ به راست","langDirRTL":"راست به چپ","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","left":"چپ","right":"راست","center":"وسط","justify":"بلوک چین","alignLeft":"چپ چین","alignRight":"راست چین","alignCenter":"مرکز قرار بده","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری معتبر (\"%2\") باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1، غیر قابل دسترس","keyboard":{"8":"عقبگرد","13":"ورود","16":"تعویض","17":"کنترل","18":"دگرساز","32":"فاصله","35":"پایان","36":"خانه","46":"حذف","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فرمان"},"keyboardShortcut":"میانبر صفحه کلید","optionDefault":"پیش فرض"},"about":{"copy":"حق نشر © $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"bidi":{"ltr":"جهت متن از چپ به راست","rtl":"جهت متن از راست به چپ"},"blockquote":{"toolbar":"بلوک نقل قول"},"notification":{"closed":"آگاه‌سازی بسته شد"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"محل چسباندن","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"خودکار","bgColorTitle":"رنگ پس​زمینه","colors":{"000":"سیاه","800000":"خرمایی","8B4513":"قهوه​ای شکلاتی","2F4F4F":"ارغوانی مایل به خاکستری","008080":"آبی مایل به خاکستری","000080":"آبی سیر","4B0082":"نیلی","696969":"خاکستری تیره","B22222":"آتش آجری","A52A2A":"قهوه​ای","DAA520":"میله​ی طلایی","006400":"سبز تیره","40E0D0":"فیروزه​ای","0000CD":"آبی روشن","800080":"ارغوانی","808080":"خاکستری","F00":"قرمز","FF8C00":"نارنجی پررنگ","FFD700":"طلایی","008000":"سبز","0FF":"آبی مایل به سبز","00F":"آبی","EE82EE":"بنفش","A9A9A9":"خاکستری مات","FFA07A":"صورتی کدر روشن","FFA500":"نارنجی","FFFF00":"زرد","00FF00":"فسفری","AFEEEE":"فیروزه​ای رنگ پریده","ADD8E6":"آبی کمرنگ","DDA0DD":"آلویی","D3D3D3":"خاکستری روشن","FFF0F5":"بنفش کمرنگ","FAEBD7":"عتیقه سفید","FFFFE0":"زرد روشن","F0FFF0":"عسلی","F0FFFF":"لاجوردی","F0F8FF":"آبی براق","E6E6FA":"بنفش کمرنگ","FFF":"سفید","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"رنگ​های بیشتر...","panelTitle":"رنگها","textColorTitle":"رنگ متن"},"colordialog":{"clear":"پاک کردن","highlight":"متمایز","options":"گزینه​های رنگ","selected":"رنگ انتخاب شده","title":"انتخاب رنگ"},"templates":{"button":"الگوها","emptyListMsg":"(الگوئی تعریف نشده است)","insertOption":"محتویات کنونی جایگزین شوند","options":"گزینه‌های الگو","selectPromptMsg":"لطفاً الگوی مورد نظر را برای بازکردن در ویرایشگر انتخاب کنید","title":"الگوهای محتویات"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"شناسه","advisoryTitleInputLabel":"عنوان مشاوره","cssClassInputLabel":"کلاس​های شیوه​نامه","edit":"ویرایش Div","inlineStyleInputLabel":"سبک درون​خطی(Inline Style)","langDirLTRLabel":"چپ به راست (LTR)","langDirLabel":"جهت نوشتاری زبان","langDirRTLLabel":"راست به چپ (RTL)","languageCodeInputLabel":" کد زبان","remove":"حذف Div","styleSelectLabel":"سبک","title":"ایجاد یک محل DIV","toolbar":"ایجاد یک محل DIV"},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"filetools":{"loadError":"هنگام خواندن فایل، خطایی رخ داد.","networkError":"هنگام آپلود فایل خطای شبکه رخ داد.","httpError404":"هنگام آپلود فایل خطای HTTP رخ داد (404: فایل یافت نشد).","httpError403":"هنگام آپلود فایل، خطای HTTP رخ داد (403: ممنوع).","httpError":"خطای HTTP در آپلود فایل رخ داده است (وضعیت خطا: %1).","noUrlError":"آدرس آپلود تعریف نشده است.","responseError":"پاسخ نادرست سرور."},"find":{"find":"جستجو","findOptions":"گزینه​های جستجو","findWhat":"چه چیز را مییابید:","matchCase":"همسانی در بزرگی و کوچکی نویسه​ها","matchCyclic":"همسانی با چرخه","matchWord":"همسانی با واژهٴ کامل","notFoundMsg":"متن موردنظر یافت نشد.","replace":"جایگزینی","replaceAll":"جایگزینی همهٴ یافته​ها","replaceSuccessMsg":"%1 رخداد جایگزین شد.","replaceWith":"جایگزینی با:","title":"جستجو و جایگزینی"},"fakeobjects":{"anchor":"لنگر","flash":"انیمشن فلش","hiddenfield":"فیلد پنهان","iframe":"IFrame","unknown":"شیء ناشناخته"},"flash":{"access":"دسترسی به اسکریپت","accessAlways":"همیشه","accessNever":"هرگز","accessSameDomain":"همان دامنه","alignAbsBottom":"پائین مطلق","alignAbsMiddle":"وسط مطلق","alignBaseline":"خط پایه","alignTextTop":"متن بالا","bgcolor":"رنگ پس​زمینه","chkFull":"اجازه تمام صفحه","chkLoop":"اجرای پیاپی","chkMenu":"در دسترس بودن منوی فلش","chkPlay":"آغاز خودکار","flashvars":"مقادیر برای فلش","hSpace":"فاصلهٴ افقی","properties":"ویژگی​های فلش","propertiesTab":"ویژگی​ها","quality":"کیفیت","qualityAutoHigh":"بالا - خودکار","qualityAutoLow":"پایین - خودکار","qualityBest":"بهترین","qualityHigh":"بالا","qualityLow":"پایین","qualityMedium":"متوسط","scale":"مقیاس","scaleAll":"نمایش همه","scaleFit":"جایگیری کامل","scaleNoBorder":"بدون کران","title":"ویژگی​های فلش","vSpace":"فاصلهٴ عمودی","validateHSpace":"مقدار فاصله گذاری افقی باید یک عدد باشد.","validateSrc":"لطفا URL پیوند را بنویسید","validateVSpace":"مقدار فاصله گذاری عمودی باید یک عدد باشد.","windowMode":"حالت پنجره","windowModeOpaque":"مات","windowModeTransparent":"شفاف","windowModeWindow":"پنجره"},"font":{"fontSize":{"label":"اندازه","voiceLabel":"اندازه قلم","panelTitle":"اندازه قلم"},"label":"قلم","panelTitle":"نام قلم","voiceLabel":"قلم"},"forms":{"button":{"title":"ویژگی​‌های دکمه","text":"متن (مقدار)","type":"نوع","typeBtn":"دکمه","typeSbm":"ثبت","typeRst":"بازنشانی (Reset)"},"checkboxAndRadio":{"checkboxTitle":"ویژگی​های خانهٴ گزینه​ای","radioTitle":"ویژگی​های دکمهٴ رادیویی","value":"مقدار","selected":"برگزیده","required":"ضروری"},"form":{"title":"ویژگی‌​های فرم","menu":"ویژگی​‌های فرم","action":"رویداد","method":"متد","encoding":"رمزنگاری"},"hidden":{"title":"ویژگی‌​های فیلد پنهان","name":"نام","value":"مقدار"},"select":{"title":"ویژگی‌​های فیلد چندگزینه‌​ای","selectInfo":"اطلاعات","opAvail":"گزینه​های دردسترس","value":"مقدار","size":"اندازه","lines":"خطوط","chkMulti":"گزینش چندگانه فراهم باشد","required":"ضروری","opText":"متن","opValue":"مقدار","btnAdd":"افزودن","btnModify":"ویرایش","btnUp":"بالا","btnDown":"پائین","btnSetValue":"تنظیم به عنوان مقدار برگزیده","btnDelete":"پاک‌کردن"},"textarea":{"title":"ویژگی​های ناحیهٴ متنی","cols":"ستون​ها","rows":"سطرها"},"textfield":{"title":"ویژگی‌​های فیلد متنی","name":"نام","value":"مقدار","charWidth":"پهنای نویسه","maxChars":"حداکثر کارکتر","required":"ضروری","type":"نوع","typeText":"متن","typePass":"گذرواژه","typeEmail":"ایمیل","typeSearch":"جستجو","typeTel":"شماره تلفن","typeUrl":"URL"}},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس ۱","tag_h2":"سرنویس ۲","tag_h3":"سرنویس ۳","tag_h4":"سرنویس ۴","tag_h5":"سرنویس ۵","tag_h6":"سرنویس ۶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"iframe":{"border":"نمایش خطوط frame","noUrl":"لطفا مسیر URL iframe را درج کنید","scrolling":"نمایش خطکشها","title":"ویژگیهای IFrame","toolbar":"IFrame"},"image":{"alt":"متن جایگزین","border":"لبه","btnUpload":"به سرور بفرست","button2Img":"آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استفاده کنید؟","hSpace":"فاصلهٴ افقی","img2Button":"آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استفاده کنید؟","infoTab":"اطلاعات تصویر","linkTab":"پیوند","lockRatio":"قفل کردن نسبت","menu":"ویژگی​های تصویر","resetSize":"بازنشانی اندازه","title":"ویژگی​های تصویر","titleButton":"ویژگی​های دکمهٴ تصویری","upload":"انتقال به سرور","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","vSpace":"فاصلهٴ عمودی","validateBorder":"مقدار خطوط باید یک عدد باشد.","validateHSpace":"مقدار فاصله گذاری افقی باید یک عدد باشد.","validateVSpace":"مقدار فاصله گذاری عمودی باید یک عدد باشد."},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"smiley":{"options":"گزینه​های خندانک","title":"گنجاندن خندانک","toolbar":"خندانک"},"language":{"button":"تعیین زبان","remove":"حذف زبان"},"link":{"acccessKey":"کلید دستیابی","advanced":"پیشرفته","advisoryContentType":"نوع محتوای کمکی","advisoryTitle":"عنوان کمکی","anchor":{"toolbar":"گنجاندن/ویرایش لنگر","menu":"ویژگی​های لنگر","title":"ویژگی​های لنگر","name":"نام لنگر","errorName":"لطفا نام لنگر را بنویسید","remove":"حذف لنگر"},"anchorId":"با شناسهٴ المان","anchorName":"با نام لنگر","charset":"نویسه​گان منبع پیوند شده","cssClasses":"کلاس​های شیوه​نامه(Stylesheet)","download":"Force Download","displayText":"نمایش متن","emailAddress":"نشانی پست الکترونیکی","emailBody":"متن پیام","emailSubject":"موضوع پیام","id":"شناسه","info":"اطلاعات پیوند","langCode":"جهت​نمای زبان","langDir":"جهت​نمای زبان","langDirLTR":"چپ به راست (LTR)","langDirRTL":"راست به چپ (RTL)","menu":"ویرایش پیوند","name":"نام","noAnchors":"(در این سند لنگری دردسترس نیست)","noEmail":"لطفا نشانی پست الکترونیکی را بنویسید","noUrl":"لطفا URL پیوند را بنویسید","noTel":"Please type the phone number","other":"<سایر>","phoneNumber":"Phone number","popupDependent":"وابسته (Netscape)","popupFeatures":"ویژگی​های پنجرهٴ پاپاپ","popupFullScreen":"تمام صفحه (IE)","popupLeft":"موقعیت چپ","popupLocationBar":"نوار موقعیت","popupMenuBar":"نوار منو","popupResizable":"قابل تغییر اندازه","popupScrollBars":"میله​های پیمایش","popupStatusBar":"نوار وضعیت","popupToolbar":"نوار ابزار","popupTop":"موقعیت بالا","rel":"وابستگی","selectAnchor":"یک لنگر برگزینید","styles":"شیوه (style)","tabIndex":"نمایهٴ دسترسی با برگه","target":"مقصد","targetFrame":"<فریم>","targetFrameName":"نام فریم مقصد","targetPopup":"<پنجرهٴ پاپاپ>","targetPopupName":"نام پنجرهٴ پاپاپ","title":"پیوند","toAnchor":"لنگر در همین صفحه","toEmail":"پست الکترونیکی","toUrl":"URL","toPhone":"Phone","toolbar":"گنجاندن/ویرایش پیوند","type":"نوع پیوند","unlink":"برداشتن پیوند","upload":"انتقال به سرور"},"list":{"bulletedlist":"فهرست نقطه​ای","numberedlist":"فهرست شماره​دار"},"liststyle":{"bulletedTitle":"خصوصیات فهرست نقطه‌ای","circle":"دایره","decimal":"ده‌دهی (۱، ۲، ۳، ...)","disc":"صفحه گرد","lowerAlpha":"پانویس الفبایی (a, b, c, d, e, etc.)","lowerRoman":"پانویس رومی (i, ii, iii, iv, v, etc.)","none":"هیچ","notset":"<تنظیم نشده>","numberedTitle":"ویژگیهای فهرست شمارهدار","square":"چهارگوش","start":"شروع","type":"نوع","upperAlpha":"بالانویس الفبایی (A, B, C, D, E, etc.)","upperRoman":"بالانویس رومی (I, II, III, IV, V, etc.)","validateStartNumber":"فهرست شماره شروع باید یک عدد صحیح باشد."},"magicline":{"title":"قرار دادن بند در اینجا"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"newpage":{"toolbar":"برگهٴ تازه"},"pagebreak":{"alt":"شکستن صفحه","toolbar":"گنجاندن شکستگی پایان برگه"},"pastetext":{"button":"چسباندن به عنوان متن ساده","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"preview":{"preview":"پیشنمایش"},"print":{"toolbar":"چاپ"},"removeformat":{"toolbar":"برداشتن فرمت"},"save":{"toolbar":"ذخیره"},"selectall":{"toolbar":"گزینش همه"},"showblocks":{"toolbar":"نمایش بلوک‌ها"},"sourcearea":{"toolbar":"منبع"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"scayt":{"btn_about":"درباره SCAYT","btn_dictionaries":"دیکشنریها","btn_disable":"غیرفعالسازی SCAYT","btn_enable":"فعالسازی SCAYT","btn_langs":"زبانها","btn_options":"گزینهها","text_title":"بررسی املای تایپ شما"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"widget":{"move":"کلیک و کشیدن برای جابجایی","label":"ابزارک %1"},"uploadwidget":{"abort":"بارگذاری توسط کاربر لغو شد.","doneOne":"فایل با موفقیت بارگذاری شد.","doneMany":"%1 از فایل​ها با موفقیت بارگذاری شد.","uploadOne":"بارگذاری فایل ({percentage}%)...","uploadMany":"بارگذاری فایل​ها, {current} از {max} انجام شده ({percentage}%)..."},"wsc":{"btnIgnore":"چشمپوشی","btnIgnoreAll":"چشمپوشی همه","btnReplace":"جایگزینی","btnReplaceAll":"جایگزینی همه","btnUndo":"واچینش","changeTo":"تغییر به","errorLoading":"خطا در بارگیری برنامه خدمات میزبان: %s.","ieSpellDownload":"بررسی کنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟","manyChanges":"بررسی املا انجام شد. %1 واژه تغییر یافت","noChanges":"بررسی املا انجام شد. هیچ واژهای تغییر نیافت","noMispell":"بررسی املا انجام شد. هیچ غلط املائی یافت نشد","noSuggestions":"- پیشنهادی نیست -","notAvailable":"با عرض پوزش خدمات الان در دسترس نیستند.","notInDic":"در واژه~نامه یافت نشد","oneChange":"بررسی املا انجام شد. یک واژه تغییر یافت","progress":"بررسی املا در حال انجام...","title":"بررسی املا","toolbar":"بررسی املا"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/fi.js b/htdocs/includes/ckeditor/ckeditor/lang/fi.js deleted file mode 100644 index 597cdbb2c8d..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/fi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['fi']={"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","left":"Vasemmalle","right":"Oikealle","center":"Keskelle","justify":"Tasaa molemmat reunat","alignLeft":"Tasaa vasemmat reunat","alignRight":"Tasaa oikeat reunat","alignCenter":"Align Center","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1, ei saatavissa","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"bidi":{"ltr":"Tekstin suunta vasemmalta oikealle","rtl":"Tekstin suunta oikealta vasemmalle"},"blockquote":{"toolbar":"Lainaus"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Leikealue","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automaattinen","bgColorTitle":"Taustaväri","colors":{"000":"Musta","800000":"Kastanjanruskea","8B4513":"Satulanruskea","2F4F4F":"Tumma liuskekivenharmaa","008080":"Sinivihreä","000080":"Laivastonsininen","4B0082":"Indigonsininen","696969":"Tummanharmaa","B22222":"Tiili","A52A2A":"Ruskea","DAA520":"Kultapiisku","006400":"Tummanvihreä","40E0D0":"Turkoosi","0000CD":"Keskisininen","800080":"Purppura","808080":"Harmaa","F00":"Punainen","FF8C00":"Tumma oranssi","FFD700":"Kulta","008000":"Vihreä","0FF":"Syaani","00F":"Sininen","EE82EE":"Violetti","A9A9A9":"Tummanharmaa","FFA07A":"Vaaleanlohenpunainen","FFA500":"Oranssi","FFFF00":"Keltainen","00FF00":"Limetin vihreä","AFEEEE":"Haalea turkoosi","ADD8E6":"Vaaleansininen","DDA0DD":"Luumu","D3D3D3":"Vaaleanharmaa","FFF0F5":"Laventelinpunainen","FAEBD7":"Antiikinvalkoinen","FFFFE0":"Vaaleankeltainen","F0FFF0":"Hunajameloni","F0FFFF":"Asurinsininen","F0F8FF":"Alice Blue -sininen","E6E6FA":"Lavanteli","FFF":"Valkoinen","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Lisää värejä...","panelTitle":"Värit","textColorTitle":"Tekstiväri"},"colordialog":{"clear":"Poista","highlight":"Korostus","options":"Värin ominaisuudet","selected":"Valittu","title":"Valitse väri"},"templates":{"button":"Pohjat","emptyListMsg":"(Ei määriteltyjä pohjia)","insertOption":"Korvaa koko sisältö","options":"Sisältöpohjan ominaisuudet","selectPromptMsg":"Valitse editoriin avattava pohja","title":"Sisältöpohjat"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Ohjeistava otsikko","cssClassInputLabel":"Tyylitiedoston luokat","edit":"Muokkaa Diviä","inlineStyleInputLabel":"Sisätyyli","langDirLTRLabel":"Vasemmalta oikealle (LTR)","langDirLabel":"Kielen suunta","langDirRTLLabel":"Oikealta vasemmalle (RTL)","languageCodeInputLabel":" Kielen koodi","remove":"Poista Div","styleSelectLabel":"Tyyli","title":"Luo div-kehikko","toolbar":"Luo div-kehikko"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Etsi","findOptions":"Hakuasetukset","findWhat":"Etsi mitä:","matchCase":"Sama kirjainkoko","matchCyclic":"Kierrä ympäri","matchWord":"Koko sana","notFoundMsg":"Etsittyä tekstiä ei löytynyt.","replace":"Korvaa","replaceAll":"Korvaa kaikki","replaceSuccessMsg":"%1 esiintymä(ä) korvattu.","replaceWith":"Korvaa tällä:","title":"Etsi ja korvaa"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"flash":{"access":"Skriptien pääsy","accessAlways":"Aina","accessNever":"Ei koskaan","accessSameDomain":"Sama verkkotunnus","alignAbsBottom":"Aivan alas","alignAbsMiddle":"Aivan keskelle","alignBaseline":"Alas (teksti)","alignTextTop":"Ylös (teksti)","bgcolor":"Taustaväri","chkFull":"Salli kokoruututila","chkLoop":"Toisto","chkMenu":"Näytä Flash-valikko","chkPlay":"Automaattinen käynnistys","flashvars":"Muuttujat Flash:lle","hSpace":"Vaakatila","properties":"Flash-ominaisuudet","propertiesTab":"Ominaisuudet","quality":"Laatu","qualityAutoHigh":"Automaattinen korkea","qualityAutoLow":"Automaattinen matala","qualityBest":"Paras","qualityHigh":"Korkea","qualityLow":"Matala","qualityMedium":"Keskitaso","scale":"Levitä","scaleAll":"Näytä kaikki","scaleFit":"Tarkka koko","scaleNoBorder":"Ei rajaa","title":"Flash ominaisuudet","vSpace":"Pystytila","validateHSpace":"Vaakatilan täytyy olla numero.","validateSrc":"Linkille on kirjoitettava URL","validateVSpace":"Pystytilan täytyy olla numero.","windowMode":"Ikkuna tila","windowModeOpaque":"Läpinäkyvyys","windowModeTransparent":"Läpinäkyvä","windowModeWindow":"Ikkuna"},"font":{"fontSize":{"label":"Koko","voiceLabel":"Kirjaisimen koko","panelTitle":"Koko"},"label":"Kirjaisinlaji","panelTitle":"Kirjaisinlaji","voiceLabel":"Kirjaisinlaji"},"forms":{"button":{"title":"Painikkeen ominaisuudet","text":"Teksti (arvo)","type":"Tyyppi","typeBtn":"Painike","typeSbm":"Lähetä","typeRst":"Tyhjennä"},"checkboxAndRadio":{"checkboxTitle":"Valintaruudun ominaisuudet","radioTitle":"Radiopainikkeen ominaisuudet","value":"Arvo","selected":"Valittu","required":"Required"},"form":{"title":"Lomakkeen ominaisuudet","menu":"Lomakkeen ominaisuudet","action":"Toiminto","method":"Tapa","encoding":"Enkoodaus"},"hidden":{"title":"Piilokentän ominaisuudet","name":"Nimi","value":"Arvo"},"select":{"title":"Valintakentän ominaisuudet","selectInfo":"Info","opAvail":"Ominaisuudet","value":"Arvo","size":"Koko","lines":"Rivit","chkMulti":"Salli usea valinta","required":"Required","opText":"Teksti","opValue":"Arvo","btnAdd":"Lisää","btnModify":"Muuta","btnUp":"Ylös","btnDown":"Alas","btnSetValue":"Aseta valituksi","btnDelete":"Poista"},"textarea":{"title":"Tekstilaatikon ominaisuudet","cols":"Sarakkeita","rows":"Rivejä"},"textfield":{"title":"Tekstikentän ominaisuudet","name":"Nimi","value":"Arvo","charWidth":"Leveys","maxChars":"Maksimi merkkimäärä","required":"Required","type":"Tyyppi","typeText":"Teksti","typePass":"Salasana","typeEmail":"Sähköposti","typeSearch":"Haku","typeTel":"Puhelinnumero","typeUrl":"Osoite"}},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"iframe":{"border":"Näytä kehyksen reunat","noUrl":"Anna IFrame-kehykselle lähdeosoite (src)","scrolling":"Näytä vierityspalkit","title":"IFrame-kehyksen ominaisuudet","toolbar":"IFrame-kehys"},"image":{"alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"smiley":{"options":"Hymiön ominaisuudet","title":"Lisää hymiö","toolbar":"Hymiö"},"language":{"button":"Aseta kieli","remove":"Poista kieli"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","download":"Force Download","displayText":"Display Text","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"","targetFrameName":"Kohdekehyksen nimi","targetPopup":"","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toPhone":"Phone","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"liststyle":{"bulletedTitle":"Numeroimattoman listan ominaisuudet","circle":"Ympyrä","decimal":"Desimaalit (1, 2, 3, jne.)","disc":"Levy","lowerAlpha":"Pienet aakkoset (a, b, c, d, e, jne.)","lowerRoman":"Pienet roomalaiset (i, ii, iii, iv, v, jne.)","none":"Ei mikään","notset":"","numberedTitle":"Numeroidun listan ominaisuudet","square":"Neliö","start":"Alku","type":"Tyyppi","upperAlpha":"Isot aakkoset (A, B, C, D, E, jne.)","upperRoman":"Isot roomalaiset (I, II, III, IV, V, jne.)","validateStartNumber":"Listan ensimmäisen numeron tulee olla kokonaisluku."},"magicline":{"title":"Lisää kappale tähän."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"newpage":{"toolbar":"Tyhjennä"},"pagebreak":{"alt":"Sivunvaihto","toolbar":"Lisää sivunvaihto"},"pastetext":{"button":"Liitä tekstinä","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"preview":{"preview":"Esikatsele"},"print":{"toolbar":"Tulosta"},"removeformat":{"toolbar":"Poista muotoilu"},"save":{"toolbar":"Tallenna"},"selectall":{"toolbar":"Valitse kaikki"},"showblocks":{"toolbar":"Näytä elementit"},"sourcearea":{"toolbar":"Koodi"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"scayt":{"btn_about":"Tietoja oikoluvusta kirjoitetaessa","btn_dictionaries":"Sanakirjat","btn_disable":"Poista käytöstä oikoluku kirjoitetaessa","btn_enable":"Ota käyttöön oikoluku kirjoitettaessa","btn_langs":"Kielet","btn_options":"Asetukset","text_title":"Oikolue kirjoitettaessa"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"undo":{"redo":"Toista","undo":"Kumoa"},"widget":{"move":"Siirrä klikkaamalla ja raahaamalla","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Jätä huomioimatta","btnIgnoreAll":"Jätä kaikki huomioimatta","btnReplace":"Korvaa","btnReplaceAll":"Korvaa kaikki","btnUndo":"Kumoa","changeTo":"Vaihda","errorLoading":"Virhe ladattaessa oikolukupalvelua isännältä: %s.","ieSpellDownload":"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?","manyChanges":"Tarkistus valmis: %1 sanaa muutettiin","noChanges":"Tarkistus valmis: Yhtään sanaa ei muutettu","noMispell":"Tarkistus valmis: Ei virheitä","noSuggestions":"Ei ehdotuksia","notAvailable":"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.","notInDic":"Ei sanakirjassa","oneChange":"Tarkistus valmis: Yksi sana muutettiin","progress":"Tarkistus käynnissä...","title":"Oikoluku","toolbar":"Tarkista oikeinkirjoitus"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/fo.js b/htdocs/includes/ckeditor/ckeditor/lang/fo.js deleted file mode 100644 index 48c8bb63998..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/fo.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['fo']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýs","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","left":"Vinstra","right":"Høgra","center":"Miðsett","justify":"Javnir tekstkantar","alignLeft":"Vinstrasett","alignRight":"Høgrasett","alignCenter":"Align Center","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"Eingin","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1, ikki tøkt","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"Um CKEditor 4","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"bidi":{"ltr":"Tekstkós frá vinstru til høgru","rtl":"Tekstkós frá høgru til vinstru"},"blockquote":{"toolbar":"Blockquote"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Avritingarumráði","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatiskt","bgColorTitle":"Bakgrundslitur","colors":{"000":"Svart","800000":"Maroon","8B4513":"Saðilsbrúnt","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Myrkagrátt","B22222":"Fire Brick","A52A2A":"Brúnt","DAA520":"Gullstavur","006400":"Myrkagrønt","40E0D0":"Turquoise","0000CD":"Meðal blátt","800080":"Purple","808080":"Grátt","F00":"Reytt","FF8C00":"Myrkt appelsingult","FFD700":"Gull","008000":"Grønt","0FF":"Cyan","00F":"Blátt","EE82EE":"Violet","A9A9A9":"Døkt grátt","FFA07A":"Ljósur laksur","FFA500":"Appelsingult","FFFF00":"Gult","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Ljósablátt","DDA0DD":"Plum","D3D3D3":"Ljósagrátt","FFF0F5":"Lavender Blush","FAEBD7":"Klassiskt hvítt","FFFFE0":"Ljósagult","F0FFF0":"Hunangsdøggur","F0FFFF":"Azure","F0F8FF":"Alice Blátt","E6E6FA":"Lavender","FFF":"Hvítt","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Fleiri litir...","panelTitle":"Litir","textColorTitle":"Tekstlitur"},"colordialog":{"clear":"Strika","highlight":"Framheva","options":"Litmøguleikar","selected":"Valdur litur","title":"Vel lit"},"templates":{"button":"Skabelónir","emptyListMsg":"(Ongar skabelónir tøkar)","insertOption":"Yvirskriva núverandi innihald","options":"Møguleikar fyri Template","selectPromptMsg":"Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum
(Hetta yvirskrivar núverandi innihald):","title":"Innihaldsskabelónir"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Redigera Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Vinstru til høgru (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Høgru til vinstru (RTL)","languageCodeInputLabel":" Language Code","remove":"Strika Div","styleSelectLabel":"Style","title":"Ger Div Container","toolbar":"Ger Div Container"},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Leita","findOptions":"Finn møguleikar","findWhat":"Finn:","matchCase":"Munur á stórum og smáum bókstavum","matchCyclic":"Match cyclic","matchWord":"Bert heil orð","notFoundMsg":"Leititeksturin varð ikki funnin","replace":"Yvirskriva","replaceAll":"Yvirskriva alt","replaceSuccessMsg":"%1 úrslit broytt.","replaceWith":"Yvirskriva við:","title":"Finn og broyt"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Fjaldur teigur","iframe":"IFrame","unknown":"Ókent Object"},"flash":{"access":"Script atgongd","accessAlways":"Altíð","accessNever":"Ongantíð","accessSameDomain":"Sama navnaøki","alignAbsBottom":"Abs botnur","alignAbsMiddle":"Abs miðja","alignBaseline":"Basislinja","alignTextTop":"Tekst toppur","bgcolor":"Bakgrundslitur","chkFull":"Loyv fullan skerm","chkLoop":"Endurspæl","chkMenu":"Ger Flash skrá virkna","chkPlay":"Avspælingin byrjar sjálv","flashvars":"Variablar fyri Flash","hSpace":"Høgri breddi","properties":"Flash eginleikar","propertiesTab":"Eginleikar","quality":"Góðska","qualityAutoHigh":"Auto høg","qualityAutoLow":"Auto Lág","qualityBest":"Besta","qualityHigh":"Høg","qualityLow":"Lág","qualityMedium":"Meðal","scale":"Skalering","scaleAll":"Vís alt","scaleFit":"Neyv skalering","scaleNoBorder":"Eingin bordi","title":"Flash eginleikar","vSpace":"Vinstri breddi","validateHSpace":"HSpace má vera eitt tal.","validateSrc":"Vinarliga skriva tilknýti (URL)","validateVSpace":"VSpace má vera eitt tal.","windowMode":"Slag av rúti","windowModeOpaque":"Ikki transparent","windowModeTransparent":"Transparent","windowModeWindow":"Rútur"},"font":{"fontSize":{"label":"Skriftstødd","voiceLabel":"Skriftstødd","panelTitle":"Skriftstødd"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Skrift"},"forms":{"button":{"title":"Eginleikar fyri knøtt","text":"Tekstur","type":"Slag","typeBtn":"Knøttur","typeSbm":"Send","typeRst":"Nullstilla"},"checkboxAndRadio":{"checkboxTitle":"Eginleikar fyri flugubein","radioTitle":"Eginleikar fyri radioknøtt","value":"Virði","selected":"Valt","required":"Required"},"form":{"title":"Eginleikar fyri Form","menu":"Eginleikar fyri Form","action":"Hending","method":"Háttur","encoding":"Encoding"},"hidden":{"title":"Eginleikar fyri fjaldan teig","name":"Navn","value":"Virði"},"select":{"title":"Eginleikar fyri valskrá","selectInfo":"Upplýsingar","opAvail":"Tøkir møguleikar","value":"Virði","size":"Stødd","lines":"Linjur","chkMulti":"Loyv fleiri valmøguleikum samstundis","required":"Required","opText":"Tekstur","opValue":"Virði","btnAdd":"Legg afturat","btnModify":"Broyt","btnUp":"Upp","btnDown":"Niður","btnSetValue":"Set sum valt virði","btnDelete":"Strika"},"textarea":{"title":"Eginleikar fyri tekstumráði","cols":"kolonnur","rows":"røðir"},"textfield":{"title":"Eginleikar fyri tekstteig","name":"Navn","value":"Virði","charWidth":"Breidd (sjónlig tekn)","maxChars":"Mest loyvdu tekn","required":"Required","type":"Slag","typeText":"Tekstur","typePass":"Loyniorð","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"iframe":{"border":"Vís frame kant","noUrl":"Vinarliga skriva URL til iframe","scrolling":"Loyv scrollbars","title":"Møguleikar fyri IFrame","toolbar":"IFrame"},"image":{"alt":"Alternativur tekstur","border":"Bordi","btnUpload":"Send til ambætaran","button2Img":"Skal valdi myndaknøttur gerast til vanliga mynd?","hSpace":"Høgri breddi","img2Button":"Skal valda mynd gerast til myndaknøtt?","infoTab":"Myndaupplýsingar","linkTab":"Tilknýti","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","resetSize":"Upprunastødd","title":"Myndaeginleikar","titleButton":"Eginleikar fyri myndaknøtt","upload":"Send","urlMissing":"URL til mynd manglar.","vSpace":"Vinstri breddi","validateBorder":"Bordi má vera eitt heiltal.","validateHSpace":"HSpace má vera eitt heiltal.","validateVSpace":"VSpace má vera eitt heiltal."},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"smiley":{"options":"Møguleikar fyri Smiley","title":"Vel Smiley","toolbar":"Smiley"},"language":{"button":"Velja tungumál","remove":"Remove language"},"link":{"acccessKey":"Snarvegisknöttur","advanced":"Fjølbroytt","advisoryContentType":"Vegleiðandi innihaldsslag","advisoryTitle":"Vegleiðandi heiti","anchor":{"toolbar":"Ger/broyt marknastein","menu":"Eginleikar fyri marknastein","title":"Eginleikar fyri marknastein","name":"Heiti marknasteinsins","errorName":"Vinarliga rita marknasteinsins heiti","remove":"Strika marknastein"},"anchorId":"Eftir element Id","anchorName":"Eftir navni á marknasteini","charset":"Atknýtt teknsett","cssClasses":"Typografi klassar","download":"Force Download","displayText":"Display Text","emailAddress":"Teldupost-adressa","emailBody":"Breyðtekstur","emailSubject":"Evni","id":"Id","info":"Tilknýtis upplýsingar","langCode":"Tekstkós","langDir":"Tekstkós","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","menu":"Broyt tilknýti","name":"Navn","noAnchors":"(Eingir marknasteinar eru í hesum dokumentið)","noEmail":"Vinarliga skriva teldupost-adressu","noUrl":"Vinarliga skriva tilknýti (URL)","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Bundið (Netscape)","popupFeatures":"Popup vindeygans víðkaðu eginleikar","popupFullScreen":"Fullur skermur (IE)","popupLeft":"Frástøða frá vinstru","popupLocationBar":"Adressulinja","popupMenuBar":"Skrábjálki","popupResizable":"Stødd kann broytast","popupScrollBars":"Rullibjálki","popupStatusBar":"Støðufrágreiðingarbjálki","popupToolbar":"Amboðsbjálki","popupTop":"Frástøða frá íerva","rel":"Relatión","selectAnchor":"Vel ein marknastein","styles":"Typografi","tabIndex":"Tabulator indeks","target":"Target","targetFrame":"","targetFrameName":"Vís navn vindeygans","targetPopup":"","targetPopupName":"Popup vindeygans navn","title":"Tilknýti","toAnchor":"Tilknýti til marknastein í tekstinum","toEmail":"Teldupostur","toUrl":"URL","toPhone":"Phone","toolbar":"Ger/broyt tilknýti","type":"Tilknýtisslag","unlink":"Strika tilknýti","upload":"Send til ambætaran"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"liststyle":{"bulletedTitle":"Eginleikar fyri lista við prikkum","circle":"Sirkul","decimal":"Vanlig tøl (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lítlir bókstavir (a, b, c, d, e, etc.)","lowerRoman":"Lítil rómaratøl (i, ii, iii, iv, v, etc.)","none":"Einki","notset":"","numberedTitle":"Eginleikar fyri lista við tølum","square":"Fýrkantur","start":"Byrjan","type":"Slag","upperAlpha":"Stórir bókstavir (A, B, C, D, E, etc.)","upperRoman":"Stór rómaratøl (I, II, III, IV, V, etc.)","validateStartNumber":"Byrjunartalið fyri lista má vera eitt heiltal."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"newpage":{"toolbar":"Nýggj síða"},"pagebreak":{"alt":"Síðuskift","toolbar":"Ger síðuskift"},"pastetext":{"button":"Innrita som reinan tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Innrita som reinan tekst"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"preview":{"preview":"Frumsýning"},"print":{"toolbar":"Prenta"},"removeformat":{"toolbar":"Strika sniðgeving"},"save":{"toolbar":"Goym"},"selectall":{"toolbar":"Markera alt"},"showblocks":{"toolbar":"Vís blokkar"},"sourcearea":{"toolbar":"Kelda"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"scayt":{"btn_about":"Um SCAYT","btn_dictionaries":"Orðabøkur","btn_disable":"Nokta SCAYT","btn_enable":"Loyv SCAYT","btn_langs":"Tungumál","btn_options":"Uppseting","text_title":"Kanna stavseting, meðan tú skrivar"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"undo":{"redo":"Vend aftur","undo":"Angra"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Forfjóna","btnIgnoreAll":"Forfjóna alt","btnReplace":"Yvirskriva","btnReplaceAll":"Yvirskriva alt","btnUndo":"Angra","changeTo":"Broyt til","errorLoading":"Feilur við innlesing av application service host: %s.","ieSpellDownload":"Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?","manyChanges":"Rættstavarin liðugur: %1 orð broytt","noChanges":"Rættstavarin liðugur: Einki orð varð broytt","noMispell":"Rættstavarin liðugur: Eingin feilur funnin","noSuggestions":"- Einki uppskot -","notAvailable":"Tíverri, ikki tøkt í løtuni.","notInDic":"Finst ikki í orðabókini","oneChange":"Rættstavarin liðugur: Eitt orð er broytt","progress":"Rættstavarin arbeiðir...","title":"Kanna stavseting","toolbar":"Kanna stavseting"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/fr-ca.js b/htdocs/includes/ckeditor/ckeditor/lang/fr-ca.js deleted file mode 100644 index 73877880d31..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/fr-ca.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['fr-ca']={"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centré","justify":"Justifié","alignLeft":"Aligner à gauche","alignRight":"Aligner à Droite","alignCenter":"Align Center","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1, indisponible","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, consulter notre site internet:"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"bidi":{"ltr":"Direction du texte de gauche à droite","rtl":"Direction du texte de droite à gauche"},"blockquote":{"toolbar":"Citation"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Coller la zone","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur de fond","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun foncé","2F4F4F":"Gris ardoise foncé","008080":"Sarcelle","000080":"Marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Doré","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu","800080":"Mauve","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris pâle","FFA07A":"Saumon clair","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Vert lime","AFEEEE":"Turquoise pâle","ADD8E6":"Bleu pâle","DDA0DD":"Prune","D3D3D3":"Gris pâle","FFF0F5":"Bleu lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune pâle","F0FFF0":"Miel doré","F0FFFF":"Azure","F0F8FF":"Bleu alice","E6E6FA":"Lavande","FFF":"Blanc","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur de texte"},"colordialog":{"clear":"Effacer","highlight":"Surligner","options":"Options de couleur","selected":"Couleur sélectionnée","title":"Choisir une couleur"},"templates":{"button":"Modèles","emptyListMsg":"(Aucun modèle disponible)","insertOption":"Remplacer tout le contenu actuel","options":"Options de modèles","selectPromptMsg":"Sélectionner le modèle à ouvrir dans l'éditeur","title":"Modèles de contenu"},"contextmenu":{"options":"Options du menu contextuel"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Titre","cssClassInputLabel":"Classes CSS","edit":"Modifier le DIV","inlineStyleInputLabel":"Style en ligne","langDirLTRLabel":"De gauche à droite (LTR)","langDirLabel":"Sens d'écriture","langDirRTLLabel":"De droite à gauche (RTL)","languageCodeInputLabel":"Code de langue","remove":"Supprimer le DIV","styleSelectLabel":"Style","title":"Créer un DIV","toolbar":"Créer un DIV"},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Rechercher","findOptions":"Options de recherche","findWhat":"Rechercher:","matchCase":"Respecter la casse","matchCyclic":"Recherche cyclique","matchWord":"Mot entier","notFoundMsg":"Le texte indiqué est introuvable.","replace":"Remplacer","replaceAll":"Tout remplacer","replaceSuccessMsg":"%1 remplacements.","replaceWith":"Remplacer par:","title":"Rechercher et remplacer"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"flash":{"access":"Accès au script","accessAlways":"Toujours","accessNever":"Jamais","accessSameDomain":"Même domaine","alignAbsBottom":"Bas absolu","alignAbsMiddle":"Milieu absolu","alignBaseline":"Bas du texte","alignTextTop":"Haut du texte","bgcolor":"Couleur de fond","chkFull":"Permettre le plein-écran","chkLoop":"Boucle","chkMenu":"Activer le menu Flash","chkPlay":"Lecture automatique","flashvars":"Variables pour Flash","hSpace":"Espacement horizontal","properties":"Propriétés de l'animation Flash","propertiesTab":"Propriétés","quality":"Qualité","qualityAutoHigh":"Haute auto","qualityAutoLow":"Basse auto","qualityBest":"Meilleur","qualityHigh":"Haute","qualityLow":"Basse","qualityMedium":"Moyenne","scale":"Échelle","scaleAll":"Afficher tout","scaleFit":"Ajuster aux dimensions","scaleNoBorder":"Sans bordure","title":"Propriétés de l'animation Flash","vSpace":"Espacement vertical","validateHSpace":"L'espacement horizontal doit être un entier.","validateSrc":"Veuillez saisir l'URL","validateVSpace":"L'espacement vertical doit être un entier.","windowMode":"Mode de fenêtre","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fenêtre"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille","panelTitle":"Taille"},"label":"Police","panelTitle":"Police","voiceLabel":"Police"},"forms":{"button":{"title":"Propriétés du bouton","text":"Texte (Valeur)","type":"Type","typeBtn":"Bouton","typeSbm":"Soumettre","typeRst":"Réinitialiser"},"checkboxAndRadio":{"checkboxTitle":"Propriétés de la case à cocher","radioTitle":"Propriétés du bouton radio","value":"Valeur","selected":"Sélectionné","required":"Required"},"form":{"title":"Propriétés du formulaire","menu":"Propriétés du formulaire","action":"Action","method":"Méthode","encoding":"Encodage"},"hidden":{"title":"Propriétés du champ caché","name":"Nom","value":"Valeur"},"select":{"title":"Propriétés du champ de sélection","selectInfo":"Info","opAvail":"Options disponibles","value":"Valeur","size":"Taille","lines":"lignes","chkMulti":"Permettre les sélections multiples","required":"Required","opText":"Texte","opValue":"Valeur","btnAdd":"Ajouter","btnModify":"Modifier","btnUp":"Monter","btnDown":"Descendre","btnSetValue":"Valeur sélectionnée","btnDelete":"Supprimer"},"textarea":{"title":"Propriétés de la zone de texte","cols":"Colonnes","rows":"Lignes"},"textfield":{"title":"Propriétés du champ texte","name":"Nom","value":"Valeur","charWidth":"Largeur de caractères","maxChars":"Nombre maximum de caractères","required":"Required","type":"Type","typeText":"Texte","typePass":"Mot de passe","typeEmail":"Courriel","typeSearch":"Recherche","typeTel":"Numéro de téléphone","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"iframe":{"border":"Afficher la bordure du cadre","noUrl":"Veuillez entre l'URL du IFrame","scrolling":"Activer les barres de défilement","title":"Propriétés du IFrame","toolbar":"IFrame"},"image":{"alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Désirez-vous transformer l'image sélectionnée en image simple?","hSpace":"Espacement horizontal","img2Button":"Désirez-vous transformer l'image sélectionnée en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image","resetSize":"Taille originale","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un entier.","validateHSpace":"L'espacement horizontal doit être un entier.","validateVSpace":"L'espacement vertical doit être un entier."},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"smiley":{"options":"Options d'émoticônes","title":"Insérer un émoticône","toolbar":"Émoticône"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu","advisoryTitle":"Description","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez saisir le nom de l'ancre","remove":"Supprimer l'ancre"},"anchorId":"Par ID","anchorName":"Par nom","charset":"Encodage de la cible","cssClasses":"Classes CSS","download":"Force Download","displayText":"Afficher le texte","emailAddress":"Courriel","emailBody":"Corps du message","emailSubject":"Objet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Pas d'ancre disponible dans le document)","noEmail":"Veuillez saisir le courriel","noUrl":"Veuillez saisir l'URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position de la gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"Position à partir du haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Ordre de tabulation","target":"Destination","targetFrame":"","targetFrameName":"Nom du cadre de destination","targetPopup":"","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Ancre dans cette page","toEmail":"Courriel","toUrl":"URL","toPhone":"Phone","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"liststyle":{"bulletedTitle":"Propriété de liste à puce","circle":"Cercle","decimal":"Décimal (1, 2, 3, etc.)","disc":"Disque","lowerAlpha":"Alphabétique minuscule (a, b, c, d, e, etc.)","lowerRoman":"Romain minuscule (i, ii, iii, iv, v, etc.)","none":"Aucun","notset":"","numberedTitle":"Propriété de la liste numérotée","square":"Carré","start":"Début","type":"Type","upperAlpha":"Alphabétique majuscule (A, B, C, D, E, etc.)","upperRoman":"Romain Majuscule (I, II, III, IV, V, etc.)","validateStartNumber":"Le numéro de début de liste doit être un entier."},"magicline":{"title":"Insérer le paragraphe ici"},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"newpage":{"toolbar":"Nouvelle page"},"pagebreak":{"alt":"Saut de page","toolbar":"Insérer un saut de page à l'impression"},"pastetext":{"button":"Coller comme texte","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"preview":{"preview":"Prévisualiser"},"print":{"toolbar":"Imprimer"},"removeformat":{"toolbar":"Supprimer le formatage"},"save":{"toolbar":"Sauvegarder"},"selectall":{"toolbar":"Sélectionner tout"},"showblocks":{"toolbar":"Afficher les blocs"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de cellule doit être un nombre.","invalidHeight":"La hauteur de cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"undo":{"redo":"Refaire","undo":"Annuler"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Changer en","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?","manyChanges":"Vérification d'orthographe terminée: %1 mots modifiés","noChanges":"Vérification d'orthographe terminée: Pas de modifications","noMispell":"Vérification d'orthographe terminée: pas d'erreur trouvée","noSuggestions":"- Pas de suggestion -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Pas dans le dictionnaire","oneChange":"Vérification d'orthographe terminée: Un mot modifié","progress":"Vérification d'orthographe en cours...","title":"Spell Checker","toolbar":"Orthographe"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/fr.js b/htdocs/includes/ckeditor/ckeditor/lang/fr.js index 6019fb8bee1..b97bb6372d8 100644 --- a/htdocs/includes/ckeditor/ckeditor/lang/fr.js +++ b/htdocs/includes/ckeditor/ckeditor/lang/fr.js @@ -2,4 +2,4 @@ Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/license */ -CKEDITOR.lang['fr']={"editor":"Éditeur de texte enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Utilisez le raccourci Alt-0 pour obtenir de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Télécharger","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ invisible","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton avec image","notSet":"","id":"ID","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue","cssClass":"Classes de style","advisoryTitle":"Infobulle","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page ?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer ?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à droite (LTR)","langDirRTL":"Droite à gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centrer","justify":"Justifier","alignLeft":"Aligner à gauche","alignRight":"Aligner à droite","alignCenter":"Aligner au centre","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"La valeur de \"%1\" doit être un nombre positif avec ou sans unité de mesure (%2).","invalidCssLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style en ligne doit être composée d'un ou plusieurs couples au format « nom : valeur », séparés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1, indisponible","keyboard":{"8":"Retour arrière","13":"Entrée","16":"Majuscule","17":"Ctrl","18":"Alt","32":"Espace","35":"Fin","36":"Origine","46":"Supprimer","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Commande"},"keyboardShortcut":"Raccourci clavier","optionDefault":"Par défaut"},"about":{"copy":"Copyright © $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, veuillez visiter notre site web :"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"bidi":{"ltr":"Direction du texte de la gauche vers la droite","rtl":"Direction du texte de la droite vers la gauche"},"blockquote":{"toolbar":"Citation"},"notification":{"closed":"Notification fermée."},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barres d'outils de l'éditeur"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","pasteArea":"Coller la zone","pasteMsg":"Collez votre contenu dans la zone de saisie ci-dessous et cliquez OK."},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur d'arrière-plan","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun de selle","2F4F4F":"Gris sombre d'ardoise","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal","800080":"Violet","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris tamisé","FFA07A":"Saumon clair","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Lime","AFEEEE":"Turquoise clair","ADD8E6":"Bleu clair","DDA0DD":"Prune","D3D3D3":"Gris clair","FFF0F5":"Fard lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune clair","F0FFF0":"Vert rosée","F0FFFF":"Azur","F0F8FF":"Bleu Alice","E6E6FA":"Lavande","FFF":"Blanc","1ABC9C":"Cyan dur","2ECC71":"Émeraude","3498DB":"Bleu brillant","9B59B6":"Améthyste","4E5F70":"Bleu-gris","F1C40F":"Jaune vif","16A085":"Cyan foncé","27AE60":"Émeraude foncée","2980B9":"Bleu dur","8E44AD":"Violet foncé","2C3E50":"Bleu désaturé","F39C12":"Orange","E67E22":"Carotte","E74C3C":"Rouge pâle","ECF0F1":"Argent brillant","95A5A6":"Cyan-gris clair","DDD":"Gris clair","D35400":"Citrouille","C0392B":"Rouge dur","BDC3C7":"Argent","7F8C8D":"Cyan-gris","999":"Gris foncé"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur du texte"},"colordialog":{"clear":"Effacer","highlight":"Pointée","options":"Options de couleur","selected":"Couleur choisie","title":"Sélectionner une couleur"},"templates":{"button":"Modèles","emptyListMsg":"(Aucun modèle disponible)","insertOption":"Remplacer le contenu actuel","options":"Options des modèles","selectPromptMsg":"Veuillez sélectionner le modèle à ouvrir dans l'éditeur","title":"Contenu des modèles"},"contextmenu":{"options":"Options du menu contextuel"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Infobulle","cssClassInputLabel":"Classes de style","edit":"Modifier la division","inlineStyleInputLabel":"Style en ligne","langDirLTRLabel":"Gauche à droite (LTR)","langDirLabel":"Sens d'écriture","langDirRTLLabel":"Droite à gauche (RTL)","languageCodeInputLabel":"Code de langue","remove":"Enlever la division","styleSelectLabel":"Style","title":"Créer une division","toolbar":"Créer une division"},"elementspath":{"eleLabel":"Chemin des éléments","eleTitle":"Élément %1"},"filetools":{"loadError":"Une erreur est survenue lors de la lecture du fichier.","networkError":"Une erreur réseau est survenue lors du téléversement du fichier.","httpError404":"Une erreur HTTP est survenue durant le téléversement du fichier (404 : fichier non trouvé).","httpError403":"Une erreur HTTP est survenue durant le téléversement du fichier (403 : accès refusé).","httpError":"Une erreur HTTP est survenue durant le téléversement du fichier (erreur : %1).","noUrlError":"L'URL de téléversement n'est pas spécifiée.","responseError":"Réponse du serveur incorrecte."},"find":{"find":"Rechercher","findOptions":"Options de recherche","findWhat":"Rechercher :","matchCase":"Respecter la casse","matchCyclic":"Boucler","matchWord":"Mot entier uniquement","notFoundMsg":"Le texte spécifié ne peut être trouvé.","replace":"Remplacer","replaceAll":"Remplacer tout","replaceSuccessMsg":"%1 occurrence(s) remplacée(s).","replaceWith":"Remplacer par : ","title":"Rechercher et remplacer"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ invisible","iframe":"Cadre de contenu incorporé","unknown":"Objet inconnu"},"flash":{"access":"Accès aux scripts","accessAlways":"Toujours","accessNever":"Jamais","accessSameDomain":"Même domaine","alignAbsBottom":"Bas absolu","alignAbsMiddle":"Milieu absolu","alignBaseline":"Ligne de base","alignTextTop":"Haut du texte","bgcolor":"Couleur d'arrière-plan","chkFull":"Permettre le plein écran","chkLoop":"Boucle","chkMenu":"Activer le menu Flash","chkPlay":"Lire automatiquement","flashvars":"Variables Flash","hSpace":"Espacement horizontal","properties":"Propriétés du Flash","propertiesTab":"Propriétés","quality":"Qualité","qualityAutoHigh":"Haute automatique","qualityAutoLow":"Basse automatique","qualityBest":"Maximale","qualityHigh":"Haute","qualityLow":"Basse","qualityMedium":"Moyenne","scale":"Échelle","scaleAll":"Afficher tout","scaleFit":"Adaptation automatique","scaleNoBorder":"Aucune bordure","title":"Propriétés du Flash","vSpace":"Espacement vertical","validateHSpace":"L'espacement horizontal doit être un nombre.","validateSrc":"L'URL doit être indiquée.","validateVSpace":"L'espacement vertical doit être un nombre.","windowMode":"Mode fenêtre","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fenêtre"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille de police","panelTitle":"Taille de police"},"label":"Police","panelTitle":"Style de police","voiceLabel":"Police"},"forms":{"button":{"title":"Propriétés du bouton","text":"Texte","type":"Type","typeBtn":"Bouton","typeSbm":"Validation","typeRst":"Remise à zéro"},"checkboxAndRadio":{"checkboxTitle":"Propriétés de la case à cocher","radioTitle":"Propriétés du bouton radio","value":"Valeur","selected":"Sélectionné","required":"Requis"},"form":{"title":"Propriétés du formulaire","menu":"Propriétés du formulaire","action":"Action","method":"Méthode","encoding":"Encodage"},"hidden":{"title":"Propriétés du champ invisible","name":"Nom","value":"Valeur"},"select":{"title":"Propriétés du menu déroulant","selectInfo":"Informations sur le menu déroulant","opAvail":"Options disponibles","value":"Valeur","size":"Taille","lines":"lignes","chkMulti":"Permettre les sélections multiples","required":"Requis","opText":"Texte","opValue":"Valeur","btnAdd":"Ajouter","btnModify":"Modifier","btnUp":"Haut","btnDown":"Bas","btnSetValue":"Définir comme valeur sélectionnée","btnDelete":"Supprimer"},"textarea":{"title":"Propriétés de la zone de texte","cols":"Colonnes","rows":"Lignes"},"textfield":{"title":"Propriétés du champ texte","name":"Nom","value":"Valeur","charWidth":"Largeur des caractères","maxChars":"Nombre maximum de caractères","required":"Requis","type":"Type","typeText":"Texte","typePass":"Mot de passe","typeEmail":"Courriel","typeSearch":"Rechercher","typeTel":"Numéro de téléphone","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Division","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Préformaté"},"horizontalrule":{"toolbar":"Ligne horizontale"},"iframe":{"border":"Afficher la bordure du cadre","noUrl":"Veuillez entrer l'URL du contenu du cadre","scrolling":"Activer les barres de défilement","title":"Propriétés du cadre de contenu incorporé","toolbar":"Cadre de contenu incorporé"},"image":{"alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton avec image sélectionné en simple image ?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image sélectionnée en bouton avec image ?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Réinitialiser la taille","title":"Propriétés de l'image","titleButton":"Propriétés du bouton avec image","upload":"Téléverser","urlMissing":"L'URL source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un nombre entier.","validateHSpace":"L'espacement horizontal doit être un nombre entier.","validateVSpace":"L'espacement vertical doit être un nombre entier."},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"smiley":{"options":"Options des frimousses","title":"Insérer une frimousse","toolbar":"Frimousse"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (indicatif)","advisoryTitle":"Infobulle","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Encodage de la ressource liée","cssClasses":"Classes de style","download":"Forcer le téléchargement","displayText":"Afficher le texte","emailAddress":"Adresse électronique","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse électronique","noUrl":"Veuillez entrer l'URL du lien","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre surgissante","popupFullScreen":"Plein écran (IE)","popupLeft":"À gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"En haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Indice de tabulation","target":"Cible","targetFrame":"","targetFrameName":"Nom du cadre affecté","targetPopup":"","targetPopupName":"Nom de la fenêtre surgissante","title":"Lien","toAnchor":"Ancre","toEmail":"Courriel","toUrl":"URL","toPhone":"Phone","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"list":{"bulletedlist":"Insérer/Supprimer une liste à puces","numberedlist":"Insérer/Supprimer une liste numérotée"},"liststyle":{"bulletedTitle":"Propriétés de la liste à puces","circle":"Cercle","decimal":"Décimal (1, 2, 3, etc.)","disc":"Disque","lowerAlpha":"Lettres minuscules (a, b, c, d, e, etc.)","lowerRoman":"Chiffres romains minuscules (i, ii, iii, iv, v, etc.)","none":"Aucun","notset":"","numberedTitle":"Propriétés de la liste numérotée","square":"Carré","start":"Début","type":"Type","upperAlpha":"Lettres majuscules (A, B, C, D, E, etc.)","upperRoman":"Chiffres romains majuscules (I, II, III, IV, V, etc.)","validateStartNumber":"Le premier élément de la liste doit être un nombre entier."},"magicline":{"title":"Insérer un paragraphe ici"},"maximize":{"maximize":"Agrandir","minimize":"Réduire"},"newpage":{"toolbar":"Nouvelle page"},"pagebreak":{"alt":"Saut de page","toolbar":"Insérer un saut de page pour l'impression"},"pastetext":{"button":"Coller comme texte brut","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","title":"Coller comme texte brut"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?","error":"Les données collées n'ont pas pu être nettoyées à cause d'une erreur interne","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"preview":{"preview":"Aperçu"},"print":{"toolbar":"Imprimer"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"save":{"toolbar":"Enregistrer"},"selectall":{"toolbar":"Tout sélectionner"},"showblocks":{"toolbar":"Afficher les blocs"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionner un caractère","toolbar":"Insérer un caractère spécial"},"scayt":{"btn_about":"A propos de SCAYT","btn_dictionaries":"Dictionnaires","btn_disable":"Désactiver SCAYT","btn_enable":"Activer SCAYT","btn_langs":"Langues","btn_options":"Options","text_title":"Vérification de l'Orthographe en Cours de Frappe (SCAYT)"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en forme","panelTitle1":"Styles de bloc","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner vers la droite","mergeDown":"Fusionner vers le bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Lignes occupées","colSpan":"Colonnes occupées","wordWrap":"Césure","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Ligne de base","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de la cellule doit être un nombre.","invalidHeight":"La hauteur de la cellule doit être un nombre.","invalidRowSpan":"Le nombre de colonnes occupées doit être un nombre entier.","invalidColSpan":"Le nombre de colonnes occupées doit être un nombre entier.","chooseColor":"Choisir"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement entre les cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement entre les cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pour cent","widthPx":"pixels","widthUnit":"unité de largeur"},"undo":{"redo":"Rétablir","undo":"Annuler"},"widget":{"move":"Cliquer et glisser pour déplacer","label":"Élément %1"},"uploadwidget":{"abort":"Téléversement interrompu par l'utilisateur.","doneOne":"Fichier téléversé avec succès.","doneMany":"%1 fichiers téléversés avec succès.","uploadOne":"Téléversement du fichier en cours ({percentage} %)…","uploadMany":"Téléversement des fichiers en cours, {current} sur {max} effectués ({percentage} %)…"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Modifier pour","errorLoading":"Erreur du chargement du service depuis l'hôte : %s.","ieSpellDownload":"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?","manyChanges":"Vérification de l'orthographe terminée : %1 mots corrigés.","noChanges":"Vérification de l'orthographe terminée : Aucun mot corrigé.","noMispell":"Vérification de l'orthographe terminée : aucune erreur trouvée.","noSuggestions":"- Aucune suggestion -","notAvailable":"Désolé, le service est indisponible actuellement.","notInDic":"N'existe pas dans le dictionnaire.","oneChange":"Vérification de l'orthographe terminée : Un seul mot corrigé.","progress":"Vérification de l'orthographe en cours...","title":"Vérifier l'orthographe","toolbar":"Vérifier l'orthographe"}}; \ No newline at end of file +CKEDITOR.lang['fr']={"editor":"Éditeur de texte enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Utilisez le raccourci Alt-0 pour obtenir de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Télécharger","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ invisible","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton avec image","notSet":"","id":"ID","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue","cssClass":"Classes de style","advisoryTitle":"Infobulle","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page ?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer ?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à droite (LTR)","langDirRTL":"Droite à gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","left":"Gauche","right":"Droite","center":"Centrer","justify":"Justifier","alignLeft":"Aligner à gauche","alignRight":"Aligner à droite","alignCenter":"Aligner au centre","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidLength":"La valeur de \"%1\" doit être un nombre positif avec ou sans unité de mesure (%2).","invalidCssLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ « %1 » doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style en ligne doit être composée d'un ou plusieurs couples au format « nom : valeur », séparés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1, indisponible","keyboard":{"8":"Retour arrière","13":"Entrée","16":"Majuscule","17":"Ctrl","18":"Alt","32":"Espace","35":"Fin","36":"Origine","46":"Supprimer","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Commande"},"keyboardShortcut":"Raccourci clavier","optionDefault":"Par défaut"},"about":{"copy":"Copyright © $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor 4","moreInfo":"Pour les informations de licence, veuillez visiter notre site web :"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"bidi":{"ltr":"Direction du texte de la gauche vers la droite","rtl":"Direction du texte de la droite vers la gauche"},"blockquote":{"toolbar":"Citation"},"notification":{"closed":"Notification fermée."},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barres d'outils de l'éditeur"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur n'autorisent pas l'éditeur à exécuter automatiquement l'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).","paste":"Coller","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","pasteArea":"Coller la zone","pasteMsg":"Collez votre contenu dans la zone de saisie ci-dessous et cliquez OK."},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur d'arrière-plan","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun de selle","2F4F4F":"Gris sombre d'ardoise","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal","800080":"Violet","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris tamisé","FFA07A":"Saumon clair","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Lime","AFEEEE":"Turquoise clair","ADD8E6":"Bleu clair","DDA0DD":"Prune","D3D3D3":"Gris clair","FFF0F5":"Fard lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune clair","F0FFF0":"Vert rosée","F0FFFF":"Azur","F0F8FF":"Bleu Alice","E6E6FA":"Lavande","FFF":"Blanc","1ABC9C":"Cyan dur","2ECC71":"Émeraude","3498DB":"Bleu brillant","9B59B6":"Améthyste","4E5F70":"Bleu-gris","F1C40F":"Jaune vif","16A085":"Cyan foncé","27AE60":"Émeraude foncée","2980B9":"Bleu dur","8E44AD":"Violet foncé","2C3E50":"Bleu désaturé","F39C12":"Orange","E67E22":"Carotte","E74C3C":"Rouge pâle","ECF0F1":"Argent brillant","95A5A6":"Cyan-gris clair","DDD":"Gris clair","D35400":"Citrouille","C0392B":"Rouge dur","BDC3C7":"Argent","7F8C8D":"Cyan-gris","999":"Gris foncé"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur du texte"},"colordialog":{"clear":"Effacer","highlight":"Pointée","options":"Options de couleur","selected":"Couleur choisie","title":"Sélectionner une couleur"},"templates":{"button":"Modèles","emptyListMsg":"(Aucun modèle disponible)","insertOption":"Remplacer le contenu actuel","options":"Options des modèles","selectPromptMsg":"Veuillez sélectionner le modèle à ouvrir dans l'éditeur","title":"Contenu des modèles"},"contextmenu":{"options":"Options du menu contextuel"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Infobulle","cssClassInputLabel":"Classes de style","edit":"Modifier la division","inlineStyleInputLabel":"Style en ligne","langDirLTRLabel":"Gauche à droite (LTR)","langDirLabel":"Sens d'écriture","langDirRTLLabel":"Droite à gauche (RTL)","languageCodeInputLabel":"Code de langue","remove":"Enlever la division","styleSelectLabel":"Style","title":"Créer une division","toolbar":"Créer une division"},"elementspath":{"eleLabel":"Chemin des éléments","eleTitle":"Élément %1"},"filetools":{"loadError":"Une erreur est survenue lors de la lecture du fichier.","networkError":"Une erreur réseau est survenue lors du téléversement du fichier.","httpError404":"Une erreur HTTP est survenue durant le téléversement du fichier (404 : fichier non trouvé).","httpError403":"Une erreur HTTP est survenue durant le téléversement du fichier (403 : accès refusé).","httpError":"Une erreur HTTP est survenue durant le téléversement du fichier (erreur : %1).","noUrlError":"L'URL de téléversement n'est pas spécifiée.","responseError":"Réponse du serveur incorrecte."},"find":{"find":"Rechercher","findOptions":"Options de recherche","findWhat":"Rechercher :","matchCase":"Respecter la casse","matchCyclic":"Boucler","matchWord":"Mot entier uniquement","notFoundMsg":"Le texte spécifié ne peut être trouvé.","replace":"Remplacer","replaceAll":"Remplacer tout","replaceSuccessMsg":"%1 occurrence(s) remplacée(s).","replaceWith":"Remplacer par : ","title":"Rechercher et remplacer"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ invisible","iframe":"Cadre de contenu incorporé","unknown":"Objet inconnu"},"flash":{"access":"Accès aux scripts","accessAlways":"Toujours","accessNever":"Jamais","accessSameDomain":"Même domaine","alignAbsBottom":"Bas absolu","alignAbsMiddle":"Milieu absolu","alignBaseline":"Ligne de base","alignTextTop":"Haut du texte","bgcolor":"Couleur d'arrière-plan","chkFull":"Permettre le plein écran","chkLoop":"Boucle","chkMenu":"Activer le menu Flash","chkPlay":"Lire automatiquement","flashvars":"Variables Flash","hSpace":"Espacement horizontal","properties":"Propriétés du Flash","propertiesTab":"Propriétés","quality":"Qualité","qualityAutoHigh":"Haute automatique","qualityAutoLow":"Basse automatique","qualityBest":"Maximale","qualityHigh":"Haute","qualityLow":"Basse","qualityMedium":"Moyenne","scale":"Échelle","scaleAll":"Afficher tout","scaleFit":"Adaptation automatique","scaleNoBorder":"Aucune bordure","title":"Propriétés du Flash","vSpace":"Espacement vertical","validateHSpace":"L'espacement horizontal doit être un nombre.","validateSrc":"L'URL doit être indiquée.","validateVSpace":"L'espacement vertical doit être un nombre.","windowMode":"Mode fenêtre","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fenêtre"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille de police","panelTitle":"Taille de police"},"label":"Police","panelTitle":"Style de police","voiceLabel":"Police"},"forms":{"button":{"title":"Propriétés du bouton","text":"Texte","type":"Type","typeBtn":"Bouton","typeSbm":"Validation","typeRst":"Remise à zéro"},"checkboxAndRadio":{"checkboxTitle":"Propriétés de la case à cocher","radioTitle":"Propriétés du bouton radio","value":"Valeur","selected":"Sélectionné","required":"Requis"},"form":{"title":"Propriétés du formulaire","menu":"Propriétés du formulaire","action":"Action","method":"Méthode","encoding":"Encodage"},"hidden":{"title":"Propriétés du champ invisible","name":"Nom","value":"Valeur"},"select":{"title":"Propriétés du menu déroulant","selectInfo":"Informations sur le menu déroulant","opAvail":"Options disponibles","value":"Valeur","size":"Taille","lines":"lignes","chkMulti":"Permettre les sélections multiples","required":"Requis","opText":"Texte","opValue":"Valeur","btnAdd":"Ajouter","btnModify":"Modifier","btnUp":"Haut","btnDown":"Bas","btnSetValue":"Définir comme valeur sélectionnée","btnDelete":"Supprimer"},"textarea":{"title":"Propriétés de la zone de texte","cols":"Colonnes","rows":"Lignes"},"textfield":{"title":"Propriétés du champ texte","name":"Nom","value":"Valeur","charWidth":"Largeur des caractères","maxChars":"Nombre maximum de caractères","required":"Requis","type":"Type","typeText":"Texte","typePass":"Mot de passe","typeEmail":"Courriel","typeSearch":"Rechercher","typeTel":"Numéro de téléphone","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Division","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Préformaté"},"horizontalrule":{"toolbar":"Ligne horizontale"},"iframe":{"border":"Afficher la bordure du cadre","noUrl":"Veuillez entrer l'URL du contenu du cadre","scrolling":"Activer les barres de défilement","title":"Propriétés du cadre de contenu incorporé","toolbar":"Cadre de contenu incorporé"},"image":{"alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton avec image sélectionné en simple image ?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image sélectionnée en bouton avec image ?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Réinitialiser la taille","title":"Propriétés de l'image","titleButton":"Propriétés du bouton avec image","upload":"Téléverser","urlMissing":"L'URL source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un nombre entier.","validateHSpace":"L'espacement horizontal doit être un nombre entier.","validateVSpace":"L'espacement vertical doit être un nombre entier."},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"smiley":{"options":"Options des frimousses","title":"Insérer une frimousse","toolbar":"Frimousse"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (indicatif)","advisoryTitle":"Infobulle","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Encodage de la ressource liée","cssClasses":"Classes de style","download":"Forcer le téléchargement","displayText":"Afficher le texte","emailAddress":"Adresse électronique","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse électronique","noUrl":"Veuillez entrer l'URL du lien","noTel":"Veuillez entrer le numéro de téléphone","other":"","phoneNumber":"Numéro de téléphone","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre surgissante","popupFullScreen":"Plein écran (IE)","popupLeft":"À gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"En haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Indice de tabulation","target":"Cible","targetFrame":"","targetFrameName":"Nom du cadre affecté","targetPopup":"","targetPopupName":"Nom de la fenêtre surgissante","title":"Lien","toAnchor":"Ancre","toEmail":"Courriel","toUrl":"URL","toPhone":"Téléphone","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"list":{"bulletedlist":"Insérer/Supprimer une liste à puces","numberedlist":"Insérer/Supprimer une liste numérotée"},"liststyle":{"bulletedTitle":"Propriétés de la liste à puces","circle":"Cercle","decimal":"Décimal (1, 2, 3, etc.)","disc":"Disque","lowerAlpha":"Lettres minuscules (a, b, c, d, e, etc.)","lowerRoman":"Chiffres romains minuscules (i, ii, iii, iv, v, etc.)","none":"Aucun","notset":"","numberedTitle":"Propriétés de la liste numérotée","square":"Carré","start":"Début","type":"Type","upperAlpha":"Lettres majuscules (A, B, C, D, E, etc.)","upperRoman":"Chiffres romains majuscules (I, II, III, IV, V, etc.)","validateStartNumber":"Le premier élément de la liste doit être un nombre entier."},"magicline":{"title":"Insérer un paragraphe ici"},"maximize":{"maximize":"Agrandir","minimize":"Réduire"},"newpage":{"toolbar":"Nouvelle page"},"pagebreak":{"alt":"Saut de page","toolbar":"Insérer un saut de page pour l'impression"},"pastetext":{"button":"Coller comme texte brut","pasteNotification":"Utilisez le raccourci %1 pour coller. Votre navigateur n'accepte pas de coller à l'aide du bouton ou du menu contextuel.","title":"Coller comme texte brut"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?","error":"Les données collées n'ont pas pu être nettoyées à cause d'une erreur interne","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"preview":{"preview":"Aperçu"},"print":{"toolbar":"Imprimer"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"save":{"toolbar":"Enregistrer"},"selectall":{"toolbar":"Tout sélectionner"},"showblocks":{"toolbar":"Afficher les blocs"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionner un caractère","toolbar":"Insérer un caractère spécial"},"scayt":{"btn_about":"A propos de SCAYT","btn_dictionaries":"Dictionnaires","btn_disable":"Désactiver SCAYT","btn_enable":"Activer SCAYT","btn_langs":"Langues","btn_options":"Options","text_title":"Vérification de l'Orthographe en Cours de Frappe (SCAYT)"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en forme","panelTitle1":"Styles de bloc","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner vers la droite","mergeDown":"Fusionner vers le bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Lignes occupées","colSpan":"Colonnes occupées","wordWrap":"Césure","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Ligne de base","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de la cellule doit être un nombre.","invalidHeight":"La hauteur de la cellule doit être un nombre.","invalidRowSpan":"Le nombre de colonnes occupées doit être un nombre entier.","invalidColSpan":"Le nombre de colonnes occupées doit être un nombre entier.","chooseColor":"Choisir"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement entre les cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","heightUnit":"height unit","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement entre les cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pour cent","widthPx":"pixels","widthUnit":"unité de largeur"},"undo":{"redo":"Rétablir","undo":"Annuler"},"widget":{"move":"Cliquer et glisser pour déplacer","label":"Élément %1"},"uploadwidget":{"abort":"Téléversement interrompu par l'utilisateur.","doneOne":"Fichier téléversé avec succès.","doneMany":"%1 fichiers téléversés avec succès.","uploadOne":"Téléversement du fichier en cours ({percentage} %)…","uploadMany":"Téléversement des fichiers en cours, {current} sur {max} effectués ({percentage} %)…"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Modifier pour","errorLoading":"Erreur du chargement du service depuis l'hôte : %s.","ieSpellDownload":"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?","manyChanges":"Vérification de l'orthographe terminée : %1 mots corrigés.","noChanges":"Vérification de l'orthographe terminée : Aucun mot corrigé.","noMispell":"Vérification de l'orthographe terminée : aucune erreur trouvée.","noSuggestions":"- Aucune suggestion -","notAvailable":"Désolé, le service est indisponible actuellement.","notInDic":"N'existe pas dans le dictionnaire.","oneChange":"Vérification de l'orthographe terminée : Un seul mot corrigé.","progress":"Vérification de l'orthographe en cours...","title":"Vérifier l'orthographe","toolbar":"Vérifier l'orthographe"},"sourcedialog":{"toolbar":"Source","title":"Source"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/gl.js b/htdocs/includes/ckeditor/ckeditor/lang/gl.js deleted file mode 100644 index d68902ccf16..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['gl']={"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","left":"Esquerda","right":"Dereita","center":"Centro","justify":"Xustificado","alignLeft":"Aliñar á esquerda","alignRight":"Aliñar á dereita","alignCenter":"Aliñar ao centro","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"Ningún","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida correcta (%2).","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1, non dispoñíbel","keyboard":{"8":"Ir atrás","13":"Intro","16":"Maiús","17":"Ctrl","18":"Alt","32":"Espazo","35":"Fin","36":"Inicio","46":"Supr","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Orde"},"keyboardShortcut":"Atallo de teclado","optionDefault":"Predeterminado"},"about":{"copy":"Copyright © $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor 4","moreInfo":"Para obter información sobre a licenza, visite o noso sitio web:"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"bidi":{"ltr":"Dirección do texto de esquerda a dereita","rtl":"Dirección do texto de dereita a esquerda"},"blockquote":{"toolbar":"Cita"},"notification":{"closed":"Notificación pechada."},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","pasteArea":"Zona de pegado","pasteMsg":"Pegue o contido dentro da área de abaixo e prema Aceptar."},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor do fondo","colors":{"000":"Negro","800000":"Marrón escuro","8B4513":"Ocre","2F4F4F":"Pizarra escuro","008080":"Verde azulado","000080":"Azul mariño","4B0082":"Índigo","696969":"Gris escuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Dourado escuro","006400":"Verde escuro","40E0D0":"Turquesa","0000CD":"Azul medio","800080":"Púrpura","808080":"Gris","F00":"Vermello","FF8C00":"Laranxa escuro","FFD700":"Dourado","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Laranxa","FFFF00":"Amarelo","00FF00":"Lima","AFEEEE":"Turquesa pálido","ADD8E6":"Azul claro","DDA0DD":"Violeta pálido","D3D3D3":"Verde claro","FFF0F5":"Lavanda vermello","FAEBD7":"Branco antigo","FFFFE0":"Amarelo claro","F0FFF0":"Mel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Branco","1ABC9C":"Cian forte","2ECC71":"Esmeralda","3498DB":"Azul brillante","9B59B6":"Amatista","4E5F70":"Azul agrisado","F1C40F":"Amarelo vívido","16A085":"Cian escuro","27AE60":"Esmeralda escuro","2980B9":"Azul forte","8E44AD":"Violeta escuro","2C3E50":"Azul desaturado","F39C12":"Laranxa","E67E22":"Cenoria","E74C3C":"Vermello pálido","ECF0F1":"Plata brillante","95A5A6":"Cian agrisado claro","DDD":"Gris claro","D35400":"Cabaza","C0392B":"Vermello forte","BDC3C7":"Plata","7F8C8D":"Cian agrisado","999":"Gris escuro"},"more":"Máis cores...","panelTitle":"Cores","textColorTitle":"Cor do texto"},"colordialog":{"clear":"Limpar","highlight":"Resaltar","options":"Opcións de cor","selected":"Cor seleccionado","title":"Seleccione unha cor"},"templates":{"button":"Modelos","emptyListMsg":"(Non hai modelos definidos)","insertOption":"Substituír o contido actual","options":"Opcións de modelos","selectPromptMsg":"Seleccione o modelo a abrir no editor","title":"Modelos de contido"},"contextmenu":{"options":"Opcións do menú contextual"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Título informativo","cssClassInputLabel":"Clases da folla de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo de liña","langDirLTRLabel":"Esquerda a dereita (LTR)","langDirLabel":"Dirección de escritura do idioma","langDirRTLLabel":"Dereita a esquerda (RTL)","languageCodeInputLabel":"Código do idioma","remove":"Retirar Div","styleSelectLabel":"Estilo","title":"Crear un contedor Div","toolbar":"Crear un contedor Div"},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"filetools":{"loadError":"Produciuse un erro durante a lectura do ficheiro.","networkError":"Produciuse un erro na rede durante o envío do ficheiro.","httpError404":"Produciuse un erro HTTP durante o envío do ficheiro (404: Ficheiro non atopado).","httpError403":"Produciuse un erro HTTP durante o envío do ficheiro (403: Acceso denegado).","httpError":"Produciuse un erro HTTP durante o envío do ficheiro (erro de estado: %1).","noUrlError":"Non foi definido o URL para o envío.","responseError":"Resposta incorrecta do servidor."},"find":{"find":"Buscar","findOptions":"Buscar opcións","findWhat":"Texto a buscar:","matchCase":"Coincidir Mai./min.","matchCyclic":"Coincidencia cíclica","matchWord":"Coincidencia coa palabra completa","notFoundMsg":"Non se atopou o texto indicado.","replace":"Substituir","replaceAll":"Substituír todo","replaceSuccessMsg":"%1 concorrencia(s) substituída(s).","replaceWith":"Substituír con:","title":"Buscar e substituír"},"fakeobjects":{"anchor":"Ancoraxe","flash":"Animación «Flash»","hiddenfield":"Campo agochado","iframe":"IFrame","unknown":"Obxecto descoñecido"},"flash":{"access":"Acceso de scripts","accessAlways":"Sempre","accessNever":"Nunca","accessSameDomain":"Mesmo dominio","alignAbsBottom":"Abs Inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Liña de base","alignTextTop":"Tope do texto","bgcolor":"Cor do fondo","chkFull":"Permitir pantalla completa","chkLoop":"Repetir","chkMenu":"Activar o menú do «Flash»","chkPlay":"Reprodución auomática","flashvars":"Opcións do «Flash»","hSpace":"Esp. Horiz.","properties":"Propiedades do «Flash»","propertiesTab":"Propiedades","quality":"Calidade","qualityAutoHigh":"Alta, automática","qualityAutoLow":"Baixa, automática","qualityBest":"A mellor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Media","scale":"Escalar","scaleAll":"Amosar todo","scaleFit":"Encaixar axustando","scaleNoBorder":"Sen bordo","title":"Propiedades do «Flash»","vSpace":"Esp.Vert.","validateHSpace":"O espazado horizontal debe ser un número.","validateSrc":"O URL non pode estar baleiro.","validateVSpace":"O espazado vertical debe ser un número.","windowMode":"Modo da xanela","windowModeOpaque":"Opaca","windowModeTransparent":"Transparente","windowModeWindow":"Xanela"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño da letra","panelTitle":"Tamaño da letra"},"label":"Tipo de letra","panelTitle":"Nome do tipo de letra","voiceLabel":"Tipo de letra"},"forms":{"button":{"title":"Propiedades do botón","text":"Texto (Valor)","type":"Tipo","typeBtn":"Botón","typeSbm":"Enviar","typeRst":"Restabelever"},"checkboxAndRadio":{"checkboxTitle":"Propiedades da caixa de selección","radioTitle":"Propiedades do botón de opción","value":"Valor","selected":"Seleccionado","required":"Requirido"},"form":{"title":"Propiedades do formulario","menu":"Propiedades do formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades do campo agochado","name":"Nome","value":"Valor"},"select":{"title":"Propiedades do campo de selección","selectInfo":"Información","opAvail":"Opcións dispoñíbeis","value":"Valor","size":"Tamaño","lines":"liñas","chkMulti":"Permitir múltiplas seleccións","required":"Requirido","opText":"Texto","opValue":"Valor","btnAdd":"Engadir","btnModify":"Modificar","btnUp":"Subir","btnDown":"Baixar","btnSetValue":"Estabelecer como valor seleccionado","btnDelete":"Eliminar"},"textarea":{"title":"Propiedades da área de texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades do campo de texto","name":"Nome","value":"Valor","charWidth":"Largo do carácter","maxChars":"Núm. máximo de caracteres","required":"Requirido","type":"Tipo","typeText":"Texto","typePass":"Contrasinal","typeEmail":"Correo","typeSearch":"Buscar","typeTel":"Número de teléfono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"iframe":{"border":"Amosar o bordo do marco","noUrl":"Escriba o enderezo do iframe","scrolling":"Activar as barras de desprazamento","title":"Propiedades do iFrame","toolbar":"IFrame"},"image":{"alt":"Texto alternativo","border":"Bordo","btnUpload":"Enviar ao servidor","button2Img":"Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?","hSpace":"Esp.Horiz.","img2Button":"Quere converter a imaxe seleccionada nun botón de imaxe?","infoTab":"Información da imaxe","linkTab":"Ligazón","lockRatio":"Proporcional","menu":"Propiedades da imaxe","resetSize":"Tamaño orixinal","title":"Propiedades da imaxe","titleButton":"Propiedades do botón de imaxe","upload":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","vSpace":"Esp.Vert.","validateBorder":"O bordo debe ser un número.","validateHSpace":"O espazado horizontal debe ser un número.","validateVSpace":"O espazado vertical debe ser un número."},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"smiley":{"options":"Opcións de emoticonas","title":"Inserir unha emoticona","toolbar":"Emoticona"},"language":{"button":"Estabelezer o idioma","remove":"Retirar o idioma"},"link":{"acccessKey":"Chave de acceso","advanced":"Avanzado","advisoryContentType":"Tipo de contido informativo","advisoryTitle":"Título","anchor":{"toolbar":"Ancoraxe","menu":"Editar a ancoraxe","title":"Propiedades da ancoraxe","name":"Nome da ancoraxe","errorName":"Escriba o nome da ancoraxe","remove":"Retirar a ancoraxe"},"anchorId":"Polo ID do elemento","anchorName":"Polo nome da ancoraxe","charset":"Codificación do recurso ligado","cssClasses":"Clases da folla de estilos","download":"Forzar a descarga","displayText":"Amosar o texto","emailAddress":"Enderezo de correo","emailBody":"Corpo da mensaxe","emailSubject":"Asunto da mensaxe","id":"ID","info":"Información da ligazón","langCode":"Código do idioma","langDir":"Dirección de escritura do idioma","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","menu":"Editar a ligazón","name":"Nome","noAnchors":"(Non hai ancoraxes dispoñíbeis no documento)","noEmail":"Escriba o enderezo de correo","noUrl":"Escriba a ligazón URL","noTel":"Escriba o número de teléfono","other":"","phoneNumber":"Número de teléfono","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da xanela emerxente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición esquerda","popupLocationBar":"Barra de localización","popupMenuBar":"Barra do menú","popupResizable":"Redimensionábel","popupScrollBars":"Barras de desprazamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Seleccionar unha ancoraxe","styles":"Estilo","tabIndex":"Índice de tabulación","target":"Destino","targetFrame":"","targetFrameName":"Nome do marco de destino","targetPopup":"","targetPopupName":"Nome da xanela emerxente","title":"Ligazón","toAnchor":"Ligar coa ancoraxe no testo","toEmail":"Correo","toUrl":"URL","toPhone":"Teléfono","toolbar":"Ligazón","type":"Tipo de ligazón","unlink":"Eliminar a ligazón","upload":"Enviar"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"liststyle":{"bulletedTitle":"Propiedades da lista viñeteada","circle":"Circulo","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Alfabeto en minúsculas (a, b, c, d, e, etc.)","lowerRoman":"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)","none":"Ningún","notset":"","numberedTitle":"Propiedades da lista numerada","square":"Cadrado","start":"Inicio","type":"Tipo","upperAlpha":"Alfabeto en maiúsculas (A, B, C, D, E, etc.)","upperRoman":"Números romanos en maiúsculas (I, II, III, IV, V, etc.)","validateStartNumber":"O número de inicio da lista debe ser un número enteiro."},"magicline":{"title":"Inserir aquí o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Páxina nova"},"pagebreak":{"alt":"Quebra de páxina","toolbar":"Inserir quebra de páxina"},"pastetext":{"button":"Pegar como texto simple","pasteNotification":"Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"preview":{"preview":"Vista previa"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Retirar o formato"},"save":{"toolbar":"Gardar"},"selectall":{"toolbar":"Seleccionar todo"},"showblocks":{"toolbar":"Amosar os bloques"},"sourcearea":{"toolbar":"Orixe"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de liña","panelTitle3":"Estilos de obxecto"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"undo":{"redo":"Refacer","undo":"Desfacer"},"widget":{"move":"Prema e arrastre para mover","label":"Trebello %1"},"uploadwidget":{"abort":"Envío interrompido polo usuario.","doneOne":"Ficheiro enviado satisfactoriamente.","doneMany":"%1 ficheiros enviados satisfactoriamente.","uploadOne":"Enviando o ficheiro ({percentage}%)...","uploadMany":"Enviando ficheiros, {current} de {max} feito o ({percentage}%)..."},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todas","btnReplace":"Substituir","btnReplaceAll":"Substituir Todas","btnUndo":"Desfacer","changeTo":"Cambiar a","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"O corrector ortográfico non está instalado. ¿Quere descargalo agora?","manyChanges":"Corrección ortográfica rematada: %1 verbas substituidas","noChanges":"Corrección ortográfica rematada: Non se substituiu nengunha verba","noMispell":"Corrección ortográfica rematada: Non se atoparon erros","noSuggestions":"- Sen candidatos -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Non está no diccionario","oneChange":"Corrección ortográfica rematada: Unha verba substituida","progress":"Corrección ortográfica en progreso...","title":"Spell Checker","toolbar":"Corrección Ortográfica"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/gu.js b/htdocs/includes/ckeditor/ckeditor/lang/gu.js deleted file mode 100644 index 823d9e30426..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/gu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['gu']={"editor":"રીચ ટેક્ષ્ત્ એડીટર","editorPanel":"વધુ વિકલ્પ વાળુ એડિટર","common":{"editorHelp":"મદદ માટ ALT 0 દબાવો","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","flash":"ફ્લૅશ","form":"ફૉર્મ/પત્રક","checkbox":"ચેક બોક્સ","radio":"રેડિઓ બટન","textField":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર","textarea":"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર","hiddenField":"ગુપ્ત ક્ષેત્ર","button":"બટન","select":"પસંદગી ક્ષેત્ર","imageButton":"ચિત્ર બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સ્ટાઇલ-શીટ ક્લાસ","advisoryTitle":"મુખ્ય મથાળું","cssStyle":"સ્ટાઇલ","ok":"ઠીક છે","cancel":"રદ કરવું","close":"બંધ કરવું","preview":"જોવું","resize":"ખેંચી ને યોગ્ય કરવું","generalTab":"જનરલ","advancedTab":"અડ્વાન્સડ","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?","confirmCancel":"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?","options":"વિકલ્પો","target":"લક્ષ્ય","targetNew":"નવી વિન્ડો (_blank)","targetTop":"ઉપરની વિન્ડો (_top)","targetSelf":"એજ વિન્ડો (_self)","targetParent":"પેરનટ વિન્ડો (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવું","left":"ડાબી બાજુ ગોઠવવું","right":"જમણી","center":"મધ્ય સેન્ટર","justify":"બ્લૉક, અંતરાય જસ્ટિફાઇ","alignLeft":"ડાબી બાજુએ/બાજુ તરફ","alignRight":"જમણી બાજુએ/બાજુ તરફ","alignCenter":"Align Center","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","alignNone":"કઇ નહી","invalidValue":"અનુચિત મૂલ્ય","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન સ્ટાઈલ ની વેલ્યુ \"name : value\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.","cssLengthTooltip":"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1, નથી મળતું","keyboard":{"8":"Backspace કી","13":"Enter કી","16":"Shift કી","17":"Ctrl કી","18":"Alt કી","32":"Space કી","35":"End કી","36":"Home કી","46":"Delete કી","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command કી"},"keyboardShortcut":"કીબોર્ડ શૉર્ટકટ","optionDefault":"Default"},"about":{"copy":"કોપીરાઈટ © $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"bidi":{"ltr":"ટેક્ષ્ત્ ની દિશા ડાબે થી જમણે","rtl":"ટેક્ષ્ત્ ની દિશા જમણે થી ડાબે"},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"સ્વચાલિત","bgColorTitle":"બૅકગ્રાઉન્ડ રંગ,","colors":{"000":"કાળો","800000":"મરુન","8B4513":"છીક","2F4F4F":"ડાર્ક સ્લેટ ગ્રે ","008080":"ટીલ","000080":"નેવી","4B0082":"જામલી","696969":"ડાર્ક ગ્રે","B22222":"ઈટ","A52A2A":"બ્રાઉન","DAA520":"ગોલ્ડન રોડ","006400":"ડાર્ક લીલો","40E0D0":"ટ્રકોઈસ","0000CD":"મધ્યમ વાદળી","800080":"પર્પલ","808080":"ગ્રે","F00":"લાલ","FF8C00":"ડાર્ક ઓરંજ","FFD700":"ગોલ્ડ","008000":"ગ્રીન","0FF":"સાયન","00F":"વાદળી","EE82EE":"વાયોલેટ","A9A9A9":"ડીમ ","FFA07A":"લાઈટ સાલમન","FFA500":"ઓરંજ","FFFF00":"પીળો","00FF00":"લાઈમ","AFEEEE":"પેલ કોઈસ","ADD8E6":"લાઈટ બ્લુ","DDA0DD":"પલ્મ","D3D3D3":"લાઈટ ગ્રે","FFF0F5":"લવંડર ","FAEBD7":"એન્ટીક સફેદ","FFFFE0":"લાઈટ પીળો","F0FFF0":"હનીડઉય","F0FFFF":"અઝુરે","F0F8FF":"એલીસ બ્લુ","E6E6FA":"લવંડર","FFF":"સફેદ","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"ઔર રંગ...","panelTitle":"રંગ","textColorTitle":"શબ્દનો રંગ"},"colordialog":{"clear":"સાફ કરવું","highlight":"હાઈઈટ","options":"રંગના વિકલ્પ","selected":"પસંદ કરેલો રંગ","title":"રંગ પસંદ કરો"},"templates":{"button":"ટેમ્પ્લેટ","emptyListMsg":"(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)","insertOption":"મૂળ શબ્દને બદલો","options":"ટેમ્પ્લેટના વિકલ્પો","selectPromptMsg":"એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):","title":"કન્ટેન્ટ ટેમ્પ્લેટ"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"એડવાઈઝર શીર્ષક","cssClassInputLabel":"સ્ટાઈલશીટ કલાસીસ","edit":"ડીવીમાં ફેરફાર કરવો","inlineStyleInputLabel":"ઈનલાઈન પદ્ધતિ","langDirLTRLabel":"ડાબે થી જમણે (LTR)","langDirLabel":"ભાષાની દિશા","langDirRTLLabel":"જમણે થી ડાબે (RTL)","languageCodeInputLabel":"ભાષાનો કોડ","remove":"ડીવી કાઢી કાઢવું","styleSelectLabel":"સ્ટાઈલ","title":"Div કન્ટેનર બનાવુંવું","toolbar":"Div કન્ટેનર બનાવુંવું"},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"શોધવું","findOptions":"વીકલ્પ શોધો","findWhat":"આ શોધો","matchCase":"કેસ સરખા રાખો","matchCyclic":"સરખાવવા બધા","matchWord":"બઘા શબ્દ સરખા રાખો","notFoundMsg":"તમે શોધેલી ટેક્સ્ટ નથી મળી","replace":"રિપ્લેસ/બદલવું","replaceAll":"બઘા બદલી ","replaceSuccessMsg":"%1 ફેરફારો બાદલાયા છે.","replaceWith":"આનાથી બદલો","title":"શોધવું અને બદલવું"},"fakeobjects":{"anchor":"અનકર","flash":"ફ્લેશ ","hiddenfield":"હિડન ","iframe":"IFrame","unknown":"અનનોન ઓબ્જેક્ટ"},"flash":{"access":"સ્ક્રીપ્ટ એક્સેસ","accessAlways":"હમેશાં","accessNever":"નહી","accessSameDomain":"એજ ડોમેન","alignAbsBottom":"Abs નીચે","alignAbsMiddle":"Abs ઉપર","alignBaseline":"આધાર લીટી","alignTextTop":"ટેક્સ્ટ ઉપર","bgcolor":"બૅકગ્રાઉન્ડ રંગ,","chkFull":"ફૂલ સ્ક્રીન કરવું","chkLoop":"લૂપ","chkMenu":"ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો","chkPlay":"ઑટો/સ્વયં પ્લે","flashvars":"ફલેશ ના વિકલ્પો","hSpace":"સમસ્તરીય જગ્યા","properties":"ફ્લૅશના ગુણ","propertiesTab":"ગુણ","quality":"ગુણધર્મ","qualityAutoHigh":"ઓટો ઊંચું","qualityAutoLow":"ઓટો નીચું","qualityBest":"શ્રેષ્ઠ","qualityHigh":"ઊંચું","qualityLow":"નીચું","qualityMedium":"મધ્યમ","scale":"સ્કેલ","scaleAll":"સ્કેલ ઓલ/બધુ બતાવો","scaleFit":"સ્કેલ એકદમ ફીટ","scaleNoBorder":"સ્કેલ બોર્ડર વગર","title":"ફ્લૅશ ગુણ","vSpace":"લંબરૂપ જગ્યા","validateHSpace":"HSpace આંકડો હોવો જોઈએ.","validateSrc":"લિંક URL ટાઇપ કરો","validateVSpace":"VSpace આંકડો હોવો જોઈએ.","windowMode":"વિન્ડો મોડ","windowModeOpaque":"અપારદર્શક","windowModeTransparent":"પારદર્શક","windowModeWindow":"વિન્ડો"},"font":{"fontSize":{"label":"ફૉન્ટ સાઇઝ/કદ","voiceLabel":"ફોન્ટ સાઈઝ","panelTitle":"ફૉન્ટ સાઇઝ/કદ"},"label":"ફૉન્ટ","panelTitle":"ફૉન્ટ","voiceLabel":"ફોન્ટ"},"forms":{"button":{"title":"બટનના ગુણ","text":"ટેક્સ્ટ (વૅલ્યૂ)","type":"પ્રકાર","typeBtn":"બટન","typeSbm":"સબ્મિટ","typeRst":"રિસેટ"},"checkboxAndRadio":{"checkboxTitle":"ચેક બોક્સ ગુણ","radioTitle":"રેડિઓ બટનના ગુણ","value":"વૅલ્યૂ","selected":"સિલેક્ટેડ","required":"Required"},"form":{"title":"ફૉર્મ/પત્રકના ગુણ","menu":"ફૉર્મ/પત્રકના ગુણ","action":"ક્રિયા","method":"પદ્ધતિ","encoding":"અન્કોડીન્ગ"},"hidden":{"title":"ગુપ્ત ક્ષેત્રના ગુણ","name":"નામ","value":"વૅલ્યૂ"},"select":{"title":"પસંદગી ક્ષેત્રના ગુણ","selectInfo":"સૂચના","opAvail":"ઉપલબ્ધ વિકલ્પ","value":"વૅલ્યૂ","size":"સાઇઝ","lines":"લીટીઓ","chkMulti":"એકથી વધારે પસંદ કરી શકો","required":"Required","opText":"ટેક્સ્ટ","opValue":"વૅલ્યૂ","btnAdd":"ઉમેરવું","btnModify":"બદલવું","btnUp":"ઉપર","btnDown":"નીચે","btnSetValue":"પસંદ કરલી વૅલ્યૂ સેટ કરો","btnDelete":"રદ કરવું"},"textarea":{"title":"ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ","cols":"કૉલમ/ઊભી કટાર","rows":"પંક્તિઓ"},"textfield":{"title":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ","name":"નામ","value":"વૅલ્યૂ","charWidth":"કેરેક્ટરની પહોળાઈ","maxChars":"અધિકતમ કેરેક્ટર","required":"Required","type":"ટાઇપ","typeText":"ટેક્સ્ટ","typePass":"પાસવર્ડ","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","panelTitle":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","tag_address":"સરનામું","tag_div":"શીર્ષક (DIV)","tag_h1":"શીર્ષક 1","tag_h2":"શીર્ષક 2","tag_h3":"શીર્ષક 3","tag_h4":"શીર્ષક 4","tag_h5":"શીર્ષક 5","tag_h6":"શીર્ષક 6","tag_p":"સામાન્ય","tag_pre":"ફૉર્મટેડ"},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"iframe":{"border":"ફ્રેમ બોર્ડેર બતાવવી","noUrl":"iframe URL ટાઈપ્ કરો","scrolling":"સ્ક્રોલબાર ચાલુ કરવા","title":"IFrame વિકલ્પો","toolbar":"IFrame"},"image":{"alt":"ઑલ્ટર્નટ ટેક્સ્ટ","border":"બોર્ડર","btnUpload":"આ સર્વરને મોકલવું","button2Img":"તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવું છે.","hSpace":"સમસ્તરીય જગ્યા","img2Button":"તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવું છે.","infoTab":"ચિત્ર ની જાણકારી","linkTab":"લિંક","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","resetSize":"રીસેટ સાઇઝ","title":"ચિત્રના ગુણ","titleButton":"ચિત્ર બટનના ગુણ","upload":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","vSpace":"લંબરૂપ જગ્યા","validateBorder":"બોર્ડેર આંકડો હોવો જોઈએ.","validateHSpace":"HSpaceઆંકડો હોવો જોઈએ.","validateVSpace":"VSpace આંકડો હોવો જોઈએ. "},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"smiley":{"options":"સમ્ય્લી વિકલ્પો","title":"સ્માઇલી પસંદ કરો","toolbar":"સ્માઇલી"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"ઍક્સેસ કી","advanced":"અડ્વાન્સડ","advisoryContentType":"મુખ્ય કન્ટેન્ટ પ્રકાર","advisoryTitle":"મુખ્ય મથાળું","anchor":{"toolbar":"ઍંકર ઇન્સર્ટ/દાખલ કરવી","menu":"ઍંકરના ગુણ","title":"ઍંકરના ગુણ","name":"ઍંકરનું નામ","errorName":"ઍંકરનું નામ ટાઈપ કરો","remove":"સ્થિર નકરવું"},"anchorId":"ઍંકર એલિમન્ટ Id થી પસંદ કરો","anchorName":"ઍંકર નામથી પસંદ કરો","charset":"લિંક રિસૉર્સ કૅરિક્ટર સેટ","cssClasses":"સ્ટાઇલ-શીટ ક્લાસ","download":"ડાઉનલોડ કરો","displayText":"લખાણ દેખાડો","emailAddress":"ઈ-મેલ સરનામું","emailBody":"સંદેશ","emailSubject":"ઈ-મેલ વિષય","id":"Id","info":"લિંક ઇન્ફૉ ટૅબ","langCode":"ભાષા લેખવાની પદ્ધતિ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","menu":" લિંક એડિટ/માં ફેરફાર કરવો","name":"નામ","noAnchors":"(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)","noEmail":"ઈ-મેલ સરનામું ટાઇપ કરો","noUrl":"લિંક URL ટાઇપ કરો","noTel":"Please type the phone number","other":" <અન્ય>","phoneNumber":"Phone number","popupDependent":"ડિપેન્ડન્ટ (Netscape)","popupFeatures":"પૉપ-અપ વિન્ડો ફીચરસૅ","popupFullScreen":"ફુલ સ્ક્રીન (IE)","popupLeft":"ડાબી બાજુ","popupLocationBar":"લોકેશન બાર","popupMenuBar":"મેન્યૂ બાર","popupResizable":"રીસાઈઝએબલ","popupScrollBars":"સ્ક્રોલ બાર","popupStatusBar":"સ્ટૅટસ બાર","popupToolbar":"ટૂલ બાર","popupTop":"જમણી બાજુ","rel":"સંબંધની સ્થિતિ","selectAnchor":"ઍંકર પસંદ કરો","styles":"સ્ટાઇલ","tabIndex":"ટૅબ ઇન્ડેક્સ","target":"ટાર્ગેટ/લક્ષ્ય","targetFrame":"<ફ્રેમ>","targetFrameName":"ટાર્ગેટ ફ્રેમ નું નામ","targetPopup":"<પૉપ-અપ વિન્ડો>","targetPopupName":"પૉપ-અપ વિન્ડો નું નામ","title":"લિંક","toAnchor":"આ પેજનો ઍંકર","toEmail":"ઈ-મેલ","toUrl":"URL","toPhone":"Phone","toolbar":"લિંક ઇન્સર્ટ/દાખલ કરવી","type":"લિંક પ્રકાર","unlink":"લિંક કાઢવી","upload":"અપલોડ"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"liststyle":{"bulletedTitle":"બુલેટેડ લીસ્ટના ગુણ","circle":"વર્તુળ","decimal":"આંકડા (1, 2, 3, etc.)","disc":"ડિસ્ક","lowerAlpha":"આલ્ફા નાના (a, b, c, d, e, etc.)","lowerRoman":"રોમન નાના (i, ii, iii, iv, v, etc.)","none":"કસુ ","notset":"<સેટ નથી>","numberedTitle":"આંકડાના લીસ્ટના ગુણ","square":"ચોરસ","start":"શરુ કરવું","type":"પ્રકાર","upperAlpha":"આલ્ફા મોટા (A, B, C, D, E, etc.)","upperRoman":"રોમન મોટા (I, II, III, IV, V, etc.)","validateStartNumber":"લીસ્ટના સરુઆતનો આંકડો પુરો હોવો જોઈએ."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"newpage":{"toolbar":"નવુ પાનું"},"pagebreak":{"alt":"નવું પાનું","toolbar":"ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"preview":{"preview":"પૂર્વદર્શન"},"print":{"toolbar":"પ્રિન્ટ"},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"save":{"toolbar":"સેવ"},"selectall":{"toolbar":"બઘું પસંદ કરવું"},"showblocks":{"toolbar":"બ્લૉક બતાવવું"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"scayt":{"btn_about":"SCAYT વિષે","btn_dictionaries":"શબ્દકોશ","btn_disable":"SCAYT ડિસેબલ કરવું","btn_enable":"SCAYT એનેબલ કરવું","btn_langs":"ભાષાઓ","btn_options":"વિકલ્પો","text_title":"ટાઈપ કરતા સ્પેલ તપાસો"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"table":{"border":"કોઠાની બાજુ(બોર્ડર) સાઇઝ","caption":"મથાળું/કૅપ્શન ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજુ ભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસ્તરીય વિભાજન કરવું","splitVertical":"કોષને સીધું ને ઊભું વિભાજન કરવું","title":"સેલના ગુણ","cellType":"સેલનો પ્રકાર","rowSpan":"આડી કટારની જગ્યા","colSpan":"ઊભી કતારની જગ્યા","wordWrap":"વર્ડ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોર્ડેર રંગ","data":"સ્વીકૃત માહિતી","header":"મથાળું","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈએ.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRowSpan":"રો સ્પાન આંકડો હોવો જોઈએ.","invalidColSpan":"કોલમ સ્પાન આંકડો હોવો જોઈએ.","chooseColor":"પસંદ કરવું"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવું","headers":"મથાળા","headersBoth":"બેવું","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી કટાર","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"ઇગ્નોર/અવગણના કરવી","btnIgnoreAll":"બધાની ઇગ્નોર/અવગણના કરવી","btnReplace":"બદલવું","btnReplaceAll":"બધા બદલી કરો","btnUndo":"અન્ડૂ","changeTo":"આનાથી બદલવું","errorLoading":"સર્વિસ એપ્લીકેશન લોડ નથી થ: %s.","ieSpellDownload":"સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?","manyChanges":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે","noChanges":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી","noMispell":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી","noSuggestions":"- કઇ સજેશન નથી -","notAvailable":"માફ કરશો, આ સુવિધા ઉપલબ્ધ નથી","notInDic":"શબ્દકોશમાં નથી","oneChange":"શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે","progress":"શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...","title":"સ્પેલ ","toolbar":"જોડણી (સ્પેલિંગ) તપાસવી"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/he.js b/htdocs/includes/ckeditor/ckeditor/lang/he.js deleted file mode 100644 index a2c382a986a..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/he.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['he']={"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","left":"לשמאל","right":"לימין","center":"מרכז","justify":"יישור לשוליים","alignLeft":"יישור לשמאל","alignRight":"יישור לימין","alignCenter":"Align Center","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, או pc).","unavailable":"%1, לא זמין","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"מחק","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","moreInfo":"למידע נוסף בקרו באתרנו:"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"bidi":{"ltr":"כיוון טקסט משמאל לימין (LTR)","rtl":"כיוון טקסט מימין לשמאל (RTL)"},"blockquote":{"toolbar":"בלוק ציטוט"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"איזור הדבקה","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"אוטומטי","bgColorTitle":"צבע רקע","colors":{"000":"שחור","800000":"סגול כהה","8B4513":"חום בהיר","2F4F4F":"אפור צפחה","008080":"כחול-ירוק","000080":"כחול-סגול","4B0082":"אינדיגו","696969":"אפור מעומעם","B22222":"אדום-חום","A52A2A":"חום","DAA520":"כתום זהב","006400":"ירוק כהה","40E0D0":"טורקיז","0000CD":"כחול בינוני","800080":"סגול","808080":"אפור","F00":"אדום","FF8C00":"כתום כהה","FFD700":"זהב","008000":"ירוק","0FF":"ציאן","00F":"כחול","EE82EE":"סגלגל","A9A9A9":"אפור כהה","FFA07A":"כתום-וורוד","FFA500":"כתום","FFFF00":"צהוב","00FF00":"ליים","AFEEEE":"טורקיז בהיר","ADD8E6":"כחול בהיר","DDA0DD":"שזיף","D3D3D3":"אפור בהיר","FFF0F5":"לבנדר מסמיק","FAEBD7":"לבן עתיק","FFFFE0":"צהוב בהיר","F0FFF0":"טל דבש","F0FFFF":"תכלת","F0F8FF":"כחול טיפת מים","E6E6FA":"לבנדר","FFF":"לבן","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"צבעים נוספים...","panelTitle":"צבעים","textColorTitle":"צבע טקסט"},"colordialog":{"clear":"ניקוי","highlight":"סימון","options":"אפשרויות צבע","selected":"בחירה","title":"בחירת צבע"},"templates":{"button":"תבניות","emptyListMsg":"(לא הוגדרו תבניות)","insertOption":"החלפת תוכן ממשי","options":"אפשרויות התבניות","selectPromptMsg":"יש לבחור תבנית לפתיחה בעורך.
התוכן המקורי ימחק:","title":"תביות תוכן"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"מזהה (ID)","advisoryTitleInputLabel":"כותרת מוצעת","cssClassInputLabel":"מחלקת עיצוב","edit":"עריכת מיכל (Div)","inlineStyleInputLabel":"סגנון פנימי","langDirLTRLabel":"שמאל לימין (LTR)","langDirLabel":"כיוון שפה","langDirRTLLabel":"ימין לשמאל (RTL)","languageCodeInputLabel":"קוד שפה","remove":"הסרת מיכל (Div)","styleSelectLabel":"סגנון","title":"יצירת מיכל (Div)","toolbar":"יצירת מיכל (Div)"},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"חיפוש","findOptions":"אפשרויות חיפוש","findWhat":"חיפוש מחרוזת:","matchCase":"הבחנה בין אותיות רשיות לקטנות (Case)","matchCyclic":"התאמה מחזורית","matchWord":"התאמה למילה המלאה","notFoundMsg":"הטקסט המבוקש לא נמצא.","replace":"החלפה","replaceAll":"החלפה בכל העמוד","replaceSuccessMsg":"%1 טקסטים הוחלפו.","replaceWith":"החלפה במחרוזת:","title":"חיפוש והחלפה"},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פלאש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"אובייקט לא ידוע"},"flash":{"access":"גישת סקריפט","accessAlways":"תמיד","accessNever":"אף פעם","accessSameDomain":"דומיין זהה","alignAbsBottom":"לתחתית האבסולוטית","alignAbsMiddle":"מרכוז אבסולוטי","alignBaseline":"לקו התחתית","alignTextTop":"לראש הטקסט","bgcolor":"צבע רקע","chkFull":"אפשר חלון מלא","chkLoop":"לולאה","chkMenu":"אפשר תפריט פלאש","chkPlay":"ניגון אוטומטי","flashvars":"משתנים לפלאש","hSpace":"מרווח אופקי","properties":"מאפייני פלאש","propertiesTab":"מאפיינים","quality":"איכות","qualityAutoHigh":"גבוהה אוטומטית","qualityAutoLow":"נמוכה אוטומטית","qualityBest":"מעולה","qualityHigh":"גבוהה","qualityLow":"נמוכה","qualityMedium":"ממוצעת","scale":"גודל","scaleAll":"הצג הכל","scaleFit":"התאמה מושלמת","scaleNoBorder":"ללא גבולות","title":"מאפיני פלאש","vSpace":"מרווח אנכי","validateHSpace":"המרווח האופקי חייב להיות מספר.","validateSrc":"יש להקליד את כתובת סרטון הפלאש (URL)","validateVSpace":"המרווח האנכי חייב להיות מספר.","windowMode":"מצב חלון","windowModeOpaque":"אטום","windowModeTransparent":"שקוף","windowModeWindow":"חלון"},"font":{"fontSize":{"label":"גודל","voiceLabel":"גודל","panelTitle":"גודל"},"label":"גופן","panelTitle":"גופן","voiceLabel":"גופן"},"forms":{"button":{"title":"מאפייני כפתור","text":"טקסט (ערך)","type":"סוג","typeBtn":"כפתור","typeSbm":"שליחה","typeRst":"איפוס"},"checkboxAndRadio":{"checkboxTitle":"מאפייני תיבת סימון","radioTitle":"מאפייני לחצן אפשרויות","value":"ערך","selected":"מסומן","required":"Required"},"form":{"title":"מאפיני טופס","menu":"מאפיני טופס","action":"שלח אל","method":"סוג שליחה","encoding":"קידוד"},"hidden":{"title":"מאפיני שדה חבוי","name":"שם","value":"ערך"},"select":{"title":"מאפייני שדה בחירה","selectInfo":"מידע","opAvail":"אפשרויות זמינות","value":"ערך","size":"גודל","lines":"שורות","chkMulti":"איפשור בחירות מרובות","required":"Required","opText":"טקסט","opValue":"ערך","btnAdd":"הוספה","btnModify":"שינוי","btnUp":"למעלה","btnDown":"למטה","btnSetValue":"קביעה כברירת מחדל","btnDelete":"מחיקה"},"textarea":{"title":"מאפייני איזור טקסט","cols":"עמודות","rows":"שורות"},"textfield":{"title":"מאפייני שדה טקסט","name":"שם","value":"ערך","charWidth":"רוחב לפי תווים","maxChars":"מקסימום תווים","required":"Required","type":"סוג","typeText":"טקסט","typePass":"סיסמה","typeEmail":"דוא\"ל","typeSearch":"חיפוש","typeTel":"מספר טלפון","typeUrl":"כתובת (URL)"}},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"iframe":{"border":"הראה מסגרת לחלון","noUrl":"יש להכניס כתובת לחלון.","scrolling":"אפשר פסי גלילה","title":"מאפייני חלון פנימי (iframe)","toolbar":"חלון פנימי (iframe)"},"image":{"alt":"טקסט חלופי","border":"מסגרת","btnUpload":"שליחה לשרת","button2Img":"האם להפוך את תמונת הכפתור לתמונה פשוטה?","hSpace":"מרווח אופקי","img2Button":"האם להפוך את התמונה לכפתור תמונה?","infoTab":"מידע על התמונה","linkTab":"קישור","lockRatio":"נעילת היחס","menu":"תכונות התמונה","resetSize":"איפוס הגודל","title":"מאפייני התמונה","titleButton":"מאפיני כפתור תמונה","upload":"העלאה","urlMissing":"כתובת התמונה חסרה.","vSpace":"מרווח אנכי","validateBorder":"שדה המסגרת חייב להיות מספר שלם.","validateHSpace":"שדה המרווח האופקי חייב להיות מספר שלם.","validateVSpace":"שדה המרווח האנכי חייב להיות מספר שלם."},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"smiley":{"options":"אפשרויות סמיילים","title":"הוספת סמיילי","toolbar":"סמיילי"},"language":{"button":"צור שפה","remove":"הסר שפה"},"link":{"acccessKey":"מקש גישה","advanced":"אפשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מאפייני נקודת עיגון","title":"מאפייני נקודת עיגון","name":"שם לנקודת עיגון","errorName":"יש להקליד שם לנקודת עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"י זיהוי (ID) האלמנט","anchorName":"עפ\"י שם העוגן","charset":"קידוד המשאב המקושר","cssClasses":"גיליונות עיצוב קבוצות","download":"Force Download","displayText":"Display Text","emailAddress":"כתובת הדוא\"ל","emailBody":"גוף ההודעה","emailSubject":"נושא ההודעה","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","menu":"מאפייני קישור","name":"שם","noAnchors":"(אין עוגנים זמינים בדף)","noEmail":"יש להקליד את כתובת הדוא\"ל","noUrl":"יש להקליד את כתובת הקישור (URL)","noTel":"Please type the phone number","other":"<אחר>","phoneNumber":"Phone number","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך מלא (IE)","popupLeft":"מיקום צד שמאל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלים","popupTop":"מיקום צד עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר טאב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"שם מסגרת היעד","targetPopup":"<חלון קופץ>","targetPopupName":"שם החלון הקופץ","title":"קישור","toAnchor":"עוגן בעמוד זה","toEmail":"דוא\"ל","toUrl":"כתובת (URL)","toPhone":"Phone","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העלאה"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"liststyle":{"bulletedTitle":"תכונות רשימת תבליטים","circle":"עיגול ריק","decimal":"ספרות (1, 2, 3 וכו')","disc":"עיגול מלא","lowerAlpha":"אותיות אנגליות קטנות (a, b, c, d, e וכו')","lowerRoman":"ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו')","none":"ללא","notset":"<לא נקבע>","numberedTitle":"תכונות רשימה ממוספרת","square":"ריבוע","start":"תחילת מספור","type":"סוג","upperAlpha":"אותיות אנגליות גדולות (A, B, C, D, E וכו')","upperRoman":"ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו')","validateStartNumber":"שדה תחילת המספור חייב להכיל מספר שלם."},"magicline":{"title":"הכנס פסקה כאן"},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"newpage":{"toolbar":"דף חדש"},"pagebreak":{"alt":"שבירת דף","toolbar":"הוספת שבירת דף"},"pastetext":{"button":"הדבקה כטקסט פשוט","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"preview":{"preview":"תצוגה מקדימה"},"print":{"toolbar":"הדפסה"},"removeformat":{"toolbar":"הסרת העיצוב"},"save":{"toolbar":"שמירה"},"selectall":{"toolbar":"בחירת הכל"},"showblocks":{"toolbar":"הצגת בלוקים"},"sourcearea":{"toolbar":"מקור"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"scayt":{"btn_about":"אודות SCAYT","btn_dictionaries":"מילון","btn_disable":"בטל SCAYT","btn_enable":"אפשר SCAYT","btn_langs":"שפות","btn_options":"אפשרויות","text_title":"בדיקת איות בזמן כתיבה (SCAYT)"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"widget":{"move":"לחץ וגרור להזזה","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"התעלמות","btnIgnoreAll":"התעלמות מהכל","btnReplace":"החלפה","btnReplaceAll":"החלפת הכל","btnUndo":"החזרה","changeTo":"שינוי ל","errorLoading":"שגיאה בהעלאת השירות: %s.","ieSpellDownload":"בודק האיות לא מותקן, האם להורידו?","manyChanges":"בדיקות איות הסתיימה: %1 מילים שונו","noChanges":"בדיקות איות הסתיימה: לא שונתה אף מילה","noMispell":"בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב","noSuggestions":"- אין הצעות -","notAvailable":"לא נמצא שירות זמין.","notInDic":"לא נמצא במילון","oneChange":"בדיקות איות הסתיימה: שונתה מילה אחת","progress":"בודק האיות בתהליך בדיקה....","title":"בדיקת איות","toolbar":"בדיקת איות"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/hi.js b/htdocs/includes/ckeditor/ckeditor/lang/hi.js deleted file mode 100644 index 2604bdb82e7..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/hi.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['hi']={"editor":"रिच टेक्स्ट एडिटर","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","flash":"फ़्लैश","form":"फ़ॉर्म","checkbox":"चॅक बॉक्स","radio":"रेडिओ बटन","textField":"टेक्स्ट फ़ील्ड","textarea":"टेक्स्ट एरिया","hiddenField":"गुप्त फ़ील्ड","button":"बटन","select":"चुनाव फ़ील्ड","imageButton":"तस्वीर बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिए URL","cssClass":"स्टाइल-शीट क्लास","advisoryTitle":"परामर्श शीर्शक","cssStyle":"स्टाइल","ok":"ठीक है","cancel":"रद्द करें","close":"Close","preview":"प्रीव्यू","resize":"Resize","generalTab":"सामान्य","advancedTab":"ऍड्वान्स्ड","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"टार्गेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"स्टाइल","cssClasses":"स्टाइल-शीट क्लास","width":"चौड़ाई","height":"ऊँचाई","align":"ऍलाइन","left":"दायें","right":"दायें","center":"बीच में","justify":"ब्लॉक जस्टीफ़ाई","alignLeft":"बायीं तरफ","alignRight":"दायीं तरफ","alignCenter":"Align Center","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"ब्लॉक-कोट"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"एडिटर टूलबार"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"स्वचालित","bgColorTitle":"बैक्ग्राउन्ड रंग","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"और रंग...","panelTitle":"Colors","textColorTitle":"टेक्स्ट रंग"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"टॅम्प्लेट","emptyListMsg":"(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)","insertOption":"मूल शब्दों को बदलें","options":"Template Options","selectPromptMsg":"ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):","title":"कन्टेन्ट टॅम्प्लेट"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"परामर्श शीर्शक","cssClassInputLabel":"स्टाइल-शीट क्लास","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"बायें से दायें (LTR)","langDirLabel":"भाषा लिखने की दिशा","langDirRTLLabel":"दायें से बायें (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"स्टाइल","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"खोजें","findOptions":"Find Options","findWhat":"यह खोजें:","matchCase":"केस मिलायें","matchCyclic":"Match cyclic","matchWord":"पूरा शब्द मिलायें","notFoundMsg":"आपके द्वारा दिया गया टेक्स्ट नहीं मिला","replace":"रीप्लेस","replaceAll":"सभी रिप्लेस करें","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"इससे रिप्लेस करें:","title":"खोजें और बदलें"},"fakeobjects":{"anchor":"ऐंकर इन्सर्ट/संपादन","flash":"Flash Animation","hiddenfield":"गुप्त फ़ील्ड","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs नीचे","alignAbsMiddle":"Abs ऊपर","alignBaseline":"मूल रेखा","alignTextTop":"टेक्स्ट ऊपर","bgcolor":"बैक्ग्राउन्ड रंग","chkFull":"Allow Fullscreen","chkLoop":"लूप","chkMenu":"फ़्लैश मॅन्यू का प्रयोग करें","chkPlay":"ऑटो प्ले","flashvars":"Variables for Flash","hSpace":"हॉरिज़ॉन्टल स्पेस","properties":"फ़्लैश प्रॉपर्टीज़","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"स्केल","scaleAll":"सभी दिखायें","scaleFit":"बिल्कुल फ़िट","scaleNoBorder":"कोई बॉर्डर नहीं","title":"फ़्लैश प्रॉपर्टीज़","vSpace":"वर्टिकल स्पेस","validateHSpace":"HSpace must be a number.","validateSrc":"लिंक URL टाइप करें","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"साइज़","voiceLabel":"Font Size","panelTitle":"साइज़"},"label":"फ़ॉन्ट","panelTitle":"फ़ॉन्ट","voiceLabel":"फ़ॉन्ट"},"forms":{"button":{"title":"बटन प्रॉपर्टीज़","text":"टेक्स्ट (वैल्यू)","type":"प्रकार","typeBtn":"बटन","typeSbm":"सब्मिट","typeRst":"रिसेट"},"checkboxAndRadio":{"checkboxTitle":"चॅक बॉक्स प्रॉपर्टीज़","radioTitle":"रेडिओ बटन प्रॉपर्टीज़","value":"वैल्यू","selected":"सॅलॅक्टॅड","required":"Required"},"form":{"title":"फ़ॉर्म प्रॉपर्टीज़","menu":"फ़ॉर्म प्रॉपर्टीज़","action":"क्रिया","method":"तरीका","encoding":"Encoding"},"hidden":{"title":"गुप्त फ़ील्ड प्रॉपर्टीज़","name":"नाम","value":"वैल्यू"},"select":{"title":"चुनाव फ़ील्ड प्रॉपर्टीज़","selectInfo":"सूचना","opAvail":"उपलब्ध विकल्प","value":"वैल्यू","size":"साइज़","lines":"पंक्तियाँ","chkMulti":"एक से ज्यादा विकल्प चुनने दें","required":"Required","opText":"टेक्स्ट","opValue":"वैल्यू","btnAdd":"जोड़ें","btnModify":"बदलें","btnUp":"ऊपर","btnDown":"नीचे","btnSetValue":"चुनी गई वैल्यू सॅट करें","btnDelete":"डिलीट"},"textarea":{"title":"टेक्स्त एरिया प्रॉपर्टीज़","cols":"कालम","rows":"पंक्तियां"},"textfield":{"title":"टेक्स्ट फ़ील्ड प्रॉपर्टीज़","name":"नाम","value":"वैल्यू","charWidth":"करॅक्टर की चौढ़ाई","maxChars":"अधिकतम करॅक्टर","required":"Required","type":"टाइप","typeText":"टेक्स्ट","typePass":"पास्वर्ड","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"फ़ॉर्मैट","panelTitle":"फ़ॉर्मैट","tag_address":"पता","tag_div":"शीर्षक (DIV)","tag_h1":"शीर्षक 1","tag_h2":"शीर्षक 2","tag_h3":"शीर्षक 3","tag_h4":"शीर्षक 4","tag_h5":"शीर्षक 5","tag_h6":"शीर्षक 6","tag_p":"साधारण","tag_pre":"फ़ॉर्मैटॅड"},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"वैकल्पिक टेक्स्ट","border":"बॉर्डर","btnUpload":"इसे सर्वर को भेजें","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"हॉरिज़ॉन्टल स्पेस","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"तस्वीर की जानकारी","linkTab":"लिंक","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","resetSize":"रीसॅट साइज़","title":"तस्वीर प्रॉपर्टीज़","titleButton":"तस्वीर बटन प्रॉपर्टीज़","upload":"अपलोड","urlMissing":"Image source URL is missing.","vSpace":"वर्टिकल स्पेस","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"smiley":{"options":"Smiley Options","title":"स्माइली इन्सर्ट करें","toolbar":"स्माइली"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"ऍक्सॅस की","advanced":"ऍड्वान्स्ड","advisoryContentType":"परामर्श कन्टॅन्ट प्रकार","advisoryTitle":"परामर्श शीर्शक","anchor":{"toolbar":"ऐंकर इन्सर्ट/संपादन","menu":"ऐंकर प्रॉपर्टीज़","title":"ऐंकर प्रॉपर्टीज़","name":"ऐंकर का नाम","errorName":"ऐंकर का नाम टाइप करें","remove":"Remove Anchor"},"anchorId":"ऍलीमॅन्ट Id से","anchorName":"ऐंकर नाम से","charset":"लिंक रिसोर्स करॅक्टर सॅट","cssClasses":"स्टाइल-शीट क्लास","download":"Force Download","displayText":"Display Text","emailAddress":"ई-मेल पता","emailBody":"संदेश","emailSubject":"संदेश विषय","id":"Id","info":"लिंक ","langCode":"भाषा लिखने की दिशा","langDir":"भाषा लिखने की दिशा","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","menu":"लिंक संपादन","name":"नाम","noAnchors":"(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)","noEmail":"ई-मेल पता टाइप करें","noUrl":"लिंक URL टाइप करें","noTel":"Please type the phone number","other":"<अन्य>","phoneNumber":"Phone number","popupDependent":"डिपेन्डॅन्ट (Netscape)","popupFeatures":"पॉप-अप विन्डो फ़ीचर्स","popupFullScreen":"फ़ुल स्क्रीन (IE)","popupLeft":"बायीं तरफ","popupLocationBar":"लोकेशन बार","popupMenuBar":"मॅन्यू बार","popupResizable":"आकार बदलने लायक","popupScrollBars":"स्क्रॉल बार","popupStatusBar":"स्टेटस बार","popupToolbar":"टूल बार","popupTop":"दायीं तरफ","rel":"संबंध","selectAnchor":"ऐंकर चुनें","styles":"स्टाइल","tabIndex":"टैब इन्डॅक्स","target":"टार्गेट","targetFrame":"<फ़्रेम>","targetFrameName":"टार्गेट फ़्रेम का नाम","targetPopup":"<पॉप-अप विन्डो>","targetPopupName":"पॉप-अप विन्डो का नाम","title":"लिंक","toAnchor":"इस पेज का ऐंकर","toEmail":"ई-मेल","toUrl":"URL","toPhone":"Phone","toolbar":"लिंक इन्सर्ट/संपादन","type":"लिंक प्रकार","unlink":"लिंक हटायें","upload":"अपलोड"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"newpage":{"toolbar":"नया पेज"},"pagebreak":{"alt":"पेज ब्रेक","toolbar":"पेज ब्रेक इन्सर्ट् करें"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"पेस्ट (सादा टॅक्स्ट)"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेस्ट (वर्ड से)","toolbar":"पेस्ट (वर्ड से)"},"preview":{"preview":"प्रीव्यू"},"print":{"toolbar":"प्रिन्ट"},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"save":{"toolbar":"सेव"},"selectall":{"toolbar":"सब सॅलॅक्ट करें"},"showblocks":{"toolbar":"ब्लॉक दिखायें"},"sourcearea":{"toolbar":"सोर्स"},"specialchar":{"options":"विशेष चरित्र विकल्प","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"बॉर्डर साइज़","caption":"शीर्षक","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाँया विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को क्षैतिज स्थिति में विभाजित करें","splitVertical":"सैल को लम्बाकार में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल प्रॉपर्टीज़","row":{"menu":"पंक्ति","insertBefore":"पहले पंक्ति डालें","insertAfter":"बाद में पंक्ति डालें","deleteRow":"पंक्तियाँ डिलीट करें"},"rows":"पंक्तियाँ","summary":"सारांश","title":"टेबल प्रॉपर्टीज़","toolbar":"टेबल","widthPc":"प्रतिशत","widthPx":"पिक्सैल","widthUnit":"width unit"},"undo":{"redo":"रीडू","undo":"अन्डू"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"इग्नोर","btnIgnoreAll":"सभी इग्नोर करें","btnReplace":"रिप्लेस","btnReplaceAll":"सभी रिप्लेस करें","btnUndo":"अन्डू","changeTo":"इसमें बदलें","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?","manyChanges":"वर्तनी की जाँच : %1 शब्द बदले गये","noChanges":"वर्तनी की जाँच :कोई शब्द नहीं बदला गया","noMispell":"वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई","noSuggestions":"- कोई सुझाव नहीं -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"शब्दकोश में नहीं","oneChange":"वर्तनी की जाँच : एक शब्द बदला गया","progress":"वर्तनी की जाँच (स्पॅल-चॅक) जारी है...","title":"Spell Checker","toolbar":"वर्तनी (स्पेलिंग) जाँच"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/hr.js b/htdocs/includes/ckeditor/ckeditor/lang/hr.js deleted file mode 100644 index d79a9e5f03d..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/hr.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['hr']={"editor":"Bogati uređivač teksta, %1","editorPanel":"Ploča Bogatog Uređivača Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnanje","left":"Lijevo","right":"Desno","center":"Središnje","justify":"Blok poravnanje","alignLeft":"Lijevo poravnanje","alignRight":"Desno poravnanje","alignCenter":"Align Center","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"Bez poravnanja","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidLength":"Naznačena vrijednost polja \"%1\" mora biti pozitivni broj sa ili bez važeće mjerne jedinice (%2).","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1, nedostupno","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Prečica na tipkovnici","optionDefault":"Zadano"},"about":{"copy":"Autorsko pravo © $1. Sva prava pridržana.","dlgTitle":"O CKEditoru 4","moreInfo":"Za informacije o licencama posjetite našu web stranicu:"},"basicstyles":{"bold":"Podebljano","italic":"Ukošeno","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"bidi":{"ltr":"Smjer teksta s lijeva na desno","rtl":"Smjer teksta s desna na lijevo"},"blockquote":{"toolbar":"Citat"},"notification":{"closed":"Obavijest zatvorena."},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteNotification":"Vaš preglednik Vam ne dozvoljava lijepljenje običnog teksta na ovaj način. Za lijepljenje, pritisnite %1.","pasteArea":"Okvir za lijepljenje","pasteMsg":"Zalijepite vaš sadržaj u okvir ispod i pritisnite OK."},"colorbutton":{"auto":"Automatski","bgColorTitle":"Boja pozadine","colors":{"000":"Crna","800000":"Kesten","8B4513":"Smeđa","2F4F4F":"Tamno siva","008080":"Teal","000080":"Mornarska","4B0082":"Indigo","696969":"Tamno siva","B22222":"Vatrena cigla","A52A2A":"Smeđa","DAA520":"Zlatna","006400":"Tamno zelena","40E0D0":"Tirkizna","0000CD":"Srednje plava","800080":"Ljubičasta","808080":"Siva","F00":"Crvena","FF8C00":"Tamno naranđasta","FFD700":"Zlatna","008000":"Zelena","0FF":"Cijan","00F":"Plava","EE82EE":"Ljubičasta","A9A9A9":"Mutno siva","FFA07A":"Svijetli losos","FFA500":"Naranđasto","FFFF00":"Žuto","00FF00":"Limun","AFEEEE":"Blijedo tirkizna","ADD8E6":"Svijetlo plava","DDA0DD":"Šljiva","D3D3D3":"Svijetlo siva","FFF0F5":"Lavanda rumeno","FAEBD7":"Antikno bijela","FFFFE0":"Svijetlo žuta","F0FFF0":"Med","F0FFFF":"Azurna","F0F8FF":"Alice plava","E6E6FA":"Lavanda","FFF":"Bijela","1ABC9C":"Jaka cijan","2ECC71":"Emerald","3498DB":"Svijetlo plava","9B59B6":"Ametist","4E5F70":"Sivkasto plava","F1C40F":"Žarka žuta","16A085":"Tamna cijan","27AE60":"Tamna emerald","2980B9":"Jaka plava","8E44AD":"Tamno ljubičasta","2C3E50":"Desatuirarana plava","F39C12":"Narančasta","E67E22":"Mrkva","E74C3C":"Blijedo crvena","ECF0F1":"Sjana srebrna","95A5A6":"Svijetlo sivkasta cijan","DDD":"Svijetlo siva","D35400":"Tikva","C0392B":"Jaka crvena","BDC3C7":"Srebrna","7F8C8D":"Sivkasto cijan","999":"Tamno siva"},"more":"Više boja...","panelTitle":"Boje","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Očisti","highlight":"Istaknuto","options":"Opcije boje","selected":"Odabrana boja","title":"Odaberi boju"},"templates":{"button":"Predlošci","emptyListMsg":"(Nema definiranih predložaka)","insertOption":"Zamijeni trenutne sadržaje","options":"Opcije predložaka","selectPromptMsg":"Molimo odaberite predložak koji želite otvoriti","title":"Predlošci sadržaja"},"contextmenu":{"options":"Opcije izbornika"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Savjetodavni naslov","cssClassInputLabel":"Klase stilova","edit":"Uredi DIV","inlineStyleInputLabel":"Stil u liniji","langDirLTRLabel":"S lijeva na desno (LTR)","langDirLabel":"Smjer jezika","langDirRTLLabel":"S desna na lijevo (RTL)","languageCodeInputLabel":"Jezični kod","remove":"Ukloni DIV","styleSelectLabel":"Stil","title":"Napravi DIV kontejner","toolbar":"Napravi DIV kontejner"},"elementspath":{"eleLabel":"Putanje elemenata","eleTitle":"%1 element"},"filetools":{"loadError":"Greška prilikom čitanja datoteke.","networkError":"Mrežna greška prilikom slanja datoteke.","httpError404":"HTTP greška tijekom slanja datoteke (404: datoteka nije pronađena).","httpError403":"HTTP greška tijekom slanja datoteke (403: Zabranjeno).","httpError":"HTTP greška tijekom slanja datoteke (greška status: %1).","noUrlError":"URL za slanje nije podešen.","responseError":"Neispravni odgovor servera."},"find":{"find":"Pronađi","findOptions":"Opcije traženja","findWhat":"Pronađi:","matchCase":"Usporedi mala/velika slova","matchCyclic":"Usporedi kružno","matchWord":"Usporedi cijele riječi","notFoundMsg":"Traženi tekst nije pronađen.","replace":"Zamijeni","replaceAll":"Zamijeni sve","replaceSuccessMsg":"Zamijenjeno %1 pojmova.","replaceWith":"Zamijeni s:","title":"Pronađi i zamijeni"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"flash":{"access":"Script Access","accessAlways":"Uvijek","accessNever":"Nikad","accessSameDomain":"Ista domena","alignAbsBottom":"Abs dolje","alignAbsMiddle":"Abs sredina","alignBaseline":"Bazno","alignTextTop":"Vrh teksta","bgcolor":"Boja pozadine","chkFull":"Omogući Fullscreen","chkLoop":"Ponavljaj","chkMenu":"Omogući Flash izbornik","chkPlay":"Auto Play","flashvars":"Varijable za Flash","hSpace":"HSpace","properties":"Flash svojstva","propertiesTab":"Svojstva","quality":"Kvaliteta","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Omjer","scaleAll":"Prikaži sve","scaleFit":"Točna veličina","scaleNoBorder":"Bez okvira","title":"Flash svojstva","vSpace":"VSpace","validateHSpace":"HSpace mora biti broj.","validateSrc":"Molimo upišite URL link.","validateVSpace":"VSpace mora biti broj.","windowMode":"Vrsta prozora","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Veličina","voiceLabel":"Veličina slova","panelTitle":"Veličina"},"label":"Font","panelTitle":"Naziv fonta","voiceLabel":"Font"},"forms":{"button":{"title":"Svojstva gumba","text":"Tekst (vrijednost)","type":"Vrsta","typeBtn":"Gumb","typeSbm":"Pošalji","typeRst":"Poništi"},"checkboxAndRadio":{"checkboxTitle":"Checkbox svojstva","radioTitle":"Radio Button svojstva","value":"Vrijednost","selected":"Odabrano","required":"Potrebno"},"form":{"title":"Svojstva forme","menu":"Svojstva forme","action":"Akcija","method":"Metoda","encoding":"Encoding"},"hidden":{"title":"Svojstva sakrivenog polja","name":"Ime","value":"Vrijednost"},"select":{"title":"Svojstva selection polja","selectInfo":"Info","opAvail":"Dostupne opcije","value":"Vrijednost","size":"Veličina","lines":"linija","chkMulti":"Dozvoli višestruki odabir","required":"Potrebno","opText":"Tekst","opValue":"Vrijednost","btnAdd":"Dodaj","btnModify":"Promijeni","btnUp":"Gore","btnDown":"Dolje","btnSetValue":"Postavi kao odabranu vrijednost","btnDelete":"Obriši"},"textarea":{"title":"Textarea svojstva","cols":"Kolona","rows":"Redova"},"textfield":{"title":"Svojstva tekst polja","name":"Ime","value":"Vrijednost","charWidth":"Širina","maxChars":"Najviše karaktera","required":"Potrebno","type":"Vrsta","typeText":"Tekst","typePass":"Šifra","typeEmail":"Email","typeSearch":"Traži","typeTel":"Broj telefona","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format paragrafa","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normalno","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"iframe":{"border":"Prikaži okvir IFrame-a","noUrl":"Unesite URL IFrame-a","scrolling":"Omogući trake za skrolanje","title":"IFrame svojstva","toolbar":"IFrame"},"image":{"alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Želite li promijeniti odabrani gumb u jednostavnu sliku?","hSpace":"HSpace","img2Button":"Želite li promijeniti odabranu sliku u gumb?","infoTab":"Info slike","linkTab":"Veza","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","resetSize":"Obriši veličinu","title":"Svojstva slika","titleButton":"Image Button svojstva","upload":"Pošalji","urlMissing":"Nedostaje URL slike.","vSpace":"VSpace","validateBorder":"Okvir mora biti cijeli broj.","validateHSpace":"HSpace mora biti cijeli broj","validateVSpace":"VSpace mora biti cijeli broj."},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"smiley":{"options":"Opcije smješka","title":"Ubaci smješka","toolbar":"Smješko"},"language":{"button":"Namjesti jezik","remove":"Makni jezik"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Savjetodavna vrsta sadržaja","advisoryTitle":"Savjetodavni naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","download":"Preuzmi na silu","displayText":"Prikaži tekst","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upišite e-mail adresu","noUrl":"Molimo upišite URL link","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veličina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"","targetFrameName":"Ime ciljnog okvira","targetPopup":"","targetPopupName":"Naziv popup prozora","title":"Veza","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Ubaci/promijeni vezu","type":"Vrsta veze","unlink":"Ukloni vezu","upload":"Pošalji"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"liststyle":{"bulletedTitle":"Svojstva liste","circle":"Krug","decimal":"Decimalna numeracija (1, 2, 3, itd.)","disc":"Disk","lowerAlpha":"Znakovi mala slova (a, b, c, d, e, itd.)","lowerRoman":"Romanska numeracija mala slova (i, ii, iii, iv, v, itd.)","none":"Bez","notset":"","numberedTitle":"Svojstva brojčane liste","square":"Kvadrat","start":"Početak","type":"Vrsta","upperAlpha":"Znakovi velika slova (A, B, C, D, E, itd.)","upperRoman":"Romanska numeracija velika slova (I, II, III, IV, V, itd.)","validateStartNumber":"Početak brojčane liste mora biti cijeli broj."},"magicline":{"title":"Ubaci paragraf ovdje"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"newpage":{"toolbar":"Nova stranica"},"pagebreak":{"alt":"Prijelom stranice","toolbar":"Ubaci prijelom stranice"},"pastetext":{"button":"Zalijepi kao čisti tekst","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Zalijepi kao čisti tekst"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"preview":{"preview":"Pregledaj"},"print":{"toolbar":"Ispiši"},"removeformat":{"toolbar":"Ukloni formatiranje"},"save":{"toolbar":"Snimi"},"selectall":{"toolbar":"Odaberi sve"},"showblocks":{"toolbar":"Prikaži blokove"},"sourcearea":{"toolbar":"Kôd"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebni znak"},"scayt":{"btn_about":"O SCAYT","btn_dictionaries":"Rječnici","btn_disable":"Onemogući SCAYT","btn_enable":"Omogući SCAYT","btn_langs":"Jezici","btn_options":"Opcije","text_title":"Provjeri pravopis tijekom tipkanja (SCAYT)"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"Ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"undo":{"redo":"Ponovi","undo":"Poništi"},"widget":{"move":"Klikni i povuci za pomicanje","label":"%1 widget"},"uploadwidget":{"abort":"Slanje prekinuto od strane korisnika","doneOne":"Datoteka uspješno poslana.","doneMany":"Uspješno poslano %1 datoteka.","uploadOne":"Slanje datoteke ({percentage}%)...","uploadMany":"Slanje datoteka, {current} od {max} gotovo ({percentage}%)..."},"wsc":{"btnIgnore":"Zanemari","btnIgnoreAll":"Zanemari sve","btnReplace":"Zamijeni","btnReplaceAll":"Zamijeni sve","btnUndo":"Vrati","changeTo":"Promijeni u","errorLoading":"Greška učitavanja aplikacije: %s.","ieSpellDownload":"Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?","manyChanges":"Provjera završena: Promijenjeno %1 riječi","noChanges":"Provjera završena: Nije napravljena promjena","noMispell":"Provjera završena: Nema grešaka","noSuggestions":"-Nema preporuke-","notAvailable":"Žao nam je, ali usluga trenutno nije dostupna.","notInDic":"Nije u rječniku","oneChange":"Provjera završena: Jedna riječ promjenjena","progress":"Provjera u tijeku...","title":"Provjera pravopisa","toolbar":"Provjeri pravopis"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/hu.js b/htdocs/includes/ckeditor/ckeditor/lang/hu.js deleted file mode 100644 index c37440b3626..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/hu.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['hu']={"editor":"HTML szerkesztő","editorPanel":"HTML szerkesztő panel","common":{"editorHelp":"Segítségért nyomjon ALT 0-t","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtett mező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"CSS osztályok","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Pár beállítást megváltoztatott. Biztosan be szeretné zárni az ablakot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","left":"Bal","right":"Jobbra","center":"Középre","justify":"Sorkizárt","alignLeft":"Balra","alignRight":"Jobbra","alignCenter":"Középre igazítás","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"Semmi","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidLength":"A megadott értéknek a \"%1\" mezőben pozitív számnak kell lennie, egy érvényes mértékegységgel vagy anélkül (%2).","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszővel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1, nem elérhető","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Gyorsbillentyű","optionDefault":"Alapértelmezett"},"about":{"copy":"Copyright © $1. Minden jog fenntartva.","dlgTitle":"A CKEditor 4-ről","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"bidi":{"ltr":"Szöveg iránya balról jobbra","rtl":"Szöveg iránya jobbról balra"},"blockquote":{"toolbar":"Idézet blokk"},"notification":{"closed":"Értesítés bezárva."},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztárról vagy a menüből.","pasteArea":"Beillesztési terület","pasteMsg":"Illessze be a tartalmat az alábbi mezőbe, és nyomja meg az OK-t."},"colorbutton":{"auto":"Automatikus","bgColorTitle":"Háttérszín","colors":{"000":"Fekete","800000":"Bordó","8B4513":"Barna","2F4F4F":"Sötét türkiz","008080":"Türkiz","000080":"Király kék","4B0082":"Indigó kék","696969":"Szürke","B22222":"Tégla vörös","A52A2A":"Vörös","DAA520":"Arany sárga","006400":"Sötét zöld","40E0D0":"Türkiz","0000CD":"Kék","800080":"Lila","808080":"Szürke","F00":"Piros","FF8C00":"Sötét narancs","FFD700":"Arany","008000":"Zöld","0FF":"Türkiz","00F":"Kék","EE82EE":"Rózsaszín","A9A9A9":"Sötét szürke","FFA07A":"Lazac","FFA500":"Narancs","FFFF00":"Citromsárga","00FF00":"Neon zöld","AFEEEE":"Világos türkiz","ADD8E6":"Világos kék","DDA0DD":"Világos lila","D3D3D3":"Világos szürke","FFF0F5":"Lavender Blush","FAEBD7":"Törtfehér","FFFFE0":"Világos sárga","F0FFF0":"Menta","F0FFFF":"Azúr kék","F0F8FF":"Halvány kék","E6E6FA":"Lavender","FFF":"Fehér","1ABC9C":"Erős cián","2ECC71":"Smaragd","3498DB":"Fényes kék","9B59B6":"Ametiszt","4E5F70":"Szürkéskék","F1C40F":"Világossárga","16A085":"Sötét cián","27AE60":"Sötét smaragd","2980B9":"Erős kék","8E44AD":"Sötétlila","2C3E50":"Világoskék","F39C12":"Narancs","E67E22":"Répa","E74C3C":"Sápadt vörös","ECF0F1":"Fényes ezüst","95A5A6":"Világos szürkés cián","DDD":"Világosszürke","D35400":"Tök","C0392B":"Erős vörös","BDC3C7":"Ezüst","7F8C8D":"Szürkés cián","999":"Sötétszürke"},"more":"További színek...","panelTitle":"Színek","textColorTitle":"Betűszín"},"colordialog":{"clear":"Ürítés","highlight":"Nagyítás","options":"Szín opciók","selected":"Kiválasztott","title":"Válasszon színt"},"templates":{"button":"Sablonok","emptyListMsg":"(Nincs sablon megadva)","insertOption":"Kicseréli a jelenlegi tartalmat","options":"Sablon opciók","selectPromptMsg":"Válassza ki melyik sablon nyíljon meg a szerkesztőben
(a jelenlegi tartalom elveszik):","title":"Elérhető sablonok"},"contextmenu":{"options":"Helyi menü opciók"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Azonosító","advisoryTitleInputLabel":"Tipp szöveg","cssClassInputLabel":"Stíluslap osztály","edit":"DIV szerkesztése","inlineStyleInputLabel":"Inline stílus","langDirLTRLabel":"Balról jobbra (LTR)","langDirLabel":"Nyelvi irány","langDirRTLLabel":"Jobbról balra (RTL)","languageCodeInputLabel":" Nyelv kódja","remove":"DIV eltávolítása","styleSelectLabel":"Stílus","title":"DIV tároló létrehozása","toolbar":"DIV tároló létrehozása"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"filetools":{"loadError":"Hiba történt a fájl olvasása közben.","networkError":"Hálózati hiba történt a fájl feltöltése közben.","httpError404":"HTTP hiba történt a fájl feltöltése alatt (404: A fájl nem található).","httpError403":"HTTP hiba történt a fájl feltöltése alatt (403: Tiltott).","httpError":"HTTP hiba történt a fájl feltöltése alatt (hiba státusz: %1).","noUrlError":"Feltöltési URL nincs megadva.","responseError":"Helytelen szerver válasz."},"find":{"find":"Keresés","findOptions":"Beállítások","findWhat":"Keresett szöveg:","matchCase":"Kis- és nagybetű megkülönböztetése","matchCyclic":"Ciklikus keresés","matchWord":"Csak ha ez a teljes szó","notFoundMsg":"A keresett szöveg nem található.","replace":"Csere","replaceAll":"Az összes cseréje","replaceSuccessMsg":"%1 egyezőség cserélve.","replaceWith":"Csere erre:","title":"Keresés és csere"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"flash":{"access":"Szkript hozzáférés","accessAlways":"Mindig","accessNever":"Soha","accessSameDomain":"Azonos domainről","alignAbsBottom":"Legaljára","alignAbsMiddle":"Közepére","alignBaseline":"Alapvonalhoz","alignTextTop":"Szöveg tetejére","bgcolor":"Háttérszín","chkFull":"Teljes képernyő engedélyezése","chkLoop":"Folyamatosan","chkMenu":"Flash menü engedélyezése","chkPlay":"Automata lejátszás","flashvars":"Flash változók","hSpace":"Vízsz. táv","properties":"Flash tulajdonságai","propertiesTab":"Tulajdonságok","quality":"Minőség","qualityAutoHigh":"Automata jó","qualityAutoLow":"Automata gyenge","qualityBest":"Legjobb","qualityHigh":"Jó","qualityLow":"Gyenge","qualityMedium":"Közepes","scale":"Méretezés","scaleAll":"Mindent mutat","scaleFit":"Teljes kitöltés","scaleNoBorder":"Keret nélkül","title":"Flash tulajdonságai","vSpace":"Függ. táv","validateHSpace":"A vízszintes távolsűág mezőbe csak számokat írhat.","validateSrc":"Adja meg a hivatkozás webcímét","validateVSpace":"A függőleges távolsűág mezőbe csak számokat írhat.","windowMode":"Ablak mód","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Méret","voiceLabel":"Betűméret","panelTitle":"Méret"},"label":"Betűtípus","panelTitle":"Betűtípus","voiceLabel":"Betűtípus"},"forms":{"button":{"title":"Gomb tulajdonságai","text":"Szöveg (Érték)","type":"Típus","typeBtn":"Gomb","typeSbm":"Küldés","typeRst":"Alaphelyzet"},"checkboxAndRadio":{"checkboxTitle":"Jelölőnégyzet tulajdonságai","radioTitle":"Választógomb tulajdonságai","value":"Érték","selected":"Kiválasztott","required":"Kötelező"},"form":{"title":"Űrlap tulajdonságai","menu":"Űrlap tulajdonságai","action":"Adatfeldolgozást végző hivatkozás","method":"Adatküldés módja","encoding":"Kódolás"},"hidden":{"title":"Rejtett mező tulajdonságai","name":"Név","value":"Érték"},"select":{"title":"Legördülő lista tulajdonságai","selectInfo":"Alaptulajdonságok","opAvail":"Elérhető opciók","value":"Érték","size":"Méret","lines":"sor","chkMulti":"több sor is kiválasztható","required":"Kötelező","opText":"Szöveg","opValue":"Érték","btnAdd":"Hozzáad","btnModify":"Módosít","btnUp":"Fel","btnDown":"Le","btnSetValue":"Legyen az alapértelmezett érték","btnDelete":"Töröl"},"textarea":{"title":"Szövegterület tulajdonságai","cols":"Karakterek száma egy sorban","rows":"Sorok száma"},"textfield":{"title":"Szövegmező tulajdonságai","name":"Név","value":"Érték","charWidth":"Megjelenített karakterek száma","maxChars":"Maximális karakterszám","required":"Kötelező","type":"Típus","typeText":"Szöveg","typePass":"Jelszó","typeEmail":"Ímél","typeSearch":"Keresés","typeTel":"Telefonszám","typeUrl":"URL"}},"format":{"label":"Formátum","panelTitle":"Bekezdés formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"iframe":{"border":"Legyen keret","noUrl":"Kérem írja be a iframe URL-t","scrolling":"Gördítősáv bekapcsolása","title":"IFrame Tulajdonságok","toolbar":"IFrame"},"image":{"alt":"Alternatív szöveg","border":"Keret","btnUpload":"Küldés a szerverre","button2Img":"Szeretne a kiválasztott képgombból sima képet csinálni?","hSpace":"Vízsz. táv","img2Button":"Szeretne a kiválasztott képből képgombot csinálni?","infoTab":"Alaptulajdonságok","linkTab":"Hivatkozás","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","resetSize":"Eredeti méret","title":"Kép tulajdonságai","titleButton":"Képgomb tulajdonságai","upload":"Feltöltés","urlMissing":"Hiányzik a kép URL-je.","vSpace":"Függ. táv","validateBorder":"A keret méretének egész számot kell beírni!","validateHSpace":"Vízszintes távolságnak egész számot kell beírni!","validateVSpace":"Függőleges távolságnak egész számot kell beírni!"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"smiley":{"options":"Hangulatjel opciók","title":"Hangulatjel beszúrása","toolbar":"Hangulatjelek"},"language":{"button":"Nyelv beállítása","remove":"Nyelv eltávolítása"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","download":"Kötelező letöltés","displayText":"Megjelenített szöveg","emailAddress":"E-Mail cím","emailBody":"Üzenet","emailSubject":"Üzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Írás iránya","langDir":"Írás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Szülőhöz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzői","popupFullScreen":"Teljes képernyő (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Átméretezés","popupScrollBars":"Gördítősáv","popupStatusBar":"Állapotsor","popupToolbar":"Eszköztár","popupTop":"Felső pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"","targetFrameName":"Keret neve","targetPopup":"","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"liststyle":{"bulletedTitle":"Pontozott lista tulajdonságai","circle":"Kör","decimal":"Arab számozás (1, 2, 3, stb.)","disc":"Korong","lowerAlpha":"Kisbetűs (a, b, c, d, e, stb.)","lowerRoman":"Római kisbetűs (i, ii, iii, iv, v, stb.)","none":"Nincs","notset":"","numberedTitle":"Sorszámozott lista tulajdonságai","square":"Négyzet","start":"Kezdőszám","type":"Típus","upperAlpha":"Nagybetűs (A, B, C, D, E, stb.)","upperRoman":"Római nagybetűs (I, II, III, IV, V, stb.)","validateStartNumber":"A kezdőszám nem lehet tört érték."},"magicline":{"title":"Szúrja be a bekezdést ide"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"newpage":{"toolbar":"Új oldal"},"pagebreak":{"alt":"Oldaltörés","toolbar":"Oldaltörés beillesztése"},"pastetext":{"button":"Beillesztés formázatlan szövegként","pasteNotification":"Nyomja meg a %1 gombot a beillesztéshez. A böngésző nem támogatja a beillesztést az eszköztár gombbal vagy a menüből.","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolta át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"preview":{"preview":"Előnézet"},"print":{"toolbar":"Nyomtatás"},"removeformat":{"toolbar":"Formázás eltávolítása"},"save":{"toolbar":"Mentés"},"selectall":{"toolbar":"Mindent kijelöl"},"showblocks":{"toolbar":"Blokkok megjelenítése"},"sourcearea":{"toolbar":"Forráskód"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"scayt":{"btn_about":"SCAYT névjegy","btn_dictionaries":"Szótár","btn_disable":"SCAYT letiltása","btn_enable":"SCAYT engedélyezése","btn_langs":"Nyelvek","btn_options":"Beállítások","text_title":"Helyesírás ellenőrzés gépelés közben"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"widget":{"move":"Kattints és húzd a mozgatáshoz","label":"%1 modul"},"uploadwidget":{"abort":"A feltöltést a felhasználó megszakította.","doneOne":"A fájl sikeresen feltöltve.","doneMany":"%1 fájl sikeresen feltöltve.","uploadOne":"Fájl feltöltése ({percentage}%)...","uploadMany":"Fájlok feltöltése, {current}/{max} kész ({percentage}%)..."},"wsc":{"btnIgnore":"Kihagyja","btnIgnoreAll":"Mindet kihagyja","btnReplace":"Csere","btnReplaceAll":"Összes cseréje","btnUndo":"Visszavonás","changeTo":"Módosítás","errorLoading":"Hiba a szolgáltatás host betöltése közben: %s.","ieSpellDownload":"A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?","manyChanges":"Helyesírás-ellenőrzés kész: %1 szó cserélve","noChanges":"Helyesírás-ellenőrzés kész: Nincs változtatott szó","noMispell":"Helyesírás-ellenőrzés kész: Nem találtam hibát","noSuggestions":"Nincs javaslat","notAvailable":"Sajnálom, de a szolgáltatás jelenleg nem elérhető.","notInDic":"Nincs a szótárban","oneChange":"Helyesírás-ellenőrzés kész: Egy szó cserélve","progress":"Helyesírás-ellenőrzés folyamatban...","title":"Helyesírás ellenörző","toolbar":"Helyesírás-ellenőrzés"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/id.js b/htdocs/includes/ckeditor/ckeditor/lang/id.js deleted file mode 100644 index 4538efd0a25..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['id']={"editor":"Rich Text Editor","editorPanel":"Panel Rich Text Editor","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Lebih Lanjut","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Laman Atas (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Jendela Induk (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","left":"Kiri","right":"Kanan","center":"Tengah","justify":"Rata kiri-kanan","alignLeft":"Align Left","alignRight":"Align Right","alignCenter":"Align Center","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"Tidak ada","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Nilai pada inline style merupakan pasangan nama dan nilai dengan format \"nama : nilai\", yang dipisahkan dengan titik dua.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, tidak tersedia","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Spasi","35":"End","36":"Home","46":"Hapus","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Pintasan Keyboard","optionDefault":"Default"},"about":{"copy":"Hak cipta © $1. All rights reserved.","dlgTitle":"Tentang CKEditor 4","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strikethrough","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"bidi":{"ltr":"Arah penulisan dari kiri ke kanan.","rtl":"Arah penulisan dari kanan ke kiri."},"blockquote":{"toolbar":"Kutipan Blok"},"notification":{"closed":"Pemberitahuan ditutup"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Toolbar Penyunting"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Tempel","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Area Tempel","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatic","bgColorTitle":"Warna Latar Belakang","colors":{"000":"Hitam","800000":"Merah Tua","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Abu-abu Gelap","B22222":"Merah Bata","A52A2A":"Coklat","DAA520":"Golden Rod","006400":"Hijau Gelap","40E0D0":"Turquoise","0000CD":"Biru Sedang","800080":"Ungu","808080":"Abu-abu","F00":"Merah","FF8C00":"Jingga Gelap","FFD700":"Emas","008000":"Hijau","0FF":"Cyan","00F":"Biru","EE82EE":"Violet","A9A9A9":"Abu-abu Redup","FFA07A":"Salmon Cerah","FFA500":"Jingga","FFFF00":"Kuning","00FF00":"Jeruk Lemon","AFEEEE":"Biru Hijau Pucat","ADD8E6":"Biru Cerah","DDA0DD":"Plum","D3D3D3":"Abu-abu Cerah","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Kuning Cerah","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Putih","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Warna lainnya...","panelTitle":"Warna","textColorTitle":"Warna Teks"},"colordialog":{"clear":"Hapus","highlight":"Sorot","options":"Pilihan Warna","selected":"Warna Dipilih","title":"Pilih Warna"},"templates":{"button":"Contoh","emptyListMsg":"(Tidak ada contoh didefinisikan)","insertOption":"Ganti konten sebenarnya","options":"Opsi Contoh","selectPromptMsg":"Mohon pilih contoh untuk dibuka di editor","title":"Contoh Konten"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Penasehat Judul","cssClassInputLabel":"Kelas Stylesheet","edit":"Sunting Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Kiri ke Kanan (LTR)","langDirLabel":"Arah Bahasa","langDirRTLLabel":"Kanan ke Kiri (RTL)","languageCodeInputLabel":"Kode Bahasa","remove":"Hapus Div","styleSelectLabel":"Gaya","title":"Ciptakan Wadah Div","toolbar":"Cipatakan Wadah Div"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error terjadi ketika berkas dibaca","networkError":"Jaringan error terjadi ketika mengunggah berkas","httpError404":"HTTP error terjadi ketika mengunggah berkas (404: Berkas tidak ditemukan)","httpError403":"HTTP error terjadi ketika mengunggah berkas (403: Gangguan)","httpError":"HTTP error terjadi ketika mengunggah berkas (status error: %1)","noUrlError":"Unggahan URL tidak terdefinisi","responseError":"Respon server tidak sesuai"},"find":{"find":"Temukan","findOptions":"Opsi menemukan","findWhat":"Temukan apa:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"Teks yang dipilih tidak ditemukan","replace":"Ganti","replaceAll":"Ganti Semua","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Ganti dengan:","title":"Temukan dan Ganti"},"fakeobjects":{"anchor":"Anchor","flash":"Animasi Flash","hiddenfield":"Kolom Tersembunyi","iframe":"IFrame","unknown":"Obyek Tak Dikenal"},"flash":{"access":"Script Access","accessAlways":"Selalu","accessNever":"Tidak Pernah","accessSameDomain":"Domain yang sama","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Dasar","alignTextTop":"Text Top","bgcolor":"Warna Latar Belakang","chkFull":"Izinkan Layar Penuh","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Mainkan Otomatis","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properti","quality":"Kualitas","qualityAutoHigh":"Tinggi Otomatis","qualityAutoLow":"Rendah Otomatis","qualityBest":"Terbaik","qualityHigh":"Tinggi","qualityLow":"Rendah","qualityMedium":"Sedang","scale":"Scale","scaleAll":"Perlihatkan semua","scaleFit":"Exact Fit","scaleNoBorder":"Tanpa Batas","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace harus sebuah angka","validateSrc":"URL tidak boleh kosong","validateVSpace":"VSpace harus sebuah angka","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparan","windowModeWindow":"Jendela"},"font":{"fontSize":{"label":"Ukuran","voiceLabel":"Ukuran Huruf","panelTitle":"Ukuran Huruf"},"label":"Huruf","panelTitle":"Font Name","voiceLabel":"Huruf"},"forms":{"button":{"title":"Properti Tombol","text":"Teks (Nilai)","type":"Tipe","typeBtn":"Tombol","typeSbm":"Menyerahkan","typeRst":"Atur Ulang"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Nilai","selected":"Terpilih","required":"Wajib"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Aksi","method":"Metode","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Nama","value":"Nilai"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Nilai","size":"Ukuran","lines":"garis","chkMulti":"Izinkan pemilihan ganda","required":"Wajib","opText":"Teks","opValue":"Nilai","btnAdd":"Tambah","btnModify":"Modifikasi","btnUp":"Atas","btnDown":"Bawah","btnSetValue":"Atur sebagai nilai yang dipilih","btnDelete":"Hapus"},"textarea":{"title":"Textarea Properties","cols":"Kolom","rows":"Baris"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Nilai","charWidth":"Character Width","maxChars":"Maximum Characters","required":"Wajib","type":"Tipe","typeText":"Teks","typePass":"Kata kunci","typeEmail":"Surel","typeSearch":"Cari","typeTel":"Nomor Telepon","typeUrl":"URL"}},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Membentuk"},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"iframe":{"border":"Tampilkan Batas Bingkai","noUrl":"Please type the iframe URL","scrolling":"Aktifkan Scrollbar","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Teks alternatif","border":"Batas","btnUpload":"Kirim ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Apakah anda ingin mengubah gambar yang dipilih pada tombol gambar?","infoTab":"Info Gambar","linkTab":"Tautan","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Atur Ulang Ukuran","title":"Image Properties","titleButton":"Image Button Properties","upload":"Unggah","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border harus berupa angka","validateHSpace":"HSpace harus berupa angka","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"smiley":{"options":"Opsi Smiley","title":"Sisip sebuah Smiley","toolbar":"Smiley"},"language":{"button":"Atur Bahasa","remove":"Hapus Bahasa"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Penasehat Judul","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Kelas Stylesheet","download":"Force Download","displayText":"Display Text","emailAddress":"Alamat E-mail","emailBody":"Message Body","emailSubject":"Judul Pesan","id":"Id","info":"Link Info","langCode":"Kode Bahasa","langDir":"Arah Bahasa","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Tautan","name":"Nama","noAnchors":"(No anchors available in the document)","noEmail":"Silahkan ketikkan alamat e-mail","noUrl":"Silahkan ketik URL tautan","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Hubungan","selectAnchor":"Select an Anchor","styles":"Gaya","tabIndex":"Tab Index","target":"Sasaran","targetFrame":"","targetFrameName":"Target Frame Name","targetPopup":"","targetPopupName":"Popup Window Name","title":"Tautan","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toPhone":"Phone","toolbar":"Tautan","type":"Link Type","unlink":"Unlink","upload":"Unggah"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Lingkaran","decimal":"Desimal (1, 2, 3, dst.)","disc":"Cakram","lowerAlpha":"Huruf Kecil (a, b, c, d, e, dst.)","lowerRoman":"Angka Romawi (i, ii, iii, iv, v, dst.)","none":"Tidak ada","notset":"","numberedTitle":"Numbered List Properties","square":"Persegi","start":"Mulai","type":"Tipe","upperAlpha":"Huruf Besar (A, B, C, D, E, dst.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Masukkan paragraf disini"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"newpage":{"toolbar":"Halaman Baru"},"pagebreak":{"alt":"Halaman Istirahat","toolbar":"Sisip Halaman Istirahat untuk Pencetakan "},"pastetext":{"button":"Tempel sebagai teks polos","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"preview":{"preview":"Pratinjau"},"print":{"toolbar":"Cetak"},"removeformat":{"toolbar":"Hapus Format"},"save":{"toolbar":"Simpan"},"selectall":{"toolbar":"Pilih Semua"},"showblocks":{"toolbar":"Perlihatkan Blok"},"sourcearea":{"toolbar":"Sumber"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"widget":{"move":"Tekan dan geser untuk memindahkan","label":"%1 widget"},"uploadwidget":{"abort":"Pengunggahan dibatalkan oleh pengguna","doneOne":"Berkas telah berhasil diunggah","doneMany":"Pengunggahan berkas %1 berhasil","uploadOne":"Mengunggah berkas ({percentage}%)...","uploadMany":"Pengunggahan berkas {current} dari {max} berhasil ({percentage}%)..."},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Checker","toolbar":"Check Spelling"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/is.js b/htdocs/includes/ckeditor/ckeditor/lang/is.js deleted file mode 100644 index f6eb2d6686c..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/is.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['is']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"Í lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","left":"Vinstri","right":"Hægri","center":"Miðjað","justify":"Jafna báðum megin","alignLeft":"Vinstrijöfnun","alignRight":"Hægrijöfnun","alignCenter":"Align Center","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, unavailable","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"About CKEditor 4","moreInfo":"For licensing information please visit our web site:"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Inndráttur"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Paste Area","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Sjálfval","bgColorTitle":"Bakgrunnslitur","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Fleiri liti...","panelTitle":"Colors","textColorTitle":"Litur texta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Sniðmát","emptyListMsg":"(Ekkert sniðmát er skilgreint!)","insertOption":"Skipta út raunverulegu innihaldi","options":"Template Options","selectPromptMsg":"Veldu sniðmát til að opna í ritlinum.
(Núverandi innihald víkur fyrir því!):","title":"Innihaldssniðmát"},"contextmenu":{"options":"Context Menu Options"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Leita","findOptions":"Find Options","findWhat":"Leita að:","matchCase":"Gera greinarmun á¡ há¡- og lágstöfum","matchCyclic":"Match cyclic","matchWord":"Aðeins heil orð","notFoundMsg":"Leitartexti fannst ekki!","replace":"Skipta út","replaceAll":"Skipta út allsstaðar","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Skipta út fyrir:","title":"Finna og skipta"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs neðst","alignAbsMiddle":"Abs miðjuð","alignBaseline":"Grunnlína","alignTextTop":"Efri brún texta","bgcolor":"Bakgrunnslitur","chkFull":"Allow Fullscreen","chkLoop":"Endurtekning","chkMenu":"Sýna Flash-valmynd","chkPlay":"Sjálfvirk spilun","flashvars":"Variables for Flash","hSpace":"Vinstri bil","properties":"Eigindi Flash","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Skali","scaleAll":"Sýna allt","scaleFit":"Fella skala að stærð","scaleNoBorder":"Án ramma","title":"Eigindi Flash","vSpace":"Hægri bil","validateHSpace":"HSpace must be a number.","validateSrc":"Sláðu inn veffang stiklunnar!","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Leturstærð ","voiceLabel":"Font Size","panelTitle":"Leturstærð "},"label":"Leturgerð ","panelTitle":"Leturgerð ","voiceLabel":"Leturgerð "},"forms":{"button":{"title":"Eigindi hnapps","text":"Texti","type":"Gerð","typeBtn":"Hnappur","typeSbm":"Staðfesta","typeRst":"Hreinsa"},"checkboxAndRadio":{"checkboxTitle":"Eigindi markreits","radioTitle":"Eigindi valhnapps","value":"Gildi","selected":"Valið","required":"Required"},"form":{"title":"Eigindi innsláttarforms","menu":"Eigindi innsláttarforms","action":"Aðgerð","method":"Aðferð","encoding":"Encoding"},"hidden":{"title":"Eigindi falins svæðis","name":"Nafn","value":"Gildi"},"select":{"title":"Eigindi lista","selectInfo":"Upplýsingar","opAvail":"Kostir","value":"Gildi","size":"Stærð","lines":"línur","chkMulti":"Leyfa fleiri kosti","required":"Required","opText":"Texti","opValue":"Gildi","btnAdd":"Bæta við","btnModify":"Breyta","btnUp":"Upp","btnDown":"Niður","btnSetValue":"Merkja sem valið","btnDelete":"Eyða"},"textarea":{"title":"Eigindi textasvæðis","cols":"Dálkar","rows":"Línur"},"textfield":{"title":"Eigindi textareits","name":"Nafn","value":"Gildi","charWidth":"Breidd (leturtákn)","maxChars":"Hámarksfjöldi leturtákna","required":"Required","type":"Gerð","typeText":"Texti","typePass":"Lykilorð","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"Vefslóð"}},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"horizontalrule":{"toolbar":"Lóðrétt lína"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alt":"Baklægur texti","border":"Rammi","btnUpload":"Hlaða upp","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Vinstri bil","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Almennt","linkTab":"Stikla","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","resetSize":"Reikna stærð","title":"Eigindi myndar","titleButton":"Eigindi myndahnapps","upload":"Hlaða upp","urlMissing":"Image source URL is missing.","vSpace":"Hægri bil","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"smiley":{"options":"Smiley Options","title":"Velja svip","toolbar":"Svipur"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Skammvalshnappur","advanced":"Tæknilegt","advisoryContentType":"Tegund innihalds","advisoryTitle":"Titill","anchor":{"toolbar":"Stofna/breyta kaflamerki","menu":"Eigindi kaflamerkis","title":"Eigindi kaflamerkis","name":"Nafn bókamerkis","errorName":"Sláðu inn nafn bókamerkis!","remove":"Remove Anchor"},"anchorId":"Eftir auðkenni einingar","anchorName":"Eftir akkerisnafni","charset":"Táknróf","cssClasses":"Stílsniðsflokkur","download":"Force Download","displayText":"Display Text","emailAddress":"Netfang","emailBody":"Meginmál","emailSubject":"Efni","id":"Auðkenni","info":"Almennt","langCode":"Lesstefna","langDir":"Lesstefna","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","menu":"Breyta stiklu","name":"Nafn","noAnchors":"","noEmail":"Sláðu inn netfang!","noUrl":"Sláðu inn veffang stiklunnar!","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Háð venslum (Netscape)","popupFeatures":"Eigindi sprettiglugga","popupFullScreen":"Heilskjár (IE)","popupLeft":"Fjarlægð frá vinstri","popupLocationBar":"Fanglína","popupMenuBar":"Vallína","popupResizable":"Resizable","popupScrollBars":"Skrunstikur","popupStatusBar":"Stöðustika","popupToolbar":"Verkfærastika","popupTop":"Fjarlægð frá efri brún","rel":"Relationship","selectAnchor":"Veldu akkeri","styles":"Stíll","tabIndex":"Raðnúmer innsláttarreits","target":"Mark","targetFrame":"","targetFrameName":"Nafn markglugga","targetPopup":"","targetPopupName":"Nafn sprettiglugga","title":"Stikla","toAnchor":"Bókamerki á þessari síðu","toEmail":"Netfang","toUrl":"Vefslóð","toPhone":"Phone","toolbar":"Stofna/breyta stiklu","type":"Stikluflokkur","unlink":"Fjarlægja stiklu","upload":"Senda upp"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"liststyle":{"bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","disc":"Disc","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Ný síða"},"pagebreak":{"alt":"Page Break","toolbar":"Setja inn síðuskil"},"pastetext":{"button":"Líma sem ósniðinn texta","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Líma sem ósniðinn texta"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"preview":{"preview":"Forskoða"},"print":{"toolbar":"Prenta"},"removeformat":{"toolbar":"Fjarlægja snið"},"save":{"toolbar":"Vista"},"selectall":{"toolbar":"Velja allt"},"showblocks":{"toolbar":"Sýna blokkir"},"sourcearea":{"toolbar":"Kóði"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Áfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Hunsa","btnIgnoreAll":"Hunsa allt","btnReplace":"Skipta","btnReplaceAll":"Skipta öllu","btnUndo":"Til baka","changeTo":"Tillaga","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Villuleit ekki sett upp.
Viltu setja hana upp?","manyChanges":"Villuleit lokið: %1 orðum breytt","noChanges":"Villuleit lokið: Engu orði breytt","noMispell":"Villuleit lokið: Engin villa fannst","noSuggestions":"- engar tillögur -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Ekki í orðabókinni","oneChange":"Villuleit lokið: Einu orði breytt","progress":"Villuleit í gangi...","title":"Spell Checker","toolbar":"Villuleit"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/it.js b/htdocs/includes/ckeditor/ckeditor/lang/it.js deleted file mode 100644 index 17b81d4fdd1..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/it.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['it']={"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","left":"Sinistra","right":"Destra","center":"Centrato","justify":"Giustifica","alignLeft":"Allinea a sinistra","alignRight":"Allinea a destra","alignCenter":"Allinea al centro","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidLength":"Il valore specificato per il campo \"%1\" deve essere un numero positivo con o senza un'unità di misura valida (%2).","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1, non disponibile","keyboard":{"8":"Backspace","13":"Invio","16":"Maiusc","17":"Ctrl","18":"Alt","32":"Spazio","35":"Fine","36":"Inizio","46":"Canc","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Comando"},"keyboardShortcut":"Scorciatoia da tastiera","optionDefault":"Predefinito"},"about":{"copy":"Copyright © $1. Tutti i diritti riservati.","dlgTitle":"Informazioni su CKEditor 4","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"bidi":{"ltr":"Direzione del testo da sinistra verso destra","rtl":"Direzione del testo da destra verso sinistra"},"blockquote":{"toolbar":"Citazione"},"notification":{"closed":"Notifica chiusa."},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteNotification":"Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.","pasteArea":"Area dove incollare","pasteMsg":"Incollare il proprio contenuto all'interno dell'area sottostante e premere OK."},"colorbutton":{"auto":"Automatico","bgColorTitle":"Colore sfondo","colors":{"000":"Nero","800000":"Marrone Castagna","8B4513":"Marrone Cuoio","2F4F4F":"Grigio Fumo di Londra","008080":"Acquamarina","000080":"Blu Oceano","4B0082":"Indigo","696969":"Grigio Scuro","B22222":"Giallo Fiamma","A52A2A":"Marrone","DAA520":"Giallo Mimosa","006400":"Verde Scuro","40E0D0":"Turchese","0000CD":"Blue Scuro","800080":"Viola","808080":"Grigio","F00":"Rosso","FF8C00":"Arancio Scuro","FFD700":"Oro","008000":"Verde","0FF":"Ciano","00F":"Blu","EE82EE":"Violetto","A9A9A9":"Grigio Scuro","FFA07A":"Salmone","FFA500":"Arancio","FFFF00":"Giallo","00FF00":"Lime","AFEEEE":"Turchese Chiaro","ADD8E6":"Blu Chiaro","DDA0DD":"Rosso Ciliegia","D3D3D3":"Grigio Chiaro","FFF0F5":"Lavanda Chiara","FAEBD7":"Bianco Antico","FFFFE0":"Giallo Chiaro","F0FFF0":"Verde Mela","F0FFFF":"Azzurro","F0F8FF":"Celeste","E6E6FA":"Lavanda","FFF":"Bianco","1ABC9C":"Ciano intenso","2ECC71":"Smeraldo","3498DB":"Blu luminoso","9B59B6":"Ametista","4E5F70":"Blu grigiastro","F1C40F":"Giallo vivido","16A085":"Ciano scuro","27AE60":"Smeraldo scuro","2980B9":"Blu intenso","8E44AD":"Viola scuro","2C3E50":"Blu desaturato","F39C12":"Arancio","E67E22":"Carota","E74C3C":"Rosso pallido","ECF0F1":"Argento luminoso","95A5A6":"Ciano grigiastro chiaro","DDD":"Grigio chiaro","D35400":"Zucca","C0392B":"Rosso intenso","BDC3C7":"Argento","7F8C8D":"Ciano grigiastro","999":"Grigio scuro"},"more":"Altri colori...","panelTitle":"Colori","textColorTitle":"Colore testo"},"colordialog":{"clear":"cancella","highlight":"Evidenzia","options":"Opzioni colore","selected":"Seleziona il colore","title":"Selezionare il colore"},"templates":{"button":"Modelli","emptyListMsg":"(Nessun modello definito)","insertOption":"Cancella il contenuto corrente","options":"Opzioni del Modello","selectPromptMsg":"Seleziona il modello da aprire nell'editor","title":"Contenuto dei modelli"},"contextmenu":{"options":"Opzioni del menù contestuale"},"copyformatting":{"label":"Copia formattazione","notification":{"copied":"Formattazione copiata","applied":"Formattazione applicata","canceled":"Formattazione annullata","failed":"Formattazione fallita. Non è possibile applicare stili senza averli prima copiati."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Titolo Avviso","cssClassInputLabel":"Classi di stile","edit":"Modifica DIV","inlineStyleInputLabel":"Stile Inline","langDirLTRLabel":"Da sinistra a destra (LTR)","langDirLabel":"Direzione di scrittura","langDirRTLLabel":"Da destra a sinistra (RTL)","languageCodeInputLabel":"Codice lingua","remove":"Rimuovi DIV","styleSelectLabel":"Stile","title":"Crea DIV contenitore","toolbar":"Crea DIV contenitore"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"filetools":{"loadError":"Si è verificato un errore durante la lettura del file.","networkError":"Si è verificato un errore di rete durante il caricamento del file.","httpError404":"Si è verificato un errore HTTP durante il caricamento del file (404: file non trovato).","httpError403":"Si è verificato un errore HTTP durante il caricamento del file (403: accesso negato).","httpError":"Si è verificato un errore HTTP durante il caricamento del file (stato dell'errore: %1).","noUrlError":"L'URL per il caricamento non è stato definito.","responseError":"La risposta del server non è corretta."},"find":{"find":"Trova","findOptions":"Opzioni di ricerca","findWhat":"Trova:","matchCase":"Maiuscole/minuscole","matchCyclic":"Ricerca ciclica","matchWord":"Solo parole intere","notFoundMsg":"L'elemento cercato non è stato trovato.","replace":"Sostituisci","replaceAll":"Sostituisci tutto","replaceSuccessMsg":"%1 occorrenza(e) sostituite.","replaceWith":"Sostituisci con:","title":"Cerca e Sostituisci"},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"flash":{"access":"Accesso Script","accessAlways":"Sempre","accessNever":"Mai","accessSameDomain":"Solo stesso dominio","alignAbsBottom":"In basso assoluto","alignAbsMiddle":"Centrato assoluto","alignBaseline":"Linea base","alignTextTop":"In alto al testo","bgcolor":"Colore sfondo","chkFull":"Permetti la modalità tutto schermo","chkLoop":"Riavvio automatico","chkMenu":"Abilita Menu di Flash","chkPlay":"Avvio Automatico","flashvars":"Variabili per Flash","hSpace":"HSpace","properties":"Proprietà Oggetto Flash","propertiesTab":"Proprietà","quality":"Qualità","qualityAutoHigh":"Alta Automatica","qualityAutoLow":"Bassa Automatica","qualityBest":"Massima","qualityHigh":"Alta","qualityLow":"Bassa","qualityMedium":"Intermedia","scale":"Ridimensiona","scaleAll":"Mostra Tutto","scaleFit":"Dimensione Esatta","scaleNoBorder":"Senza Bordo","title":"Proprietà Oggetto Flash","vSpace":"VSpace","validateHSpace":"L'HSpace dev'essere un numero.","validateSrc":"Devi inserire l'URL del collegamento","validateVSpace":"Il VSpace dev'essere un numero.","windowMode":"Modalità finestra","windowModeOpaque":"Opaca","windowModeTransparent":"Trasparente","windowModeWindow":"Finestra"},"font":{"fontSize":{"label":"Dimensione","voiceLabel":"Dimensione Carattere","panelTitle":"Dimensione"},"label":"Carattere","panelTitle":"Carattere","voiceLabel":"Carattere"},"forms":{"button":{"title":"Proprietà bottone","text":"Testo (Valore)","type":"Tipo","typeBtn":"Bottone","typeSbm":"Invio","typeRst":"Annulla"},"checkboxAndRadio":{"checkboxTitle":"Proprietà checkbox","radioTitle":"Proprietà radio button","value":"Valore","selected":"Selezionato","required":"Richiesto"},"form":{"title":"Proprietà modulo","menu":"Proprietà modulo","action":"Azione","method":"Metodo","encoding":"Codifica"},"hidden":{"title":"Proprietà campo nascosto","name":"Nome","value":"Valore"},"select":{"title":"Proprietà menu di selezione","selectInfo":"Info","opAvail":"Opzioni disponibili","value":"Valore","size":"Dimensione","lines":"righe","chkMulti":"Permetti selezione multipla","required":"Richiesto","opText":"Testo","opValue":"Valore","btnAdd":"Aggiungi","btnModify":"Modifica","btnUp":"Su","btnDown":"Gi","btnSetValue":"Imposta come predefinito","btnDelete":"Rimuovi"},"textarea":{"title":"Proprietà area di testo","cols":"Colonne","rows":"Righe"},"textfield":{"title":"Proprietà campo di testo","name":"Nome","value":"Valore","charWidth":"Larghezza","maxChars":"Numero massimo di caratteri","required":"Richiesto","type":"Tipo","typeText":"Testo","typePass":"Password","typeEmail":"Email","typeSearch":"Cerca","typeTel":"Numero di telefono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"iframe":{"border":"Mostra il bordo","noUrl":"Inserire l'URL del campo IFrame","scrolling":"Abilita scrollbar","title":"Proprietà IFrame","toolbar":"IFrame"},"image":{"alt":"Testo alternativo","border":"Bordo","btnUpload":"Invia al server","button2Img":"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?","hSpace":"HSpace","img2Button":"Vuoi trasferomare l'immagine selezionata in un bottone immagine?","infoTab":"Informazioni immagine","linkTab":"Collegamento","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","resetSize":"Reimposta dimensione","title":"Proprietà immagine","titleButton":"Proprietà bottone immagine","upload":"Carica","urlMissing":"Manca l'URL dell'immagine.","vSpace":"VSpace","validateBorder":"Il campo Bordo deve essere un numero intero.","validateHSpace":"Il campo HSpace deve essere un numero intero.","validateVSpace":"Il campo VSpace deve essere un numero intero."},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"smiley":{"options":"Opzioni Smiley","title":"Inserisci emoticon","toolbar":"Emoticon"},"language":{"button":"Imposta lingua","remove":"Rimuovi lingua"},"link":{"acccessKey":"Scorciatoia da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","download":"Forza scaricamento","displayText":"Mostra testo","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","noTel":"Inserire il numero di telefono","other":"","phoneNumber":"Numero di telefono","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nel testo","toEmail":"E-Mail","toUrl":"URL","toPhone":"Telefono","toolbar":"Collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"liststyle":{"bulletedTitle":"Proprietà liste puntate","circle":"Cerchio","decimal":"Decimale (1, 2, 3, ecc.)","disc":"Disco","lowerAlpha":"Alfabetico minuscolo (a, b, c, d, e, ecc.)","lowerRoman":"Numerazione Romana minuscola (i, ii, iii, iv, v, ecc.)","none":"Nessuno","notset":"","numberedTitle":"Proprietà liste numerate","square":"Quadrato","start":"Inizio","type":"Tipo","upperAlpha":"Alfabetico maiuscolo (A, B, C, D, E, ecc.)","upperRoman":"Numerazione Romana maiuscola (I, II, III, IV, V, ecc.)","validateStartNumber":"Il numero di inizio di una lista numerata deve essere un numero intero."},"magicline":{"title":"Inserisci paragrafo qui"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"newpage":{"toolbar":"Nuova pagina"},"pagebreak":{"alt":"Interruzione di pagina","toolbar":"Inserisci interruzione di pagina per la stampa"},"pastetext":{"button":"Incolla come testo semplice","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"preview":{"preview":"Anteprima"},"print":{"toolbar":"Stampa"},"removeformat":{"toolbar":"Elimina formattazione"},"save":{"toolbar":"Salva"},"selectall":{"toolbar":"Seleziona tutto"},"showblocks":{"toolbar":"Visualizza Blocchi"},"sourcearea":{"toolbar":"Sorgente"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"scayt":{"btn_about":"About COMS","btn_dictionaries":"Dizionari","btn_disable":"Disabilita COMS","btn_enable":"Abilita COMS","btn_langs":"Lingue","btn_options":"Opzioni","text_title":"Controllo Ortografico Mentre Scrivi"},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"undo":{"redo":"Ripristina","undo":"Annulla"},"widget":{"move":"Fare clic e trascinare per spostare","label":"Widget %1"},"uploadwidget":{"abort":"Caricamento interrotto dall'utente.","doneOne":"Il file è stato caricato correttamente.","doneMany":"%1 file sono stati caricati correttamente.","uploadOne":"Caricamento del file ({percentage}%)...","uploadMany":"Caricamento dei file, {current} di {max} completati ({percentage}%)..."},"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora tutto","btnReplace":"Cambia","btnReplaceAll":"Cambia tutto","btnUndo":"Annulla","changeTo":"Cambia in","errorLoading":"Errore nel caricamento dell'host col servizio applicativo: %s.","ieSpellDownload":"Contollo ortografico non installato. Lo vuoi scaricare ora?","manyChanges":"Controllo ortografico completato: %1 parole cambiate","noChanges":"Controllo ortografico completato: nessuna parola cambiata","noMispell":"Controllo ortografico completato: nessun errore trovato","noSuggestions":"- Nessun suggerimento -","notAvailable":"Il servizio non è momentaneamente disponibile.","notInDic":"Non nel dizionario","oneChange":"Controllo ortografico completato: 1 parola cambiata","progress":"Controllo ortografico in corso","title":"Controllo ortografico","toolbar":"Correttore ortografico"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/ja.js b/htdocs/includes/ckeditor/ckeditor/lang/ja.js deleted file mode 100644 index 492ba7eb0d6..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/ja.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['ja']={"editor":"リッチテキストエディタ","editorPanel":"リッチテキストエディタパネル","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバブラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"1行テキスト","textarea":"テキストエリア","hiddenField":"不可視フィールド","button":"ボタン","select":"選択フィールド","imageButton":"画像ボタン","notSet":"<なし>","id":"Id","name":"Name属性","langDir":"文字表記の方向","langDirLtr":"左から右 (LTR)","langDirRtl":"右から左 (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"閉じる","preview":"プレビュー","resize":"ドラッグしてリサイズ","generalTab":"全般","advancedTab":"高度な設定","validateNumberFailed":"値が数値ではありません","confirmNewPage":"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか?","confirmCancel":"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか?","options":"オプション","target":"ターゲット","targetNew":"新しいウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"同じウィンドウ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","left":"左","right":"右","center":"中央","justify":"両端揃え","alignLeft":"左揃え","alignRight":"右揃え","alignCenter":"Align Center","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"なし","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"入力された \"%1\" 項目の値は、CSSの大きさ(px, %, in, cm, mm, em, ex, pt, または pc)が正しいものである/ないに関わらず、正の値である必要があります。","invalidHtmlLength":"入力された \"%1\" 項目の値は、HTMLの大きさ(px または %)が正しいものである/ないに関わらず、正の値である必要があります。","invalidInlineStyle":"入力されたインラインスタイルの値は、\"名前 : 値\" のフォーマットのセットで、複数の場合はセミコロンで区切られている形式である必要があります。","cssLengthTooltip":"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1, 利用不可能","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"キーボードショートカット","optionDefault":"Default"},"about":{"copy":"Copyright © $1. All rights reserved.","dlgTitle":"CKEditorについて","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"下付き","superscript":"上付き","underline":"下線"},"bidi":{"ltr":"テキストの向き : 左から右へ","rtl":"テキストの向き : 右から左へ"},"blockquote":{"toolbar":"ブロック引用文"},"notification":{"closed":"通知を閉じました。"},"toolbar":{"toolbarCollapse":"ツールバーを閉じる","toolbarExpand":"ツールバーを開く","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編集ツールバー"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作を自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"貼り付け場所","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"自動","bgColorTitle":"背景色","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"その他の色...","panelTitle":"色","textColorTitle":"文字色"},"colordialog":{"clear":"クリア","highlight":"ハイライト","options":"カラーオプション","selected":"選択された色","title":"色選択"},"templates":{"button":"テンプレート","emptyListMsg":"(テンプレートが定義されていません)","insertOption":"現在のエディタの内容と置き換えます","options":"テンプレートオプション","selectPromptMsg":"エディターで使用するテンプレートを選択してください。
(現在のエディタの内容は失われます):","title":"内容テンプレート"},"contextmenu":{"options":"コンテキストメニューオプション"},"copyformatting":{"label":"フォーマットをコピー","notification":{"copied":"コピーされたフォーマット","applied":"フォーマットを適用しました","canceled":"フォーマットを取り消しました","failed":"フォーマットに失敗しました。最初にフォーマットをコピーしてください。"}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Title属性","cssClassInputLabel":"スタイルシートクラス","edit":"Divコンテナを編集","inlineStyleInputLabel":"インラインスタイル","langDirLTRLabel":"左から右 (LTR)","langDirLabel":"文字表記の方向","langDirRTLLabel":"右から左 (RTL)","languageCodeInputLabel":" 言語コード","remove":"Divコンテナを削除","styleSelectLabel":"スタイル","title":"Divコンテナを作成","toolbar":"Divコンテナを作成"},"elementspath":{"eleLabel":"要素パス","eleTitle":"%1 要素"},"filetools":{"loadError":"ファイルの読み込み中にエラーが発生しました。","networkError":"ファイルのアップロード中にネットワークエラーが発生しました。","httpError404":"ファイルのアップロード中にHTTPエラーが発生しました。(404: File not found)","httpError403":"ファイルのアップロード中にHTTPエラーが発生しました。(403: Forbidden)","httpError":"ファイルのアップロード中にHTTPエラーが発生しました。(error status: %1)","noUrlError":"アップロードURLが定義されていません。","responseError":"サーバーの応答が不正です。"},"find":{"find":"検索","findOptions":"検索オプション","findWhat":"検索する文字列:","matchCase":"大文字と小文字を区別する","matchCyclic":"末尾に逹したら先頭に戻る","matchWord":"単語単位で探す","notFoundMsg":"指定された文字列は見つかりませんでした。","replace":"置換","replaceAll":"すべて置換","replaceSuccessMsg":"%1 個置換しました。","replaceWith":"置換後の文字列:","title":"検索と置換"},"fakeobjects":{"anchor":"アンカー","flash":"Flash Animation","hiddenfield":"不可視フィールド","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"スクリプトアクセス(AllowScriptAccess)","accessAlways":"すべての場合に通信可能(Always)","accessNever":"すべての場合に通信不可能(Never)","accessSameDomain":"同一ドメインのみに通信可能(Same domain)","alignAbsBottom":"下部(絶対的)","alignAbsMiddle":"中央(絶対的)","alignBaseline":"ベースライン","alignTextTop":"テキスト上部","bgcolor":"背景色","chkFull":"フルスクリーン許可","chkLoop":"ループ再生","chkMenu":"Flashメニュー可能","chkPlay":"再生","flashvars":"フラッシュに渡す変数(FlashVars)","hSpace":"横間隔","properties":"Flash プロパティ","propertiesTab":"プロパティ","quality":"画質","qualityAutoHigh":"自動/高","qualityAutoLow":"自動/低","qualityBest":"品質優先","qualityHigh":"高","qualityLow":"低","qualityMedium":"中","scale":"拡大縮小設定","scaleAll":"すべて表示","scaleFit":"上下左右にフィット","scaleNoBorder":"外が見えない様に拡大","title":"Flash プロパティ","vSpace":"縦間隔","validateHSpace":"横間隔は数値で入力してください。","validateSrc":"リンクURLを入力してください。","validateVSpace":"縦間隔は数値で入力してください。","windowMode":"ウィンドウモード","windowModeOpaque":"背景を不透明設定","windowModeTransparent":"背景を透過設定","windowModeWindow":"標準"},"font":{"fontSize":{"label":"サイズ","voiceLabel":"フォントサイズ","panelTitle":"フォントサイズ"},"label":"フォント","panelTitle":"フォント","voiceLabel":"フォント"},"forms":{"button":{"title":"ボタン プロパティ","text":"テキスト (値)","type":"タイプ","typeBtn":"ボタン","typeSbm":"送信","typeRst":"リセット"},"checkboxAndRadio":{"checkboxTitle":"チェックボックスのプロパティ","radioTitle":"ラジオボタンのプロパティ","value":"値","selected":"選択済み","required":"必須"},"form":{"title":"フォームのプロパティ","menu":"フォームのプロパティ","action":"アクション (action)","method":"メソッド (method)","encoding":"エンコード方式 (encoding)"},"hidden":{"title":"不可視フィールド プロパティ","name":"名前 (name)","value":"値 (value)"},"select":{"title":"選択フィールドのプロパティ","selectInfo":"情報","opAvail":"利用可能なオプション","value":"選択項目値","size":"サイズ","lines":"行","chkMulti":"複数選択を許可","required":"必須","opText":"選択項目名","opValue":"値","btnAdd":"追加","btnModify":"編集","btnUp":"上へ","btnDown":"下へ","btnSetValue":"選択した値を設定","btnDelete":"削除"},"textarea":{"title":"テキストエリア プロパティ","cols":"列","rows":"行"},"textfield":{"title":"1行テキスト プロパティ","name":"名前","value":"値","charWidth":"サイズ","maxChars":"最大長","required":"必須","type":"タイプ","typeText":"テキスト","typePass":"パスワード入力","typeEmail":"メール","typeSearch":"検索","typeTel":"電話番号","typeUrl":"URL"}},"format":{"label":"書式","panelTitle":"段落の書式","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出し 1","tag_h2":"見出し 2","tag_h3":"見出し 3","tag_h4":"見出し 4","tag_h5":"見出し 5","tag_h6":"見出し 6","tag_p":"標準","tag_pre":"書式付き"},"horizontalrule":{"toolbar":"水平線"},"iframe":{"border":"フレームの枠を表示","noUrl":"iframeのURLを入力してください。","scrolling":"スクロールバーの表示を許可","title":"iFrameのプロパティ","toolbar":"IFrame"},"image":{"alt":"代替テキスト","border":"枠線の幅","btnUpload":"サーバーに送信","button2Img":"選択した画像ボタンを画像に変換しますか?","hSpace":"水平間隔","img2Button":"選択した画像を画像ボタンに変換しますか?","infoTab":"画像情報","linkTab":"リンク","lockRatio":"比率を固定","menu":"画像のプロパティ","resetSize":"サイズをリセット","title":"画像のプロパティ","titleButton":"画像ボタンのプロパティ","upload":"アップロード","urlMissing":"画像のURLを入力してください。","vSpace":"垂直間隔","validateBorder":"枠線の幅は数値で入力してください。","validateHSpace":"水平間隔は数値で入力してください。","validateVSpace":"垂直間隔は数値で入力してください。"},"indent":{"indent":"インデント","outdent":"インデント解除"},"smiley":{"options":"絵文字オプション","title":"顔文字挿入","toolbar":"絵文字"},"language":{"button":"言語を設定","remove":"言語を削除"},"link":{"acccessKey":"アクセスキー","advanced":"高度な設定","advisoryContentType":"Content Type属性","advisoryTitle":"Title属性","anchor":{"toolbar":"アンカー挿入/編集","menu":"アンカーの編集","title":"アンカーのプロパティ","name":"アンカー名","errorName":"アンカー名を入力してください。","remove":"アンカーを削除"},"anchorId":"エレメントID","anchorName":"アンカー名","charset":"リンク先のcharset","cssClasses":"スタイルシートクラス","download":"強制的にダウンロード","displayText":"表示文字","emailAddress":"E-Mail アドレス","emailBody":"本文","emailSubject":"件名","id":"Id","info":"ハイパーリンク情報","langCode":"言語コード","langDir":"文字表記の方向","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","menu":"リンクを編集","name":"Name属性","noAnchors":"(このドキュメント内にアンカーはありません)","noEmail":"メールアドレスを入力してください。","noUrl":"リンクURLを入力してください。","noTel":"Please type the phone number","other":"<その他の>","phoneNumber":"Phone number","popupDependent":"開いたウィンドウに連動して閉じる (Netscape)","popupFeatures":"ポップアップウィンドウ特徴","popupFullScreen":"全画面モード(IE)","popupLeft":"左端からの座標で指定","popupLocationBar":"ロケーションバー","popupMenuBar":"メニューバー","popupResizable":"サイズ可変","popupScrollBars":"スクロールバー","popupStatusBar":"ステータスバー","popupToolbar":"ツールバー","popupTop":"上端からの座標で指定","rel":"関連リンク","selectAnchor":"アンカーを選択","styles":"スタイルシート","tabIndex":"タブインデックス","target":"ターゲット","targetFrame":"<フレーム>","targetFrameName":"ターゲットのフレーム名","targetPopup":"<ポップアップウィンドウ>","targetPopupName":"ポップアップウィンドウ名","title":"ハイパーリンク","toAnchor":"ページ内のアンカー","toEmail":"E-Mail","toUrl":"URL","toPhone":"Phone","toolbar":"リンク挿入/編集","type":"リンクタイプ","unlink":"リンクを削除","upload":"アップロード"},"list":{"bulletedlist":"番号無しリスト","numberedlist":"番号付きリスト"},"liststyle":{"bulletedTitle":"箇条書きのプロパティ","circle":"白丸","decimal":"数字 (1, 2, 3, etc.)","disc":"黒丸","lowerAlpha":"小文字アルファベット (a, b, c, d, e, etc.)","lowerRoman":"小文字ローマ数字 (i, ii, iii, iv, v, etc.)","none":"なし","notset":"<なし>","numberedTitle":"番号付きリストのプロパティ","square":"四角","start":"開始","type":"種類","upperAlpha":"大文字アルファベット (A, B, C, D, E, etc.)","upperRoman":"大文字ローマ数字 (I, II, III, IV, V, etc.)","validateStartNumber":"リストの開始番号は数値で入力してください。"},"magicline":{"title":"ここに段落を挿入"},"maximize":{"maximize":"最大化","minimize":"最小化"},"newpage":{"toolbar":"新しいページ"},"pagebreak":{"alt":"改ページ","toolbar":"印刷の為に改ページ挿入"},"pastetext":{"button":"プレーンテキストとして貼り付け","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"プレーンテキストとして貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストはワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?","error":"内部エラーにより貼り付けたデータをクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"preview":{"preview":"プレビュー"},"print":{"toolbar":"印刷"},"removeformat":{"toolbar":"書式を解除"},"save":{"toolbar":"保存"},"selectall":{"toolbar":"すべて選択"},"showblocks":{"toolbar":"ブロック表示"},"sourcearea":{"toolbar":"ソース"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字の選択","toolbar":"特殊文字を挿入"},"scayt":{"btn_about":"SCAYTバージョン","btn_dictionaries":"辞書","btn_disable":"SCAYT無効","btn_enable":"SCAYT有効","btn_langs":"言語","btn_options":"オプション","text_title":"スペルチェック設定(SCAYT)"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"table":{"border":"枠線の幅","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルを前に挿入","insertAfter":"セルを後に挿入","deleteCell":"セルを削除","merge":"セルを結合","mergeRight":"右に結合","mergeDown":"下に結合","splitHorizontal":"セルを水平方向に分割","splitVertical":"セルを垂直方向に分割","title":"セルのプロパティ","cellType":"セルの種類","rowSpan":"行の結合数","colSpan":"列の結合数","wordWrap":"単語の折り返し","hAlign":"水平方向の配置","vAlign":"垂直方向の配置","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ (td)","header":"ヘッダ","yes":"はい","no":"いいえ","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左に挿入","insertAfter":"列を右に挿入","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最初の列のみ","headersNone":"なし","headersRow":"最初の行のみ","invalidBorder":"枠線の幅は数値で入力してください。","invalidCellPadding":"セル内余白は数値で入力してください。","invalidCellSpacing":"セル間余白は数値で入力してください。","invalidCols":"列数は0より大きな数値を入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行数は0より大きな数値を入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"表のプロパティ","row":{"menu":"行","insertBefore":"行を上に挿入","insertAfter":"行を下に挿入","deleteRow":"行を削除"},"rows":"行数","summary":"表の概要","title":"表のプロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"幅の単位"},"undo":{"redo":"やり直す","undo":"元に戻す"},"widget":{"move":"ドラッグして移動","label":"%1 ウィジェット"},"uploadwidget":{"abort":"アップロードを中止しました。","doneOne":"ファイルのアップロードに成功しました。","doneMany":"%1個のファイルのアップロードに成功しました。","uploadOne":"ファイルのアップロード中 ({percentage}%)...","uploadMany":"{max} 個中 {current} 個のファイルをアップロードしました。 ({percentage}%)..."},"wsc":{"btnIgnore":"無視","btnIgnoreAll":"すべて無視","btnReplace":"置換","btnReplaceAll":"すべて置換","btnUndo":"やり直し","changeTo":"変更","errorLoading":"アプリケーションサービスホスト読込みエラー: %s.","ieSpellDownload":"スペルチェッカーがインストールされていません。今すぐダウンロードしますか?","manyChanges":"スペルチェック完了: %1 語句変更されました","noChanges":"スペルチェック完了: 語句は変更されませんでした","noMispell":"スペルチェック完了: スペルの誤りはありませんでした","noSuggestions":"- 該当なし -","notAvailable":"申し訳ありません、現在サービスを利用することができません","notInDic":"辞書にありません","oneChange":"スペルチェック完了: 1語句変更されました","progress":"スペルチェック処理中...","title":"スペルチェック","toolbar":"スペルチェック"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/ka.js b/htdocs/includes/ckeditor/ckeditor/lang/ka.js deleted file mode 100644 index 7b7fd6d2c45..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/ka.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['ka']={"editor":"ტექსტის რედაქტორი","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","flash":"Flash","form":"ფორმა","checkbox":"მონიშვნის ღილაკი","radio":"ამორჩევის ღილაკი","textField":"ტექსტური ველი","textarea":"ტექსტური არე","hiddenField":"მალული ველი","button":"ღილაკი","select":"არჩევის ველი","imageButton":"სურათიანი ღილაკი","notSet":"<არაფერი>","id":"Id","name":"სახელი","langDir":"ენის მიმართულება","langDirLtr":"მარცხნიდან მარჯვნივ (LTR)","langDirRtl":"მარჯვნიდან მარცხნივ (RTL)","langCode":"ენის კოდი","longDescr":"დიდი აღწერის URL","cssClass":"CSS კლასი","advisoryTitle":"სათაური","cssStyle":"CSS სტილი","ok":"დიახ","cancel":"გაუქმება","close":"დახურვა","preview":"გადახედვა","resize":"გაწიე ზომის შესაცვლელად","generalTab":"ინფორმაცია","advancedTab":"გაფართოებული","validateNumberFailed":"ეს მნიშვნელობა არაა რიცხვი.","confirmNewPage":"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?","confirmCancel":"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?","options":"პარამეტრები","target":"გახსნის ადგილი","targetNew":"ახალი ფანჯარა (_blank)","targetTop":"ზედა ფანჯარა (_top)","targetSelf":"იგივე ფანჯარა (_self)","targetParent":"მშობელი ფანჯარა (_parent)","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","styles":"სტილი","cssClasses":"CSS კლასი","width":"სიგანე","height":"სიმაღლე","align":"სწორება","left":"მარცხენა","right":"მარჯვენა","center":"შუა","justify":"両端揃え","alignLeft":"მარცხნივ სწორება","alignRight":"მარჯვნივ სწორება","alignCenter":"Align Center","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1, მიუწვდომელია","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"bidi":{"ltr":"ტექსტის მიმართულება მარცხნიდან მარჯვნივ","rtl":"ტექსტის მიმართულება მარჯვნიდან მარცხნივ"},"blockquote":{"toolbar":"ციტატა"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"ჩასმის არე","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"ავტომატური","bgColorTitle":"ფონის ფერი","colors":{"000":"შავი","800000":"მუქი შინდისფერი","8B4513":"ყავისფერი","2F4F4F":"მოლურჯო ნაცრისფერი","008080":"ჩამქრალი ლურჯი","000080":"მუქი ლურჯი","4B0082":"იასამნისფერი","696969":"მუქი ნაცრისფერი","B22222":"აგურისფერი","A52A2A":"მუქი ყავისფერი","DAA520":"მოყვითალო","006400":"მუქი მწვანე","40E0D0":"ცისფერი","0000CD":"ზომიერად ლურჯი","800080":"იისფერი","808080":"ნაცრისფერი","F00":"წითელი","FF8C00":"მუქი სტაფილოსფერი","FFD700":"ოქროსფერი","008000":"მწვანე","0FF":"ღია ცისფერი","00F":"ლურჯი","EE82EE":"იისფერი","A9A9A9":"ბაცი ნაცრისფერი","FFA07A":"ჩამქრალი ვარდისფერი","FFA500":"სტაფილოსფერი","FFFF00":"ყვითელი","00FF00":"ლურჯი","AFEEEE":"ცისფერი","ADD8E6":"ღია ლურჯი","DDA0DD":"ღია იისფერი","D3D3D3":"ღია ნაცრისფერი","FFF0F5":"ღია ვარდისფერი","FAEBD7":"ღია ყავისფერი","FFFFE0":"ნათელი ყვითელი","F0FFF0":"ღია მწვანე","F0FFFF":"ღია ცისფერი 2","F0F8FF":"ღია ცისფერი 3","E6E6FA":"ღია იისფერი 2","FFF":"თეთრი","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"მეტი ფერი...","panelTitle":"ფერები","textColorTitle":"ტექსტის ფერი"},"colordialog":{"clear":"გასუფთავება","highlight":"ჩვენება","options":"ფერის პარამეტრები","selected":"არჩეული ფერი","title":"ფერის შეცვლა"},"templates":{"button":"თარგები","emptyListMsg":"(თარგი არაა განსაზღვრული)","insertOption":"მიმდინარე შეგთავსის შეცვლა","options":"თარგების პარამეტრები","selectPromptMsg":"აირჩიეთ თარგი რედაქტორისთვის","title":"თარგები"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"სათაური","cssClassInputLabel":"CSS კლასები","edit":"Div-ის რედაქტირება","inlineStyleInputLabel":"თანდართული სტილი","langDirLTRLabel":"მარცხნიდან მარჯვნიც (LTR)","langDirLabel":"ენის მინართულება","langDirRTLLabel":"მარჯვნიდან მარცხნივ (RTL)","languageCodeInputLabel":"ენის კოდი","remove":"Div-ის წაშლა","styleSelectLabel":"სტილი","title":"Div კონტეინერის შექმნა","toolbar":"Div კონტეინერის შექმნა"},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"ძებნა","findOptions":"Find Options","findWhat":"საძიებელი ტექსტი:","matchCase":"დიდი და პატარა ასოების დამთხვევა","matchCyclic":"დოკუმენტის ბოლოში გასვლის მერე თავიდან დაწყება","matchWord":"მთელი სიტყვის დამთხვევა","notFoundMsg":"მითითებული ტექსტი არ მოიძებნა.","replace":"შეცვლა","replaceAll":"ყველას შეცვლა","replaceSuccessMsg":"%1 მოძებნილი შეიცვალა.","replaceWith":"შეცვლის ტექსტი:","title":"ძებნა და შეცვლა"},"fakeobjects":{"anchor":"ღუზა","flash":"Flash ანიმაცია","hiddenfield":"მალული ველი","iframe":"IFrame","unknown":"უცნობი ობიექტი"},"flash":{"access":"სკრიპტის წვდომა","accessAlways":"ყოველთვის","accessNever":"არასდროს","accessSameDomain":"იგივე დომენი","alignAbsBottom":"ჩარჩოს ქვემოთა ნაწილის სწორება ტექსტისთვის","alignAbsMiddle":"ჩარჩოს შუა ნაწილის სწორება ტექსტისთვის","alignBaseline":"საბაზისო ხაზის სწორება","alignTextTop":"ტექსტი ზემოდან","bgcolor":"ფონის ფერი","chkFull":"მთელი ეკრანის დაშვება","chkLoop":"ჩაციკლვა","chkMenu":"Flash-ის მენიუს დაშვება","chkPlay":"ავტო გაშვება","flashvars":"ცვლადები Flash-ისთვის","hSpace":"ჰორიზ. სივრცე","properties":"Flash-ის პარამეტრები","propertiesTab":"პარამეტრები","quality":"ხარისხი","qualityAutoHigh":"მაღალი (ავტომატური)","qualityAutoLow":"ძალიან დაბალი","qualityBest":"საუკეთესო","qualityHigh":"მაღალი","qualityLow":"დაბალი","qualityMedium":"საშუალო","scale":"მასშტაბირება","scaleAll":"ყველაფრის ჩვენება","scaleFit":"ზუსტი ჩასმა","scaleNoBorder":"ჩარჩოს გარეშე","title":"Flash-ის პარამეტრები","vSpace":"ვერტ. სივრცე","validateHSpace":"ჰორიზონტალური სივრცე არ უნდა იყოს ცარიელი.","validateSrc":"URL არ უნდა იყოს ცარიელი.","validateVSpace":"ვერტიკალური სივრცე არ უნდა იყოს ცარიელი.","windowMode":"ფანჯრის რეჟიმი","windowModeOpaque":"გაუმჭვირვალე","windowModeTransparent":"გამჭვირვალე","windowModeWindow":"ფანჯარა"},"font":{"fontSize":{"label":"ზომა","voiceLabel":"ტექსტის ზომა","panelTitle":"ტექსტის ზომა"},"label":"ფონტი","panelTitle":"ფონტის სახელი","voiceLabel":"ფონტი"},"forms":{"button":{"title":"ღილაკის პარამეტრები","text":"ტექსტი","type":"ტიპი","typeBtn":"ღილაკი","typeSbm":"გაგზავნა","typeRst":"გასუფთავება"},"checkboxAndRadio":{"checkboxTitle":"მონიშვნის ღილაკის (Checkbox) პარამეტრები","radioTitle":"ასარჩევი ღილაკის (Radio) პარამეტრები","value":"ტექსტი","selected":"არჩეული","required":"Required"},"form":{"title":"ფორმის პარამეტრები","menu":"ფორმის პარამეტრები","action":"ქმედება","method":"მეთოდი","encoding":"კოდირება"},"hidden":{"title":"მალული ველის პარამეტრები","name":"სახელი","value":"მნიშვნელობა"},"select":{"title":"არჩევის ველის პარამეტრები","selectInfo":"ინფორმაცია","opAvail":"შესაძლებელი ვარიანტები","value":"მნიშვნელობა","size":"ზომა","lines":"ხაზები","chkMulti":"მრავლობითი არჩევანის საშუალება","required":"Required","opText":"ტექსტი","opValue":"მნიშვნელობა","btnAdd":"დამატება","btnModify":"შეცვლა","btnUp":"ზემოთ","btnDown":"ქვემოთ","btnSetValue":"ამორჩეულ მნიშვნელოვნად დაყენება","btnDelete":"წაშლა"},"textarea":{"title":"ტექსტური არის პარამეტრები","cols":"სვეტები","rows":"სტრიქონები"},"textfield":{"title":"ტექსტური ველის პარამეტრები","name":"სახელი","value":"მნიშვნელობა","charWidth":"სიმბოლოს ზომა","maxChars":"ასოების მაქსიმალური ოდენობა","required":"Required","type":"ტიპი","typeText":"ტექსტი","typePass":"პაროლი","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ფიორმატირება","panelTitle":"ფორმატირება","tag_address":"მისამართი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სათაური 1","tag_h2":"სათაური 2","tag_h3":"სათაური 3","tag_h4":"სათაური 4","tag_h5":"სათაური 5","tag_h6":"სათაური 6","tag_p":"ჩვეულებრივი","tag_pre":"ფორმატირებული"},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"iframe":{"border":"ჩარჩოს გამოჩენა","noUrl":"აკრიფეთ iframe-ის URL","scrolling":"გადახვევის ზოლების დაშვება","title":"IFrame-ის პარამეტრები","toolbar":"IFrame"},"image":{"alt":"სანაცვლო ტექსტი","border":"ჩარჩო","btnUpload":"სერვერისთვის გაგზავნა","button2Img":"გსურთ არჩეული სურათიანი ღილაკის გადაქცევა ჩვეულებრივ ღილაკად?","hSpace":"ჰორიზონტალური სივრცე","img2Button":"გსურთ არჩეული ჩვეულებრივი ღილაკის გადაქცევა სურათიან ღილაკად?","infoTab":"სურათის ინფორმცია","linkTab":"ბმული","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","resetSize":"ზომის დაბრუნება","title":"სურათის პარამეტრები","titleButton":"სურათიანი ღილაკის პარამეტრები","upload":"ატვირთვა","urlMissing":"სურათის URL არაა შევსებული.","vSpace":"ვერტიკალური სივრცე","validateBorder":"ჩარჩო მთელი რიცხვი უნდა იყოს.","validateHSpace":"ჰორიზონტალური სივრცე მთელი რიცხვი უნდა იყოს.","validateVSpace":"ვერტიკალური სივრცე მთელი რიცხვი უნდა იყოს."},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"smiley":{"options":"სიცილაკის პარამეტრები","title":"სიცილაკის ჩასმა","toolbar":"სიცილაკები"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"წვდომის ღილაკი","advanced":"დაწვრილებით","advisoryContentType":"შიგთავსის ტიპი","advisoryTitle":"სათაური","anchor":{"toolbar":"ღუზა","menu":"ღუზის რედაქტირება","title":"ღუზის პარამეტრები","name":"ღუზუს სახელი","errorName":"აკრიფეთ ღუზის სახელი","remove":"Remove Anchor"},"anchorId":"ელემენტის Id-თ","anchorName":"ღუზის სახელით","charset":"კოდირება","cssClasses":"CSS კლასი","download":"Force Download","displayText":"Display Text","emailAddress":"ელფოსტის მისამართები","emailBody":"წერილის ტექსტი","emailSubject":"წერილის სათაური","id":"Id","info":"ბმულის ინფორმაცია","langCode":"ენის კოდი","langDir":"ენის მიმართულება","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","menu":"ბმულის რედაქტირება","name":"სახელი","noAnchors":"(ამ დოკუმენტში ღუზა არაა)","noEmail":"აკრიფეთ ელფოსტის მისამართი","noUrl":"აკრიფეთ ბმულის URL","noTel":"Please type the phone number","other":"<სხვა>","phoneNumber":"Phone number","popupDependent":"დამოკიდებული (Netscape)","popupFeatures":"Popup ფანჯრის პარამეტრები","popupFullScreen":"მთელი ეკრანი (IE)","popupLeft":"მარცხენა პოზიცია","popupLocationBar":"ნავიგაციის ზოლი","popupMenuBar":"მენიუს ზოლი","popupResizable":"ცვალებადი ზომით","popupScrollBars":"გადახვევის ზოლები","popupStatusBar":"სტატუსის ზოლი","popupToolbar":"ხელსაწყოთა ზოლი","popupTop":"ზედა პოზიცია","rel":"კავშირი","selectAnchor":"აირჩიეთ ღუზა","styles":"CSS სტილი","tabIndex":"Tab-ის ინდექსი","target":"გახსნის ადგილი","targetFrame":"","targetFrameName":"Frame-ის სახელი","targetPopup":"","targetPopupName":"Popup ფანჯრის სახელი","title":"ბმული","toAnchor":"ბმული ტექსტში ღუზაზე","toEmail":"ელფოსტა","toUrl":"URL","toPhone":"Phone","toolbar":"ბმული","type":"ბმულის ტიპი","unlink":"ბმულის მოხსნა","upload":"აქაჩვა"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"liststyle":{"bulletedTitle":"ღილებიანი სიის პარამეტრები","circle":"წრეწირი","decimal":"რიცხვებით (1, 2, 3, ..)","disc":"წრე","lowerAlpha":"პატარა ლათინური ასოებით (a, b, c, d, e, ..)","lowerRoman":"რომაული გადანომრვცა პატარა ციფრებით (i, ii, iii, iv, v, ..)","none":"არაფერი","notset":"<არაფერი>","numberedTitle":"გადანომრილი სიის პარამეტრები","square":"კვადრატი","start":"საწყისი","type":"ტიპი","upperAlpha":"დიდი ლათინური ასოებით (A, B, C, D, E, ..)","upperRoman":"რომაული გადანომრვა დიდი ციფრებით (I, II, III, IV, V, etc.)","validateStartNumber":"სიის საწყისი მთელი რიცხვი უნდა იყოს."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"newpage":{"toolbar":"ახალი გვერდი"},"pagebreak":{"alt":"გვერდის წყვეტა","toolbar":"გვერდის წყვეტა ბეჭდვისთვის"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"preview":{"preview":"გადახედვა"},"print":{"toolbar":"ბეჭდვა"},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"save":{"toolbar":"ჩაწერა"},"selectall":{"toolbar":"ყველაფრის მონიშნვა"},"showblocks":{"toolbar":"არეების ჩვენება"},"sourcearea":{"toolbar":"კოდები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"scayt":{"btn_about":"SCAYT-ის შესახებ","btn_dictionaries":"ლექსიკონები","btn_disable":"SCAYT-ის გამორთვა","btn_enable":"SCAYT-ის ჩართვა","btn_langs":"ენები","btn_options":"პარამეტრები","text_title":"მართლწერის შემოწმება კრეფისას"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"table":{"border":"ჩარჩოს ზომა","caption":"სათაური","cell":{"menu":"უჯრა","insertBefore":"უჯრის ჩასმა მანამდე","insertAfter":"უჯრის ჩასმა მერე","deleteCell":"უჯრების წაშლა","merge":"უჯრების შეერთება","mergeRight":"შეერთება მარჯვენასთან","mergeDown":"შეერთება ქვემოთასთან","splitHorizontal":"გაყოფა ჰორიზონტალურად","splitVertical":"გაყოფა ვერტიკალურად","title":"უჯრის პარამეტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქონების ოდენობა","colSpan":"სვეტების ოდენობა","wordWrap":"სტრიქონის გადატანა (Word Wrap)","hAlign":"ჰორიზონტალური სწორება","vAlign":"ვერტიკალური სწორება","alignBaseline":"ძირითადი ხაზის გასწვრივ","bgColor":"ფონის ფერი","borderColor":"ჩარჩოს ფერი","data":"მონაცემები","header":"სათაური","yes":"დიახ","no":"არა","invalidWidth":"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidHeight":"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRowSpan":"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.","invalidColSpan":"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.","chooseColor":"არჩევა"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩამატება წინ","insertAfter":"სვეტის ჩამატება მერე","deleteColumn":"სვეტების წაშლა"},"columns":"სვეტი","deleteTable":"ცხრილის წაშლა","headers":"სათაურები","headersBoth":"ორივე","headersColumn":"პირველი სვეტი","headersNone":"არაფერი","headersRow":"პირველი სტრიქონი","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"უგულებელყოფა","btnIgnoreAll":"ყველას უგულებელყოფა","btnReplace":"შეცვლა","btnReplaceAll":"ყველას შეცვლა","btnUndo":"გაუქმება","changeTo":"შეცვლელი","errorLoading":"სერვისის გამოძახების შეცდომა: %s.","ieSpellDownload":"მართლწერის შემოწმება არაა დაინსტალირებული. ჩამოვქაჩოთ ინტერნეტიდან?","manyChanges":"მართლწერის შემოწმება: %1 სიტყვა შეიცვალა","noChanges":"მართლწერის შემოწმება: არაფერი შეცვლილა","noMispell":"მართლწერის შემოწმება: შეცდომა არ მოიძებნა","noSuggestions":"- არაა შემოთავაზება -","notAvailable":"უკაცრავად, ეს სერვისი ამჟამად მიუწვდომელია.","notInDic":"არაა ლექსიკონში","oneChange":"მართლწერის შემოწმება: ერთი სიტყვა შეიცვალა","progress":"მიმდინარეობს მართლწერის შემოწმება...","title":"მართლწერა","toolbar":"მართლწერა"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/km.js b/htdocs/includes/ckeditor/ckeditor/lang/km.js deleted file mode 100644 index bef425db1de..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/km.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['km']={"editor":"ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណ៍​សរសេរ​អត្ថបទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូតុង​មូល","textField":"វាល​អត្ថបទ","textarea":"Textarea","hiddenField":"វាល​កំបាំង","button":"ប៊ូតុង","select":"វាល​ជម្រើស","imageButton":"ប៊ូតុង​រូបភាព","notSet":"<មិនកំណត់>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ (LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង (RTL)","langCode":"លេខ​កូដ​ភាសា","longDescr":"URL អធិប្បាយ​វែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណង​ជើង​ណែនាំ","cssStyle":"រចនាបថ","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើល​ជា​មុន","resize":"ប្ដូរ​ទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិត​ខ្ពស់","validateNumberFailed":"តម្លៃ​នេះ​ពុំ​មែន​ជា​លេខ​ទេ។","confirmNewPage":"រាល់​បន្លាស់​ប្ដូរ​នានា​ដែល​មិន​ទាន់​រក្សា​ទុក​ក្នុង​មាតិកា​នេះ នឹង​ត្រូវ​បាត់​បង់។ តើ​អ្នក​ពិត​ជា​ចង់​ផ្ទុក​ទំព័រ​ថ្មី​មែនទេ?","confirmCancel":"ការ​កំណត់​មួយ​ចំនួន​ត្រូ​វ​បាន​ផ្លាស់​ប្ដូរ។ តើ​អ្នក​ពិត​ជា​ចង់​បិទ​ប្រអប់​នេះ​មែនទេ?","options":"ការ​កំណត់","target":"គោលដៅ","targetNew":"វីនដូ​ថ្មី (_blank)","targetTop":"វីនដូ​លើ​គេ (_top)","targetSelf":"វីនដូ​ដូច​គ្នា (_self)","targetParent":"វីនដូ​មេ (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"រចនាបថ","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់​ទីតាំង","left":"ខាងឆ្វង","right":"ខាងស្តាំ","center":"កណ្តាល","justify":"តំរឹមសងខាង","alignLeft":"តម្រឹម​ឆ្វេង","alignRight":"តម្រឹម​ស្ដាំ","alignCenter":"Align Center","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","alignNone":"គ្មាន","invalidValue":"តម្លៃ​មិន​ត្រឹម​ត្រូវ។","invalidHeight":"តម្លៃ​កំពស់​ត្រូវ​តែ​ជា​លេខ។","invalidWidth":"តម្លៃ​ទទឹង​ត្រូវ​តែ​ជា​លេខ។","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន​ ដោយ​ភ្ជាប់ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"តម្លៃ​កំណត់​សម្រាប់​វាល \"%1\" ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន ដោយ​ភ្ជាប់​ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកតា​រង្វាស់​របស់ HTML (px ឬ %) ។","invalidInlineStyle":"តម្លៃ​កំណត់​សម្រាប់​រចនាបថ​ក្នុង​តួ ត្រូវ​តែ​មាន​មួយ​ឬ​ធាតុ​ច្រើន​ដោយ​មាន​ទ្រង់ទ្រាយ​ជា \"ឈ្មោះ : តម្លៃ\" ហើយ​ញែក​ចេញ​ពី​គ្នា​ដោយ​ចុច​ក្បៀស។","cssLengthTooltip":"បញ្ចូល​លេខ​សម្រាប់​តម្លៃ​ជា​ភិចសែល ឬ​លេខ​ដែល​មាន​ឯកតា​ត្រឹមត្រូវ​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1, មិន​មាន","keyboard":{"8":"លុបថយក្រោយ","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"ចុង","36":"ផ្ទះ","46":"លុប","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"រក្សាសិទ្ធិ © $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។","dlgTitle":"អំពី CKEditor","moreInfo":"សម្រាប់​ព័ត៌មាន​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គេហទំព័រ​របស់​យើង៖"},"basicstyles":{"bold":"ដិត","italic":"ទ្រេត","strike":"គូស​បន្ទាត់​ចំ​កណ្ដាល","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"គូស​បន្ទាត់​ក្រោម"},"bidi":{"ltr":"ទិស​ដៅ​អក្សរ​ពី​ឆ្វេង​ទៅ​ស្ដាំ","rtl":"ទិស​ដៅ​អក្សរ​ពី​ស្ដាំ​ទៅ​ឆ្វេង"},"blockquote":{"toolbar":"ប្លក់​ពាក្យ​សម្រង់"},"notification":{"closed":"បាន​បិទ​ការ​ផ្ដល់​ដំណឹង។"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណ៍","toolbarExpand":"ពង្រីក​របារ​ឧបករណ៍","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបថ​មូលដ្ឋាន","paragraph":"កថាខណ្ឌ","links":"តំណ","insert":"បញ្ចូល","styles":"រចនាបថ","colors":"ពណ៌","tools":"ឧបករណ៍"},"toolbars":"របារ​ឧបករណ៍​កែ​សម្រួល"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"តំបន់​បិទ​ភ្ជាប់","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"ស្វ័យប្រវត្តិ","bgColorTitle":"ពណ៌ផ្ទៃខាងក្រោយ","colors":{"000":"ខ្មៅ","800000":"ត្នោត​ចាស់","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"ខៀវ​ចាស់","4B0082":"ធ្លះ","696969":"ប្រផេះ​ក្រាស់","B22222":"Fire Brick","A52A2A":"ត្នោត","DAA520":"Golden Rod","006400":"បៃតង​ចាស់","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"ប្រផេះ","F00":"ក្រហម","FF8C00":"ទឹក​ក្រូច​ចាស់","FFD700":"មាស","008000":"បៃតង","0FF":"Cyan","00F":"ខៀវ","EE82EE":"ស្វាយ","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"ទឹក​ក្រូច","FFFF00":"លឿង","00FF00":"ក្រូច​ឆ្មារ","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"លឿង​ស្ដើង","F0FFF0":"Honeydew","F0FFFF":"ផ្ទៃមេឃ","F0F8FF":"Alice Blue","E6E6FA":"ឡាវិនដឺ","FFF":"ស","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"ពណ៌​ផ្សេង​ទៀត..","panelTitle":"ពណ៌","textColorTitle":"ពណ៌អក្សរ"},"colordialog":{"clear":"សម្អាត","highlight":"បន្លិច​ពណ៌","options":"ជម្រើស​ពណ៌","selected":"ពណ៌​ដែល​បាន​រើស","title":"រើស​ពណ៌"},"templates":{"button":"ពុម្ព​គំរូ","emptyListMsg":"(មិន​មាន​ពុម្ព​គំរូ​ត្រូវ​បាន​កំណត់)","insertOption":"ជំនួស​ក្នុង​មាតិកា​បច្ចុប្បន្ន","options":"ជម្រើស​ពុម្ព​គំរូ","selectPromptMsg":"សូម​រើស​ពុម្ព​គំរូ​ដើម្បី​បើក​ក្នុង​កម្មវិធី​សរសេរ​អត្ថបទ","title":"ពុម្ព​គំរូ​មាតិកា"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"ចំណង​ជើង​ប្រឹក្សា","cssClassInputLabel":"Stylesheet Classes","edit":"កែ Div","inlineStyleInputLabel":"ស្ទីល​ក្នុង​បន្ទាត់","langDirLTRLabel":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirLabel":"ទិសដៅភាសា","langDirRTLLabel":"ពីស្តាំទៅឆ្វេង(RTL)","languageCodeInputLabel":"កូដ​ភាសា","remove":"ដក Div ចេញ","styleSelectLabel":"ស្ទីល","title":"បង្កើត​អ្នក​ផ្ទុក Div","toolbar":"បង្កើត​អ្នក​ផ្ទុក Div"},"elementspath":{"eleLabel":"ទីតាំង​ធាតុ","eleTitle":"ធាតុ %1"},"filetools":{"loadError":"មាន​បញ្ហា​កើតឡើង​ក្នុង​ពេល​អាន​ឯកសារ។","networkError":"មាន​បញ្ហា​បណ្ដាញ​កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ។","httpError404":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (404៖ រក​ឯកសារ​មិន​ឃើញ)។","httpError403":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (403៖ ហាមឃាត់)។","httpError":"មាន​បញ្ហា HTTP កើត​ឡើង​ក្នុង​ពេល​ផ្ទុកឡើង​ឯកសារ (ស្ថានភាព​កំហុស៖ %1)។","noUrlError":"មិន​មាន​បញ្ជាក់ URL ផ្ទុក​ឡើង។","responseError":"ការ​ឆ្លើយតប​របស់​ម៉ាស៊ីនបម្រើ មិន​ត្រឹមត្រូវ។"},"find":{"find":"ស្វែងរក","findOptions":"ជម្រើស​ស្វែង​រក","findWhat":"ស្វែងរកអ្វី:","matchCase":"ករណី​ដំណូច","matchCyclic":"ត្រូវ​នឹង cyclic","matchWord":"ដូច​នឹង​ពាក្យ​ទាំង​មូល","notFoundMsg":"រក​មិន​ឃើញ​ពាក្យ​ដែល​បាន​បញ្ជាក់។","replace":"ជំនួស","replaceAll":"ជំនួសទាំងអស់","replaceSuccessMsg":"ការ​ជំនួស​ចំនួន %1 បាន​កើត​ឡើង។","replaceWith":"ជំនួសជាមួយ:","title":"រក​និង​ជំនួស"},"fakeobjects":{"anchor":"យុថ្កា","flash":"Flash មាន​ចលនា","hiddenfield":"វាល​កំបាំង","iframe":"IFrame","unknown":"វត្ថុ​មិន​ស្គាល់"},"flash":{"access":"Script Access","accessAlways":"ជានិច្ច","accessNever":"កុំ","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"បន្ទាត់ជាមូលដ្ឋាន","alignTextTop":"លើអត្ថបទ","bgcolor":"ពណ៌ផ្ទៃខាងក្រោយ","chkFull":"អនុញ្ញាត​ឲ្យ​ពេញ​អេក្រង់","chkLoop":"ចំនួនដង","chkMenu":"បង្ហាញ មឺនុយរបស់ Flash","chkPlay":"លេងដោយស្វ័យប្រវត្ត","flashvars":"អថេរ Flash","hSpace":"គំលាតទទឹង","properties":"ការកំណត់ Flash","propertiesTab":"លក្ខណៈ​សម្បត្តិ","quality":"គុណភាព","qualityAutoHigh":"ខ្ពស់​ស្វ័យ​ប្រវត្តិ","qualityAutoLow":"ទាប​ស្វ័យ​ប្រវត្តិ","qualityBest":"ល្អ​បំផុត","qualityHigh":"ខ្ពស់","qualityLow":"ទាប","qualityMedium":"មធ្យម","scale":"ទំហំ","scaleAll":"បង្ហាញទាំងអស់","scaleFit":"ត្រូវល្មម","scaleNoBorder":"មិនបង្ហាញស៊ុម","title":"ការកំណត់ Flash","vSpace":"គំលាតបណ្តោយ","validateHSpace":"HSpace must be a number.","validateSrc":"សូមសរសេរ អាស័យដ្ឋាន URL","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"ភាព​ថ្លា","windowModeWindow":"វីនដូ"},"font":{"fontSize":{"label":"ទំហំ","voiceLabel":"ទំហំ​អក្សរ","panelTitle":"ទំហំ​អក្សរ"},"label":"ពុម្ព​អក្សរ","panelTitle":"ឈ្មោះ​ពុម្ព​អក្សរ","voiceLabel":"ពុម្ព​អក្សរ"},"forms":{"button":{"title":"លក្ខណៈ​ប៊ូតុង","text":"អត្ថបទ (តម្លៃ)","type":"ប្រភេទ","typeBtn":"ប៊ូតុង","typeSbm":"ដាក់ស្នើ","typeRst":"កំណត់​ឡើង​វិញ"},"checkboxAndRadio":{"checkboxTitle":"លក្ខណៈ​ប្រអប់​ធីក","radioTitle":"លក្ខនៈ​ប៊ូតុង​មូល","value":"តម្លៃ","selected":"បាន​ជ្រើស","required":"Required"},"form":{"title":"លក្ខណៈ​បែបបទ","menu":"លក្ខណៈ​បែបបទ","action":"សកម្មភាព","method":"វិធីសាស្ត្រ","encoding":"ការ​អ៊ិនកូដ"},"hidden":{"title":"លក្ខណៈ​វាល​កំបាំង","name":"ឈ្មោះ","value":"តម្លៃ"},"select":{"title":"លក្ខណៈ​វាល​ជម្រើស","selectInfo":"ព័ត៌មាន​ជម្រើស","opAvail":"ជម្រើស​ដែល​មាន","value":"តម្លៃ","size":"ទំហំ","lines":"បន្ទាត់","chkMulti":"អនុញ្ញាត​ពហុ​ជម្រើស","required":"Required","opText":"អត្ថបទ","opValue":"តម្លៃ","btnAdd":"បន្ថែម","btnModify":"ផ្លាស់ប្តូរ","btnUp":"លើ","btnDown":"ក្រោម","btnSetValue":"កំណត់​ជា​តម្លៃ​ដែល​បាន​ជ្រើស","btnDelete":"លុប"},"textarea":{"title":"លក្ខណៈ​ប្រអប់​អត្ថបទ","cols":"ជួរឈរ","rows":"ជួរដេក"},"textfield":{"title":"លក្ខណៈ​វាល​អត្ថបទ","name":"ឈ្មោះ","value":"តម្លៃ","charWidth":"ទទឹង​តួ​អក្សរ","maxChars":"អក្សរអតិបរិមា","required":"Required","type":"ប្រភេទ","typeText":"អត្ថបទ","typePass":"ពាក្យសម្ងាត់","typeEmail":"អ៊ីមែល","typeSearch":"ស្វែង​រក","typeTel":"លេខ​ទូរសព្ទ","typeUrl":"URL"}},"format":{"label":"ទម្រង់","panelTitle":"ទម្រង់​កថាខណ្ឌ","tag_address":"អាសយដ្ឋាន","tag_div":"ធម្មតា (DIV)","tag_h1":"ចំណង​ជើង 1","tag_h2":"ចំណង​ជើង 2","tag_h3":"ចំណង​ជើង 3","tag_h4":"ចំណង​ជើង 4","tag_h5":"ចំណង​ជើង 5","tag_h6":"ចំណង​ជើង 6","tag_p":"ធម្មតា","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"iframe":{"border":"បង្ហាញ​បន្ទាត់​ស៊ុម","noUrl":"សូម​បញ្ចូល URL របស់ iframe","scrolling":"ប្រើ​របារ​រំកិល","title":"លក្ខណៈ​សម្បត្តិ IFrame","toolbar":"IFrame"},"image":{"alt":"អត្ថបទជំនួស","border":"ស៊ុម","btnUpload":"ផ្ញើ​ទៅ​ម៉ាស៊ីន​បម្រើ","button2Img":"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​ប៊ូតុង​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​រូបភាព​ធម្មតា​មួយ​មែនទេ?","hSpace":"គម្លាត​ផ្ដេក","img2Button":"តើ​អ្នក​ចង់​ផ្លាស់​ប្ដូរ​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​ប៊ូតុង​រូបភាព​មែនទេ?","infoTab":"ពត៌មានអំពីរូបភាព","linkTab":"តំណ","lockRatio":"ចាក់​សោ​ផល​ធៀប","menu":"លក្ខណៈ​រូបភាព","resetSize":"កំណត់ទំហំឡើងវិញ","title":"លក្ខណៈ​រូបភាព","titleButton":"លក្ខណៈ​ប៊ូតុង​រូបភាព","upload":"ផ្ទុកឡើង","urlMissing":"ខ្វះ URL ប្រភព​រូប​ភាព។","vSpace":"គម្លាត​បញ្ឈរ","validateBorder":"ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","validateHSpace":"គម្លាត​ផ្ដេក​ត្រូវ​តែ​ជា​លេខ។","validateVSpace":"គម្លាត​បញ្ឈរ​ត្រូវ​តែ​ជា​លេខ។"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"smiley":{"options":"ជម្រើស​រូប​សញ្ញា​អារម្មណ៍","title":"បញ្ចូល​រូប​សញ្ញា​អារម្មណ៍","toolbar":"រូប​សញ្ញ​អារម្មណ៍"},"language":{"button":"កំណត់​ភាសា","remove":"លុប​ភាសា"},"link":{"acccessKey":"សោរ​ចូល","advanced":"កម្រិត​ខ្ពស់","advisoryContentType":"ប្រភេទអត្ថបទ​ប្រឹក្សា","advisoryTitle":"ចំណងជើង​ប្រឹក្សា","anchor":{"toolbar":"យុថ្កា","menu":"កែ​យុថ្កា","title":"លក្ខណៈ​យុថ្កា","name":"ឈ្មោះ​យុថ្កា","errorName":"សូម​បញ្ចូល​ឈ្មោះ​យុថ្កា","remove":"ដក​យុថ្កា​ចេញ"},"anchorId":"តាម ID ធាតុ","anchorName":"តាម​ឈ្មោះ​យុថ្កា","charset":"លេខកូតអក្សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","download":"Force Download","displayText":"Display Text","emailAddress":"អាសយដ្ឋាន​អ៊ីមែល","emailBody":"តួ​អត្ថបទ","emailSubject":"ប្រធានបទ​សារ","id":"Id","info":"ព័ត៌មាន​ពី​តំណ","langCode":"កូដ​ភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","menu":"កែ​តំណ","name":"ឈ្មោះ","noAnchors":"(មិន​មាន​យុថ្កា​នៅ​ក្នុង​ឯកសារ​អត្ថថបទ​ទេ)","noEmail":"សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល","noUrl":"សូម​បញ្ចូល​តំណ URL","noTel":"Please type the phone number","other":"<ផ្សេង​ទៀត>","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"មុខ​ងារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង","popupFullScreen":"ពេញ​អេក្រង់ (IE)","popupLeft":"ទីតាំងខាងឆ្វេង","popupLocationBar":"របារ​ទីតាំង","popupMenuBar":"របារ​ម៉ឺនុយ","popupResizable":"អាច​ប្ដូរ​ទំហំ","popupScrollBars":"របារ​រំកិល","popupStatusBar":"របារ​ស្ថានភាព","popupToolbar":"របារ​ឧបករណ៍","popupTop":"ទីតាំង​កំពូល","rel":"សម្ពន្ធ​ភាព","selectAnchor":"រើស​យក​យុថ្កា​មួយ","styles":"ស្ទីល","tabIndex":"លេខ Tab","target":"គោលដៅ","targetFrame":"<ស៊ុម>","targetFrameName":"ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ","targetPopup":"<វីនដូ​ផុស​ឡើង>","targetPopupName":"ឈ្មោះ​វីនដូត​ផុស​ឡើង","title":"តំណ","toAnchor":"ត​ភ្ជាប់​ទៅ​យុថ្កា​ក្នុង​អត្ថបទ","toEmail":"អ៊ីមែល","toUrl":"URL","toPhone":"Phone","toolbar":"តំណ","type":"ប្រភេទ​តំណ","unlink":"ផ្ដាច់​តំណ","upload":"ផ្ទុក​ឡើង"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លេខ"},"liststyle":{"bulletedTitle":"លក្ខណៈ​សម្បត្តិ​បញ្ជី​ជា​ចំណុច","circle":"រង្វង់​មូល","decimal":"លេខ​ទសភាគ (1, 2, 3, ...)","disc":"ថាស","lowerAlpha":"ព្យញ្ជនៈ​តូច (a, b, c, d, e, ...)","lowerRoman":"លេខ​រ៉ូម៉ាំង​តូច (i, ii, iii, iv, v, ...)","none":"គ្មាន","notset":"","numberedTitle":"លក្ខណៈ​សម្បត្តិ​បញ្ជី​ជា​លេខ","square":"ការេ","start":"ចាប់​ផ្ដើម","type":"ប្រភេទ","upperAlpha":"អក្សរ​ធំ (A, B, C, D, E, ...)","upperRoman":"លេខ​រ៉ូម៉ាំង​ធំ (I, II, III, IV, V, ...)","validateStartNumber":"លេខ​ចាប់​ផ្ដើម​បញ្ជី ត្រូវ​តែ​ជា​តួ​លេខ​ពិត​ប្រាកដ។"},"magicline":{"title":"បញ្ចូល​កថាខណ្ឌ​នៅ​ទីនេះ"},"maximize":{"maximize":"ពង្រីក​អតិបរមា","minimize":"បង្រួម​អប្បបរមា"},"newpage":{"toolbar":"ទំព័រ​ថ្មី"},"pagebreak":{"alt":"បំបែក​ទំព័រ","toolbar":"បន្ថែម​ការ​បំបែក​ទំព័រ​មុន​បោះពុម្ព"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"បិទ​ភ្ជាប់​ជា​អត្ថបទ​ធម្មតា"},"pastefromword":{"confirmCleanup":"អត្ថបទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នេះ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ តើ​អ្នក​ចង់​សម្អាត​វា​មុន​បិទ​ភ្ជាប់​ទេ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាត​ទិន្នន័យ​ដែល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"preview":{"preview":"មើល​ជា​មុន"},"print":{"toolbar":"បោះពុម្ព"},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"save":{"toolbar":"រក្សាទុក"},"selectall":{"toolbar":"រើស​ទាំង​អស់"},"showblocks":{"toolbar":"បង្ហាញ​ប្លក់"},"sourcearea":{"toolbar":"អក្សរ​កូដ"},"specialchar":{"options":"ជម្រើស​តួ​អក្សរ​ពិសេស","title":"រើស​តួអក្សរ​ពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"រចនាបថ","panelTitle":"ទ្រង់ទ្រាយ​រចនាបថ","panelTitle1":"រចនាបថ​ប្លក់","panelTitle2":"រចនាបថ​ក្នុង​ជួរ","panelTitle3":"រចនាបថ​វត្ថុ"},"table":{"border":"ទំហំ​បន្ទាត់​ស៊ុម","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូល​ក្រឡា​ពីមុខ","insertAfter":"បញ្ចូល​ក្រឡា​ពី​ក្រោយ","deleteCell":"លុប​ក្រឡា","merge":"បញ្ចូល​ក្រឡា​ចូល​គ្នា","mergeRight":"បញ្ចូល​គ្នា​ខាង​ស្ដាំ","mergeDown":"បញ្ចូល​គ្នា​ចុះ​ក្រោម","splitHorizontal":"ពុះ​ក្រឡា​ផ្ដេក","splitVertical":"ពុះ​ក្រឡា​បញ្ឈរ","title":"លក្ខណៈ​ក្រឡា","cellType":"ប្រភេទ​ក្រឡា","rowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា","colSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា","wordWrap":"រុំ​ពាក្យ","hAlign":"ការ​តម្រឹម​ផ្ដេក","vAlign":"ការ​តម្រឹម​បញ្ឈរ","alignBaseline":"ខ្សែ​បន្ទាត់​គោល","bgColor":"ពណ៌​ផ្ទៃ​ក្រោយ","borderColor":"ពណ៌​បន្ទាត់​ស៊ុម","data":"ទិន្នន័យ","header":"ក្បាល","yes":"ព្រម","no":"ទេ","invalidWidth":"ទទឹង​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidHeight":"កម្ពស់​ក្រឡា​ត្រូវ​តែ​ជា​លេខ។","invalidRowSpan":"ចំនួន​ជួរ​ដេក​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","invalidColSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ត្រូវ​តែ​ជា​លេខ​ទាំង​អស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះ​ក្រឡា","cellSpace":"គម្លាត​ក្រឡា","column":{"menu":"ជួរ​ឈរ","insertBefore":"បញ្ចូល​ជួរ​ឈរ​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ","deleteColumn":"លុប​ជួរ​ឈរ"},"columns":"ជួរឈរ","deleteTable":"លុប​តារាង","headers":"ក្បាល","headersBoth":"ទាំង​ពីរ","headersColumn":"ជួរ​ឈរ​ដំបូង","headersNone":"មិន​មាន","headersRow":"ជួរ​ដេក​ដំបូង","invalidBorder":"ទំហំ​បន្ទាត់​ស៊ុម​ត្រូវ​តែ​ជា​លេខ។","invalidCellPadding":"ចន្លោះ​ក្រឡា​ត្រូវ​តែជា​លេខ​វិជ្ជមាន។","invalidCellSpacing":"គម្លាត​ក្រឡា​ត្រូវ​តែ​ជា​លេខ​វិជ្ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidHeight":"កម្ពស់​តារាង​ត្រូវ​តែ​ជា​លេខ","invalidRows":"ចំនួន​ជួរ​ដេក​ត្រូវ​តែ​ជា​លេខ​ធំ​ជាង 0។","invalidWidth":"ទទឹង​តារាង​ត្រូវ​តែ​ជា​លេខ។","menu":"លក្ខណៈ​តារាង","row":{"menu":"ជួរ​ដេក","insertBefore":"បញ្ចូល​ជួរ​ដេក​ពីមុខ","insertAfter":"បញ្ចូល​ជួរ​ដេក​ពី​ក្រោយ","deleteRow":"លុប​ជួរ​ដេក"},"rows":"ជួរ​ដេក","summary":"សេចក្តី​សង្ខេប","title":"លក្ខណៈ​តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកតា​ទទឹង"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"widget":{"move":"ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី","label":"%1 widget"},"uploadwidget":{"abort":"បាន​ផ្ដាច់​ការផ្ទុកឡើង​ដោយ​អ្នក​ប្រើប្រាស់។","doneOne":"បាន​ផ្ទុកឡើង​នូវ​ឯកសារ​ដោយ​ជោគជ័យ។","doneMany":"បាន​ផ្ទុក​ឡើង​នូវ​ឯកសារ %1 ដោយ​ជោគជ័យ។","uploadOne":"កំពុង​ផ្ទុកឡើង​ឯកសារ ({percentage}%)...","uploadMany":"កំពុង​ផ្ទុកឡើង​ឯកសារ, រួចរាល់ {current} នៃ {max} ({percentage}%)..."},"wsc":{"btnIgnore":"មិនផ្លាស់ប្តូរ","btnIgnoreAll":"មិនផ្លាស់ប្តូរ ទាំងអស់","btnReplace":"ជំនួស","btnReplaceAll":"ជំនួសទាំងអស់","btnUndo":"សារឡើងវិញ","changeTo":"ផ្លាស់ប្តូរទៅ","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?","manyChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ","noChanges":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ","noMispell":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស","noSuggestions":"- គ្មានសំណើរ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"គ្មានក្នុងវចនានុក្រម","oneChange":"ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ","progress":"កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...","title":"Spell Checker","toolbar":"ពិនិត្យអក្ខរាវិរុទ្ធ"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/ko.js b/htdocs/includes/ckeditor/ckeditor/lang/ko.js deleted file mode 100644 index 4d353962bb2..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['ko']={"editor":"리치 텍스트 편집기","editorPanel":"리치 텍스트 편집기 패널","common":{"editorHelp":"도움이 필요하면 ALT 0 을 누르세요","browseServer":"서버 탐색","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래시","form":"폼","checkbox":"체크 박스","radio":"라디오 버튼","textField":"한 줄 입력 칸","textarea":"여러 줄 입력 칸","hiddenField":"숨은 입력 칸","button":"버튼","select":"선택 목록","imageButton":"이미지 버튼","notSet":"<설정 안 됨>","id":"ID","name":"이름","langDir":"언어 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"웹 주소 설명","cssClass":"스타일 시트 클래스","advisoryTitle":"보조 제목","cssStyle":"스타일","ok":"확인","cancel":"취소","close":"닫기","preview":"미리보기","resize":"크기 조절","generalTab":"일반","advancedTab":"자세히","validateNumberFailed":"이 값은 숫자가 아닙니다.","confirmNewPage":"저장하지 않은 모든 변경사항은 유실됩니다. 정말로 새로운 페이지를 부르겠습니까?","confirmCancel":"일부 옵션이 변경 되었습니다. 정말로 창을 닫겠습니까?","options":"옵션","target":"타겟","targetNew":"새 창 (_blank)","targetTop":"최상위 창 (_top)","targetSelf":"같은 창 (_self)","targetParent":"부모 창 (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"스타일","cssClasses":"스타일 시트 클래스","width":"너비","height":"높이","align":"정렬","left":"왼쪽","right":"오른쪽","center":"중앙","justify":"양쪽 정렬","alignLeft":"왼쪽 정렬","alignRight":"오른쪽 정렬","alignCenter":"중앙 정렬","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"기본","invalidValue":"잘못된 값.","invalidHeight":"높이는 숫자여야 합니다.","invalidWidth":"넓이는 숫자여야 합니다.","invalidLength":"\"%1\" 값은 유효한 측정단위(%2)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidCssLength":"\"%1\" 값은 유효한 CSS 측정 단위(px, %, in, cm, mm, em, ex, pt, or pc)를 포함하거나 포함하지 않은 양수 여야 합니다.","invalidHtmlLength":"\"%1\" 값은 유효한 HTML 측정 단위(px or %)를 포함하거나 포함하지 않은 양수여야 합니다.","invalidInlineStyle":"인라인 스타일에 설정된 값은 \"name : value\" 형식을 가진 하나 이상의 투플(tuples)이 세미콜론(;)으로 구분되어 구성되어야 합니다.","cssLengthTooltip":"픽셀 단위의 숫자만 입력하시거나 유효한 CSS 단위(px, %, in, cm, mm, em, ex, pt, or pc)와 함께 숫자를 입력해주세요.","unavailable":"%1, 사용불가","keyboard":{"8":"백스페이스","13":"엔터","16":"시프트","17":"컨트롤","18":"알트","32":"간격","35":"엔드","36":"홈","46":"딜리트","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"커맨드"},"keyboardShortcut":"키보드 단축키","optionDefault":"기본값"},"about":{"copy":"저작권 © $1 . 판권 소유.","dlgTitle":"CKEditor 에 대하여","moreInfo":"라이선스에 대한 정보는 저희 웹 사이트를 참고하세요:"},"basicstyles":{"bold":"굵게","italic":"기울임꼴","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"bidi":{"ltr":"텍스트 방향이 왼쪽에서 오른쪽으로 ","rtl":"텍스트 방향이 오른쪽에서 왼쪽으로"},"blockquote":{"toolbar":"인용 단락"},"notification":{"closed":"알림이 닫힘."},"toolbar":{"toolbarCollapse":"툴바 줄이기","toolbarExpand":"툴바 확장","toolbarGroups":{"document":"문서","clipboard":"클립보드/실행 취소","editing":"편집","forms":"폼","basicstyles":"기본 스타일","paragraph":"단락","links":"링크","insert":"삽입","styles":"스타일","colors":"색상","tools":"도구"},"toolbars":"에디터 툴바"},"clipboard":{"copy":"복사","copyError":"브라우저의 보안설정 때문에 복사할 수 없습니다. 키보드(Ctrl/Cmd+C)를 이용해서 복사하십시오.","cut":"잘라내기","cutError":"브라우저의 보안설정 때문에 잘라내기 기능을 실행할 수 없습니다. 키보드(Ctrl/Cmd+X)를 이용해서 잘라내기 하십시오","paste":"붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"붙여넣기 범위","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"기본 색상","bgColorTitle":"배경 색상","colors":{"000":"검정","800000":"밤색","8B4513":"새들 브라운","2F4F4F":"다크 슬레이트 그레이","008080":"틸","000080":"네이비","4B0082":"남색","696969":"짙은 회색","B22222":"벽돌색","A52A2A":"갈색","DAA520":"골든 로드","006400":"암록색","40E0D0":"터코이즈","0000CD":"미디엄 블루","800080":"보라","808080":"회색","F00":"빨강","FF8C00":"짙은 주황","FFD700":"금색","008000":"녹색","0FF":"시안","00F":"파랑","EE82EE":"남보라","A9A9A9":"딤 그레이","FFA07A":"라이트 새먼","FFA500":"주황","FFFF00":"노랑","00FF00":"라임","AFEEEE":"패일 터코이즈","ADD8E6":"연한 파랑","DDA0DD":"자두","D3D3D3":"연한 회색","FFF0F5":"라벤더 블러쉬","FAEBD7":"앤틱 화이트","FFFFE0":"연한 노랑","F0FFF0":"허니듀","F0FFFF":"하늘색","F0F8FF":"앨리스 블루","E6E6FA":"라벤더","FFF":"흰색","1ABC9C":"진한 청록색","2ECC71":"에메랄드","3498DB":"밝은 파랑","9B59B6":"자수정","4E5F70":"회청색","F1C40F":"선명한 노랑","16A085":"다크 시안","27AE60":"다크 에메랄드","2980B9":"진한 파랑","8E44AD":"다크 바이올렛","2C3E50":"탁한 파랑","F39C12":"주황","E67E22":"당근","E74C3C":"창백한 빨강","ECF0F1":"밝은 은색","95A5A6":"밝은 회청록","DDD":"밝은 회색","D35400":"호박","C0392B":"진한 빨강","BDC3C7":"은색","7F8C8D":"회청록","999":"암회색"},"more":"색상 선택...","panelTitle":"색상","textColorTitle":"글자 색상"},"colordialog":{"clear":"비우기","highlight":"강조","options":"색상 옵션","selected":"선택된 색상","title":"색상 선택"},"templates":{"button":"템플릿","emptyListMsg":"(템플릿이 없습니다)","insertOption":"현재 내용 바꾸기","options":"템플릿 옵션","selectPromptMsg":"에디터에서 사용할 템플릿을 선택하십시오","title":"내용 템플릿"},"contextmenu":{"options":"컨텍스트 메뉴 옵션"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"보조 제목","cssClassInputLabel":"스타일 시트 클래스","edit":"Div 편집","inlineStyleInputLabel":"인라인 스타일","langDirLTRLabel":"왼쪽에서 오른쪽 (LTR)","langDirLabel":"언어 방향","langDirRTLLabel":"오른쪽에서 왼쪽 (RTL)","languageCodeInputLabel":" 언어 코드","remove":"Div 태그 삭제","styleSelectLabel":"스타일","title":"Div 태그 생성","toolbar":"Div 태그 생성"},"elementspath":{"eleLabel":"요소 경로","eleTitle":"%1 요소"},"filetools":{"loadError":"파일을 읽는 중 오류가 발생했습니다.","networkError":"파일 업로드 중 네트워크 오류가 발생했습니다.","httpError404":"파일 업로드중 HTTP 오류가 발생했습니다 (404: 파일 찾을수 없음).","httpError403":"파일 업로드중 HTTP 오류가 발생했습니다 (403: 권한 없음).","httpError":"파일 업로드중 HTTP 오류가 발생했습니다 (오류 코드 %1).","noUrlError":"업로드 주소가 정의되어 있지 않습니다.","responseError":"잘못된 서버 응답."},"find":{"find":"찾기","findOptions":"찾기 조건","findWhat":"찾을 내용:","matchCase":"대소문자 구분","matchCyclic":"되돌이 검색","matchWord":"온전한 단어","notFoundMsg":"문자열을 찾을 수 없습니다.","replace":"바꾸기","replaceAll":"모두 바꾸기","replaceSuccessMsg":"%1개의 항목이 바뀌었습니다.","replaceWith":"바꿀 내용:","title":"찾기 및 바꾸기"},"fakeobjects":{"anchor":"책갈피","flash":"플래시 애니메이션","hiddenfield":"숨은 입력 칸","iframe":"아이프레임","unknown":"알 수 없는 객체"},"flash":{"access":"스크립트 허용","accessAlways":"항상 허용","accessNever":"허용 안함","accessSameDomain":"같은 도메인 허용","alignAbsBottom":"아래","alignAbsMiddle":"중간","alignBaseline":"영문 글꼴 기준선","alignTextTop":"글자 상단","bgcolor":"배경 색상","chkFull":"전체화면 허용","chkLoop":"반복","chkMenu":"플래시 메뉴 활성화","chkPlay":"자동 재생","flashvars":"플래시 변수","hSpace":"가로 여백","properties":"플래시 속성","propertiesTab":"속성","quality":"품질","qualityAutoHigh":"자동 높음","qualityAutoLow":"자동 낮음","qualityBest":"최고","qualityHigh":"높음","qualityLow":"낮음","qualityMedium":"중간","scale":"배율","scaleAll":"모두 보기","scaleFit":"맞춤","scaleNoBorder":"테두리 없음","title":"플래시 속성","vSpace":"세로 여백","validateHSpace":"가로 여백은 숫자여야 합니다.","validateSrc":"링크 주소(URL)를 입력하십시오.","validateVSpace":"세로 여백은 숫자여야 합니다.","windowMode":"윈도우 모드","windowModeOpaque":"불투명","windowModeTransparent":"투명","windowModeWindow":"윈도우"},"font":{"fontSize":{"label":"크기","voiceLabel":"글자 크기","panelTitle":"글자 크기"},"label":"글꼴","panelTitle":"글꼴","voiceLabel":"글꼴"},"forms":{"button":{"title":"버튼 속성","text":"글자 (값)","type":"종류","typeBtn":"버튼","typeSbm":"제출","typeRst":"재설정"},"checkboxAndRadio":{"checkboxTitle":"체크 박스 속성","radioTitle":"라디오 버튼 속성","value":"값","selected":"선택됨","required":"필수 항목"},"form":{"title":"폼 속성","menu":"폼 속성","action":"실행 경로(Action)","method":"방법(Method)","encoding":"인코딩"},"hidden":{"title":"숨은 입력 칸 속성","name":"이름","value":"값"},"select":{"title":"선택 목록 속성","selectInfo":"선택 정보","opAvail":"옵션","value":"값","size":"크기","lines":"줄","chkMulti":"여러 항목 선택 허용","required":"필수 항목","opText":"이름","opValue":"값","btnAdd":"추가","btnModify":"수정","btnUp":"위","btnDown":"아래","btnSetValue":"선택된 것으로 설정","btnDelete":"삭제"},"textarea":{"title":"여러 줄 입력 칸 속성","cols":"칸 수","rows":"줄 수"},"textfield":{"title":"한 줄 입력 칸 속성","name":"이름","value":"값","charWidth":"글자 너비","maxChars":"최대 글자 수","required":"필수 항목","type":"형식","typeText":"문자열","typePass":"비밀번호","typeEmail":"이메일","typeSearch":"검색","typeTel":"전화번호","typeUrl":"웹 주소(URL)"}},"format":{"label":"문단","panelTitle":"문단 형식","tag_address":"글쓴이","tag_div":"기본 (DIV)","tag_h1":"제목 1","tag_h2":"제목 2","tag_h3":"제목 3","tag_h4":"제목 4","tag_h5":"제목 5","tag_h6":"제목 6","tag_p":"본문","tag_pre":"정형 문단"},"horizontalrule":{"toolbar":"가로 줄 삽입"},"iframe":{"border":"프레임 테두리 표시","noUrl":"아이프레임 주소(URL)를 입력해주세요.","scrolling":"스크롤바 사용","title":"아이프레임 속성","toolbar":"아이프레임"},"image":{"alt":"대체 문자열","border":"테두리","btnUpload":"서버로 전송","button2Img":"단순 이미지에서 선택한 이미지 버튼을 변환하시겠습니까?","hSpace":"가로 여백","img2Button":"이미지 버튼에 선택한 이미지를 변환하시겠습니까?","infoTab":"이미지 정보","linkTab":"링크","lockRatio":"비율 유지","menu":"이미지 속성","resetSize":"원래 크기로","title":"이미지 속성","titleButton":"이미지 버튼 속성","upload":"업로드","urlMissing":"이미지 원본 주소(URL)가 없습니다.","vSpace":"세로 여백","validateBorder":"테두리 두께는 정수여야 합니다.","validateHSpace":"가로 길이는 정수여야 합니다.","validateVSpace":"세로 길이는 정수여야 합니다."},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"smiley":{"options":"이모티콘 옵션","title":"이모티콘 삽입","toolbar":"이모티콘"},"language":{"button":"언어 설정","remove":"언어 설정 지우기"},"link":{"acccessKey":"액세스 키","advanced":"고급","advisoryContentType":"보조 콘텐츠 유형","advisoryTitle":"보조 제목","anchor":{"toolbar":"책갈피","menu":"책갈피 편집","title":"책갈피 속성","name":"책갈피 이름","errorName":"책갈피 이름을 입력하십시오","remove":"책갈피 제거"},"anchorId":"책갈피 ID","anchorName":"책갈피 이름","charset":"링크된 자료 문자열 인코딩","cssClasses":"스타일시트 클래스","download":"강제 다운로드","displayText":"보이는 글자","emailAddress":"이메일 주소","emailBody":"메시지 내용","emailSubject":"메시지 제목","id":"ID","info":"링크 정보","langCode":"언어 코드","langDir":"언어 방향","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","menu":"링크 수정","name":"이름","noAnchors":"(문서에 책갈피가 없습니다.)","noEmail":"이메일 주소를 입력하십시오","noUrl":"링크 주소(URL)를 입력하십시오","noTel":"Please type the phone number","other":"<기타>","phoneNumber":"Phone number","popupDependent":"Dependent (Netscape)","popupFeatures":"팝업창 속성","popupFullScreen":"전체화면 (IE)","popupLeft":"왼쪽 위치","popupLocationBar":"주소 표시줄","popupMenuBar":"메뉴 바","popupResizable":"크기 조절 가능","popupScrollBars":"스크롤 바","popupStatusBar":"상태 바","popupToolbar":"툴바","popupTop":"위쪽 위치","rel":"관계","selectAnchor":"책갈피 선택","styles":"스타일","tabIndex":"탭 순서","target":"타겟","targetFrame":"<프레임>","targetFrameName":"타겟 프레임 이름","targetPopup":"<팝업 창>","targetPopupName":"팝업 창 이름","title":"링크","toAnchor":"책갈피","toEmail":"이메일","toUrl":"주소(URL)","toPhone":"Phone","toolbar":"링크 삽입/변경","type":"링크 종류","unlink":"링크 지우기","upload":"업로드"},"list":{"bulletedlist":"순서 없는 목록","numberedlist":"순서 있는 목록"},"liststyle":{"bulletedTitle":"순서 없는 목록 속성","circle":"원","decimal":"수 (1, 2, 3, 등)","disc":"내림차순","lowerAlpha":"영소문자 (a, b, c, d, e, 등)","lowerRoman":"로마 소문자 (i, ii, iii, iv, v, 등)","none":"없음","notset":"<설정 없음>","numberedTitle":"순서 있는 목록 속성","square":"사각","start":"시작","type":"유형","upperAlpha":"영대문자 (A, B, C, D, E, 등)","upperRoman":"로마 대문자 (I, II, III, IV, V, 등)","validateStartNumber":"목록 시작 숫자는 정수여야 합니다."},"magicline":{"title":"여기에 단락 삽입"},"maximize":{"maximize":"최대화","minimize":"최소화"},"newpage":{"toolbar":"새 페이지"},"pagebreak":{"alt":"페이지 나누기","toolbar":"인쇄시 페이지 나누기 삽입"},"pastetext":{"button":"텍스트로 붙여넣기","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣을 내용은 MS Word에서 복사 한 것입니다. 붙여 넣기 전에 정리 하시겠습니까?","error":"내부 오류로 붙여 넣은 데이터를 정리 할 수 없습니다.","title":"MS Word 에서 붙여넣기","toolbar":"MS Word 에서 붙여넣기"},"preview":{"preview":"미리보기"},"print":{"toolbar":"인쇄"},"removeformat":{"toolbar":"형식 지우기"},"save":{"toolbar":"저장"},"selectall":{"toolbar":"모두 선택"},"showblocks":{"toolbar":"블록 보기"},"sourcearea":{"toolbar":"소스"},"specialchar":{"options":"특수문자 옵션","title":"특수문자 선택","toolbar":"특수문자 삽입"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":"Spell Check As You Type"},"stylescombo":{"label":"스타일","panelTitle":"전체 구성 스타일","panelTitle1":"블록 스타일","panelTitle2":"인라인 스타일","panelTitle3":"객체 스타일"},"table":{"border":"테두리 두께","caption":"주석","cell":{"menu":"셀","insertBefore":"앞에 셀 삽입","insertAfter":"뒤에 셀 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 합치기","mergeDown":"왼쪽 합치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"셀 속성","cellType":"셀 종류","rowSpan":"행 간격","colSpan":"열 간격","wordWrap":"줄 끝 단어 줄 바꿈","hAlign":"가로 정렬","vAlign":"세로 정렬","alignBaseline":"영문 글꼴 기준선","bgColor":"배경색","borderColor":"테두리 색","data":"자료","header":"머릿칸","yes":"예","no":"아니오","invalidWidth":"셀 너비는 숫자여야 합니다.","invalidHeight":"셀 높이는 숫자여야 합니다.","invalidRowSpan":"행 간격은 정수여야 합니다.","invalidColSpan":"열 간격은 정수여야 합니다.","chooseColor":"선택"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열","insertBefore":"왼쪽에 열 삽입","insertAfter":"오른쪽에 열 삽입","deleteColumn":"열 삭제"},"columns":"열","deleteTable":"표 삭제","headers":"머릿칸","headersBoth":"모두","headersColumn":"첫 열","headersNone":"없음","headersRow":"첫 행","invalidBorder":"테두리 두께는 숫자여야 합니다.","invalidCellPadding":"셀 여백은 0 이상이어야 합니다.","invalidCellSpacing":"셀 간격은 0 이상이어야 합니다.","invalidCols":"열 번호는 0보다 커야 합니다.","invalidHeight":"표 높이는 숫자여야 합니다.","invalidRows":"행 번호는 0보다 커야 합니다.","invalidWidth":"표의 너비는 숫자여야 합니다.","menu":"표 속성","row":{"menu":"행","insertBefore":"위에 행 삽입","insertAfter":"아래에 행 삽입","deleteRow":"행 삭제"},"rows":"행","summary":"요약","title":"표 속성","toolbar":"표","widthPc":"백분율","widthPx":"픽셀","widthUnit":"너비 단위"},"undo":{"redo":"다시 실행","undo":"실행 취소"},"widget":{"move":"움직이려면 클릭 후 드래그 하세요","label":"%1 위젯"},"uploadwidget":{"abort":"사용자가 업로드를 중단했습니다.","doneOne":"파일이 성공적으로 업로드되었습니다.","doneMany":"파일 %1개를 성공적으로 업로드하였습니다.","uploadOne":"파일 업로드중 ({percentage}%)...","uploadMany":"파일 {max} 개 중 {current} 번째 파일 업로드 중 ({percentage}%)..."},"wsc":{"btnIgnore":"건너뜀","btnIgnoreAll":"모두 건너뜀","btnReplace":"변경","btnReplaceAll":"모두 변경","btnUndo":"취소","changeTo":"변경할 단어","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?","manyChanges":"철자검사 완료: %1 단어가 변경되었습니다.","noChanges":"철자검사 완료: 변경된 단어가 없습니다.","noMispell":"철자검사 완료: 잘못된 철자가 없습니다.","noSuggestions":"- 추천단어 없음 -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"사전에 없는 단어","oneChange":"철자검사 완료: 단어가 변경되었습니다.","progress":"철자검사를 진행중입니다...","title":"Spell Check","toolbar":"철자검사"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/ku.js b/htdocs/includes/ckeditor/ckeditor/lang/ku.js deleted file mode 100644 index 38a3a5224b5..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/ku.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['ku']={"editor":"سەرنووسەی دەقی تەواو","editorPanel":"بڕگەی سەرنووسەی دەقی تەواو","common":{"editorHelp":"کلیکی ALT لەگەڵ 0 بکه‌ بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","flash":"فلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی وێنە","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"چەپ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ چەپ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی په‌ڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"پاشگەزبوونەوە","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پەرەسەندوو","validateNumberFailed":"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لە داخستنی ئەم دیالۆگە؟","options":"هەڵبژاردەکان","target":"ئامانج","targetNew":"پەنجەرەیەکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی پەڕە","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","left":"چەپ","right":"ڕاست","center":"ناوەڕاست","justify":"هاوستوونی","alignLeft":"بەهێڵ کردنی چەپ","alignRight":"بەهێڵ کردنی ڕاست","alignCenter":"بەهێڵ کردنی ناوەڕاست","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"هیچ","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست لەگەڵ بێت یان بە بێ پێوانەی یەکەی ( %2)","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \"ناو : نرخ\", جیاکردنەوەی بە فاریزە و خاڵ","cssLengthTooltip":"ژمارەیەك بنووسه‌ بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1, ئامادە نیە","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"فەرمان"},"keyboardShortcut":"کورتبڕی تەختەکلیل","optionDefault":"هەمیشەیی"},"about":{"copy":"مافی لەبەرگەرتنەوەی © $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن هۆژە کۆیی.","dlgTitle":"دەربارەی CKEditor 4","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"bidi":{"ltr":"ئاراستەی نووسە لە چەپ بۆ ڕاست","rtl":"ئاراستەی نووسە لە ڕاست بۆ چەپ"},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"notification":{"closed":"ئاگادارکەرەوەکە داخرا."},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پەڕه","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست. ","pasteArea":"ناوچەی لکاندن","pasteMsg":"ناوەڕۆکەکەت لەم پانتایی خوارەوە بلکێنە"},"colorbutton":{"auto":"خۆکار","bgColorTitle":"ڕەنگی پاشبنەما","colors":{"000":"ڕەش","800000":"سۆرو ماڕوونی","8B4513":"ماڕوونی","2F4F4F":"سەوزی تاریك","008080":"سەوز و شین","000080":"شینی تۆخ","4B0082":"مۆری تۆخ","696969":"ڕەساسی تۆخ","B22222":"سۆری تۆخ","A52A2A":"قاوەیی","DAA520":"قاوەیی بریسکەدار","006400":"سەوزی تۆخ","40E0D0":"شینی ناتۆخی بریسکەدار","0000CD":"شینی مامناوەند","800080":"پەمبەیی","808080":"ڕەساسی","F00":"سۆر","FF8C00":"نارەنجی تۆخ","FFD700":"زەرد","008000":"سەوز","0FF":"شینی ئاسمانی","00F":"شین","EE82EE":"پەمەیی","A9A9A9":"ڕەساسی تاریک","FFA07A":"نارەنجی ناتۆخ","FFA500":"نارەنجی","FFFF00":"زەرد","00FF00":"سەوز","AFEEEE":"شینی ناتۆخ","ADD8E6":"شینی زۆر ناتۆخ","DDA0DD":"پەمەیی ناتۆخ","D3D3D3":"ڕەساسی بریسکەدار","FFF0F5":"جەرگی زۆر ناتۆخ","FAEBD7":"جەرگی ناتۆخ","FFFFE0":"سپی ناتۆخ","F0FFF0":"هەنگوینی ناتۆخ","F0FFFF":"شینێکی زۆر ناتۆخ","F0F8FF":"شینێکی ئاسمانی زۆر ناتۆخ","E6E6FA":"شیری","FFF":"سپی","1ABC9C":"شینی ئاسمانی بەهیز","2ECC71":"زەمروتی سەوز","3498DB":"شینی ناتۆخ","9B59B6":"ئەرخەوانی، وەنەوشەیی","4E5F70":"شینی ڕه‌ساسی","F1C40F":"زەردی زیندوو","16A085":"شینی ئاسمانی تاریک","27AE60":"زەمروتی سەوزی تاریک","2980B9":"شینی تۆخ","8E44AD":"پەمەیی تاریک","2C3E50":"شینی ڕەشوسپی","F39C12":"نارنجی","E67E22":"گێزەر","E74C3C":"سوری زەرد هەڵگەڕاو","ECF0F1":"زیوی ڕووناک","95A5A6":"شینی ئاسمانی ڕه‌ساسی بریسکه‌دار","DDD":"ڕەساسی بریسکەدار","D35400":"کولەکەی شیرین","C0392B":"سوری بەهێز","BDC3C7":"زیوی","7F8C8D":"شینی ئاسمانی ڕه‌ساسی","999":"ڕەساسی تۆخ"},"more":"ڕەنگی زیاتر...","panelTitle":"ڕەنگەکان","textColorTitle":"ڕەنگی دەق"},"colordialog":{"clear":"پاکیکەوە","highlight":"نیشانکردن","options":"هەڵبژاردەی ڕەنگەکان","selected":"ڕەنگی هەڵبژێردراو","title":"هەڵبژاردنی ڕەنگ"},"templates":{"button":"ڕووکار","emptyListMsg":"(هیچ ڕووکارێك دیارینەکراوە)","insertOption":"لە شوێن دانانی ئەم پێکهاتانەی ئێستا","options":"هەڵبژاردەکانی ڕووکار","selectPromptMsg":"ڕووکارێك هەڵبژێره بۆ کردنەوەی له سەرنووسەر:","title":"پێکهاتەی ڕووکار"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"ناسنامە","advisoryTitleInputLabel":"سەردێڕ","cssClassInputLabel":"شێوازی چینی پەڕه","edit":"چاکسازی Div","inlineStyleInputLabel":"شێوازی ناوهێڵ","langDirLTRLabel":"چەپ بۆ ڕاست (LTR)","langDirLabel":"ئاراستەی زمان","langDirRTLLabel":"ڕاست بۆ چەپ (RTL)","languageCodeInputLabel":"هێمای زمان","remove":"لابردنی Div","styleSelectLabel":"شێواز","title":"دروستکردنی لەخۆگری Div","toolbar":"دروستکردنی لەخۆگری Div"},"elementspath":{"eleLabel":"ڕێڕەوی توخمەکان","eleTitle":"%1 توخم"},"filetools":{"loadError":"هەڵەیەک ڕوویدا لە ماوەی خوێندنەوەی پەڕگەکە.","networkError":"هەڵەیەکی ڕایەڵە ڕوویدا لە ماوەی بارکردنی پەڕگەکە.","httpError404":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (404: پەڕگەکە نەدۆزراوە).","httpError403":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (403: قەدەغەکراو).","httpError":"هەڵەیەک ڕوویدا لە ماوەی بارکردنی پەڕگەکە (دۆخی هەڵە: %1).","noUrlError":"بەستەری پەڕگەکە پێناسە نەکراوە.","responseError":"وەڵامێکی نادروستی سێرڤەر."},"find":{"find":"گەڕان","findOptions":"هەڵبژاردەکانی گەڕان","findWhat":"گەڕان بەدووای:","matchCase":"جیاکردنەوه لەنێوان پیتی گەورەو بچووك","matchCyclic":"گەڕان لەهەموو پەڕەکه","matchWord":"تەنەا هەموو وشەکه","notFoundMsg":"هیچ دەقه گەڕانێك نەدۆزراوه.","replace":"لەبریدانان","replaceAll":"لەبریدانانی هەمووی","replaceSuccessMsg":" پێشهاتە(ی) لەبری دانرا. %1","replaceWith":"لەبریدانان به:","title":"گەڕان و لەبریدانان"},"fakeobjects":{"anchor":"لەنگەر","flash":"فلاش","hiddenfield":"شاردنەوەی خانه","iframe":"لەچوارچێوە","unknown":"بەرکارێکی نەناسراو"},"flash":{"access":"دەستپێگەیشتنی نووسراو","accessAlways":"هەمیشه","accessNever":"هەرگیز","accessSameDomain":"هەمان دۆمەین","alignAbsBottom":"له ژێرەوه","alignAbsMiddle":"لەناوەند","alignBaseline":"هێڵەبنەڕەت","alignTextTop":"دەق لەسەرەوه","bgcolor":"ڕەنگی پاشبنەما","chkFull":"ڕێپێدان بە پڕی شاشه","chkLoop":"گرێ","chkMenu":"چالاککردنی لیستەی فلاش","chkPlay":"پێکردنی یان لێدانی خۆکار","flashvars":"گۆڕاوەکان بۆ فلاش","hSpace":"بۆشایی ئاسۆیی","properties":"خاسیەتی فلاش","propertiesTab":"خاسیەت","quality":"جۆرایەتی","qualityAutoHigh":"بەرزی خۆکار","qualityAutoLow":"نزمی خۆکار","qualityBest":"باشترین","qualityHigh":"بەرزی","qualityLow":"نزم","qualityMedium":"مامناوەند","scale":"پێوانه","scaleAll":"نیشاندانی هەموو","scaleFit":"بەوردی بگونجێت","scaleNoBorder":"بێ پەراوێز","title":"خاسیەتی فلاش","vSpace":"بۆشایی ئەستونی","validateHSpace":"بۆشایی ئاسۆیی دەبێت ژمارە بێت.","validateSrc":"ناونیشانی بەستەر نابێت خاڵی بێت","validateVSpace":"بۆشایی ئەستونی دەبێت ژماره بێت.","windowMode":"شێوازی پەنجەره","windowModeOpaque":"ناڕوون","windowModeTransparent":"ڕۆشن","windowModeWindow":"پەنجەره"},"font":{"fontSize":{"label":"گەورەیی","voiceLabel":"گەورەیی فۆنت","panelTitle":"گەورەیی فۆنت"},"label":"فۆنت","panelTitle":"ناوی فۆنت","voiceLabel":"فۆنت"},"forms":{"button":{"title":"خاسیەتی دوگمە","text":"(نرخی) دەق","type":"جۆر","typeBtn":"دوگمە","typeSbm":"بنێرە","typeRst":"ڕێکخستنەوە"},"checkboxAndRadio":{"checkboxTitle":"خاسیەتی چووارگۆشی پشکنین","radioTitle":"خاسیەتی جێگرەوەی دوگمە","value":"نرخ","selected":"هەڵبژاردرا","required":"پێویستە"},"form":{"title":"خاسیەتی داڕشتە","menu":"خاسیەتی داڕشتە","action":"کردار","method":"ڕێگە","encoding":"بەکۆدکەر"},"hidden":{"title":"خاسیەتی خانەی شاردراوە","name":"ناو","value":"نرخ"},"select":{"title":"هەڵبژاردەی خاسیەتی خانە","selectInfo":"زانیاری","opAvail":"هەڵبژاردەی لەبەردەستدابوون","value":"نرخ","size":"گەورەیی","lines":"هێڵەکان","chkMulti":"ڕێدان بەفره هەڵبژارده","required":"پێویستە","opText":"دەق","opValue":"نرخ","btnAdd":"زیادکردن","btnModify":"گۆڕانکاری","btnUp":"سەرەوه","btnDown":"خوارەوە","btnSetValue":"دابنێ وەك نرخێکی هەڵبژێردراو","btnDelete":"سڕینەوه"},"textarea":{"title":"خاسیەتی ڕووبەری دەق","cols":"ستوونەکان","rows":"ڕیزەکان"},"textfield":{"title":"خاسیەتی خانەی دەق","name":"ناو","value":"نرخ","charWidth":"پانی نووسە","maxChars":"ئەوپەڕی نووسە","required":"پێویستە","type":"جۆر","typeText":"دەق","typePass":"پێپەڕەوشە","typeEmail":"ئیمەیل","typeSearch":"گەڕان","typeTel":"ژمارەی تەلەفۆن","typeUrl":"ناونیشانی بەستەر"}},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سەرنووسەی ١","tag_h2":"سەرنووسەی ٢","tag_h3":"سەرنووسەی ٣","tag_h4":"سەرنووسەی ٤","tag_h5":"سەرنووسەی ٥","tag_h6":"سەرنووسەی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"iframe":{"border":"نیشاندانی لاکێشه بە چوواردەوری چووارچێوە","noUrl":"تکایه ناونیشانی بەستەر بنووسه بۆ چووارچێوه","scrolling":"چالاککردنی هاتووچۆپێکردن","title":"دیالۆگی چووارچێوه","toolbar":"چووارچێوه"},"image":{"alt":"جێگرەوەی دەق","border":"پەراوێز","btnUpload":"ناردنی بۆ ڕاژه","button2Img":"تۆ دەتەوێت دوگمەی وێنەی دیاریکراو بگۆڕیت بۆ وێنەیەکی ئاسایی؟","hSpace":"بۆشایی ئاسۆیی","img2Button":"تۆ دەتەوێت وێنەی دیاریکراو بگۆڕیت بۆ دوگمەی وێنه؟","infoTab":"زانیاری وێنه","linkTab":"بەستەر","lockRatio":"داخستنی ڕێژه","menu":"خاسیەتی وێنه","resetSize":"ڕێکخستنەوەی قەباره","title":"خاسیەتی وێنه","titleButton":"خاسیەتی دوگمەی وێنه","upload":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","vSpace":"بۆشایی ئەستونی","validateBorder":"پەراوێز دەبێت بەتەواوی تەنها ژماره بێت.","validateHSpace":"بۆشایی ئاسۆیی دەبێت بەتەواوی تەنها ژمارە بێت.","validateVSpace":"بۆشایی ئەستونی دەبێت بەتەواوی تەنها ژماره بێت."},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"smiley":{"options":"هەڵبژاردەی زەردەخەنه","title":"دانانی زەردەخەنەیەك","toolbar":"زەردەخەنه"},"language":{"button":"جێگیرکردنی زمان","remove":"لابردنی زمان"},"link":{"acccessKey":"کلیلی دەستپێگەیشتن","advanced":"پێشکەوتوو","advisoryContentType":"جۆری ناوەڕۆکی ڕاویژکار","advisoryTitle":"ڕاوێژکاری سەردێڕ","anchor":{"toolbar":"دانان/چاکسازی لەنگەر","menu":"چاکسازی لەنگەر","title":"خاسیەتی لەنگەر","name":"ناوی لەنگەر","errorName":"تکایه ناوی لەنگەر بنووسه","remove":"لابردنی لەنگەر"},"anchorId":"بەپێی ناسنامەی توخم","anchorName":"بەپێی ناوی لەنگەر","charset":"بەستەری سەرچاوەی نووسە","cssClasses":"شێوازی چینی پەڕه","download":"داگرتنی بەهێز","displayText":"پیشاندانی دەق","emailAddress":"ناونیشانی ئیمەیل","emailBody":"ناوەڕۆکی نامە","emailSubject":"بابەتی نامە","id":"ناسنامە","info":"زانیاری بەستەر","langCode":"هێمای زمان","langDir":"ئاراستەی زمان","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","menu":"چاکسازی بەستەر","name":"ناو","noAnchors":"(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)","noEmail":"تکایە ناونیشانی ئیمەیل بنووسە","noUrl":"تکایە ناونیشانی بەستەر بنووسە","noTel":"Please type the phone number","other":"<هیتر>","phoneNumber":"Phone number","popupDependent":"پێوەبەستراو (Netscape)","popupFeatures":"خاسیەتی پەنجەرەی سەرهەڵدەر","popupFullScreen":"پڕ بەپڕی شاشە (IE)","popupLeft":"جێگای چەپ","popupLocationBar":"هێڵی ناونیشانی بەستەر","popupMenuBar":"هێڵی لیسته","popupResizable":"توانای گۆڕینی قەباره","popupScrollBars":"هێڵی هاتووچۆپێکردن","popupStatusBar":"هێڵی دۆخ","popupToolbar":"هێڵی تووڵامراز","popupTop":"جێگای سەرەوە","rel":"پەیوەندی","selectAnchor":"هەڵبژاردنی لەنگەرێك","styles":"شێواز","tabIndex":"بازدەری تابی ئیندێکس","target":"ئامانج","targetFrame":"<چووارچێوە>","targetFrameName":"ناوی ئامانجی چووارچێوە","targetPopup":"<پەنجەرەی سەرهەڵدەر>","targetPopupName":"ناوی پەنجەرەی سەرهەڵدەر","title":"بەستەر","toAnchor":"بەستەر بۆ لەنگەر له دەق","toEmail":"ئیمەیل","toUrl":"ناونیشانی بەستەر","toPhone":"Phone","toolbar":"دانان/ڕێکخستنی بەستەر","type":"جۆری بەستەر","unlink":"لابردنی بەستەر","upload":"بارکردن"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"liststyle":{"bulletedTitle":"خاسیەتی لیستی خاڵی","circle":"بازنه","decimal":"ژمارە (1, 2, 3, وە هیتر.)","disc":"پەپکە","lowerAlpha":"ئەلفابێی بچووك (a, b, c, d, e, وە هیتر.)","lowerRoman":"ژمارەی ڕۆمی بچووك (i, ii, iii, iv, v, وە هیتر.)","none":"هیچ","notset":"<دانەندراوه>","numberedTitle":"خاسیەتی لیستی ژمارەیی","square":"چووراگۆشە","start":"دەستپێکردن","type":"جۆر","upperAlpha":"ئەلفابێی گەوره (A, B, C, D, E, وە هیتر.)","upperRoman":"ژمارەی ڕۆمی گەوره (I, II, III, IV, V, وە هیتر.)","validateStartNumber":"دەستپێکەری لیستی ژمارەیی دەبێت تەنها ژمارە بێت."},"magicline":{"title":"بڕگە لێرە دابنێ"},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"newpage":{"toolbar":"پەڕەیەکی نوێ"},"pagebreak":{"alt":"پشووی پەڕە","toolbar":"دانانی پشووی پەڕە بۆ چاپکردن"},"pastetext":{"button":"لکاندنی وەك دەقی ڕوون","pasteNotification":"کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست","title":"لکاندنی وەك دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه پێش ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی لەڕێی Word"},"preview":{"preview":"پێشبینین"},"print":{"toolbar":"چاپکردن"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"save":{"toolbar":"پاشکەوتکردن"},"selectall":{"toolbar":"دیاریکردنی هەمووی"},"showblocks":{"toolbar":"نیشاندانی بەربەستەکان"},"sourcearea":{"toolbar":"سەرچاوە"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"scayt":{"btn_about":"دهربارهی SCAYT","btn_dictionaries":"فهرههنگهکان","btn_disable":"ناچالاککردنی SCAYT","btn_enable":"چالاککردنی SCAYT","btn_langs":"زمانهکان","btn_options":"ههڵبژارده","text_title":"پشکنینی نووسه لهکاتی نووسین"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"table":{"border":"گەورەیی پەراوێز","caption":"سەردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه لەپێش","insertAfter":"دانانی خانه لەپاش","deleteCell":"سڕینەوەی خانه","merge":"تێکەڵکردنی خانە","mergeRight":"تێکەڵکردنی لەگەڵ ڕاست","mergeDown":"تێکەڵکردنی لەگەڵ خوارەوە","splitHorizontal":"دابەشکردنی خانەی ئاسۆیی","splitVertical":"دابەشکردنی خانەی ئەستونی","title":"خاسیەتی خانه","cellType":"جۆری خانه","rowSpan":"ماوەی نێوان ڕیز","colSpan":"بستی ئەستونی","wordWrap":"پێچانەوەی وشە","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئەستونی","alignBaseline":"هێڵەبنەڕەت","bgColor":"ڕەنگی پاشبنەما","borderColor":"ڕەنگی پەراوێز","data":"داتا","header":"سەرپەڕه","yes":"بەڵێ","no":"نەخێر","invalidWidth":"پانی خانه دەبێت بەتەواوی ژماره بێت.","invalidHeight":"درێژی خانه بەتەواوی دەبێت ژمارە بێت.","invalidRowSpan":"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.","invalidColSpan":"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.","chooseColor":"هەڵبژێرە"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئەستون","insertBefore":"دانانی ئەستون لەپێش","insertAfter":"دانانی ئەستوون لەپاش","deleteColumn":"سڕینەوەی ئەستوون"},"columns":"ستوونەکان","deleteTable":"سڕینەوەی خشتە","headers":"سەرپەڕه","headersBoth":"هەردووك","headersColumn":"یەکەم ئەستوون","headersNone":"هیچ","headersRow":"یەکەم ڕیز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لەپێش","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"widget":{"move":"کرتەبکە و ڕایبکێشە بۆ جوڵاندن","label":"%1 ویجێت"},"uploadwidget":{"abort":"بارکردنەکە بڕدرا لەلایەن بەکارهێنەر.","doneOne":"پەڕگەکە بەسەرکەوتووانە بارکرا.","doneMany":"بەسەرکەوتووانە بارکرا %1 پەڕگە.","uploadOne":"پەڕگە باردەکرێت ({percentage}%)...","uploadMany":"پەڕگە باردەکرێت, {current} لە {max} ئەنجامدراوە ({percentage}%)..."},"wsc":{"btnIgnore":"پشتگوێ کردن","btnIgnoreAll":"پشتگوێکردنی ههمووی","btnReplace":"لهبریدانن","btnReplaceAll":"لهبریدانانی ههمووی","btnUndo":"پووچکردنهوه","changeTo":"گۆڕینی بۆ","errorLoading":"ههڵه لههێنانی داخوازینامهی خانهخۆێی ڕاژه: %s.","ieSpellDownload":"پشکنینی ڕێنووس دانهمزراوه. دهتهوێت ئێستا دایبگریت?","manyChanges":"پشکنینی ڕێنووس کۆتای هات: لهسهدا %1 ی وشهکان گۆڕدرا","noChanges":"پشکنینی ڕێنووس کۆتای هات: هیچ وشهیهك نۆگۆڕدرا","noMispell":"پشکنینی ڕێنووس کۆتای هات: هیچ ههڵهیهکی ڕێنووس نهدۆزراوه","noSuggestions":"- هیچ پێشنیارێك -","notAvailable":"ببووره، لهمکاتهدا ڕاژهکه لهبهردهستا نیه.","notInDic":"لهفهرههنگ دانیه","oneChange":"پشکنینی ڕێنووس کۆتای هات: یهك وشه گۆڕدرا","progress":"پشکنینی ڕێنووس لهبهردهوامبوون دایه...","title":"پشکنینی ڕێنووس","toolbar":"پشکنینی ڕێنووس"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/lt.js b/htdocs/includes/ckeditor/ckeditor/lang/lt.js deleted file mode 100644 index e37fa106734..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['lt']={"editor":"Pilnas redaktorius","editorPanel":"Pilno redagtoriaus skydelis","common":{"editorHelp":"Spauskite ALT 0 dėl pagalbos","browseServer":"Naršyti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutė","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"Iš kairės į dešinę (LTR)","langDirRtl":"Iš dešinės į kairę (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas aprašymas URL","cssClass":"Stilių lentelės klasės","advisoryTitle":"Konsultacinė antraštė","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"Peržiūrėti","resize":"Pavilkite, kad pakeistumėte dydį","generalTab":"Bendros savybės","advancedTab":"Papildomas","validateNumberFailed":"Ši reikšmė nėra skaičius.","confirmNewPage":"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?","confirmCancel":"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?","options":"Parametrai","target":"Tikslinė nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"Viršutinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","styles":"Stilius","cssClasses":"Stilių klasės","width":"Plotis","height":"Aukštis","align":"Lygiuoti","left":"Kairę","right":"Dešinę","center":"Centrą","justify":"Lygiuoti abi puses","alignLeft":"Lygiuoti kairę","alignRight":"Lygiuoti dešinę","alignCenter":"Align Center","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","alignNone":"Niekas","invalidValue":"Neteisinga reikšmė.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidLength":"Value specified for the \"%1\" field must be a positive number with or without a valid measurement unit (%2).","invalidCssLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \"vardas : reikšmė\", atskirta kabliataškiais.","cssLengthTooltip":"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1, netinkamas","keyboard":{"8":"Backspace","13":"Enter","16":"Shift","17":"Ctrl","18":"Alt","32":"Space","35":"End","36":"Home","46":"Delete","112":"F1","113":"F2","114":"F3","115":"F4","116":"F5","117":"F6","118":"F7","119":"F8","120":"F9","121":"F10","122":"F11","123":"F12","124":"F13","125":"F14","126":"F15","127":"F16","128":"F17","129":"F18","130":"F19","131":"F20","132":"F21","133":"F22","134":"F23","135":"F24","224":"Command"},"keyboardShortcut":"Keyboard shortcut","optionDefault":"Default"},"about":{"copy":"Copyright © $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor 4","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"bidi":{"ltr":"Tekstas iš kairės į dešinę","rtl":"Tekstas iš dešinės į kairę"},"blockquote":{"toolbar":"Citata"},"notification":{"closed":"Notification closed."},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostą","toolbarExpand":"Išplėsti įrankių juostą","toolbarGroups":{"document":"Dokumentas","clipboard":"Atmintinė/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Įterpti","styles":"Stiliai","colors":"Spalvos","tools":"Įrankiai"},"toolbars":"Redaktoriaus įrankiai"},"clipboard":{"copy":"Kopijuoti","copyError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).","cut":"Iškirpti","cutError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).","paste":"Įdėti","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","pasteArea":"Įkelti dalį","pasteMsg":"Paste your content inside the area below and press OK."},"colorbutton":{"auto":"Automatinis","bgColorTitle":"Fono spalva","colors":{"000":"Juoda","800000":"Kaštoninė","8B4513":"Tamsiai ruda","2F4F4F":"Pilka tamsaus šiferio","008080":"Teal","000080":"Karinis","4B0082":"Indigo","696969":"Tamsiai pilka","B22222":"Ugnies","A52A2A":"Ruda","DAA520":"Aukso","006400":"Tamsiai žalia","40E0D0":"Turquoise","0000CD":"Vidutinė mėlyna","800080":"Violetinė","808080":"Pilka","F00":"Raudona","FF8C00":"Tamsiai oranžinė","FFD700":"Auksinė","008000":"Žalia","0FF":"Žydra","00F":"Mėlyna","EE82EE":"Violetinė","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Oranžinė","FFFF00":"Geltona","00FF00":"Citrinų","AFEEEE":"Pale Turquoise","ADD8E6":"Šviesiai mėlyna","DDA0DD":"Plum","D3D3D3":"Šviesiai pilka","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Šviesiai geltona","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Balta","1ABC9C":"Strong Cyan","2ECC71":"Emerald","3498DB":"Bright Blue","9B59B6":"Amethyst","4E5F70":"Grayish Blue","F1C40F":"Vivid Yellow","16A085":"Dark Cyan","27AE60":"Dark Emerald","2980B9":"Strong Blue","8E44AD":"Dark Violet","2C3E50":"Desaturated Blue","F39C12":"Orange","E67E22":"Carrot","E74C3C":"Pale Red","ECF0F1":"Bright Silver","95A5A6":"Light Grayish Cyan","DDD":"Light Gray","D35400":"Pumpkin","C0392B":"Strong Red","BDC3C7":"Silver","7F8C8D":"Grayish Cyan","999":"Dark Gray"},"more":"Daugiau spalvų...","panelTitle":"Spalva","textColorTitle":"Teksto spalva"},"colordialog":{"clear":"Išvalyti","highlight":"Paryškinti","options":"Spalvos nustatymai","selected":"Pasirinkta spalva","title":"Pasirinkite spalvą"},"templates":{"button":"Šablonai","emptyListMsg":"(Šablonų sąrašas tuščias)","insertOption":"Pakeisti dabartinį turinį pasirinktu šablonu","options":"Template Options","selectPromptMsg":"Pasirinkite norimą šabloną
(Dėmesio! esamas turinys bus prarastas):","title":"Turinio šablonai"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"copyformatting":{"label":"Copy Formatting","notification":{"copied":"Formatting copied","applied":"Formatting applied","canceled":"Formatting canceled","failed":"Formatting failed. You cannot apply styles without copying them first."}},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Patariamas pavadinimas","cssClassInputLabel":"Stilių klasės","edit":"Redaguoti Div","inlineStyleInputLabel":"Vidiniai stiliai","langDirLTRLabel":"Iš kairės į dešinę (LTR)","langDirLabel":"Kalbos nurodymai","langDirRTLLabel":"Iš dešinės į kairę (RTL)","languageCodeInputLabel":" Kalbos kodas","remove":"Pašalinti Div","styleSelectLabel":"Stilius","title":"Sukurti Div elementą","toolbar":"Sukurti Div elementą"},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"filetools":{"loadError":"Error occurred during file read.","networkError":"Network error occurred during file upload.","httpError404":"HTTP error occurred during file upload (404: File not found).","httpError403":"HTTP error occurred during file upload (403: Forbidden).","httpError":"HTTP error occurred during file upload (error status: %1).","noUrlError":"Upload URL is not defined.","responseError":"Incorrect server response."},"find":{"find":"Rasti","findOptions":"Paieškos nustatymai","findWhat":"Surasti tekstą:","matchCase":"Skirti didžiąsias ir mažąsias raides","matchCyclic":"Sutampantis cikliškumas","matchWord":"Atitikti pilną žodį","notFoundMsg":"Nurodytas tekstas nerastas.","replace":"Pakeisti","replaceAll":"Pakeisti viską","replaceSuccessMsg":"%1 sutapimas(ų) buvo pakeisti.","replaceWith":"Pakeisti tekstu:","title":"Surasti ir pakeisti"},"fakeobjects":{"anchor":"Žymė","flash":"Flash animacija","hiddenfield":"Paslėptas laukas","iframe":"IFrame","unknown":"Nežinomas objektas"},"flash":{"access":"Skripto priėjimas","accessAlways":"Visada","accessNever":"Niekada","accessSameDomain":"Tas pats domenas","alignAbsBottom":"Absoliučią apačią","alignAbsMiddle":"Absoliutų vidurį","alignBaseline":"Apatinę liniją","alignTextTop":"Teksto viršūnę","bgcolor":"Fono spalva","chkFull":"Leisti per visą ekraną","chkLoop":"Ciklas","chkMenu":"Leisti Flash meniu","chkPlay":"Automatinis paleidimas","flashvars":"Flash kintamieji","hSpace":"Hor.Erdvė","properties":"Flash savybės","propertiesTab":"Nustatymai","quality":"Kokybė","qualityAutoHigh":"Automatiškai Gera","qualityAutoLow":"Automatiškai Žema","qualityBest":"Geriausia","qualityHigh":"Gera","qualityLow":"Žema","qualityMedium":"Vidutinė","scale":"Mastelis","scaleAll":"Rodyti visą","scaleFit":"Tikslus atitikimas","scaleNoBorder":"Be rėmelio","title":"Flash savybės","vSpace":"Vert.Erdvė","validateHSpace":"HSpace turi būti skaičius.","validateSrc":"Prašome įvesti nuorodos URL","validateVSpace":"VSpace turi būti skaičius.","windowMode":"Lango režimas","windowModeOpaque":"Nepermatomas","windowModeTransparent":"Permatomas","windowModeWindow":"Langas"},"font":{"fontSize":{"label":"Šrifto dydis","voiceLabel":"Šrifto dydis","panelTitle":"Šrifto dydis"},"label":"Šriftas","panelTitle":"Šriftas","voiceLabel":"Šriftas"},"forms":{"button":{"title":"Mygtuko savybės","text":"Tekstas (Reikšmė)","type":"Tipas","typeBtn":"Mygtukas","typeSbm":"Siųsti","typeRst":"Išvalyti"},"checkboxAndRadio":{"checkboxTitle":"Žymimojo langelio savybės","radioTitle":"Žymimosios akutės savybės","value":"Reikšmė","selected":"Pažymėtas","required":"Required"},"form":{"title":"Formos savybės","menu":"Formos savybės","action":"Veiksmas","method":"Metodas","encoding":"Kodavimas"},"hidden":{"title":"Nerodomo lauko savybės","name":"Vardas","value":"Reikšmė"},"select":{"title":"Atrankos lauko savybės","selectInfo":"Informacija","opAvail":"Galimos parinktys","value":"Reikšmė","size":"Dydis","lines":"eilučių","chkMulti":"Leisti daugeriopą atranką","required":"Required","opText":"Tekstas","opValue":"Reikšmė","btnAdd":"Įtraukti","btnModify":"Modifikuoti","btnUp":"Aukštyn","btnDown":"Žemyn","btnSetValue":"Laikyti pažymėta reikšme","btnDelete":"Trinti"},"textarea":{"title":"Teksto srities savybės","cols":"Ilgis","rows":"Plotis"},"textfield":{"title":"Teksto lauko savybės","name":"Vardas","value":"Reikšmė","charWidth":"Ilgis simboliais","maxChars":"Maksimalus simbolių skaičius","required":"Required","type":"Tipas","typeText":"Tekstas","typePass":"Slaptažodis","typeEmail":"El. paštas","typeSearch":"Paieška","typeTel":"Telefono numeris","typeUrl":"Nuoroda"}},"format":{"label":"Šrifto formatas","panelTitle":"Šrifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"Antraštinis 1","tag_h2":"Antraštinis 2","tag_h3":"Antraštinis 3","tag_h4":"Antraštinis 4","tag_h5":"Antraštinis 5","tag_h6":"Antraštinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"iframe":{"border":"Rodyti rėmelį","noUrl":"Nurodykite iframe nuorodą","scrolling":"Įjungti slankiklius","title":"IFrame nustatymai","toolbar":"IFrame"},"image":{"alt":"Alternatyvus Tekstas","border":"Rėmelis","btnUpload":"Siųsti į serverį","button2Img":"Ar norite mygtuką paversti paprastu paveiksliuku?","hSpace":"Hor.Erdvė","img2Button":"Ar norite paveiksliuką paversti mygtuku?","infoTab":"Vaizdo informacija","linkTab":"Nuoroda","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","resetSize":"Atstatyti dydį","title":"Vaizdo savybės","titleButton":"Vaizdinio mygtuko savybės","upload":"Nusiųsti","urlMissing":"Paveiksliuko nuorodos nėra.","vSpace":"Vert.Erdvė","validateBorder":"Reikšmė turi būti sveikas skaičius.","validateHSpace":"Reikšmė turi būti sveikas skaičius.","validateVSpace":"Reikšmė turi būti sveikas skaičius."},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"smiley":{"options":"Šypsenėlių nustatymai","title":"Įterpti veidelį","toolbar":"Veideliai"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Prieigos raktas","advanced":"Papildomas","advisoryContentType":"Konsultacinio turinio tipas","advisoryTitle":"Konsultacinė antraštė","anchor":{"toolbar":"Įterpti/modifikuoti žymę","menu":"Žymės savybės","title":"Žymės savybės","name":"Žymės vardas","errorName":"Prašome įvesti žymės vardą","remove":"Pašalinti žymę"},"anchorId":"Pagal žymės Id","anchorName":"Pagal žymės vardą","charset":"Susietų išteklių simbolių lentelė","cssClasses":"Stilių lentelės klasės","download":"Force Download","displayText":"Display Text","emailAddress":"El.pašto adresas","emailBody":"Žinutės turinys","emailSubject":"Žinutės tema","id":"Id","info":"Nuorodos informacija","langCode":"Teksto kryptis","langDir":"Teksto kryptis","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","menu":"Taisyti nuorodą","name":"Vardas","noAnchors":"(Šiame dokumente žymių nėra)","noEmail":"Prašome įvesti el.pašto adresą","noUrl":"Prašome įvesti nuorodos URL","noTel":"Please type the phone number","other":"","phoneNumber":"Phone number","popupDependent":"Priklausomas (Netscape)","popupFeatures":"Išskleidžiamo lango savybės","popupFullScreen":"Visas ekranas (IE)","popupLeft":"Kairė pozicija","popupLocationBar":"Adreso juosta","popupMenuBar":"Meniu juosta","popupResizable":"Kintamas dydis","popupScrollBars":"Slinkties juostos","popupStatusBar":"Būsenos juosta","popupToolbar":"Mygtukų juosta","popupTop":"Viršutinė pozicija","rel":"Sąsajos","selectAnchor":"Pasirinkite žymę","styles":"Stilius","tabIndex":"Tabuliavimo indeksas","target":"Paskirties vieta","targetFrame":"","targetFrameName":"Paskirties kadro vardas","targetPopup":"","targetPopupName":"Paskirties lango vardas","title":"Nuoroda","toAnchor":"Žymė šiame puslapyje","toEmail":"El.paštas","toUrl":"Nuoroda","toPhone":"Phone","toolbar":"Įterpti/taisyti nuorodą","type":"Nuorodos tipas","unlink":"Panaikinti nuorodą","upload":"Siųsti"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"liststyle":{"bulletedTitle":"Ženklelinio sąrašo nustatymai","circle":"Apskritimas","decimal":"Dešimtainis (1, 2, 3, t.t)","disc":"Diskas","lowerAlpha":"Mažosios Alpha (a, b, c, d, e, t.t)","lowerRoman":"Mažosios Romėnų (i, ii, iii, iv, v, t.t)","none":"Niekas","notset":"","numberedTitle":"Skaitmeninio sąrašo nustatymai","square":"Kvadratas","start":"Pradžia","type":"Rūšis","upperAlpha":"Didžiosios Alpha (A, B, C, D, E, t.t)","upperRoman":"Didžiosios Romėnų (I, II, III, IV, V, t.t)","validateStartNumber":"Sąrašo pradžios skaitmuo turi būti sveikas skaičius."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"newpage":{"toolbar":"Naujas puslapis"},"pagebreak":{"alt":"Puslapio skirtukas","toolbar":"Įterpti puslapių skirtuką"},"pastetext":{"button":"Įdėti kaip gryną tekstą","pasteNotification":"Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.","title":"Įdėti kaip gryną tekstą"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?","error":"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto","title":"Įdėti iš Word","toolbar":"Įdėti iš Word"},"preview":{"preview":"Peržiūra"},"print":{"toolbar":"Spausdinti"},"removeformat":{"toolbar":"Panaikinti formatą"},"save":{"toolbar":"Išsaugoti"},"selectall":{"toolbar":"Pažymėti viską"},"showblocks":{"toolbar":"Rodyti blokus"},"sourcearea":{"toolbar":"Šaltinis"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"scayt":{"btn_about":"Apie SCAYT","btn_dictionaries":"Žodynai","btn_disable":"Išjungti SCAYT","btn_enable":"Įjungti SCAYT","btn_langs":"Kalbos","btn_options":"Parametrai","text_title":"Tikrinti klaidas kai rašoma"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"table":{"border":"Rėmelio dydis","caption":"Antraštė","cell":{"menu":"Langelis","insertBefore":"Įterpti langelį prieš","insertAfter":"Įterpti langelį po","deleteCell":"Šalinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su dešine","mergeDown":"Sujungti su apačia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rūšis","rowSpan":"Eilučių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"Apatinė linija","bgColor":"Fono spalva","borderColor":"Rėmelio spalva","data":"Data","header":"Antraštė","yes":"Taip","no":"Ne","invalidWidth":"Reikšmė turi būti skaičius.","invalidHeight":"Reikšmė turi būti skaičius.","invalidRowSpan":"Reikšmė turi būti skaičius.","invalidColSpan":"Reikšmė turi būti skaičius.","chooseColor":"Pasirinkite"},"cellPad":"Tarpas nuo langelio rėmo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Įterpti stulpelį prieš","insertAfter":"Įterpti stulpelį po","deleteColumn":"Šalinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Šalinti lentelę","headers":"Antraštės","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"Nėra","headersRow":"Pirma eilutė","invalidBorder":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellPadding":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellSpacing":"Reikšmė turi būti nurodyta skaičiumi.","invalidCols":"Skaičius turi būti didesnis nei 0.","invalidHeight":"Reikšmė turi būti nurodyta skaičiumi.","invalidRows":"Skaičius turi būti didesnis nei 0.","invalidWidth":"Reikšmė turi būti nurodyta skaičiumi.","menu":"Lentelės savybės","row":{"menu":"Eilutė","insertBefore":"Įterpti eilutę prieš","insertAfter":"Įterpti eilutę po","deleteRow":"Šalinti eilutes"},"rows":"Eilutės","summary":"Santrauka","title":"Lentelės savybės","toolbar":"Lentelė","widthPc":"procentais","widthPx":"taškais","widthUnit":"pločio vienetas"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"widget":{"move":"Click and drag to move","label":"%1 widget"},"uploadwidget":{"abort":"Upload aborted by the user.","doneOne":"File successfully uploaded.","doneMany":"Successfully uploaded %1 files.","uploadOne":"Uploading file ({percentage}%)...","uploadMany":"Uploading files, {current} of {max} done ({percentage}%)..."},"wsc":{"btnIgnore":"Ignoruoti","btnIgnoreAll":"Ignoruoti visus","btnReplace":"Pakeisti","btnReplaceAll":"Pakeisti visus","btnUndo":"Atšaukti","changeTo":"Pakeisti į","errorLoading":"Klaida įkraunant servisą: %s.","ieSpellDownload":"Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?","manyChanges":"Rašybos tikrinimas baigtas: Pakeista %1 žodžių","noChanges":"Rašybos tikrinimas baigtas: Nėra pakeistų žodžių","noMispell":"Rašybos tikrinimas baigtas: Nerasta rašybos klaidų","noSuggestions":"- Nėra pasiūlymų -","notAvailable":"Atleiskite, šiuo metu servisas neprieinamas.","notInDic":"Žodyne nerastas","oneChange":"Rašybos tikrinimas baigtas: Vienas žodis pakeistas","progress":"Vyksta rašybos tikrinimas...","title":"Tikrinti klaidas","toolbar":"Rašybos tikrinimas"}}; \ No newline at end of file diff --git a/htdocs/includes/ckeditor/ckeditor/lang/lv.js b/htdocs/includes/ckeditor/ckeditor/lang/lv.js deleted file mode 100644 index d862d518ef3..00000000000 --- a/htdocs/includes/ckeditor/ckeditor/lang/lv.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. -For licensing, see LICENSE.md or https://ckeditor.com/license -*/ -CKEDITOR.lang['lv']={"editor":"Bagātinātā teksta redaktors","editorPanel":"Bagātinātā teksta redaktora panelis","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"